HC-SR04, robotik ve elektronik projelerde sıkça kullanılan, uygun maliyetli ve kolay kullanımlı bir ultrasonik mesafe sensörüdür. İnsan kulağının duyamayacağı yüksek frekansta (genellikle 40 kHz) ses dalgaları yayarak nesnelere olan uzaklığı ölçer.
Sensörün 4 pini vardır. VCC ve GND besleme ve toprak pinidir. Arduino'daki 5V ve GND pinlerine bağlanabilir. Trig pinini kullanarak sensörden ultrasonic sinyali gönderilir. Echo piniyle yansıyan sinyal alınır. Sensör 40kHz düzeyinde bir ses sinyali yayar.
Çalışması:
Ses sinyali üretmek için Trig pini 10µs boyunca HIGH durumuna getirilir ve sonra LOW yapılır. Bunun üzerine sensör 8 cycle’ lık bir ses sinyali gönderir. Bu sinyalin hemen ardından Echo pini HIGH olur ve sinyalin geri dönmesini bekler. Sinyal geri döndüğünde ise Echo pini LOW konumuna düşer. Echo pininin HIGH olarak kaldığı süre hesaplanarak, ses dalgasının kat ettiği mesafe, dolayısıyla sensörden nesneye olan mesafe belirlenir.
Burada ses sinyalinin ilerleme hızını 340m/s aldık ama ortamın sıcaklığına göre bu değer değişir. Ortamın sıcaklığına göre ses hızı aşağıdaki formülle hesaplanır:
Örnek Uygulama - 1
Bu uygulamada herhangi bir cismin sensöre olan uzaklığı cm cinsinden ölçülerek seri port ekranına yazdırılır.
Devre Şeması:
Program Kodları:
#define trig 8
#define echo 9
float sure;
int mesafe;
void setup()
{
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop()
{
//trig pinini temizle.
digitalWrite(trig, LOW);
delayMicroseconds(2);
//trig pinini 10 mikrosaniye HIGH yap.
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
sure = pulseIn(echo, HIGH); //Bu komut 9 nolu pini takibe alır. 9 nolu pinin durumu HIGH olduğu zaman arka planda saymaya başlar. Pin LOW konumuna düştüğünde saymayı bırakır ve hesapladığı süreyi mikrosaniye cinsinden sure değişkenine atar.
sure = sure / 1000; //sure değişkeni milisaniye cinsine çevrildi.
mesafe = (34.2 * sure) / 2; //sesin havadaki hızı 34.2 cm/ms olarak kabul edildi(sıcaklığa göre değişir) ve sure ms dir.
Serial.print("Mesafe = "); Serial.print(mesafe); Serial.println(" cm");
delay(1000);
//NOT: Burada trig pini Loop içerisinde her seferinde 10 mikrosaniye HIGH ve ardından LOW yapılır. Eğer trig pinini sürekli HIGH yaparsak bu seferde echo pini LOW durumunu göremeyeceği için sure hesabı yapamayacak ve varsayılan süre olan 38ms bekledikten sonra kendisini LOW durumuna düşürecektir.
}
Örnek Uygulama - 2
Bu uygulama, yukarıdaki uygulamaya ek olarak, herhangi bir nesne sensöre 15 cm'den daha az yaklaşırsa buzzer ses vermeye başlar ve seri port ekranına uyarı yazıları yazılır.
Devre Şeması:
Program Kodları:
#define trig 8
#define echo 9
#define buzzer 7
float sure;
int mesafe;
void setup()
{
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop()
{
//trig pinini temizle
digitalWrite(trig, LOW);
delayMicroseconds(2);
//trig pinini 10 mikrosaniye HIGH yap.
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
sure = pulseIn(echo, HIGH);
sure = sure / 1000;
mesafe = (34.2 * sure) / 2; //sesin havadaki hızı 34.2 cm/ms olarak kabul edildi(sıcaklığa göre değişir) ve sure ms dir.
if (mesafe < 15)
{
digitalWrite(buzzer, HIGH);
Serial.print("DİKKAT!!! Çok yaklaştın= "); Serial.print(mesafe); Serial.println(" cm");
delay(50);
}
else
{
digitalWrite(buzzer, LOW);
Serial.print("Mesafe Normal = "); Serial.print(mesafe); Serial.println(" cm");
delay(100);
}
}
________________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder