Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

ultrasonik sensör etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ultrasonik sensör etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Mayıs 2021 Salı

HC-SR04 Ultrasonik Sensör Nasıl Çalışır ve Arduino

 

HC-SR04 Ultrasonik Sensör Nasıl Çalışır ve Arduino

Bir sonraki Arduino projenize, 13 fit (1fit = 0,3048metre) uzaklığa kadar olan nesnelerin menzilini bildirebilen bir HC-SR04 Ultrasonik Mesafe Sensörü ile bat güçleri verin. Robotunuzun duvara çarpmasını önlemeye çalışıyorsanız, bu gerçekten iyi bir bilgidir! Düşük güç tüketirler (pille çalışan cihazlar için uygundurlar), ucuzdurlar, arayüz oluşturmaları kolaydır ve hobiler arasında çılgınca popülerdirler. Ve bir bonus olarak, en son robotik icatınız için bir çift Wall-E Robot gözü gibi havalı görünüyor!

Ultrason nedir?

Ultrason, insan işitme duyusunun duyulabilir sınırından daha yüksek frekanslara sahip yüksek perdeli ses dalgalarıdır.

Ultrasonik Frekans Aralığı Spektrumu

İnsan kulakları, saniyede yaklaşık 20 kez (derin bir gürleme sesi) saniyede yaklaşık 20.000 kez (tiz bir ıslık) arasında titreşen ses dalgalarını duyabilir. Bununla birlikte, ultrasonun 20.000 Hz'nin üzerinde bir frekansı vardır ve bu nedenle insanlar tarafından duyulamaz.


HC-SR04 Ultrasonik mesafe sensörü özünde iki ultrasonik dönüştürücüden oluşur Biri, elektrik sinyalini 40 KHz ultrasonik ses darbelerine dönüştüren bir verici görevi görür. Alıcı, iletilen darbeleri dinler. Bunları alırsa, darbenin kat ettiği mesafeyi belirlemek için genişliği kullanılabilen bir çıkış darbesi üretir. Turta kadar basit!

Sensör küçüktür, herhangi bir robotik projede kullanımı kolaydır ve 3 mm hassasiyetle 2 cm ila 400 cm (yaklaşık bir inç ila 13 fit) arasında mükemmel temassız mesafe algılama sunar. 5 voltta çalıştığı için, doğrudan bir Arduino ya veya diğer 5V mantık mikrodenetleyicilere bağlanabilir.











Özellikleri : 

Çalışma gerilimiDC 5V
Çalışma Akımı15mA
Çalışma Frekansı40 KHz
Maksimum aralık4 dk.
Min Aralık2cm
Değişen Doğruluk3 mm
Ölçüm Açısı15 derece
Tetik Giriş Sinyali10µS TTL darbesi
Boyut45 x 20 x 15 mm

HC-SR04 Ultrasonik Sensör Pin Çıkışı

Pinout'a bir göz atalım.

HC-SR04 Ultrasonik Mesafe Sensörü Pin Çıkışı

VCC Arduino üzerindeki 5V pinini bağladığımız HC-SR04 Ultrasonik mesafe sensörü için güç kaynağıdır.

Trig (Tetikleyici) pim, ultrasonik ses darbelerini tetiklemek için kullanılır.

Echopim, yansıyan sinyal alındığında bir darbe üretir. Darbenin uzunluğu, iletilen sinyalin tespit edilmesi için geçen süre ile orantılıdır.

GND Arduino'nun zeminine bağlanmalıdır.

HC-SR04 Ultrasonik Mesafe Sensörü Nasıl Çalışır?

Tetik pimine en az 10 µS (10 mikrosaniye) süreli bir darbe uygulandığında her şey başlar. Buna yanıt olarak sensör, 40 KHz'de sekiz darbeli bir ses patlaması iletir. Bu 8 darbeli model, cihazın "ultrasonik imzasını" benzersiz kılarak, alıcının iletilen modeli ortamdaki ultrasonik gürültüden ayırt etmesine olanak tanır.

Sekiz ultrasonik darbe, vericiden uzakta havada ilerler. Bu arada Yankı pimi, yankı geri sinyalinin başlangıcını oluşturmaya başlamak için YÜKSEK olur.Bu darbeler geri yansıtılmazsa, Yankı sinyali 38 mS (38 milisaniye) sonra zaman aşımına uğrayacak ve düşük seviyeye dönecektir. Bu nedenle 38 mS'lik bir darbe, sensörün menzili içinde hiçbir engel olmadığını gösterir.

HC-SR04 Ultrasonik Sensör Çalışıyor - Engel Olmadığında Yankı

Bu darbeler geri yansıtılırsa, sinyal alınır alınmaz Yankı pimi düşer. Bu, sinyalin alınması için geçen süreye bağlı olarak genişliği 150 µS ile 25 mS arasında değişen bir darbe üretir.

HC-SR04 Ultrasonik Sensör Çalışıyor - Yankı Engelden yansıyor

Alınan darbenin genişliği daha sonra yansıtılan nesneye olan mesafeyi hesaplamak için kullanılır. Bu basit mesafe-hız-zaman denklemi kullanılarak çözülebilir, lisede öğrendik. Unutursanız, mesafe, hız ve zaman denklemlerini hatırlamanın kolay bir yolu harfleri bir üçgene koymaktır.

Mesafe Hız Zaman Formül Üçgeni

Daha net hale getirmek için bir örnek alalım. Sensörün önünde bilinmeyen bir mesafede bir nesnemiz olduğunu ve Yankı pini üzerinde 500 µS genişliğinde bir darbe aldığımızı varsayalım. Şimdi nesnenin sensörden ne kadar uzakta olduğunu hesaplayalım. Aşağıdaki denklemi kullanacağız.

Mesafe = Hız x Zaman

Burada Zamanın değeri yani 500 µs var ve hızı biliyoruz. Ne hızımız var? Tabii ki ses hızı! 340 m / s. Mesafeyi hesaplamak için ses hızını cm / µs'ye çevirmeliyiz. "Mikrosaniye başına santimetre cinsinden ses hızı" için hızlı bir Google araması, bunun 0,034 cm / µs olduğunu söyleyecektir. Matematiği yapabilirsin, ama aramak daha kolay. Her neyse, bu bilgilerle mesafeyi hesaplayabiliriz!

Mesafe = 0,034 cm / µs x 500 µs

Ama bu yapılmadı! Nabzın, sinyalin gönderilmesi ve geri yansıtılması için geçen süreyi gösterdiğini unutmayın, böylece mesafeyi elde etmek için sonucunuzu ikiye bölmeniz gerekir.

Mesafe = (0,034 cm / µs x 500 µs) / 2

Mesafe = 8.5 cm

Artık nesnenin sensörden 8,5 santimetre uzakta olduğunu biliyoruz .

Artık HC-SR04 ultrasonik mesafe sensörünün nasıl çalıştığını tam olarak anladığımıza göre, onu Arduino'muza bağlamaya başlayabiliriz!

HC-SR04'ü Arduino'ya bağlamak oldukça kolaydır. Sensörü devre tahtanıza yerleştirerek başlayın. VCC pinini Arduino'daki 5V pinine bağlayın ve GND pinini Arduino'daki Ground pinine bağlayın.İşiniz bittiğinde, aşağıda gösterilen resme benzer bir şeye sahip olmalısınız.

Arduino Kablolaması HC-SR04 Ultrasonik Sensör ile Normal Mod Bağlantılarını Kesiyor
HC-SR04 Ultrasonik Sensörü Arduino UNO'ya Kablolama - Normal Mod

Artık ultrasonik mesafe sensörümüzü bağladığımıza göre, bir kod yazma ve test etme zamanı.

Arduino Kodu - NewPing Kitaplığını Kullanma

Ultrasonik sensörü tetiklemek ve alınan sinyal darbe genişliğini manuel olarak ölçmek yerine özel bir kitaplık kullanacağız. Bunlardan epeyce mevcut, en çok yönlü olanı “ NewPing ” denen olandır .

Önce Bitbucket deposunu ziyaret ederek kitaplığı indirin veya zip dosyasını indirmek için bu düğmeyi tıklayın:

Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz NewPing ZIP dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin.

NewPing kitaplığı oldukça gelişmiştir ve orijinal eskizimizin doğruluğunu önemli ölçüde geliştirmiştir. Aynı anda 15 ultrasonik sensöre kadar destekler ve doğrudan santimetre, inç veya zaman süresi cinsinden çıktı verebilir.

NewPing kitaplığını kullanmak için yeniden yazdığımız eskiz:

// This uses Serial Monitor to display Range Finder distance readings

// Include NewPing Library
#include "NewPing.h"

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10

// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400	

// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
float duration, distance;

void setup() 
{
	Serial.begin(9600);
}

void loop() 
{
	// Send ping, get distance in cm
	distance = sonar.ping_cm();
	
	// Send results to Serial Monitor
	Serial.print("Distance = ");
	
	if (distance >= 400 || distance <= 2) 
	{
		Serial.println("Out of range");
	}
	else 
	{
		Serial.print(distance);
		Serial.println(" cm");
	}
	delay(500);
}
HC-SR04 Ultrasonik Sensör Seri Monitörde Arduino Mesafe Ölçümü Çizim Çıkışı
Seri Monitörde Çıktı


Yukarıdaki taslak basit ve iyi çalışıyor, ancak yalnızca bir santimetreye kadar bir çözünürlüğe sahip. Ondalık sayı değerlerini geri getirmek istiyorsanız, NewPing'i mesafe modu yerine süre modunda kullanabilirsiniz. Bu satırı değiştirmeniz gerekiyor

// Send ping, get distance in cm
distance = sonar.ping_cm();

aşağıdaki çizgilerle

duration = sonar.ping();
distance = (duration / 2) * 0.0343;

HC-SR04'ünüzün doğruluğunu bir sonraki seviyeye çıkarmak için, NewPing kitaplığında “yinelemeler” adı verilen başka bir işlev vardır. Yinelemek, bir şeyi birden fazla kez gözden geçirmek demektir ve yineleme modunun yaptığı da tam olarak budur. Tek bir yerine birçok süre ölçümü alır, geçersiz okumaları atar ve sonra kalanların ortalamasını alır. Varsayılan olarak 5 okuma alır, ancak gerçekte istediğiniz kadarını belirtebilirsiniz.

int iterations = 5;
duration = sonar.ping_median(iterations);

Temassız Mesafe Bulucu

Basit bir ultrasonik sensörün Gelişmiş Temassız Mesafe Bulucuya nasıl dönüştürülebileceğini göstermek için hızlı bir proje oluşturalım Bu projede, nesneye olan mesafeyi alt satırdaki değerle grafik olarak temsil etmek üzere yatay bir çubuk görüntülemek için 16 × 2 Karakter LCD kullanacağız.

Daha sonra, aşağıda gösterildiği gibi LCD'ye bağlantı yapmamız gerekiyor.

HC-SR04 Ultrasonik Sensör ve 16x2 LCD ile Arduino Kablolama Fritzing Bağlantıları
HC-SR04 Ultrasonik Sensör ve 16 × 2 LCD'yi Arduino UNO'ya Kablolama
Kodu yüklemeye ve sensörle oynamaya başlamadan önce, LCDBarGraph adlı kütüphaneyi kurmamız gerekiyor . Bu kitaplık, çubuğun uzunluğunun sağlanan değerlerle orantılı olduğu LCD'de yatay çubuk grafik çizmeye yardımcı olur.

Arduino Playground'u ziyaret ederek önce kitaplığı indirin.

Kitaplığı kurduktan sonra aşağıdaki taslağı deneyin.

// includes the LiquidCrystal Library
#include <LiquidCrystal.h> 

// includes the LcdBarGraph Library
#include <LcdBarGraph.h>

// Maximum distance we want to ping for (in centimeters).
#define max_distance 200

// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

LcdBarGraph lbg(&lcd, 16, 0, 1); // Creates an LCD Bargraph object.

const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;

void setup() 
{
	lcd.begin(16,2); // Initializes the interface to the LCD screen
	
	pinMode(trigPin, OUTPUT);
	pinMode(echoPin, INPUT);
}

void loop() 
{
	// Write a pulse to the HC-SR04 Trigger Pin
	digitalWrite(trigPin, LOW);
	delayMicroseconds(2);
	digitalWrite(trigPin, HIGH);
	delayMicroseconds(10);
	digitalWrite(trigPin, LOW);
	
	// Measure the response from the HC-SR04 Echo Pin
	duration = pulseIn(echoPin, HIGH);
	
	// Determine distance from duration
	// Use 343 metres per second as speed of sound
	distance= duration*0.034/2;
	
	// Prints "Distance: <value>" on the first line of the LCD
	lcd.setCursor(0,0);
	lcd.print("Distance: "); 
	lcd.print(distance);
	lcd.print(" cm");

	// Draws bargraph on the second line of the LCD
	lcd.setCursor(0,1);
	lbg.drawValue(distance, max_distance);
	delay(500);
}

Çıktı böyle görünüyor.

HC-SR04 Ultrasonik Sensör 16x2 LCD üzerinde Arduino Mesafe Ölçümü Bargraf Çıkışı
16 × 2 Karakter LCD'de Çubuk Grafik Çıkışı

Kod Açıklaması:

Öncelikle LiquidCrystal kitaplığını her zamanki gibi kurmanız gerekir. Bundan sonra, yeni oluşturulmuş LiquidCrystal örneğiyle LcdBarGraph örneği oluşturabilirsiniz. LiquidCrystal'ın referansını LcdBarGraph'ın yapıcısına iletmelisiniz.

LcdBarGraph'ın kurucusu üç parametre daha alır. İkincisi, LCD'deki karakter sütunlarının sayısıdır (Bizim durumumuzda bu 16'dır). Son iki parametre isteğe bağlıdır ve çubuğun özel konumlandırılmasına izin verir.

// creating bargraph instance
LcdBarGraph lbg(&lcd, 16, 0, 1);

Şimdi sensörden mesafeyi hesapladığımızda , bar grafiğini görüntülemek için drawValue (değer, maxValue) fonksiyonunu kullanabiliriz. Bu, 0 ile maxValue arasında bir değere sahip bir çubuk grafik çizer.

//display bargraph
lbg.drawValue(distance, max_distance);

HC-SR04'ü 3 Hatlı Mod ile Arabirim

3-Wire Mode, iki yerine tek bir Arduino dijital I / O pinine tek bir bağlantıya ihtiyaç duyduğunuz bir şeydir. Bilmiyorsanız, harika paralaks ping))) sensör gibi yalnızca 3-Kablolu Modda çalışan birçok ultrasonik sensör vardır .

3-Kablolu modda tek I / O pini hem giriş hem de çıkış olarak kullanılır. Bu mümkündür çünkü hem giriş hem de çıkışın kullanıldığı bir zaman asla yoktur. Bir I / O pin gereksinimini ortadan kaldırarak, Arduino'muza bir bağlantı kaydedebilir ve başka bir şey için kullanabiliriz. Sınırlı sayıda I / O pinine sahip olan ATtiny85 gibi bir yonga kullanıldığında da yararlıdır.HC-SR04 sensörünü 3-Wire modunu kullanarak Arduino'ya nasıl bağlayabileceğiniz aşağıda açıklanmıştır.

HC-SR04 Ultrasonik Sensör ile Arduino Kablolama Fritzing 3 Kablolu Mod Bağlantıları
HC-SR04 Ultrasonik Sensörü Arduino UNO'ya Kablolama - 3 Kablolu Mod

Gördüğünüz gibi tek yapmanız gereken tetik ve ekoyu Arduino pin 9'a bağlamak. Çizimde yapmanız gereken tek farkın hem Tetik hem de Echo pin değerleri için pin 9'u tanımlamak olduğunu unutmayın. Eskizin geri kalanı aynı.

#define TRIGGER_PIN 9 // Trigger and Echo both on pin 9
#define ECHO_PIN 9

Doğruluk ve genel kullanışlılık açısından, HC-SR04 ultrasonik mesafe sensörü, özellikle diğer düşük maliyetli mesafe algılama sensörleriyle karşılaştırıldığında gerçekten harika. Bu, HC-SR04 sensörünün "her şeyi" ölçebildiği anlamına gelmez. Aşağıdaki şemalar, HC-SR04'ün ölçmek için tasarlanmadığı birkaç durumu gösterir:

a) Sensör ile nesne / engel arasındaki mesafe 13 fitten fazla.

HC-SR04 Sınırlama - 13 fitten fazla mesafe ölçülemez

b) Nesnenin yansıtıcı yüzeyi sığ bir açıyla vardır, böylece ses sensöre doğru geri yansımaz.

HC-SR04 Sınırlama - nesneyi sığ bir açıda algılayamaz

c) Nesne, sensöre yeterince ses yansıtamayacak kadar küçük. Ek olarak, HC-SR04 sensörünüz cihazınızın altına monte edilmişse, zeminden yansıyan sesi algılayabilirsiniz.

HC-SR04 Sınırlama - küçük nesneleri algılayamaz

d) Sensörle deney yaparken, yumuşak, düzensiz yüzeylere sahip bazı nesnelerin (doldurulmuş hayvanlar gibi) sesi yansıtmak yerine emdiğini ve bu nedenle HC-SR04 sensörünün algılamasının zor olabileceğini keşfettik.

HC-SR04 Sınırlama - yumuşak düzensiz yüzey nesnesini algılayamaz

Sıcaklığın Mesafe Ölçümüne Etkisi

HC-SR04, izinsiz giriş algılama veya yakınlık alarmları gibi projelerimizin çoğu için makul ölçüde doğru olsa da; Ancak, dışarıda veya alışılmadık derecede sıcak veya soğuk bir ortamda kullanılacak bir cihaz tasarlamak isteyebileceğiniz zamanlar vardır. Durum buysa, havadaki ses hızının sıcaklık, hava basıncı ve neme göre değiştiğini hesaba katmak isteyebilirsiniz.

Ses faktörlerinin hızı HC-SR04 mesafe hesaplamamıza girdiğinden, bu bizim okumalarımızı etkileyebilir. Sıcaklık (° C) ve Nem zaten biliniyorsa, aşağıdaki formülü göz önünde bulundurun:

Ses hızı m / s = 331.4 + (0.606 * Sıcaklık) + (0.0124 * Nem)

ANA SAYFAYA DÖN

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.

2 Mayıs 2021 Pazar

HC-SR04 Ultrasonik Sensör ve Arduino ile Mesafe Ölçme

 

HC-SR04 Ultrasonik Sensör ve Arduino ile Mesafe Ölçme


Bu eğitim, temassız mesafe ölçümü için Arduino ile HC-SR04 veya HY-SR05 Ultrasonik sensörlerin nasıl kullanılacağını gösterir.Bundan sonra, Ultrasonik sensör Arduino kütüphanesi olan veya olmayan örnek kodları göreceğiz. Öncelikle bir LED'i Arduino ve Ultrasonik sensör ile kontrol etmek için bir örnek göreceğiz. Daha sonra mesafe (cm) ölçüm değerini görüntülemek için 16 × 2 LCD kullanılacaktır. 
Arduino mesafe ölçümü ile HC-SR04

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.

HC-SR04 Ultrasonik Sensör Pinout şeması

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-SR04 ve nesne mesafe konumu

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

Ultrasonik sensör HC-SR04 çalışıyor
  • 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.

Zamanlama diyagramı HC-SR04

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.  

Arduino bağlantı şeması ile arayüz oluşturan HC-SR04 ultrasonik sensö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-SR04Arduino
Vcc+ 5V
GNDGND
TetikleyiciD9
EkoD11

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.

Arduino ile arayüz oluşturan HC-SR04 Ulrasonic Sensör ve LCD'de ekran mesafesi
16 × 2 LCDArduino
D4 - D79, 10, 11, 12
E7
RS4
VEEPOT (Orta Ayak)
VSSZemin
VDD+ 5V
D ++ 5V
D-Zemin

Arduino ve HC-SR04 ile bağlantılar:

HC-SR04Arduino
Vcc+ 5V
GNDGND
TetikleyiciD2
EkoD3

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ı

ANA SAYFAYA DÖN

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.