HC-SR04 Ultrasonik Sensör Modülleri

İçindekiler

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.

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

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:

Çalışma Voltajı
+5V DC (4.5V - 5.5V)
Çalışma Akımı
~15mA (Bekleme: ~2mA)
Ölçüm Mesafesi
2cm - 400cm (0.8" - 13ft)
Doğruluk
±3mm (En iyi durum, ortama göre değişiklik gösterir)
Çözünürlük
0.3cm (Kalibrasyon ile teorik olarak 1mm mümkündür)
Algılama Açısı
~15° koni açısı
Tetikleme Giriş Sinyali
Ölçümü başlatmak için 10μs YÜKSEK (HIGH) darbe
Yankı Çıkış Sinyali
Mesafeyle orantılı darbe genişliği: 1μs = 0.017cm (340m/s ses hızına dayanarak)
Maksimum Frekans
40kHz ultrasonik frekans
Ölçüm Döngüsü
≥60ms (ölçümler arası paraziti önlemek için)
Çalışma Sıcaklığı
-15°C ile +60°C arası (5°F - 140°F)
Boyutlar
45mm × 20mm × 15mm (sensör modülü)
Ağırlık
~5g (yalnızca modül)

Açıklama:

  1. 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.
  1. Çö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.
  1. 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.
  1. Ç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.
  1. 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ı

Pin 1
Etiket
VCC
İşlev
Güç Kaynağı (Pozitif)
Voltaj
5V DC
Bağlantı
Arduino: 5V
Raspberry Pi: 5V (Modül ile ortak toprak)
Pin 2
Etiket
Trig (Tetikleme)
İşlev
Tetikleme Girişi
▶ Ölçümü Başlatmak İçin 10μs Yüksek (HIGH) Darbe
▶ Sıfırlamak İçin Düşük Seviye
Bağlantı
Arduino: Herhangi Bir Sayısal Pin (örn. D2)
Raspberry Pi: Herhangi Bir GPIO (örn. GPIO17)
Pin 3
Etiket
Echo
İşlev
Yankı Çıkışı
▶ Yüksek Süre = Ultrasonik Dalgaların Gidiş-Dönüş Süresi
▶ Maksimum Yüksek Süre: 38ms (Engel Olmadığında Zaman Aşımı)
Bağlantı
Arduino: Herhangi Bir Sayısal Pin (örn. D3)
Raspberry Pi: **Gerilim Bölücülü** GPIO (5V→3.3V)
⚠️ Raspberry Pi'ye doğrudan bağlanan 5V Echo pini GPIO'ya zarar verebilir! 1kΩ + 2kΩ gerilim bölücü kullanın.
Pin 4
Etiket
GND
İşlev
Güç Toprağı (Ortak Toprak)
Bağlantı
Arduino / GND
Raspberry Pi / GND

Açıklama:

VCC pini, modüle güç sağlamakla görevlidir. Bu pini, tercihen mikrodenetleyicinin 5V çıkışından gelen sabit bir 5V güç kaynağına bağlamak, modülün doğru şekilde çalışmasını sağlar. Doğru okumalar için kararlı bir güç kaynağı çok önemlidir. Güç kaynağı kararsızsa, tutarsız mesafe ölçümlerine yol açabilir. Örneğin, HC-SR04'e giden güç kaynağında voltaj dalgalanmaları veya düşüşleri varsa, sensör yanlış ultrasonik darbeler yayabilir veya alınan yankıları yanlış yorumlayabilir, bu da hatalı mesafe hesaplamalarına neden olur.
GND pini, gerekli topraklama bağlantısını sağlar. Elektrik devresini tamamlar ve modül için sabit bir referans geriliminin korunmasına yardımcı olur. Uygun bir topraklama bağlantısı olmadan modül hiç çalışmayabilir veya hatalı sonuçlar verebilir. Arduino tabanlı bir projede, ortak bir toprak referansı sağlamak için HC-SR04'ün GND pini genellikle Arduino kartının GND pinine bağlanır.
Trig pini, sihrin başladığı yerdir. Bu pime 10 μs'lik bir yüksek seviye darbe gönderildiğinde, ultrasonik vericiyi tetikleyerek 40 kHz'lik ultrasonik dalgalardan oluşan 8 darbeli bir patlamayı yayar. Python tabanlı bir Raspberry Pi projesinde, bu 10μs yüksek seviye darbeyi oluşturmak için GPIO (Genel Amaçlı Giriş/Çıkış) kütüphanesini kullanabilirsiniz. Bu basit dijital giriş mekanizması, mesafe ölçüm sürecinin kolayca kontrol edilmesini sağlar.

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: Mesafe ( cm ) = Süre ( μs ) × 0.0343 2 . 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

HC-SR04 ultrasonik sensör modülünün nasıl çalıştığını tam olarak anlamak için, öncelikle temel bileşenlerini tanımak gerekir. Her bir parça, modülün genel işleyişinde kendine özgü ve hayati bir rol oynar.

  1. 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.
  1. 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.
  1. 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: Mesafe (cm) = Süre ((μs)) × 0.0343 2 . 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: 2000 × 0.0343 2 = 34.3 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ı

HC-SR04 ultrasonik sensör modülünü bir Arduino'ya bağlamak oldukça basit bir işlemdir. İşte bunu nasıl yapabileceğiniz:

  • 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.
Bağlantıları gösteren basit bir kablo şeması aşağıda verilmiştir:
				
					       HC - SR04         Arduino
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ Digital Pin 2
         Echo ------------ Digital Pin 3
				
			

Kod Örneği

HC-SR04 kullanarak mesafe ölçümüne başlamanıza yardımcı olacak temel bir Arduino 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);
}
				
			
Kurulum fonksiyonunda, öncelikle seri iletişimi 9600 baud hızında başlatıyoruz; bu sayede Arduino Seri Monitörü'nde mesafe değerlerini görüntüleyebiliyoruz. Ardından, trigPin'i çıkış pini, echoPin'i ise giriş pini olarak ayarlıyoruz.
Döngü fonksiyonunda, temiz bir başlangıç sağlamak için trigPin'i 2 mikrosaniye boyunca LOW olarak ayarlayarak başlıyoruz. Ardından, HC-SR04'teki ultrasonik vericiyi tetiklemek için 10 mikrosaniye boyunca HIGH olarak ayarlıyoruz. Bundan sonra, trigPin'i tekrar LOW olarak ayarlıyoruz.
Daha sonra pulseIn işlevi, echoPin üzerindeki yüksek seviyeli darbenin süresini ölçmek için kullanılır. Bu süre, ultrasonik dalgaların engele gidip geri dönmesi için geçen süreyi temsil eder. Ardından, mesafeyi distance = duration * 0.0343 / 2 formülünü kullanarak hesaplarız; burada 0.0343, cm/μs cinsinden ses hızıdır ve dalgalar engele gidip geri döndüğü için 2'ye böleriz.
Son olarak, hesaplanan mesafeyi Seri Monitöre yazdırırız ve bir sonraki ölçümden önce 500 milisaniyelik bir gecikme ekleriz.

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ı

  1. 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.

  1. 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ı

HC-SR04'ü bir Raspberry Pi ile entegre ederken dikkate alınması gereken en önemli hususlardan biri voltaj seviyeleridir. Raspberry Pi üzerindeki GPIO (Genel Amaçlı Giriş/Çıkış) pinleri yalnızca maksimum 3,3 V voltaj kabul edebilir. Ancak HC-SR04, 5 V ile çalışır ve HC-SR04'ün Echo pini 5 V sinyal verebilir. 5 V sinyalini doğrudan bir Raspberry Pi GPIO pinine bağlamak Pi'ye zarar verebilir.

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ı V out hesaplama formülü şöyledir: V out = V in × R 2 R 1 + R 2 , burada V in giriş voltajını (bu durumda 5V), R 1 birinci direnci (1kΩ) ve R 2 ikinci direnci (2kΩ) temsil eder. Değerleri yerine koyduğumuzda, Raspberry Pi GPIO pini için güvenli aralıkta olan V out = 5 × 2000 1000 + 2000 ≈ 3.33 V 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.
Kablolama şu şekilde özetlenebilir:
				
					       HC - SR04         Raspberry Pi
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ GPIO 17
         Echo (through voltage divider) ------------ GPIO 27
				
			

Python Kodu

İşte HC-SR04 sensörünü Raspberry Pi ile bağlamak için RPi.GPIO kütüphanesini kullanan bir Python kod örneği:
				
					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ı

ESP32, çok sayıda GPIO (Genel Amaçlı Giriş/Çıkış) pini bulunan güçlü bir mikrodenetleyicidir. HC-SR04'ü bir ESP32'ye bağlarken, HC-SR04'e güç sağlamak için ESP32'nin VOUT pininden gelen 5V'yi kullanabilirsiniz. Trig ve Echo pinlerini ise kullanılabilir herhangi bir GPIO pinine bağlayabilirsiniz. Örneğin, Trig pinini GPIO 14'e ve Echo pinini GPIO 15'e bağlayabilirsiniz. Ancak, projenizdeki diğer bileşenler tarafından halihazırda kullanılmayan pinleri seçtiğinizden emin olun.

Arduino IDE Kodu

Arduino IDE'de ESP32 ile HC-SR04'ü kullanmak için yazılan kod, Arduino koduna oldukça benziyor. İşte bir örnek:
				
					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.

Ancak, Arduino IDE'de ESP32'yi kullanırken, IDE'de doğru ESP32 kartını seçtiğinizden emin olun. Ayrıca, ESP32'yi WiFi veya Bluetooth gibi IoT (Nesnelerin İnterneti) özellikleriyle entegre etmeyi planlıyorsanız, kodunuzda bu özelliklerin başlatılmasını sağlamanız gerekir. Örneğin, mesafe verilerini WiFi üzerinden göndermek istiyorsanız, bir WiFi ağına bağlanmak için kod eklemeniz ve verileri göndermek için bir sunucu veya istemci kurmanız gerekir.

HC-SR04 Kullanarak Yapılabilecek Yaratıcı Proje Fikirleri

Engellerden Kaçınan Robot

Engelleri önleyen robot, HC-SR04 ultrasonik sensör modülünün ilgi çekici ve pratik bir uygulamasıdır. Temel işlevi, yolundaki engelleri algılayarak çevresinde güvenli bir şekilde hareket etmektir. Bu, robotun üzerine stratejik olarak yerleştirilmiş birden fazla HC-SR04 sensörü kullanılarak sağlanır.

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ı

Akıllı çöp kutusu, HC-SR04 ultrasonik sensör modülünün gündelik nesnelerin işlevselliğini artırmak için nasıl kullanılabileceğinin harika bir örneğidir. Bu uygulamada, akıllı çöp kutusu otomatik açılan kapak özelliğine sahip olacak şekilde tasarlanmıştır. Bu özellik, çöp kutusuna yaklaşan bir kişinin varlığıyla tetiklenir.

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

Su seviyesi monitörü, özellikle bir tank içindeki su seviyesini takip etmenin gerekli olduğu durumlarda, HC-SR04 ultrasonik sensör modülünün pratik bir uygulamasıdır. Bu, ev tipi bir su depolama tankında, endüstriyel bir su depolama tankında veya hatta bir akvaryumda olabilir.

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ı

Kullanıcıların HC-SR04 ultrasonik sensör modülünde karşılaştıkları en yaygın sorunlardan biri, tutarsız ölçüm değerleridir. Bu durum, özellikle projeniz için doğru mesafe ölçümlerine güveniyorsanız, oldukça sinir bozucu olabilir.

Neden: Çoklu yol yansımaları veya dengesiz güç

Çoklu yol yansımaları, sensör tarafından yayılan ultrasonik dalgaların alıcıya ulaşmadan önce birden fazla yüzeyden sekmesi durumunda meydana gelir. Bu durum, çok sayıda nesnenin bulunduğu karmaşık ortamlarda veya geniş, yansıtıcı yüzeylerin bulunduğu alanlarda ortaya çıkabilir. Örneğin, çok sayıda mobilya ve aynanın bulunduğu bir odada, ultrasonik dalgalar alıcı tarafından algılanmadan önce mobilyalardan, duvarlardan ve aynalardan sekebilir. Bu durum, sensörün hedeflenen nesneye olan mesafeyi doğru bir şekilde hesaplamasını zorlaştırır ve tutarsız okumalara neden olur.

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

Sensörün etrafına koruyucu bir muhafaza eklemek, çoklu yol yansımalarının etkisini azaltmaya yardımcı olabilir. Muhafaza, ultrasonik dalgaları daha odaklanmış bir şekilde yönlendirecek şekilde tasarlanabilir ve böylece dalgaların istenmeyen yüzeylerden sekme olasılığını azaltır. Ön tarafında dar bir açıklığı olan basit bir karton veya plastik muhafaza bu açıdan etkili olabilir.

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

Bir başka sık karşılaşılan sorun ise HC-SR04'ün çıkış sinyali üretememesidir. Bu durum birkaç farklı sorunun belirtisi olabilir ve sensörü yeniden çalışır hale getirmek için her olasılığı sistematik bir şekilde kontrol etmek önemlidir.
Kontrol: Kablolamayı (özellikle VCC/GND), Raspberry Pi için voltaj bölücüyü ve tetikleme/yankı zamanlamasına ilişkin kod mantığını doğrulayın
Her şeyden önce, kablolamayı dikkatlice kontrol edin. VCC ve GND pinlerinin sırasıyla güç kaynağına ve toprağa doğru şekilde bağlandığından emin olun. Gevşek veya hatalı bir bağlantı, sensörün düzgün bir şekilde çalışmasını engelleyebilir veya modülün normal çalışmasını bozan elektriksel kısa devrelere neden olabilir. Çoğu durumda, basit bir gözle inceleme ve kabloların yeniden bağlanması sorunu çözebilir.

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ı

Algılanan nesne HC-SR04 sensörüne çok yakın veya çok uzak olduğunda, menzil dışı hataları ortaya çıkabilir. Bu durum, özellikle kodunuz bu tür durumları yönetmek için uygun şekilde donatılmamışsa, projenizde sorunlara yol açabilir.
Çözüm: Bir zaman aşımı süresi belirleyin (örneğin, yankı gelmezse 38 ms) ve kodda 0 veya ∞ değerlerini uygun şekilde işleyin
Kodunuza bir zaman aşımı mekanizması eklemek, nesnenin sensörün makul bir süre içinde yankıyı algılayamayacak kadar uzakta olduğu durumları yönetmek için yararlı bir yöntemdir. Örneğin, 38 ms içinde yankı alınmazsa, bu durum nesnenin sensörün menzilinin dışında olduğunun iyi bir göstergesidir. Kodunuzda, tetikleme sinyali gönderildiğinde başlayan ve yankı alındığında duran bir zamanlayıcı ayarlayabilirsiniz. Zamanlayıcı, yankı almadan zaman aşımı değerine ulaşırsa, nesnenin menzil dışında olduğunu varsayabilir ve bir hata mesajı görüntülemek veya varsayılan bir mesafe değeri ayarlamak gibi uygun önlemleri alabilirsiniz.

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

Tablo 1: HC-SR04 (Ultrasonik) ve Kızılötesi Sensörler Karşılaştırması

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

Tablo 2: HC-SR04 ve Lazer/ToF (VL53L0X) Karşılaştırması

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

Tablo 3: HC-SR04 ve US-100 (Ultrasonik) Karşılaştırması

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

Daha karmaşık uygulamalarda, özellikle 360° görüşün hayati önem taşıdığı durumlarda, birden fazla HC-SR04 sensörünün kullanılması büyük bir fark yaratabilir. Örneğin bir robotik uygulamada, robotun gövdesi etrafına stratejik olarak yerleştirilmiş birden fazla HC-SR04 sensörü, robotun her yönden engelleri algılamasını sağlayarak çevresine dair kapsamlı bir görüş sunar.

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

Bazı ortamlarda, HC-SR04'ten alınan ölçüm değerleri dalgalı olabilir; bu durum, elektriksel gürültü, hafif hava akımları veya yakındaki diğer elektronik cihazlardan kaynaklanan parazit gibi çeşitli faktörlerin yol açtığı küçük mesafe dalgalanmalarıyla ortaya çıkabilir. Bu sorunu gidermek için gürültü filtreleme teknikleri uygulanabilir.

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ı

HC-SR04 ultrasonik sensör modülünün bazı yeni sürümleri, özel çalışma modları sayesinde ek esneklik sunar. Bu modlar direnç ayarları yoluyla yapılandırılabilir ve farklı iletişim protokollerine ve çalışma özelliklerine olanak tanır.
Bu modlardan biri, çoğu temel uygulama için standart mod olan GPIO (Genel Amaçlı Giriş/Çıkış) modudur. Bu modda modül, önceki bölümlerde açıklandığı gibi çalışır; Trig ve Echo pinleri sırasıyla mesafe ölçümünü tetiklemek ve yankı sinyalini almak için kullanılır.

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.

Sonuç

HC-SR04 ultrasonik sensör modülü, uygun fiyatı, kullanım kolaylığı ve çok yönlülüğü sayesinde elektronik projelerinin vazgeçilmez bir parçası olmaya devam ediyor. Çalışma prensibini iyice kavrayarak, yaygın olarak kullanılan mikrodenetleyicilerle arayüz oluşturarak ve yaratıcı uygulamaları keşfederek, temel mesafe ölçümünden karmaşık IoT sistemlerine kadar her alanda bu modülün tüm potansiyelini ortaya çıkarabilirsiniz. Sorularınız mı var ya da proje fikirleriniz mi var? Aşağıdaki form aracılığıyla bizimle paylaşın! 🛠️

Yazar Hakkında

Picture of Aidan Taylor
Aidan Taylor

Ben Aidan Taylor ve PCB Ters Mühendislik, PCB Tasarımı ve IC Kilit Açma alanında 10 yılı aşkın bir deneyime sahibim.

Paylaş

Önerilen Gönderi

Yardıma mı ihtiyacınız var?

Yukarı Çık

Instant Quote

Anında Fiyat Teklifi