08
Oca
2020

Arduino ile HC-SR04 ultrasonik sensör kullanımı

İnsan kulağı saniyede 20 titreşim (20Hz) ile 20.000 titreşim (20 Khz) arasındaki ses dalgalarını duyabilir. Ultrasonik sensörler, insanın duyma alanı dışındaki, yani 20Khz den daha yüksek frekansta ses dalgaları üretir ve bunları dinlerler. HC-SR04; 40Khz frekansta çalışan bir mesafe ölçüm sensörüdür. Kendisinden uzaklığı 2cm ile 400cm arasında olan nesnelerin mesafesini 3mm hassasiyetle ölçebilir.

HC-SR04 ultrasonik sensörün trigger, echo, VCC ve GND olmak üzere 4 bağlantı pini vardır. Bir ultrasonik ses dalgası üretmek için, 10µs (mikrosaniye) süresince trigger pinine sinyal göndermek gerekir. Ultrasonik sensör bu sinyali alınca 8 adet sonik pals (ses vuruşu) üretir. Bu pals kümesi, havada ses hızında ilerler ve karşısında bir nesne varsa ona çarparak aynı hızda geri döner. Bu aşamada dinlemede olan sensör ilk palsı yakaladığı anda, palsın üretildiği zaman ile yakalandığı zaman farkı hesaplanarak nesnenin sensörle arasındaki mesafe hesaplanır.

Ses dalgası, ideal atmosfer koşullarında 340metre/saniye yani 0,034cm/µs hızla ilerler. Ultrasonik sensörün tam 10cm uzağında bir nesne olduğu varsayılırsa, zaman=mesafe/hız formülünde değerler yerine koyulduğunda; zaman=10/0,034=294µs olarak hesaplanır. Ancak bu sonuç, sesin 10cm mesafeyi katetme zamanıdır yani sesin ultrasonik sensörden çıkıp nesneye ulaşana kadar geçirdiği zamandır. Ses sinyali nesneye çarpıp geri yansıdıktan sonra sensöre tekrar ulaşmak için 10cm yolu yeniden katedecek yani 294µs daha zaman geçecektir. Bu nedenle mesafe hesaplanırken geçen süre ikiye bölünür. Sonuç olarak ultrasonik sensörde mesafe aşağıdaki formülle hesaplanır:

Mesafe = (süre/2) *0,034

Malzemeler

  • 1 adet Arduino
  • 1 adet HC-SR04 ultrasonik sensör

Bağlantı şeması

HC-SR04 sensör maksimum 15mA akım çektiği için Arduino kartının 5V çıkışından beslenmesinde sakınca yoktur. Bu çalımada sensörün echo çıkışı Arduino’ nun 5 numaralı pinine, trigger çıkışı da Arduino’ nun 6 numaralı pinine bağlanmıştır.

Kaynak kod

int trigPin = 6;    // Arduino' da Trigger bağlanan pin 
int echoPin = 5;    // Arduino' da Echo bağlanan pin 
long gecenSure, cm;
 
void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
 
void loop() {
  // Ses sinyali gönderme işlemi
  digitalWrite(trigPin, LOW); // Temiz bir ölçüm için Trigger portunu LOW konumuna getir ve 5 mikrosaniye bekle
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); // Sensöre 10mikrosaniye pals göndererek tetikle
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);  // Trigger işlemini tamamla    
  // Yankılanan sesi dinleme işlemi
  gecenSure = pulseIn(echoPin, HIGH);  // Sesin geri dünüş süresini al
  // Süreyi mesafeye çevirme işlemi 
  cm = (gecenSure/2) *0.0343;     
  // Hesaplanan mesafeyi seri port ekranına yazdır
  Serial.print("  Mesafe: ");
  Serial.print(cm);
  Serial.print(" cm");
  Serial.println();
  delay(500);  // Bir sonraki ölçüm için yarım saniye bekle
}

Kaynak kod Arduino’ ya yüklendiğinde ve çalıştırıldığında seri port ekranında aşağıdaki gibi bir sonuç alınır.