Bir cümlelik özet
Ultrasonik mesafe sensörü, gönderdiği ses dalgasının geri dönme süresini ölçerek önündeki cismin ne kadar uzakta olduğunu santimetre cinsinden hesaplamamızı sağlar.
Neden önemli?
Bir robotun duvara çarpmadan durabilmesi için önce "önümde bir şey var mı ve ne kadar uzakta?" sorusunu yanıtlaması gerekir. İnsan gözle bakar; robot ise mesafe sensörüyle "görür".
Ultrasonik sensör, yarasaların karanlıkta yön bulma yöntemiyle aynı fikri kullanır: bir ses gönder, yankısını dinle, geçen süreden uzaklığı hesapla. Bu yöntem ucuz, güvenli ve düşük gerilimle çalışır. Bu yüzden başlangıç robotiğinde en çok kullanılan sensörlerden biridir.
Günlük hayatta bu fikri iki yerde görürüz:
- Araba park sensörü: Geri geride park ederken tampona yaklaşan duvarı algılar ve mesafe azaldıkça sinyal sesini sıklaştırır.
- Otomatik el kurutma makinesi ve musluklar: Elini yaklaştırdığında algılayıp çalışır, çektiğinde durur.
Bu derste kullanacağımız HC-SR04 sensörü tam olarak bu işi yapar ve Arduino ile birkaç bağlantıyla çalışır.
Sensör nasıl çalışır?
Ses gönder, yankıyı dinle
HC-SR04 sensöründe iki küçük silindir vardır. Biri verici (ses gönderir), diğeri alıcıdır (yankıyı dinler). Sensör insanın duyamayacağı kadar yüksek frekanslı (ultrasonik) bir ses darbesi gönderir. Bu ses bir cisme çarpıp geri döner.
Sensörün dört bacağı vardır:
- VCC: 5 volt besleme.
- GND: Toprak (şase).
- Trig: Tetikleme. Buraya kısa bir sinyal göndererek "şimdi ölç" deriz.
- Echo: Yankı. Ses geri döndüğünde bu bacak bize süreyi bildirir.
Süreyi mesafeye çevirmek
İşin püf noktası şudur: sesin havadaki hızını biliyoruz, yaklaşık olarak saniyede 343 metre. Bunu sensörün kullandığı birime çevirirsek, ses her mikrosaniyede yaklaşık 0,0343 santimetre yol alır.
Sensör bize sesin gidip gelme süresini verir. Ama ses cisme gidip bir de geri döndüğü için bu süre iki katı yolu içerir. O yüzden ikiye böleriz:
mesafe = (gidiş-dönüş süresi × 0,0343) / 2
Örneğin süre 600 mikrosaniye ise: 600 × 0,0343 = 20,58; bunu 2'ye bölünce cisim yaklaşık 10 santimetre uzaktadır.
Arduino ile ölçüm yapmak
Bağlantı
Gerekli parçalar: bir Arduino Uno, bir HC-SR04 sensörü ve dört jumper kablo.
- Sensör VCC → Arduino 5V
- Sensör GND → Arduino GND
- Sensör Trig → Arduino pin 9
- Sensör Echo → Arduino pin 10
Tetikleme darbesi ve pulseIn
Ölçüm için Trig bacağına 10 mikrosaniyelik kısa bir HIGH sinyali gönderiyoruz. Sonra pulseIn fonksiyonu Echo bacağının ne kadar süre HIGH kaldığını mikrosaniye olarak ölçüyor. pulseIn, sinyalin başlamasını bekler, biter bitmez geçen süreyi verir.
const int trigPin = 9;
const int echoPin = 10;
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 sure = pulseIn(echoPin, HIGH);
float mesafe = sure * 0.0343 / 2;
Serial.print("Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
delay(200);
}
Kodu yükledikten sonra Seri Ekran'ı (Serial Monitor) 9600 baud ile açarsan, elini sensörün önünde yaklaştırıp uzaklaştırdıkça sayının değiştiğini görürsün.
Mesafeye göre karar vermek
Ölçtüğümüz mesafeyi bir koşulla birleştirince robot artık karar verebilir. Aşağıdaki sketch, cisim 10 santimetreden yakınsa bir LED yakar; bir park sensörünün "çok yaklaştın" uyarısının en basit hâlidir. LED için pin 4'e 220 ohm'luk bir direnç ve LED bağla.
const int trigPin = 9;
const int echoPin = 10;
const int ledPin = 4;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long sure = pulseIn(echoPin, HIGH);
float mesafe = sure * 0.0343 / 2;
if (mesafe < 10) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
Bu iki koddaki ölçüm mantığı birebir aynıdır; ikincisine yalnızca bir karar adımı ekledik. Robotik projelerde bu karar genellikle "LED yak" değil, "motorları durdur veya yön değiştir" olur. Motor sürücüyü bir sonraki derste ekleyeceğiz.
Mini uygulama
Kendi park sensörünü yap. Amaç, cisim yaklaştıkça uyarının hızlanması.
- Yukarıdaki bağlantıyı kur (sensör + LED).
loopiçinde mesafeyi ölç.- Üç seviyeli bir kural yaz:
- Mesafe 20 cm'den büyükse LED sönük kalsın.
- Mesafe 10–20 cm arasındaysa LED yavaş yanıp sönsün (örneğin 500 ms aralıkla).
- Mesafe 10 cm'den küçükse LED sürekli yansın.
- Elini yavaşça yaklaştırıp uyarının değişmesini gözle.
İpucu: Yanıp sönme için digitalWrite ile açıp delay ile bekleyip tekrar kapatabilirsin. İleride bu bekleme yerine millis ile bloklamayan zamanlama kullanmayı deneyebilirsin.
Uygulama laboratuvarı: Ultrasonik Mesafe Sensörü
Ultrasonik Mesafe Sensörü konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Sensör nasıl çalışır? ile Süreyi mesafeye çevirmek arasındaki ilişkiyi kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: toprak nemini okuyup pompa yerine güvenli bir LED ile karar gösteren sulama prototipi. Dersin ana hedefi “HC-SR04 ile mesafeyi ölçüp mesafeye göre karar vermeyi öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Kartın 5 V veya 3,3 V çalışma sınırı doğru mu?
- Pin numaraları kod ve devrede eşleşiyor mu?
- Seri monitör ölçümü beklenen aralıkta mı?
- Motor veya servo karttan doğrudan aşırı akım çekiyor mu?
- Güç kesildiğinde sistem güvenli duruma dönüyor mu?
“Ultrasonik Mesafe Sensörü” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın toprak nemini okuyup pompa yerine güvenli bir LED ile karar gösteren sulama prototipi senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Sensör nasıl çalışır? ve Süreyi mesafeye çevirmek ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
Trig ve Echo pinlerini karıştırmak
Trig çıkıştır (OUTPUT), Echo giriştir (INPUT). Kabloları ya da pinMode satırlarını ters yazarsan sensör hiç okuma yapmaz veya hep 0 verir.
Süreyi ikiye bölmeyi unutmak
Ses gidip geldiği için ölçülen süre çift yolu içerir. Bölmezsen ölçtüğün her mesafe gerçek değerin iki katı çıkar.
Yanlış birim kullanmak
Ses hızını santimetre-mikrosaniye birimiyle (0,0343) kullanmalısın. Metre veya milisaniye ile karıştırırsan sonuç anlamsız olur.
Çok sık ölçüm yapmak
Ölçümler arasına küçük bir delay koymazsan bir önceki yankı yeni ölçüme karışabilir. Kısa bir bekleme (100–200 ms) okumaları daha kararlı yapar.
Güvenlik notu
- HC-SR04 yalnızca 5 volt ile, yani USB veya küçük pil paketiyle çalışır. Şebeke elektriğine asla bağlama.
- Bu sensör düşük gerilimlidir ve tek başına tehlikeli değildir; yine de bağlantıları güç kapalıyken yap.
- Sensörle bir motor sürmeye çalışıyorsan motoru doğrudan Arduino pinine bağlama. Motorlar ayrı bir güç kaynağı ve bir motor sürücü ister; bunu bir sonraki derste ele alacağız.
- İlk kez devre kurarken bir yetişkinden yardım iste ve bağlantıları iki kez kontrol et.
Ders özeti
- Ultrasonik sensör bir ses darbesi gönderir ve yankısının dönüş süresini ölçer.
- Mesafe, sürenin ses hızıyla (0,0343 cm/µs) çarpılıp ikiye bölünmesiyle bulunur.
- Trig bir çıkıştır ve ölçümü başlatır; Echo bir giriştir ve
pulseInile süreyi verir. - Ölçülen mesafeyi bir
ifkoşuluyla birleştirince robot karar verebilir. - Sensör düşük gerilimlidir; motor sürmek için ayrı güç ve motor sürücü gerekir.
Kontrol soruları
- HC-SR04 sensörünün Trig ve Echo bacakları ne işe yarar?
- Ölçülen süreyi neden ikiye böleriz?
pulseInfonksiyonu hangi birimde değer döndürür ve neyi ölçer?- Süre 1160 mikrosaniye ölçülürse cisim yaklaşık kaç santimetre uzaktadır?
- Neden mesafe sensörüyle bir motoru doğrudan aynı pinden süremeyiz?
Cevaplar
- Trig, sensöre "şimdi ölç" komutunu veren tetikleme çıkışıdır; Echo ise yankı döndüğünde geçen süreyi bildiren giriştir.
- Ses cisme gidip bir de geri döndüğü için ölçülen süre yolun iki katını içerir; gerçek mesafe için ikiye böleriz.
pulseIn, Echo bacağının HIGH kaldığı süreyi mikrosaniye cinsinden döndürür; yani sesin gidiş-dönüş süresini ölçer.- 1160 × 0,0343 = 39,79; ikiye bölünce yaklaşık 20 santimetre.
- Motor, Arduino pininin verebileceğinden çok daha fazla akım çeker ve pini bozabilir; bu yüzden ayrı güç kaynağı ve motor sürücü gerekir.
Kaynak ve doğrulama notu
“Ultrasonik Mesafe Sensörü” dersi için doğrulama odağı Sensör nasıl çalışır? ile Süreyi mesafeye çevirmek arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.
Sonraki ders
Motor Sürücü: Bir DC motoru ayrı güç kaynağı ve sürücü kartıyla güvenle döndürmeyi ve mesafe sensörünün kararını harekete çevirmeyi öğreneceğiz.