Yazdır
Kategori: Arduino
Gösterim: 1372

Uzaklık ölçümü için HC-SR04 ultrasonik uzaklık sensörü kullanılır. Bu sensör elektronik/robotik malzeme satan mağazalarda kolaylıkla bulunabilir.  Sensör üzerinde giriş ve çıkış olmak üzere iki yüzey bulunmaktadır. HC-SR04 basitçe bir hoparlör ve bir mikrofondan oluşan bir mesafe sensörüdür. Uzak nesneleri algılaması için nesnenin daha büyük olması gerekmektedir. Çıkış yüzeyinden ortama belirli bir frekansta ultrasonik ses dalgası salınır. Gönderilen ses 40MHz frekansındadır. Giriş yüzeyi de çıkış yüzeyinin ortama saldığı belirli frekanslardaki ses dalgalarını toplar. Uzaklık ölçümü için öncelikle çıkış yüzeyinden ortama ses dalgası salınır. Salınan ses dalgası 15 derece açıyla ortamda yayılır. Yayılan ses dalgası bu alanda bulunan bir cisme çarptığında, cisim yüzeyinden sensöre geri yansır. Yansıyan dalganın giriş yüzeyine gelmesiyle işlem tamamlanır. Dalganın çıkış yüzeyinden çıkmasıyla giriş yüzeyine ulaşması arasında geçen süre ölçülerek, cismin uzaklığı hesaplanır. Bu basit mantıkla çalışan sensör, 2 cm ile 200 cm arasındaki uzaklıkları 1 cm hassasiyetle ölçebilmektedir. Sensör bu aralık dışındaki uzaklıkları istikrarlı olarak ölçememektedir.

 

HC-SR04 Ultrasonik Sensör Özellikleri

Mesafe ölçümü için ve robot projelerinde kullanılabilir.
Arduino devreleri ile kullanılabilir.
2 cm ile 400 cm arasınde mesafe ölçümü yapabilir.
Ölçüm hassasiyeti 3 mm dir. Çalışma voltajı 5 Volt DC
Çalışma frekansı 40 Hz
Çektiği akım 15 mA
Boyutları 45 mm x 20 mm x 15 mm
Görme açısı 15 derece
Tetik bacağı giriş sinyali 10 us TTL Darbesi

Sensör üzerinde VCC, Trig, Echo, GND olmak üzere 4 adet pin bulunmaktadır. Bunlardan VCC pini besleme (5 volt), GND pini toprak hattıdır. Trig pini çıkış yüzeyinden dalganın salınmasını sağlayan pindir. Echo pini ise giriş yüzeyine yansıyan dalganın ulaştığını Arduino'ya haber veren pindir. Açıklamalardan da anlaşıldığı gibi Arduino'da trig pini çıkış, echo pini ise giriş olarak ayarlanmalıdır.

Aşağıdaki resimde sensörün Arduino bağlantılarını görebilirsiniz.

İlk olarak setup fonksiyonu içerisinde sensörün trig ve echo pinleri ayarlanmalıdır. Sensör önündeki cismin uzaklığını ölçmesi için trig pini aktif yapılmalıdır. Daha önceden bu pinin aktif kalma ihtimalinden dolayı öncelikle pin LOW durumuna getirilmelidir. Kısa bir süre bekledikten sonra trig pini 10 mikro saniye boyunca HIGH konumuna tutulmalıdır. 10 mikro saniye sonunda pin, tekrardan LOW konumuna getirilmelidir. Böylece çıkış yüzeyinden ses dalgası salınmış oldu. Salınan dalga sensörün önündeki bir cisme çarptığında giriş yüzeyine yansıyacaktır. Dalga giriş yüzeyine ulaştığında sensör otomatik olarak echo pinini HIGH konumuna getirecektir. Echo pininin HIGH konumuna gelme süresi pulseIn fonksiyonuyla ölçülür. Ölçülen süre 14,55'e bölünerek cismin uzaklığı ölçülür. Uygulamada sensör yardımıyla ölçülen uzaklığın kullanıcı tarafından görülmesi için, uzaklık bilgisi seri haberleşmeyle bilgisayara aktarılmaktadır.

 HC-SR04 giden ve dönen ses arasındaki süre farkını mikrosaniye (1/1,000,000sn) cinsinden vermektedir. Sesin hızını havada yaklaşık 343m/s olarak kabul edebiliriz. Hesapları cm cinsinden yapmak istersek ses hızı 34300 cm/s olarak alabiliriz. Zaman birimini mikrosaniye cinsinden aldığımızda 0,0343 cm/us olarak karşımıza çıkmaktadır. Sesin gidişi ve gelişi 2 kat sürdüğü için tek gidiş veya tek geliş için ilk hesapladığımız değeri ikiye bölebiliriz, sonuç 0,01715 cm/ us olarak ortaya çıkmaktadır. Hesapları Arduino için daha kolay integer değerleri cinsinden yapmak istersek 1/0,01715 = 58 olduğunu görebiliriz. Böylece HC-SR04'nin bize verdiği mikrosaniye cinsinden değeri 0,01715 ile çarpar veya 58'e bölersek santimetre cinsinden en yakın yansıtıcı nesnenin mesafesini bulmuş oluruz.

 

#define echoPin 11 // Echo Pini (Yansıyan ses algılama)

int maksimumMesafe = 200; // Maksimum mesafe. Farketmesi için uzak nesneler daha büyük olmalıdır. 
int minimumMesafe = 3; // Minimum mesafe 
long microsaniyeSure, cmMesafe; // Mesafe hesabında kullanılan değişkenler

void setup() {
 Serial.begin (9600); // Seri iletişimi başlat
 pinMode(trigPin, OUTPUT); // Ses gönderme pin türünü çıkış olarak ayarla
 pinMode(echoPin, INPUT);  // Yansıyan ses algılama pin türünü giriş olarak ayarla

}

void loop() {
/* Aşağıda trigPin/echoPin döngüsü en yakın nesneden yansıyan sesin yansıma süresini hesaplar. */ 
 digitalWrite(trigPin, LOW); // Hoparlör 2ms sessiz
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH); // Hoparlör 10ms sesli
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW); // Hoparlör sessiz
 microsaniyeSure = pulseIn(echoPin, HIGH); // Mikrofonu dinle, yansıma süresini microsaniyeSure değişkenine al
 
// Serial.println(microsaniyeSure); // Sesin gitme ve geri yansıma süresi 

 cmMesafe = microsaniyeSure/58.3; // microsaniyeSure'dan cm olarak mesafeyi hesapla
 
 if (cmMesafe >= maksimumMesafe) // Gelen mesafe aşırı uzak ise 
 {
 Serial.println("Cok uzak >200cm");
 }
 
 else if (cmMesafe <= minimumMesafe) // Gelen mesafe aşırı yakın ise 
 {
  Serial.println("Cok yakin < 3cm");   
 }
 
 else {
 /* Seri iletişimden ölçülen mesafeyi bilgisayara gönder */
 Serial.print(cmMesafe); //Mesafe bilgisi
 Serial.println(" cm"); // Birim değeri
 }
 
 delay(50);  //Sonraki ölçümden önce bekleme süresi. 
}