1 Ağustos 2016 Pazartesi

Hc-sr04 ultrasonik sensör nasıl çalışır?

Arduino ile uğraşanların yakından tanıyacağı sensörlerden biri olan hc-sr04 ultrasonik ses mesafe sensörünü ele alacağız. İşin içine ultrasonik girince ilk öncelikle sesler hakkında bahsetmek gerekli.

İnsanların üretebilecekleri ve duyabilecekleri belli frekans değerleri vardır. Normal bir insan kulağı 20–20.000 Hz frekansları arasındaki sesleri duyabilir. Frekans değerlerine göre ultrasonik ses ve infrasonik ses olarak iki ses çeşidi vardır.

Ultrasonik ses: Frekansı 20.000 Hz’in üstünde olan seslere ultrasonik ses veya ses üstü ses veya ultrason denir. Ultrasonik ses normal ses göre daha fazla enerjiye sahiptir ve bu sesler insanlar tarafından duyulamaz. Fakat Ultrasonik sesler birçok hayvan tarafından duyulabilir. (Köpek, yunus, yarasa). Yarasalar yönlerini bulabilmek için yüksek titreşimli ses dalgaları gönderir ve sonrasında seslerin yankılanarak geri gelmesini bekler. Bu yöntemle yönlerini bulurlar.

İnfrasonik Ses: Frekansı 20 Hz’in altında olan seslere İnfrasonik ses veya ses altı ses denir. İnfrasonik ses normal ses göre daha az enerjiye sahiptir ve bu sesler insanlar tarafından duyulamaz.

Bu sensörlerde bu kadar yüksek frekanslarda ses dalgalarının yayılmasının nedeni; bu frekanslardaki dalgaların düzgün doğrusal şekilde ilerlemeleri, enerjilerinin yüksek olması ve sert yüzeylerden kolayca yansımasıdır.

Tüm katı ve sıvı cisimler ultrasonik dalgayı çok iyi oranda yansıtırlar. Hem katı hemde sıvı cisimlerden ultrasonik enerjinin %99u yansıtılır. Çok ufak oranlardaki enerji miktarı cisim tarafından emilir. Bundan dolayı sensörü çok çeşitli uygulamalarda sorunsuz kullanabilmemiz mümkündür. Ayrıca robotlarda da sıkça kullanılmaktadır.

Bu sensör 2cm – 400 cm mesafelerini yaklaşık 3mm hata payıyla ölçebilmektedir.
Hc-sr04 sensörün yapısına kısacak bakacak olursak;
         *VCC – 5V DC
         *TRIG – Trigger Pin (ultrasonik verici)
         *ECHO – Echo Pin (ultrasonik alıcı)
         *GND – Toprak hattı

Peki, nasıl çalışır?


Bizim sensörümüz ve birçok ultrasonic sensör 40Khz frekansında ultrasonic ses üretmektedir. Bu ultrasonik ses trigger kısmından dışarı verilir. Bu ses dalgası herhangi bir cisme çarpıp sensöre geri döndüğünde, Echo pini aktif hale gelir. Biz ise bu iki sinyal arasındaki süreyi ölçerek -yani sesin yankısını algılayarak- cismin sensörden uzaklığını tespit edebiliriz.

1) Trigger pinini high konumuna getirdik ve ultrasonik ses dalgası oluşturduk. Daha sonra delay(erteleme) komutundan sonra yeni ses dalgalarının üretilmemesi için trigger pinini low konumuna getirdik. Mesafeyi iyi algılayabilme için düzenli ve küçük aralıklarla ses dalgası gönderelim. Bu sayede her bir ses dalgasının çıkış ve giriş süresini buluruz.

2) Herhangi bir engele çarpan ses dalgası geri dönecektir. Pulseln komutuyla Echo pinini takibe alırız. Bu ses dalgalarının echo’ya geldiği sürece high olur ve mikrodenetleyicinin timeri ile bu süre ölçülür. Böylelikle ses dalgalarının geliş – gidiş zamanını tespit ederiz.

3) Klasik x = v * t formülüyle artık mesafeyi ölçebiliriz.

4) Ses hızı sıcaklığa bağlı olarak değişmektedir. 0 derecede ses hızı 331 m/s’dir. Ses hızının sıcaklığa bağlı olarak formülü v = 20.05 * kök(273 + t) dır. Ses hızını hesapladıktan sonra birimini cm/ µs ye çeviririz.

5) Daha sonra formülde yerlerine koyduğumuzda mesafeyi cm cinsinden bulmuş oluruz.

Fritzing de devresi:

Fritzing devresi
Arduino kodları:
int trigPin = 6; /* Sensorun trig pini Arduinonun 6 numaralı ayağına bağlandı */
int echoPin = 7; /* Sensorun echo pini Arduinonun 7 numaralı ayağına bağlandı */ long sure; long uzaklik; void setup(){ pinMode(trigPin, OUTPUT); /* trig pini çıkış olarak ayarlandı */ pinMode(echoPin,INPUT); /* echo pini giriş olarak ayarlandı */ Serial.begin(9600); /* Seri haberlesme baslatildi */ }

void loop()
{ digitalWrite(trigPin, LOW); /* sensör pasif hale getirildi */ delayMicroseconds(5); digitalWrite(trigPin, HIGH); /* Sensore ses dalgasının üretmesi için emir verildi */ delayMicroseconds(10); digitalWrite(trigPin, LOW); /* Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi*/  sure = pulseIn(echoPin, HIGH); /* ses dalgasının geri dönmesi için geçen sure ölçülüyor */ uzaklik= sure /29.1/2; /* ölçülen sure uzaklığa çevriliyor */ if(uzaklik > 200) uzaklik = 200; Serial.print("Uzaklik "); Serial.print(uzaklik); /* hesaplanan uzaklık bilgisayara aktarılıyor */ Serial.println (" CM olarak olculmustur."); delay(500); }

1 yorum :

  1. Parik görsel yazilimla bu sesore ölçme yaptırabılırmıyız.

    YanıtlaSil