Arduino ile Ultrasonik Sensör Kullanımı
Merhaba arkadaşlar!
Bu yazıda HC-SR04 Ultrasonik sensörünü kullanarak mesafe ölçmeyi göstereceğiz. Bir nesnenin size olan uzaklığını ölçmek için klasik olarak cetvel veya metre kullanabilirsiniz. Ancak 21.yy’da bu işlemi yapmak için bizlere sunulan cihazları kullanarak dijital bir cetvel geliştireceğiz. Uygulamaya geçmeden önce bu sensör hakkında bazı bilgiler vermek istiyorum.
HC-SR04 Ultrasonik sensörü, SONAR ve RADAR sistemlerinin çalışması gibi, bir nesneye olan mesafeyi ölçmeyi sağlar. Bunu yapabilmek için yüksek frekanslı ses dalgaları oluşturur. Bu sensör iki temel bileşenden oluşmaktadır. Bunlardan biri ses dalgasını göndermeyi sağlarken, diğeri de nesneden yansıtılan ses dalgasını almayı sağlar. Sensörün nasıl çalıştığını aşağıdaki resimden inceleyebilirsiniz.
Sensör, nesneden gelen yankının alıcıya ulaşması için gereken süreyi ölçerek mesafeyi ölçer. Mesafe ölçümü, lise hatta ortaokul sıralarına kadar giden ve hayatımız boyunca yakamızı bırakmayan hız x zaman formülü ile bulunur. Ultrasonik sensör mesafe ölçümünde sesi kullanıdığı ve ses dalgalarının hızı 343 m/s olduğu için hız olarak bu değeri alacağız. Ses dalgası yukarıdaki resimde görüleceği üzere aynı mesafeyi iki defa aştığı için mesafe aşağıdaki formül ile hesaplanır.
Formülde hız ve zaman çarpıldıktan sonra ortaya çıkan sonuç ikiye bölünmüştür. Bu sayede sensör ve nesne arasındaki kesin mesafeyi bulmuş olur.
Bu sensörün temel özellikleri şöyledir:
- Bu sensörün en belirgin özelliği 2 cm ve 400 cm arası mesafeleri ölçebilmesidir.
- Ortamdaki aydınlık, duman, toz ve renk gibi etmenlerden etkilenmez.
- İçeride veya dışarıda rahatlıkla kullanılabilir.
- Bir robotun çarpışmadan kaçınmasını sağlayabilir ve çok hızlı olmadığı sürece sık sık hareket ettirilebilir.
- Drone ve araç uygulamalarında kullanılabilir.
- Özellikle bir çarpışmayı engellemek için kullanışlıdır.
Ultrasonik mesafe sensörünün görünümü aşağıdaki gibidir.
Resimde görüleceği üzere bu modül 4 adet pin ile gelmektedir. Şimdi bu pinleri inceleyelim.
VCC +5V
TRIG Sensörün trigger yani tetikleyici girişi. Mikrodenetleyici, HC-SR04 ultrasonik modülüne 10 adet tetikleme atımı uygular.
ECHO Sensörün echo yani yankı çıkışıdır. Mikrodenetleyici, engeli tespit etmek veya mesafeyi bulmak için bu pimi okur.
GND Ground yani topraklama
Bu bilgileri verdikten sonra şimdi HC-SR04 Ultrasonic sensörünü kullanarak mesafe ölçmeyi sağlayabiliriz. Uygulama için ihtiyacımız olan devre elemanı aşağıdaki gibidir:
- HC-SR04 Ultrasonic Sensörü x 1
Sensörü temin etikten sonra devremizi aşağıdaki gibi oluşturalım.
Yukarıda görülen devrede bağlantı işlemi aşağıdaki gibi yapılmıştır.
- Sensörün VCC pini, 5V çıkışına bağlandı.
- TRIG pini, 8 nolu pine bağlandı.
- ECHO pini, 7 nolu pine bağlandı.
- GND pini, GND pinine bağlandı.
Bu bilgilerden sonra devremiz aşağıdaki gibi olur.
Devremizin kodu aşağıdaki gibidir.
#define trig 8
#define echo 7
long duration, distance;
void setup()
{
Serial.begin (9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop()
{
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration*.0343)/2;
Serial.print(distance);
Serial.println(" cm");
delay(1000);
}
Kodların açıklaması aşağıdaki gibidir:
#define trig 8
#define echo 7
define ifadesi ile program içinde sabitler oluşturmayı sağlarız. Uygulamanın yaşamı boyunca trig pini 8 ve echo pini 7 olacağı için bu değerleri sabit olarak tanımladık. Trig ses dalgısını göndermeyi sağlarken, echo ise yankıyı almak için kullanılır.
long duration, distance;
duration değişkeni trig pini ile gönderilen ses dalgasının echo pinine kadar geçen süreyi tutmayı sağlerken, distance değişkeni ise mesafeyi tutmak için kullanılmıştır.
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
Öncelikle trig pinimizi LOW durumunda başlatıyoruz yani ses dalgası göndermesini engelliyoruz. Bu bekleme işlemi 2 mikrosaniye kadar sürecek. Daha sonra trig pinini HIGH durumuna getirip ses dalgası göndermeyi sağladık. Bu işlemin 10 mikrosaniye kadar devam etmesini belirttik. Son olarak bir dahaki sefere ses dalgası üretebilmek için trig pinimizi LOW yani pasif duruma getirdik.
duration = pulseIn(echo, HIGH);
Gönderilen ses dalgasının echo pinine geri dönerken aldığı süreyi hesaplamak için pulseIn komutu kullanılır. Burada parametre olarak echo pini HIGH durumuna getirilerek bu pinden ses dalgasının alınması sağlanır.
distance = (duration*.0343)/2;
Bu satır ile daha önce sizlere anlattığımız formülü kullanarak sensör ile nesne arasındaki mesafenin ölçülmesini sağlarız. Burada amacımız mesafeyi cm olarak almak olduğundan dolayı ses dalgasının 343 m/s olan değerini .0343 cm/s ye dönüştürmek zorunda kaldık. Yani sensör mesafeyi metre değil cm olarak ölçmeyi sağlayacaktır.
Serial.print(distance);
Serial.println(" cm");
delay(1000);
Son olarak ölçülen mesafe serial port ekranına yazılır ve 1 saniye kadar ölçme işleminin beklemesi sağlanır.
Uygulamayı bu haliyle çalıştırıp yükledikten sonra seri port ekranında aşağıdaki sonuçları görmemiz gerekiyor.
Ultrasonic mesafe sensörü ile boy ölçmeyi ve metre kullanmadan iki nokta arasındaki mesafeyi rahatlıkla hesaplayabilirsiniz.
**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.