HC-SR04 ultrasonik modül kullanarak arduino uno platformunda mesafe ölçümü örneği 1
ultrasonik alıcı vericiler mesafe ölçme, cisim algılama vb bir çok alanda günlük hayatımızın içinde yer almaktadır. tüm bu uygulamalar sesin farklı ortamlarda yayılma hızının farklı olması, yansıma ve doppler kanunlarının kullanılması ile mümkün olmaktadır.
sesin yayılma hızı ortam yoğunluğuna, sıcaklığa vb kriterere bağlı değişmektedir. 0 derecede 1 atmosferde sesin havada yaklaşık olarak 340 m/s ile hızla ilerlediğini kabul edebiliriz. (kritik bir uygulama yapılmıyorsa)
konu hakkında bilgi alınmak istenirse https://www.grc.nasa.gov/www/k-12/airplane/sound.html adresinden yararlanılabilir.
piyasdaki en uygun fiyatlı ultrasonic sensor HC-SR04. bu nedenden dolayı çokca örnek uygulama bulabilirsiniz. ürüne ait temel bilgiler ve zamanla diagrami aşağıda yer almaktadır.
Çalışma Voltajı | DC 5V |
Çektiği Akım | 15 mA |
Çalışma Frekansı | 40 Hz |
Maksimum Görme Menzili | 4m |
Minimum Görme Menzili | 2cm |
Görme Açısı | 15 ° |
Tetik Bacağı Giriş Sinyali | 10 us TTL Darbesi |
Echo Çıkış Sinyali | Giriş TTL sinyali ve Mesafe Oranı |
Boyutları | 45mm x 20mm x 15mm |
bu bilgilere göre echo portundan okuduğumuz değeri 58 e bölersek cismin uzaklığını cm cinsinden yaklaşık olarak elde etmiş oluruz.
HC-SR04 ün arduino ile fiziksel bağlantılarını aşagıdaki şekilde yapabiliriz. kullanacağınız pingleri kendi uygulamanıza göre uyarlayabilirsiniz.
devreye ait kod ise
/* HC-SR04 ornegi * Arduino | HC-SR04 * ------------------- * 5V | VCC * 10 | Trig * 9 | Echo * GND | GND */ //hc-sr04 sensorune ait kullanicak trigger ve echo portlari const int trig_pin = 10; int echo_pin = 9; //uygulamada kullanilacak guvenli mesafe int guvenlik_mesafesi = 10; //uygulamada gunveli mesafe bilgisini ledle takip edebilmek icin //kullanilacak pinler int led_mesafe_guvenli = 3, led_mesafe_guvensiz = 2; void setup() { //uygulada kullanilacak pinlerin durumunu ayarlayalim Serial.begin(9600); pinMode(trig_pin, OUTPUT); pinMode(echo_pin, INPUT); pinMode(led_mesafe_guvenli, OUTPUT); pinMode(led_mesafe_guvensiz, OUTPUT); } void loop() { //sesin_suresi milisaniye cinsinden bir veridir. //bu veri santimetreye cevrilmektedir. long sesin_suresi, mesafe_cm; //olcum oncesi trigger low yapilarak sinyal gonderilmesi engellenir //10 ms sinyal gonderildikten sonra //bunun amaci olasi hata olcumlerini minimize etmektedir digitalWrite(trig_pin, LOW); delayMicroseconds(2); digitalWrite(trig_pin, HIGH); delayMicroseconds(10); digitalWrite(trig_pin, LOW); // pinMode(echo_pin, INPUT); sesin_suresi = pulseIn(echo_pin, HIGH); // olculen sureyi cm olarka mesafeye cevirme mesafe_cm = sesin_suresi / 29 / 2 ; //modulun olcum sinirlari disinda ise seri porttan menzil disi mesajinin //olcum sinilari icinde ise mesafe bilgisinin seria porttan gonderilmesi if (mesafe_cm > 200 || mesafe_cm < 2){ Serial.println("Menzil Disi"); } else { Serial.print(mesafe_cm); Serial.print(" cm"); Serial.println(); } //olculen mesafenin guvenli mesafe icinde olup olmaginin testi //olculen mesafeye ledlerinin durumunun degistirilmesi if (mesafe_cm > guvenlik_mesafesi) { digitalWrite(led_mesafe_guvenli, HIGH); digitalWrite(led_mesafe_guvensiz, LOW); } else { digitalWrite(led_mesafe_guvensiz, HIGH); digitalWrite(led_mesafe_guvenli, LOW); } delay(100); }
dfdf