Bu kapsamlı kılavuz, HC-SR04 hakkında bilmeniz gereken her şeyi keşfetmeniz için tek adresiniz. En temel konulardan başlayarak, cihazın potansiyelini ortaya çıkarmanın anahtarı olan temel çalışma prensibini anlayacağız. Ardından, temel teknik özellikleri ve popüler mikrodenetleyicilerle nasıl entegre edileceği gibi önemli konuları ele alacak, hatta ileri düzey kullanım senaryolarını da derinlemesine inceleyeceğiz. Bu kılavuzun sonunda, kendi projelerinizde HC-SR04'ün tüm potansiyelinden yararlanmak için gerekli donanıma sahip olacaksınız.
HC-SR04 ultrasonik sensör modülü nedir?
HC-SR04 ultrasonik sensör modülü, elektronik projelerinin geniş dünyasında kendine bir yer edinen, dikkat çekici ve son derece çok yönlü bir cihazdır. Bu cihazı gerçekten öne çıkaran özelliği, uygun maliyetli olmasıdır; bu sayede, bütçesine dikkat eden hobi meraklılarından projelerine uygun fiyatlı bir çözüm arayan profesyonellere kadar geniş bir kullanıcı kitlesi için erişilebilir hale gelmektedir.

Teknik Özellikler
HC-SR04 ultrasonik sensör modülünün teknik özelliklerini anlamak, herhangi bir projenin hayata geçirilmesi açısından hayati önem taşır. İşte teknik özellik tablosu:
Açıklama:
- Menzil: HC-SR04, 2 cm ile 400 cm (0,8 inç ile 157 inç) arasında bir çalışma menziline sahiptir. Bu nispeten geniş menzil, onu çeşitli uygulamalar için uygun hale getirir. Örneğin, robotun bir odada hareket etmesi gereken küçük ölçekli bir robotik projesinde, 2–400 cm'lik menzil, yakındaki mobilyaları veya duvarları etkili bir şekilde algılayabilir. Daha büyük ölçekli bir endüstriyel uygulamada ise, bu aralık dahilinde makine bileşenleri arasındaki mesafeyi ölçmek için kullanılabilir. Ancak, bu aralığın en uç noktalarında doğruluğun biraz değişebileceğini belirtmek önemlidir.
- Çözünürlük: 0,3 cm'lik çözünürlüğüyle HC-SR04, oldukça hassas mesafe ölçümleri sağlayabilir. Bu hassasiyet seviyesi, çoğu hobi amaçlı ve birçok endüstriyel uygulama için yeterlidir. Sensörün otomatik seviyeleme için baskı yatağına olan mesafeyi algılamak üzere kullanıldığı bir 3D baskı projesinde, 0,3 cm'lik çözünürlük, yazıcı kafasının yatak üzerinde doğru yükseklikte olmasını sağlayarak yüksek kaliteli baskılar elde edilmesini sağlar.
- Güç Kaynağı: 5V DC güç kaynağı ile çalışır. Çalışma sırasında 15mA'lık bir çalışma akımı çeker, bu da nispeten düşük bir güç tüketimidir. Bekleme modunda akım çekimi daha da azdır, 2mA'dan azdır. Bu, onu pille çalışan projeler için enerji verimli bir seçim haline getirir. Örneğin, mesafe algılama için HC-SR04'ü kullanan pille çalışan bir IoT sensör düğümünde, düşük güç tüketimi pilin uzun süre dayanmasını sağlar.
- Çalışma Açısı: HC-SR04'ün çalışma açısı 15°'den azdır. Bu, sensörün nispeten dar bir görüş alanına sahip olduğu anlamına gelir. En etkili olduğu durum, doğrudan önündeki engelleri algılamaktır. Sensörün bir kapıya yaklaşan izinsiz girişleri algılamak için kullanıldığı bir akıllı ev güvenlik sisteminde, dar çalışma açısı sensöre doğru gelen nesnelerin odaklanmış bir şekilde algılanmasını sağlar ve çevresel alandaki nesnelerden kaynaklanan yanlış alarmları azaltır.
- Arayüz: Modül, VCC, GND, Trig ve Echo pinlerini içeren 4 pimli bir arayüze sahiptir. Bu basit arayüz tasarımı, çeşitli mikrodenetleyicilere ve diğer elektronik bileşenlere kolayca bağlanılmasını sağlar.
Pin Çıkışı Açıklaması
Raspberry Pi: 5V (Common ground with module)
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Raspberry Pi: Any GPIO (e.g., GPIO17)
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
Raspberry Pi/GND
Açıklama:
The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.
Temel Bileşenler ve Çalışma Prensibi
Temel Bileşenler
- Ultrasonik Verici: Bu bileşen, mesafe ölçüm sürecinin ilk adımından sorumludur. 40 kHz frekansında ultrasonik dalgalar yayar. Bu yüksek frekanslı dalgalar insan kulağı tarafından duyulamaz, ancak sensörün çalışmasının anahtarıdır. Tetiklendiğinde, verici bu dalgaları çevreye gönderir. Bunu, duyabileceğimiz frekansın çok ötesinde ses dalgaları yayan güçlü bir hoparlör olarak düşünün. Örneğin bir robotik uygulamada, robot üzerindeki ultrasonik verici, robotun hareket ettiği yönde bu 40 kHz dalgalarını göndererek yolundaki engelleri algılamaya hazırlanır.
- Ultrasonik Alıcı: Adından da anlaşılacağı gibi, ultrasonik alıcının görevi, sensörün menzilindeki engellerden geri yansıyan ultrasonik dalgaları yakalamaktır. Verici dalgaları gönderdiğinde, dalgalar bir nesneye çarpana kadar havada ilerler. Dalgalar daha sonra geri yansır ve bu yansıyan dalgaları yakalamak alıcının görevidir. Bu, ultrasonik dalgaların en zayıf yankılarını bile algılayabilen son derece hassas bir mikrofon gibidir. HC-SR04'ün bir odadaki kişinin varlığını algılamak için kullanıldığı bir ev otomasyon sisteminde, alıcı kişinin vücudundan geri seken dalgaları yakalar.
- Kontrol Devresi: Bu, işlemin arkasındaki beyindir. Kontrol devresi, tüm sinyal işleme dizisini yönetir. Verici ve alıcının eylemlerini koordine eder. Bir tetik sinyali aldığında, vericiye ultrasonik dalgaları yayması talimatını verir. Ardından, gelen yansıyan dalgalar için alıcıyı dikkatle izler. Dalgalar alındığında, kontrol devresi dalgaların engele gidip geri dönmesi için geçen süreyi hesaplar. Bu süreye ve havadaki bilinen ses hızına dayanarak, engele olan mesafeyi hesaplar. Endüstriyel bir ortamda, otomatik makineler için kullanılan bir HC-SR04'teki kontrol devresi, makinelerin düzgün çalışması için doğru mesafe ölçümleri sağlamak üzere bu işlemleri hassas bir şekilde yönetir.
Nasıl Çalışır?
Artık temel bileşenleri öğrendiğimize göre, HC-SR04'ün mesafeyi nasıl ölçtüğüne adım adım bir göz atalım.
Tetikleyici Sinyal:
Süreç bir tetik sinyaliyle başlar. HC-SR04 modülünün Trig (Tetik) pinine 10 μs'lik bir yüksek darbe uygulandığında, bu sensöre bir "başlat" komutu verilmiş gibi olur. Bu kısa ama önemli elektrik darbesi, tüm mesafe ölçüm dizisini başlatır. Örneğin, Arduino tabanlı bir projede, bu 10μs'lik yüksek darbeyi HC-SR04'ün Trig pinine göndermek için basit bir kod satırı kullanırsınız ve bu sayede ölçüm sürecinin başlamasını sağlarsınız.
Dalga Yayılımı:
Tetiklendiğinde, ultrasonik verici harekete geçer. Modül, 40 kHz frekansında 8 adet ultrasonik darbe gönderir. Bu darbeler, ortama fırlatılan bir dizi görünmez "ses mermisi" gibidir. Bu darbeleri gönderdikten sonra modül bekleme durumuna geçer ve dalgaların bir engele çarpıp geri dönmesini sabırla bekler. Gerçek bir senaryoda, bir odadaki duvara olan mesafeyi ölçmek için HC-SR04'ü kullanıyorsanız, 8 darbe duvara doğru ilerler ve yaklaşık 15 derecelik nispeten dar bir açıyla koni şeklinde yayılır.
Yankı Algılama:
Echo pini, yansıyan dalgaları algılamanın anahtarıdır. Ultrasonik dalgalar gönderilir gönderilmez Echo pini yüksek seviyeye geçer. Bu, sensörün ölçüm sürecini başlattığını belirtme şeklidir. Ardından, yansıyan dalgaların geri dönmesini bekler. Ultrasonik alıcı yansıyan dalgaları yakaladığında Echo pini düşük seviyeye geçer. Echo pininin yüksek seviyede kaldığı süre, ultrasonik dalgaların gidiş-dönüş süresine eşittir. Bir Raspberry Pi projesinde, Echo pininin yüksek kaldığı süreyi ölçmek için bir işlev kullanırsınız; bu, mesafeyi hesaplamada çok önemli bir adımdır.
Mesafe Hesaplama:
Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.
Popüler Mikrodenetleyicilerle Arayüz Oluşturma
Arduino Kurulum Kılavuzu
Kablolama Şeması
- VCC: HC-SR04'ün VCC pinini Arduino'nun 5V pinine bağlayın. Bu, sensör modülüne gerekli gücü sağlar. Arduino'dan gelen sabit 5V güç kaynağı, sensörün en iyi şekilde çalışmasını sağlar.
- GND: HC-SR04'ün GND (Toprak) pini, Arduino'nun GND pinine bağlanmalıdır. Bu, hem sensör hem de Arduino için ortak bir toprak referansı oluşturur ve bu, düzgün elektriksel iletişim için çok önemlidir.
- Trig: HC-SR04'ün Trig (Tetikleyici) pinini Arduino'nun 2 numaralı dijital pinine bağlayın. Bu, Arduino'nun HC-SR04'teki mesafe ölçüm sürecini tetiklemek için 10μs yüksek seviyeli darbeyi göndereceği pindir.
- Echo: HC-SR04'ün Echo pini, Arduino'nun 3 numaralı dijital pinine bağlanır. Arduino, engele olan mesafeyi hesaplamak için bu pindeki yüksek süreli darbeyi okuyacaktır.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Kod Örneği
const int trigPin = 2;
const int echoPin = 3;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.
In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.
The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.
Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.
İpuçları
- Doğru ve Uzun Süreli Ölçüm:
When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.
- Gürültü Kaynaklarından Kaçınmak:
Ultrasonik dalgalar, yüksek sesli kaynaklardan etkilenebilir. HC-SR04 sensörünü projenize yerleştirirken, hoparlörlerin yakınında veya çok gürültülü bir endüstriyel ortam gibi yüksek ses yoğunluğuna sahip alanlardan kaçının. Gürültü, sensörün yaydığı ultrasonik dalgaları bozarak mesafe ölçümlerinin hatalı olmasına neden olabilir. Sensörü gürültülü bir alanda kullanmanız gerekiyorsa, sensörü gürültüden korumak için ses emici malzemeler veya muhafazalar kullanmayı düşünün.
Raspberry Pi Entegrasyonu
Gerilim Uyarısı
To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage of a voltage divider is , where is the input voltage (5V in this case), is the first resistor (1kΩ), and is the second resistor (2kΩ). Plugging in the values, we get , which is within the safe range for the Raspberry Pi GPIO pin.
Kablolama
- VCC: HC-SR04'ün VCC pinini Raspberry Pi'deki 5V pinine bağlayın. Bu işlem, HC-SR04 sensör modülüne güç sağlar.
- GND: Ortak bir toprak oluşturmak için HC-SR04'ün GND pini, Raspberry Pi'deki GND pinine bağlanmalıdır.
- Trig: HC-SR04'ün Trig pinini Raspberry Pi'deki GPIO 17'ye bağlayın. Raspberry Pi, bu pini kullanarak HC-SR04'e 10μs yüksek seviyeli tetikleme darbesi gönderir.
- Echo: HC-SR04'ün Echo pini, voltaj bölücü devresinden (1kΩ ve 2kΩ dirençler) geçtikten sonra Raspberry Pi'deki GPIO 27'ye bağlanır. Raspberry Pi, mesafeyi hesaplamak için bu pindeki yüksek süreli darbeyi okuyacaktır.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Python Kodu
import RPi.GPIO as GPIO
import time
# Set the GPIO mode
GPIO.setmode(GPIO.BCM)
# Define the pins
TRIG = 17
ECHO = 27
# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
def measure_distance():
# Send a 10μs high - level pulse to trigger the sensor
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
# Wait for the echo to start
while GPIO.input(ECHO)==0:
pulse_start = time.time()
# Wait for the echo to end
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150 # Speed of sound in cm/s divided by 2
distance = round(distance, 2)
return distance
try:
while True:
dist = measure_distance()
print(f"Distance: {dist} cm")
time.sleep(1)
except KeyboardInterrupt:
print("Measurement stopped by User")
GPIO.cleanup()
In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.
The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).
In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.
ESP32 Yapılandırması
Pim Ataması
Arduino IDE Kodu
const int trigPin = 14;
const int echoPin = 15;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.0343 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.
In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.
HC-SR04 Kullanarak Yapılabilecek Yaratıcı Proje Fikirleri
Engellerden Kaçınan Robot
Sensörler, farklı yönlerden gelen engelleri algılayacak şekilde yapılandırılmıştır. Örneğin, robotun ön tarafına, ilerleme yolundaki engelleri algılamak için bir dizi sensör yerleştirilir. Ayrıca, yanlardan yaklaşabilecek engelleri algılamak için robotun yanlarına da sensörler yerleştirilmiştir. Bir engel algılandığında, genellikle Arduino gibi bir mikro denetleyiciye dayanan robotun kontrol sistemi, HC-SR04 sensörlerinden gelen verileri kullanarak engele olan mesafeyi hesaplar.
Kontrol sistemi, bu mesafe bilgisine dayanarak engelden kaçınmak için alınması gereken uygun eylemi belirler. Bu genellikle, robotun yönünü değiştirecek şekilde motorları yönlendirmeyi içerir. Örneğin, robotun sol tarafında bir engel algılanırsa, kontrol sistemi sol taraftaki motora yavaşlaması veya geri gitmesi talimatını verirken, sağ taraftaki motor normal hızda çalışmaya devam edebilir. Bu, robotun engelden uzaklaşarak sağa dönmesine neden olur.
Bu projeyi gerçekleştirmek için birkaç temel bileşene ihtiyacınız olacak. Arduino, operasyonun beyni görevi görür. HC-SR04 sensörlerinden alınan verileri işler ve motorlara komutlar gönderir. Robotun hareket etmesini sağlamak için tekerlekleri tahrik edecek motorlara ihtiyaç vardır. L298N gibi bir motor sürücüsü, motorları kontrol etmek için gereklidir. L298N, motorların nispeten yüksek akım gereksinimlerini karşılayabilir ve Arduino'nun motorların hızını ve yönünü etkili bir şekilde kontrol etmesini sağlar. Ve elbette, ön ve yan algılama için birden fazla HC-SR04 sensörüne ihtiyaç vardır. Bu bileşenleri birleştirip onları kontrol etmek için uygun kodu yazarak, tamamen işlevsel bir engelden kaçınan robot oluşturabilirsiniz.
Akıllı Çöp Kovası
HC-SR04 sensörü, önündeki herhangi bir nesneye olan mesafeyi algılayabilecek şekilde çöp kutusuna monte edilmiştir. Birisi çöp kutusuna yaklaştığında, sensör çöp kutusu ile kişi arasındaki mesafeyi ölçer. Ölçülen mesafe önceden belirlenmiş bir eşik değerinin (örneğin 20 cm) altına düşerse, bu durum kişinin çöp kutusunu kullanmak için yeterince yakın olduğunu gösterir. Bu noktada sensör, bir servo motora sinyal gönderir.
Servo motor, çöp kutusunun kapağına bağlıdır ve kapağı açıp kapatmaktan sorumludur. HC-SR04 sensöründen sinyali aldığında, servo motor dönerek kapağı açar. Bu eller serbest çalışma, kullanıcı için sadece rahatlık sağlamakla kalmaz, aynı zamanda kapağa doğrudan dokunmaya gerek kalmadığı için çöp kutusunun temiz ve hijyenik kalmasına da yardımcı olur.
Bu proje için kod yazarken, mesafe eşiğini ayarlamak çok önemli bir adımdır. Bu değeri, akıllı çöp kutunuzun özel gereksinimlerine göre dikkatlice kalibre etmeniz gerekir. Eşik değeri çok yüksek ayarlanırsa, kişi çöp kutusundan hala belli bir mesafedeyken kapak gereksiz yere açılabilir. Öte yandan, eşik değeri çok düşük ayarlanırsa, kullanıcı yaklaştığında kapak zamanında açılmayabilir. İyi kalibre edilmiş bir mesafe eşiği, akıllı çöp kutusunun en iyi şekilde çalışmasını sağlar.
Su Seviyesi Göstergesi
HC-SR04 sensörü, su tankının üzerine monte edilir. Su yüzeyine doğru aşağıya doğru ultrasonik dalgalar yayar. Bu dalgalar havada ilerler ve su yüzeyine çarptıklarında geri yansır. Sensör daha sonra dalgaların su yüzeyine gidip geri dönmesi için geçen süreyi ölçer. Havada sesin bilinen hızı kullanılarak, sensörden su yüzeyine olan mesafe hesaplanabilir.
Çoğu durumda, su seviyesi monitörü bir IoT (Nesnelerin İnterneti) sistemiyle entegre edilmiştir. Örneğin, bir Blynk uygulamasına bağlanabilir. Hesaplanan su seviyesi verileri uygulamaya gönderilir ve kullanıcıların su seviyesini uzaktan izlemesine olanak tanır. Bu, süreçlerin düzgün işleyişi için su seviyelerinin gerçek zamanlı izlenmesinin hayati önem taşıdığı endüstriyel uygulamalar için özellikle yararlıdır.
Su seviyesi monitörünü kurarken dikkate alınması gereken önemli bir husus kalibrasyondur. Sensör, tankın tabanının üzerinde belirli bir yüksekliğe monte edildiğinden, mesafe hesaplamalarında bu yükseklik dikkate alınmalıdır. Örneğin, sensör tankın tabanından 50 cm yukarıya monte edilmişse ve sensörden su yüzeyine kadar hesaplanan mesafe 30 cm ise, tankın içindeki gerçek su seviyesi 20 cm'dir. Sensör yüksekliğini doğru bir şekilde kalibre ederek ve gerekli hesaplamaları yaparak, su seviyesi monitörünün doğru ve güvenilir okumalar sağladığından emin olabilirsiniz.
Yaygın Sorunların Giderilmesi
Tutarsız Ölçüm Sonuçları
Neden: Çoklu yol yansımaları veya dengesiz güç
Dengesiz güç kaynağı da bir başka sorundur. HC-SR04'e giden güç kaynağı dengesizse, sensörün arızalanmasına neden olabilir. Gerilim dalgalanmaları, ultrasonik vericinin ve alıcının düzgün çalışmasını etkileyerek hatalı mesafe ölçümlerine yol açabilir. Örneğin, şarjı bitmek üzere olan bir pil veya gerilim düzenlemesi zayıf bir güç adaptörü kullanıyorsanız, sensör tutarlı bir 5V güç kaynağı alamayabilir ve bu da performansını etkileyebilir.
Çözüm: Sensör için koruyucu bir kılıf takın ve regüle edilmiş 5 V'luk bir güç kaynağı kullanın
Düzenlenmiş bir 5V güç kaynağı kullanmak, istikrarlı çalışma için çok önemlidir. Yüksek kaliteli bir duvar adaptörü veya voltaj düzenlenmiş bir güç modülü gibi dahili voltaj düzenlemesine sahip bir güç kaynağı, HC-SR04'ün tutarlı bir 5V almasını sağlar. Bu, voltaj dalgalanmalarının neden olduğu sorunları ortadan kaldırmaya yardımcı olur ve sensör okumalarının genel doğruluğunu ve tutarlılığını artırır.
Çıkış Sinyali Yok
HC-SR04'ü Raspberry Pi ile kullanıyorsanız, voltaj bölücü devresini kontrol etmeyi unutmayın. Daha önce de belirtildiği gibi, Raspberry Pi'nin GPIO pinleri yalnızca 3,3 V ile çalışabilir ve HC-SR04'ün Echo pininden gelen 5 V çıkışını 3,3 V uyumlu bir sinyale dönüştürmek için genellikle bir voltaj bölücü kullanılır. Voltaj bölücü bileşenleri (genellikle dirençler) hasar görmüşse veya yanlış bağlanmışsa, Raspberry Pi tarafından hiçbir çıkış sinyali alınmayabilir.
Tetikleme/yankı zamanlaması için kod mantığı da kontrol edilmesi gereken kritik bir alandır. Kodun Trig pinine doğru tetikleme sinyalini (10μs yüksek seviye darbe) gönderdiğinden ve Echo pinindeki yüksek seviye darbenin süresini doğru bir şekilde ölçtüğünden emin olun. Yanlış kod, sensörün tetiklenmesini engelleyebilir veya mikrodenetleyicinin yankı sinyalini yanlış yorumlamasına neden olarak, çıkış olmamasına veya yanlış mesafe hesaplamalarına yol açabilir. Örneğin, koddaki gecikme süreleri yanlış ayarlanmışsa, sensörün tetiklenmesi ve yankının okunması arasındaki doğru sıra bozulabilir.
Aralık Dışı Hataları
Kodda 0 veya ∞ (sonsuz) değerlerini düzgün bir şekilde işlemek de önemlidir. 0 mesafe değeri, sensörün bir nesneye çok yakın olduğunu, yani minimum algılama menzilinden daha yakın olduğunu gösterebilir. Bu gibi durumlarda, kodunuzda bir minimum mesafe eşiği belirlemek ve mesafe değerini buna göre ayarlamak isteyebilirsiniz. Benzer şekilde, kod aşırı büyük (sonsuza yakın) bir mesafe değeri hesaplarsa, bu durum yankı algılamadaki bir sorun veya yanlış hesaplamalar gibi bir hatanın göstergesi olabilir. Kodunuz, örneğin bir hata mesajı günlüğe kaydederek veya mesafeyi yeniden ölçmeye çalışarak bu durumları düzgün bir şekilde ele alabilmelidir.
HC-SR04 ve Diğer Mesafe Sensörleri
vs. Kızılötesi Sensörler
HC-SR04
Range: 2cm–400cm (Abstract 1, 6)
Accuracy: ±3mm (ideal conditions, Abstract 1)
Voltage: 5V (fixed, Abstract 1)
Pros: No light interference, longer range (Abstract 5)
Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)
Infrared
Range: Typically <100cm (Abstract 1, 5)
Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)
Voltage: 3.3V–5V (flexible, Abstract 5)
Pros: Small size, low cost (Abstract 1)
Cons: Ambient light/color interference (Abstract 5)
Tablo 1, HC-SR04’ün sağlam uzun menzilli algılama özelliği (2 cm–400 cm) ile kızılötesi sensörlerin kompakt boyutu ve düşük maliyeti arasındaki dengelemeyi ortaya koyarken, HC-SR04’ün ışık parazitlerine karşı dayanıklılığı ile kızılötesi sensörlerin ortam ışığına ve malzeme rengine karşı hassasiyetini karşılaştırmaktadır.
vs. Lazer Sensörleri
HC-SR04
Range: 2cm–400cm (Abstract 1, 4)
Accuracy: ±3mm (Abstract 4)
Update Rate: 60ms (Abstract 4)
Cost: ~$2–3 (Abstract 1)
Weakness: 15° cone angle, environmental noise (Abstract 1)
Laser/ToF (VL53L0X)
Range: 5cm–200cm (Abstract 1, 3)
Accuracy: ±1mm–3mm (Abstract 3)
Update Rate: 20ms (faster, Abstract 4)
Cost: ~$10–15 (Abstract 1)
Strength: 5° narrow beam, interference-resistant (Abstract 3)
Tablo 2’de, HC-SR04’ün uygun maliyeti (2–3 dolar) ve geniş ölçüm aralığı (400 cm) ile Lazer/ToF sensörlerinin üstün hassasiyeti (±1 mm) ve hızı (20 ms güncelleme sıklığı) karşılaştırılmaktadır; bu sensörler, kontrollü ortamlarda yüksek hassasiyet gerektiren uygulamalar için idealdir.
ABD'ye karşı - 100 Modül
HC-SR04
Range: 2cm–400cm (Abstract 2, 6)
Accuracy: ±3mm (nominal, Abstract 2)
Voltage: 5V only (Abstract 6)
Feature: GPIO-only, no temperature compensation (Abstract 3)
Issue: Random values beyond 400cm (Abstract 6)
US-100
Range: 2cm–450cm (Abstract 2, 3)
Accuracy: ±2mm (better in tests, Abstract 3)
Voltage: 3.3V–5V (Abstract 3)
Feature: Temperature compensation (UART mode), error codes (Abstract 6)
Downside: Higher cost ($5–8), UART setup required (Abstract 3)
Tablo 3, US-100’ün daha geniş ölçüm aralığı (450 cm), daha yüksek hassasiyeti (±2 mm) ve 3,3 V/5 V uyumluluğunu, HC-SR04’ün basit yapısı (sadece GPIO) ile karşılaştırarak ortaya koymakta ve daha yüksek bir maliyetle (5–8 $) endüstriyel kullanım için US-100’ün sıcaklık dengeleme özelliğini vurgulamaktadır.
İleri Düzey Teknikler ve Optimizasyonlar
Çoklu Sensör Kalibrasyonu
Ancak, birden fazla sensör kullanıldığında, çapraz konuşma paraziti önemli bir sorun haline gelebilir. Çapraz konuşma, bir sensör tarafından yayılan ultrasonik dalgaların başka bir sensörün çalışmasını engellediği durumlarda ortaya çıkar. Sensörler, parazit dalgalarını gerçek engellerden gelen yankılar olarak yanlış yorumlayabileceğinden, bu durum yanlış okumalara yol açabilir.
Çapraz konuşma parazitini azaltmak için çeşitli teknikler kullanılabilir. Bir yaklaşım, sensörleri zaman çoklayıcı olarak kullanmaktır. Bu, sensörleri tek tek etkinleştirmek ve her etkinleştirme arasında yeterli zaman aralıkları bırakmak anlamına gelir. Örneğin, bir robotta dört adet HC-SR04 sensörünüz varsa, sensör 1'i etkinleştirebilir, ölçüm döngüsünü tamamlamasını bekleyebilir, ardından sensör 2'yi etkinleştirebilir ve bu şekilde devam edebilirsiniz. Böylece, bir sensörden gelen ultrasonik dalgaların başka bir sensörün dalgalarıyla çakışmamasını sağlayarak çapraz konuşma olasılığını azaltmış olursunuz.
Başka bir teknik ise koruyucu malzemeler kullanmaktır. Sensörler arasına ince bir metal levha veya ses emici bir malzeme gibi fiziksel bir bariyer yerleştirmek, bir sensörden gelen ultrasonik dalgaların diğerine ulaşmasını engellemeye yardımcı olabilir. Bu, sensörlerin birbirine çok yakın yerleştirildiği durumlarda özellikle yararlı olabilir.
Birden fazla sensör kullanırken kalibrasyon da çok önemlidir. Her sensörün hassasiyet veya ışın açısı gibi özellikleri biraz farklı olabilir. Sensörleri kalibre ederek bu farklılıkları hesaba katabilir ve tüm sensörlerden gelen verilerin tutarlı olmasını sağlayabilirsiniz. Bu, her sensörle bilinen bir nesneye olan mesafeyi ölçmeyi ve farklılıklara göre okumaları ayarlamayı içerebilir.
Gürültü Filtreleme
Yaygın olarak kullanılan yöntemlerden biri, hareketli ortalama filtresidir. Hareketli ortalama filtresi, bir dizi ardışık mesafe okumasının ortalamasını hesaplayarak çalışır. Örneğin, tek bir mesafe okuması kullanmak yerine, son 5 okumayı alıp bunların ortalamasını hesaplayabilirsiniz. Bu, titrek okumaları düzeltir, çünkü küçük dalgalanmalar ortalamalandığında birbirlerini iptal etme eğilimindedir. Python'da, HC-SR04 mesafe okumaları için basit bir hareketli ortalama filtresinin uygulaması şöyle görünebilir:
distance_readings = []
num_readings = 5
def moving_average_filter(new_distance):
distance_readings.append(new_distance)
if len(distance_readings) > num_readings:
distance_readings.pop(0)
return sum(distance_readings) / len(distance_readings)
Bir başka etkili filtreleme yöntemi de medyan filtresidir. Medyan filtre, her bir mesafe değerini, ardışık değerler kümesinin medyan değeriyle değiştirir. Medyan, ortalamaya kıyasla uç değerlere veya aykırı değerlere karşı daha az duyarlıdır. Örneğin, 5 mesafe okumasından oluşan bir küme [20, 22, 18, 50, 21] varsa, medyan değer 21'dir. Medyan filtre kullanıldığında, 50 olan uç değer, filtrelenmiş sonucu önemli ölçüde etkilemez. Arduino'da medyan filtrenin uygulaması şu şekilde olabilir:
const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;
void addReading(int newReading) {
total = total - readings[readIndex];
readings[readIndex] = newReading;
total = total + readings[readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings) {
readIndex = 0;
}
}
int getMedian() {
int sortedReadings[numReadings];
for (int i = 0; i < numReadings; i++) {
sortedReadings[i] = readings[i];
}
for (int i = 0; i < numReadings - 1; i++) {
for (int j = i + 1; j < numReadings; j++) {
if (sortedReadings[i] > sortedReadings[j]) {
int temp = sortedReadings[i];
sortedReadings[i] = sortedReadings[j];
sortedReadings[j] = temp;
}
}
}
return sortedReadings[numReadings / 2];
}
Özel Çalışma Modları
Bununla birlikte, belirli HC-SR04 sürümlerinde UART (Evrensel Asenkron Alıcı/Verici) ve I2C (Entegre Devreler Arası) modları da mevcuttur. UART modunda, modül seri iletişim kullanarak bir mikrodenetleyici ile iletişim kurabilir. Bu, bazı endüstriyel kontrol sistemlerinde olduğu gibi daha standart bir seri iletişim protokolünün tercih edildiği uygulamalarda veya yerleşik UART arayüzlerine sahip cihazlarla entegrasyon sırasında yararlı olabilir.
Öte yandan, I2C modu, bir I2C veriyolu üzerinden iletişimi mümkün kılar. Bu, birden fazla sensörün veya bileşenin tek bir mikrodenetleyiciyle iletişim kurması gereken çoklu cihaz kurulumlarında faydalıdır. I2C veriyolu, mikrodenetleyicinin pinlerinin daha verimli kullanılmasını sağlar, çünkü birden fazla cihaz aynı iki telli veriyolunu (SDA – Seri Veri Hattı ve SCL – Seri Saat Hattı) paylaşabilir.
Modülü bu özel modlar için yapılandırmak üzere, uygun direnç değerlerini belirlemek için modülün belgelerine başvurmanız gerekir. Örneğin, UART modunu etkinleştirmek için modül üzerindeki iki pin arasına belirli bir direnç bağlamanız gerekebilir. Dirençler doğru şekilde yapılandırıldıktan sonra, modül istenen modda iletişim kuracak şekilde programlanabilir. Bu, UART veya I2C iletişim protokollerini yönetmek için mikrodenetleyicinize farklı kod yazmayı gerektirebilir. Örneğin, I2C yapılandırmalı HC-SR04 kullanan bir Raspberry Pi projesinde, I2C veriyolu üzerinden sensörle iletişim kurmak için Python'daki smbus kütüphanesini kullanabilirsiniz.




