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 (Modül ile ortak toprak)
▶ Ölçümü Başlatmak İçin 10μs Yüksek (HIGH) Darbe
▶ Sıfırlamak İçin Düşük Seviye
Raspberry Pi: Herhangi Bir GPIO (örn. GPIO17)
▶ Yüksek Süre = Ultrasonik Dalgaların Gidiş-Dönüş Süresi
▶ Maksimum Yüksek Süre: 38ms (Engel Olmadığında Zaman Aşımı)
Raspberry Pi: **Gerilim Bölücülü** GPIO (5V→3.3V)
Raspberry Pi / GND
Açıklama:
Echo pini, mesafe bilgisini elde etmenin anahtarıdır. Ultrasonik dalgalar gönderildikten sonra Echo pini yüksek (HIGH) seviyeye çıkar. Yansıyan dalgalar ultrasonik alıcı tarafından alınana kadar bu seviyede kalır. Echo pininin yüksek seviyede kaldığı süre, ultrasonik dalgaların engele gidip gelmesi için geçen süreyle doğrudan orantılıdır. Bu süreyi ölçerek, şu formülü kullanarak engele olan mesafeyi hesaplayabiliriz: . C++ tabanlı bir Arduino projesinde, Echo pinindeki yüksek seviyeli darbenin süresini ölçmek için pulseIn() fonksiyonunu kullanabilirsiniz.
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:
Mesafe Hesaplaması: Son adım, engele olan mesafeyi hesaplamaktır. Santimetre cinsinden mesafeyi hesaplama formülü şöyledir: . 0.0343 faktörü, havada yaklaşık 343 m/s olan ses hızı değerinden gelir. Dalgalar engele gidip geldiği (gidiş-dönüş yaptığı) için, engele olan tek yönlü mesafeyi bulmak üzere kat edilen toplam mesafeyi 2'ye böleriz. Örneğin, Echo pininin yüksek seviyede kalma süresi 2000μs olarak ölçülürse, mesafe şu şekilde hesaplanır: cm. Bu hesaplama, HC-SR04'ü basit bir hobi projesinde veya karmaşık bir endüstriyel uygulamada kullanmanıza bakılmaksızın aynıdır.
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);
}
setup fonksiyonunda, öncelikle Arduino Seri Monitöründe mesafe okumalarını görmemizi sağlayan 9600 baud hızında seri iletişimi başlatırız. Ardından, trigPin'i çıkış pini ve echoPin'i giriş pini olarak ayarlarız.
loop fonksiyonunda, temiz bir başlangıç sağlamak için öncelikle trigPin'i 2 mikrosaniye boyunca LOW (DÜŞÜK) konumuna getirerek başlarız. Ardından, HC-SR04'teki ultrasonik vericiyi tetiklemek için 10 mikrosaniye boyunca HIGH (YÜKSEK) yaparız. Sonrasında, trigPin'i tekrar LOW konumuna geri alırız.
echoPin üzerindeki yüksek seviyeli darbenin süresini ölçmek için pulseIn() fonksiyonu kullanılır. Bu süre, ultrasonik dalgaların engele gidip gelmesi için geçen zamanı temsil eder. Daha sonra, 0.0343'ün cm/μs cinsinden ses hızı olduğu ve dalgalar engele gidip geldiği için 2'ye böldüğümüz distance = duration * 0.0343 / 2 formülünü kullanarak mesafeyi hesaplarız.
Son olarak, hesaplanan mesafeyi Seri Monitör'e yazdırır ve bir sonraki ölçümden önce 500 milisaniyelik bir gecikme ekleriz.
İpuçları
- Doğru ve Uzun Süreli Ölçüm:
pulseIn() fonksiyonunu kullanırken, bir darbenin süresini ölçtüğünü unutmamak önemlidir. HC-SR04 söz konusu olduğunda, bu Echo pininin yüksek (HIGH) olduğu süredir. Doğru ölçümler sağlamak için darbe süresini etkileyebilecek başka elektriksel parazitlerin olmadığından emin olun. Ayrıca, engel çok uzaktaysa darbenin zaman aşımına uğrayabileceğini unutmayın. Bu tür durumları düzgün bir şekilde ele almak için pulseIn() fonksiyonunda bir zaman aşımı değeri ayarlayabilirsiniz. Örneğin, 20000'in mikrosaniye cinsinden zaman aşımı değeri olduğu long duration = pulseIn(echoPin, HIGH, 20000); ifadesi kullanılabilir.
- 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ı
Bu sorunu çözmek için bir gerilim bölücü devre kullanabilirsiniz. HC-SR04'ün Echo pininden gelen 5V çıkışını Raspberry Pi için 3.3V uyumlu bir sinyale dönüştürmek amacıyla 1kΩ ve 2kΩ direnç kullanan basit bir gerilim bölücü kullanılabilir. Çıkış voltajını hesaplama formülü şöyledir: , burada giriş voltajını (bu durumda 5V), birinci direnci (1kΩ) ve ikinci direnci (2kΩ) temsil eder. Değerleri yerine koyduğumuzda, Raspberry Pi GPIO pini için güvenli aralıkta olan değerini elde ederiz.
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()
Bu kodda, öncelikle gerekli kütüphaneleri; Raspberry Pi üzerindeki GPIO pinlerini kontrol etmek için RPi.GPIO ve gecikmeler eklemek için time kütüphanesini içe aktarırız. Ardından GPIO modunu BCM (Broadcom SOC kanal numaralandırması) olarak ayarlarız. TRIG ve ECHO pinlerini tanımlar ve TRIG pinini çıkış (output), ECHO pinini ise giriş (input) olarak yapılandırırız.
measure_distance fonksiyonu, sihrin gerçekleştiği yerdir. HC-SR04'ü tetiklemek için TRIG pinine 10μs yüksek seviyeli (high) bir darbe gönderir. Ardından, ECHO pininin yüksek seviyeye gelmesini (yankının başlangıcını gösterir) bekler ve başlangıç zamanını kaydeder. Sonrasında, ECHO pininin düşük seviyeye gelmesini (yankının sonunu gösterir) bekler ve bitiş zamanını kaydeder. Başlangıç ve bitiş zamanları arasındaki zaman farkı, mesafeyi hesaplamak için kullanılır. Mesafe, darbe süresinin cm/s cinsinden ses hızıyla (34300 cm/s) çarpılması ve 2'ye bölünmesiyle hesaplanır (çünkü ses engele gidip geri döner).
Try bloğunda, mesafeyi sürekli olarak ölçer ve her saniye konsola yazdırırız. Kullanıcı Ctrl + C (KeyboardInterrupt) tuşuna basarsa, program GPIO pinlerini temizler ve düzgün bir şekilde sonlanır.
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);
}
setup fonksiyonunda, seri iletişimi 115200 baud hızında başlatırız. Ardından, trigPin'i çıkış pini ve echoPin'i giriş pini olarak ayarlarız.
loop fonksiyonunda, HC-SR04'ü tetikleme ve mesafeyi ölçme süreci Arduino kodundakilerle aynıdır. Sensörü tetiklemek için trigPin'e 10μs yüksek seviyeli (high) bir darbe göndeririz, pulseIn kullanarak echoPin üzerindeki yüksek seviyeli darbenin süresini ölçeriz ve mesafeyi hesaplarız.
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
Mesafe Aralığı: 2cm–400cm (Özet 1, 6)
Doğruluk: ±3mm (ideal koşullar, Özet 1)
Voltaj: 5V (sabit, Özet 1)
Avantajlar: Işık paraziti yok, daha uzun menzil (Özet 5)
Dezavantajlar: Azaltılmış yakın mesafe doğruluğu, ultrasonik gürültü hassasiyeti (Özet 1)
Kızılötesi
Mesafe Aralığı: Genellikle <100cm (Özet 1, 5)
Doğruluk: ±5mm–1cm (renk/malzemeden etkilenir, Özet 5)
Voltaj: 3.3V–5V (esnek, Özet 5)
Avantajlar: Küçük boyut, düşük maliyet (Özet 1)
Dezavantajlar: Ortam ışığı / renk paraziti (Özet 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
Mesafe Aralığı: 2cm–400cm (Özet 1, 4)
Doğruluk: ±3mm (Özet 4)
Güncelleme Hızı: 60ms (Özet 4)
Maliyet: ~$2–3 (Özet 1)
Zayıf Yönü: 15° koni açısı, çevresel gürültü (Özet 1)
Lazer/ToF (VL53L0X)
Mesafe Aralığı: 5cm–200cm (Özet 1, 3)
Doğruluk: ±1mm–3mm (Özet 3)
Güncelleme Hızı: 20ms (daha hızlı, Özet 4)
Maliyet: ~$10–15 (Özet 1)
Güçlü Yönü: 5° dar ışın, parazite dayanıklı (Özet 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
Mesafe Aralığı: 2cm–400cm (Özet 2, 6)
Doğruluk: ±3mm (nominal, Özet 2)
Voltaj: Yalnızca 5V (Özet 6)
Özellik: Yalnızca GPIO, sıcaklık telafisi yok (Özet 3)
Sorun: 400cm ötesinde rastgele değerler (Özet 6)
US-100
Mesafe Aralığı: 2cm–450cm (Özet 2, 3)
Doğruluk: ±2mm (testlerde daha iyi, Özet 3)
Voltaj: 3.3V–5V (Özet 3)
Özellik: Sıcaklık telafisi (UART modu), hata kodları (Özet 6)
Dezavantaj: Daha yüksek maliyet ($5–8), UART kurulumu gerektirir (Özet 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.
HC-SR04 zamanlaması, seviye uyumu ve hata kaynakları
HC-SR04, ultrason darbesinin gidiş-dönüş süresinden uzaklık = yankı süresi × ses hızı / 2 ile mesafe tahmin eder. Modül çeşitleri farklı olabilir; besleme ve Echo düzeyini doğrulayın, 5 V çıkışı yalnız 3,3 V kabul eden girişe uygun biçimde dönüştürün.
- Tetiği üretin: tam modülün gerektirdiği darbe genişliğini sağlayıp dönen Echo süresini ölçün.
- Zaman aşımı koyun: yankı gelmezse beklemeyi bitirerek yazılımın kilitlenmesini önleyin.
- Ses hızını düzeltin: sıcaklık dönüşümü değiştirir, hava hareketi ek hata getirir.
- Geometriyi gözetin: yumuşak, eğik, dar veya yakın yüzeyler darbeyi emer ya da saptırır.
- Karşılıklı girişimi önleyin: algılayıcıları sırayla çalıştırıp olanaksız sıçramaları sınırlı süzün.




