İnsan kulağı saniyede 20 titreşim (20Hz) ile 20.000 titreşim (20 Khz) arasındaki ses dalgalarını duyabilir. Ultrasonik sensörler, insanın duyma alanı dışındaki, yani 20Khz den daha yüksek frekansta ses dalgaları üretir ve bunları dinlerler. HC-SR04; 40Khz frekansta çalışan bir mesafe ölçüm sensörüdür. Kendisinden uzaklığı 2cm ile 400cm arasında olan nesnelerin mesafesini 3mm hassasiyetle ölçebilir.
HC-SR04 ultrasonik sensörün trigger, echo, VCC ve GND olmak üzere 4 bağlantı pini vardır. Bir ultrasonik ses dalgası üretmek için, 10µs (mikrosaniye) süresince trigger pinine sinyal göndermek gerekir. Ultrasonik sensör bu sinyali alınca 8 adet sonik pals (ses vuruşu) üretir. Bu pals kümesi, havada ses hızında ilerler ve karşısında bir nesne varsa ona çarparak aynı hızda geri döner. Bu aşamada dinlemede olan sensör ilk palsı yakaladığı anda, palsın üretildiği zaman ile yakalandığı zaman farkı hesaplanarak nesnenin sensörle arasındaki mesafe hesaplanır.
Ses dalgası, ideal atmosfer koşullarında 340metre/saniye yani 0,034cm/µs hızla ilerler. Ultrasonik sensörün tam 10cm uzağında bir nesne olduğu varsayılırsa, zaman=mesafe/hız formülünde değerler yerine koyulduğunda; zaman=10/0,034=294µs olarak hesaplanır. Ancak bu sonuç, sesin 10cm mesafeyi katetme zamanıdır yani sesin ultrasonik sensörden çıkıp nesneye ulaşana kadar geçirdiği zamandır. Ses sinyali nesneye çarpıp geri yansıdıktan sonra sensöre tekrar ulaşmak için 10cm yolu yeniden katedecek yani 294µs daha zaman geçecektir. Bu nedenle mesafe hesaplanırken geçen süre ikiye bölünür. Sonuç olarak ultrasonik sensörde mesafe aşağıdaki formülle hesaplanır:
Mesafe = (süre/2) *0,034
Malzemeler
- 1 adet Arduino
- 1 adet HC-SR04 ultrasonik sensör
Bağlantı şeması
HC-SR04 sensör maksimum 15mA akım çektiği için Arduino kartının 5V çıkışından beslenmesinde sakınca yoktur. Bu çalımada sensörün echo çıkışı Arduino’ nun 5 numaralı pinine, trigger çıkışı da Arduino’ nun 6 numaralı pinine bağlanmıştır.
Kaynak kod
int trigPin = 6; // Arduino' da Trigger bağlanan pin int echoPin = 5; // Arduino' da Echo bağlanan pin long gecenSure, cm; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // Ses sinyali gönderme işlemi digitalWrite(trigPin, LOW); // Temiz bir ölçüm için Trigger portunu LOW konumuna getir ve 5 mikrosaniye bekle delayMicroseconds(5); digitalWrite(trigPin, HIGH); // Sensöre 10mikrosaniye pals göndererek tetikle delayMicroseconds(10); digitalWrite(trigPin, LOW); // Trigger işlemini tamamla // Yankılanan sesi dinleme işlemi gecenSure = pulseIn(echoPin, HIGH); // Sesin geri dünüş süresini al // Süreyi mesafeye çevirme işlemi cm = (gecenSure/2) *0.0343; // Hesaplanan mesafeyi seri port ekranına yazdır Serial.print(" Mesafe: "); Serial.print(cm); Serial.print(" cm"); Serial.println(); delay(500); // Bir sonraki ölçüm için yarım saniye bekle }
Kaynak kod Arduino’ ya yüklendiğinde ve çalıştırıldığında seri port ekranında aşağıdaki gibi bir sonuç alınır.