HC-SR04 Ultrasonik Sensör ve Arduino ile Mesafe Ölçme
HC-SR04 Pin Ayrıntıları
Aşağıda verilen şekil, pin konfigürasyonunu göstermektedir. Dört pimden oluşur; Vcc, Ground, Trigger ve Echo pimi.
Vcc ve Toprak, sensörü çalıştırmak için kullanılır. Vcc pinine 5 volt vermeli ve GND pinini güç kaynağının toprak terminaline bağlamalıyız.
Tetikleyici: Bir giriş pinidir. Mesafe ölçümünü veya mesafe aralığını başlatmak için ultrasonik sensörü başlatmak için tetik pimi kullanılır. Kullanıcılar sensörden mesafe ölçümleri almak istediklerinde, bu pime 10µs'lik bir darbe uygularız.
Eko: Bu bir darbe çıkış pinidir. Eko pini, çıkış olarak bir darbe üretir. Darbenin genişliği veya darbenin açık olduğu süre, ultrasonik sensör ile HC-SR04 sensörünün önüne yerleştirilen engel arasındaki mesafeye bağlıdır. Bekleme koşullarında, bu pin aktif düşük seviyede kalır.
HC-SR05 ultrasonik sensör, 40KHz frekanslı duyulamayan ultrasonik ses dalgalarını kullanarak mesafeyi ölçer. Ses dalgaları gibi ultrasonik dalgalar da havada hareket eder ve önlerinde herhangi bir engel varsa geliş açısına göre yansır. Ayrıca, bir nesne bir ultrasonik vericiye paralel yerleştirilirse, ultrasonik dalgalar tam olarak 180 derecelik bir açıyla yansır. Bu nedenle, HC-SR05 sensörü ile mesafe ölçümü için, test edilen nesneyi aşağıdaki şekilde gösterildiği gibi ultrasonik sensör ile tam paralel konuma yerleştiririz.
HC-SR05 ultrasonik sensör, ultrasonik verici ve ultrasonik alıcı modülü gibi iki temel modülden oluşur. Verici devresi, bir elektrik sinyalini 40KHz'lik 8 sonar dalga darbesi patlamasına dönüştürür. Verici devresine giriş elektrik sinyali, HC-SR04 sensörünün tetik pimine 10 µs darbe girişidir. Daha önce de bahsettiğimiz gibi, bu tetikleyici giriş sinyalini Arduino veya herhangi bir mikrodenetleyici aracılığıyla uyguluyoruz. Ultrasonik alıcı devresi ise verici devresinin ürettiği bu ultrasonik dalgaları dinler.
HC-SR04 Echo Pulse Time'ı Arduino ile ölçün
- HC-SR04 ile aralık değiştirmeye başlamak için, önce Arduino dijital çıkış pininden HC-SR04 sensörünün tetik pinine 10µs puls uyguluyoruz.
- 10µs giriş tetik sinyali aktif hale gelir gelmez, verici devresi 8 ultrasonik sonar darbesi patlaması üretir. Aynı zamanda, Echo pini ayrıca mantık düşük seviyesinden mantık yüksek seviyeye geçiş yapar.
- Echo pini yükseldiğinde Arduino süre ölçme fonksiyonu ile zamanı ölçmeye başlarız.
- Bu dalgalar havada hareket eder ve sensöre paralel olarak yerleştirilmiş herhangi bir nesne varsa, bu dalgalar nesne ile bir çarpışmadan sonra geri yansır.
- Alıcı devresi tarafından bir cisme vurulduktan sonra alınan ultrasonik dalgalar, yankı pini alçalır. Arduino bu yankı çıkış sinyalinin aktif yüksekten aktif düşük seviyeye geçişini algılar ve ölçümü durdurur.
Kısaca Yankı çıkış darbe sinyalinin açık olduğu süreyi ölçerek mesafeyi ölçebiliriz. Aşağıdaki şekil, giriş tetikleme sinyali ve 8 sonar darbesi ile ilgili yankı çıkış sinyalini göstermektedir.
Yankı çıkış sinyalinin yüksek kaldığı süre, ultrasonik sensör ile sensörün önüne yerleştirdiğimiz nesne arasındaki mesafeye bağlıdır. Mesafe ne kadar yüksekse, sonar dalgalarının ultrasonik alıcı devresine geri dönmesi için gereken süre o kadar yüksek olur. Çünkü ultrasonik dalgalar havada ses hızıyla ilerler ve hız sabit kalır.
Zaman Süresini Mesafeye Dönüştürme
Bir sonraki bölümde, Arduino kullanarak nabız süresinin nasıl ölçüleceğini göreceğiz. Arduino ile çıkış darbesini zamanında (t) ölçtüğümüzü varsayalım. Şimdi soru, ölçülen bu zamanın mesafeye nasıl dönüştürüleceğidir.
Eh, bu eğitimin en bariz kısmı budur. Lisede, hepimiz iyi bilinen S = vt olan bir mesafe-zaman denklemi üzerinde çalışırız. Bu denklemi kullanarak darbe süresini (t) mesafeye (S) dönüştürebiliriz.
Mesafe (S) = Hız (v) * t // metre cinsinden mesafe
Burada v, havadaki ultrasonik dalgaların hızıdır. Ultrasonik dalgaların havadaki hızı, 340 m / s (saniyede metre) olan ses hızına eşittir.
Yukarıdaki denklem, metre birimlerinde mesafe çıktısı verecektir. Ancak, mesafeyi santimetre biriminde istiyorsanız, 340'ı 100 ile çarpın. Dolayısıyla, yukarıdaki denklem şöyle olur:
S = 34000 * t // cm cinsinden mesafe
Yukarıdaki formülde verilen süre de ikiye bölünmelidir. Çünkü ultrasonik dalgalar vericiden engele doğru ilerler ve daha sonra aynı mesafeyi katederek alıcı devresine geri yansıtır. Sadece HC-SR04 ile nesne arasındaki mesafeyi bulmak istiyoruz. Bu nedenle, mesafeyi hesaplama formülü şu şekildedir:
S = 17000 * t // cm cinsinden mesafe
Bağlantı Şeması HC-SR04 ve Arduino
Şimdiye kadar ultrasonik sensörün çalışmasını ve pim detaylarını gördük. Artık bir HC-SR04 sensörünü Arduino ile arayüzlemek için, ikisi güç kaynağı pini ve ikisi dijital giriş çıkış pini olmak üzere dört pime ihtiyacımız olduğunu biliyoruz. Arduino'nun bir GPIO pini, ultrasonik sensöre bir tetik sinyali sağlamak için dijital çıkış pini olarak kullanılacaktır. Benzer şekilde, bir GPIO pini, çıkış sensörünün yankı çıkış sinyalini yakalamak için dijital giriş pini olarak kullanılacaktır.
Şimdi Arduino'nun HC-SR04 sensörü ile bağlantısını bu bağlantı şemasına göre yapın. Bu şematik diyagramda, bir tetikleme sinyali sağlamak için Arduino'nun D9 pinini ve eko çıkış darbesini yakalamak için D11'i kullanıyoruz.
HC-SR04 | Arduino |
---|---|
Vcc | + 5V |
GND | GND |
Tetikleyici | D9 |
Eko | D11 |
LED'li Ultrasonik Sensör için Arduino Kodu
Bu örnek kodda, ölçülen mesafe değerine göre bir LED'i kontrol edeceğiz. Arduino Uno, D13 pinine bağlı bir yerleşik LED'e sahiptir. Bu kod mesafe ölçümünü alır ve ölçülen mesafe değeri 10 cm'den az ise led yanar. Aksi takdirde LED kapalı kalır.
/*
* Ultrasonic Sensor HC-SR04 interfacing with Arduino
*
* by microcontrollerslab.com
*/
/* Define the names for Arduino pin for HC-SR04*/
#define trigger_pin 9
#define Echo_pin 11
#define LED 13
/* two variables to store duraion and distance value */
long duration;
int distance;
/* configure D9 and D11 as digital input and output respectively */
void setup() {
pinMode(trigger_pin, OUTPUT); // configure the trigger_pin(D9) as an Output
pinMode(LED, OUTPUT); // Set the LED (D13) pin as a digital output
pinMode(Echo_pin, INPUT); // configure the Echo_pin(D11) as an Input
Serial.begin(9600); // Enable the serial with 9600 baud rate
}
void loop() {
digitalWrite(trigger_pin, LOW); //set trigger signal low for 2us
delayMicroseconds(2);
/*send 10 microsecond pulse to trigger pin of HC-SR04 */
digitalWrite(trigger_pin, HIGH); // make trigger pin active high
delayMicroseconds(10); // wait for 10 microseconds
digitalWrite(trigger_pin, LOW); // make trigger pin active low
/*Measure the Echo output signal duration or pulss width */
duration = pulseIn(Echo_pin, HIGH); // save time duration value in "duration variable
distance= duration*0.034/2; //Convert pulse duration into distance
/* if distance greater than 10cm, turn on LED */
if ( distance < 10)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
// print measured distance value on Arduino serial monitor
Serial.print("Distance: ");
Serial.println(distance);
}
Kod Nasıl Çalışır?
Önce, #define önişlemci direktiflerini kullanarak Arduino pinlerinin adlarını tanımlayın. Bu, Arduino'nun D9 ve D11 pinlerinin, HC-SR04 sensörünün tetik ve eko pinlerini kontrol etmek için kullanıldığını tanımlar. Benzer şekilde, D13 pinine "LED" adı verilir. Dolayısıyla program aracılığıyla pin numaraları yerine bu sembolik isimleri kullanacağız.
#define trigger_pin 9 #define Echo_pin 11 #define LED 13
Bu iki değişken, süre ve mesafe değerlerini depolamak için bildirilir.
long duration;
int distance;
Kurulum İçinde ()
Arduino programında, setup () fonksiyonu içerisinde konfigürasyon ve başlatma ayarlarını yapıyoruz. Bu kodda, trigger_pin ve LED pinlerini dijital çıkış pinleri olarak ve Echo_pin'i dijital giriş pinleri olarak başlatıyoruz. Ayrıca, mesafe ölçüm verilerini Arduino seri monitörüne göndermek için seri iletişimi etkinleştirin.
pinMode(trigger_pin, OUTPUT); // configure the trigger_pin(D9) as an Output
pinMode(LED, OUTPUT); // Set the LED (D13) pin as a digital output
pinMode(Echo_pin, INPUT); // configure the Echo_pin(D11) as an Input
Serial.begin(9600); // Enable the serial with 9600 baud rate
Ana döngü()
Loop () işlevinin içine yazılan kod, tekrar tekrar çalıştırılır. Bu nedenle, bu ana loop () işlevi içinde mesafe ölçümü veya diğer yararlı işlevleri gerçekleştiririz.
Bildiğiniz gibi, HC-SR04 sensöründen veri aralığını etkinleştirmek için, tetik pimine 10 µs'lik bir darbe sağlıyoruz. Bu nedenle, bu kod segmenti, pimi tetiklemek için 10 µs'lik bir darbe sağlar. Uzaktan numune alma sürecini başlatacaktır.
digitalWrite(trigger_pin, LOW); //set trigger signal low for 2us
delayMicroseconds(2);
/*send 10 microsecond pulse to trigger pin of HC-SR04 */
digitalWrite(trigger_pin, HIGH); // make trigger pin active high
delayMicroseconds(10); // wait for 10 microseconds
digitalWrite(trigger_pin, LOW); // make trigger pin active low
Ultrasonik sensöre 10µs puls uyguladığımız anda yanıt olarak 40KHz sonar dalgaları üretir ve Echo çıkış sinyalini aktif yüksek duruma yükseltir. Yankı çıkış sinyali, bu sonar dalgaları ultrasonik vericiye geri yansıyana kadar aktif yüksek kalır. Alıcı devre bu dalgaları alır almaz, yankı çıkış sinyali aktif düşük seviyeye gider. Bu nedenle, bu hat, çıkış sinyalinin aktif yüksek durumda kaldığı zamanlayıcıyı ölçer.
duration = pulseIn(Echo_pin, HIGH); // save time duration value in "duration variable
Gelen Arduino IDE , pulseIn () işlevi, darbe süresinin ölçülmesi için kullanılır ve mikrosaniye zaman süresi çıkış verir. Ancak yukarıda türettiğimiz mesafe-zaman ilişkisi formülü, hem hız hem de zaman, saniye, mikrosaniye veya milisaniye gibi zaman açısından aynı birimlere sahipse çalışır. Ancak bu denklemde hız birimi saniyede santimetredir.
S = 17000 * t // cm cinsinden mesafe
Hızı mikrosaniye başına santimetreye dönüştürmek için, bu denklemi 10 ^ -6'ya bölün. Artık hız ve zaman birimleri birbiriyle uyumlu.
S = 0.017 * t // cm cinsinden mesafe
Son olarak bu çizgi, darbe süresini mesafeye (cm) çevirir.
distance= duration*0.034/2;
If-else koşullu blok kontrolleri ya ölçülen mesafenin 10 cm'den az ya da daha büyük olduğunu kontrol eder. 10'dan büyükse LED'i açın. Aksi takdirde LED kapalı kalır.
if ( distance < 10)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
Sonunda, serial.print () işlevi ölçülen mesafeyi Arduino seri monitörüne yazdırır.
// print measured distance value on Arduino serial monitor
Serial.print("Distance: ");
Serial.println(distance);
HC-SR04 Ultrasonik Sensör, LCD ve Arduino ile
Bu bölümde, HC-SR04 ultrasonik sensör ve Arduino kullanarak bir mesafe ölçüm ölçer tasarlayacağız. Ölçülen mesafe değerini görüntülemek için 16 × 2 LCD kullanacağız.
Önceki eğitimimizde, Arduino ile 16xLCD arabirimi hakkında derinlemesine bir kılavuz yayınladık. Makaleye buradan başvurabilirsiniz.
Şimdi LCD, HC-SR04 ultrasonik sensör ve Arduino ile bağlantı kurun.
16 × 2 LCD | Arduino |
---|---|
D4 - D7 | 9, 10, 11, 12 |
E | 7 |
RS | 4 |
VEE | POT (Orta Ayak) |
VSS | Zemin |
VDD | + 5V |
D + | + 5V |
D- | Zemin |
Arduino ve HC-SR04 ile bağlantılar:
HC-SR04 | Arduino |
---|---|
Vcc | + 5V |
GND | GND |
Tetikleyici | D2 |
Eko | D3 |
HC-SR04 Arduino Kodu
Bu mesafe ölçümü arduino kodu hc-sr04 için 16 × 2 LCD'de santimetre birimi cinsinden mesafenin değerini gösterir.
/*
* Ultrasonic Sensor HC-SR04 interfacing with Arduino
*
* by microcontrollerslab.com
*/
// It inculde Liquid crystal display library in your code
#include <LiquidCrystal.h>
// This function assigns Arduino microcontroller about connection of LCD with Arduino. Pins should be connected in following manner :
// LiquidCrystal(RS, EN, D4, D5, D6, D7)
LiquidCrystal lcd(4, 7, 9, 10, 11, 12);
/* Define the names for Arduino pin for HC-SR04*/
#define trigger_pin 2
#define Echo_pin 3
#define LED 13
/* two variables to store duraion and distance value */
long duration;
int distance;
/* configure D9 and D11 as digital input and output respectively */
void setup() {
pinMode(trigger_pin, OUTPUT); // configure the trigger_pin(D9) as an Output
pinMode(LED, OUTPUT); // Set the LED (D13) pin as a digital output
pinMode(Echo_pin, INPUT); // configure the Echo_pin(D11) as an Input
lcd.begin(16, 2); // lcd.begin() function et up the LCD 16x2 LCD
}
void loop() {
digitalWrite(trigger_pin, LOW); //set trigger signal low for 2us
delayMicroseconds(2);
/*send 10 microsecond pulse to trigger pin of HC-SR04 */
digitalWrite(trigger_pin, HIGH); // make trigger pin active high
delayMicroseconds(10); // wait for 10 microseconds
digitalWrite(trigger_pin, LOW); // make trigger pin active low
/*Measure the Echo output signal duration or pulss width */
duration = pulseIn(Echo_pin, HIGH); // save time duration value in "duration variable
distance= duration*0.034/2; //Convert pulse duration into distance
/* if distance greater than 10cm, turn on LED */
if ( distance < 10)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
// print measured distance value on Arduino serial monitor
lcd.setCursor(0,0); // set the cursor position
lcd.print("Distance = "); //print the string on cursor position
lcd.print(distance);
lcd.print("cm");
}
Ultrasonik sensör HC-SR04 uygulamaları
Evsel kullanımdan endüstriyel kullanıma kadar birçok ultrasonik sensör uygulaması vardır. Ancak bunlardan bazıları aşağıda verilmiştir:
- Engellerden kaçınma robotu
- Robotik
- Nesne algılama
- Mesafe ölçümü
- Sıvı seviye izleme sistemi
- Yükseklik ölçümü
- Tarım
- Araç çarpışma koruması
Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook robotic.code
instagram @roboticcode
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.