Skip to content

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

Back To Top