Arduino ve Ultrasonik Sensör ile Engelden Kaçan Robot Yapımı
Engelden kaçan robot, önündeki engeli otomatik olarak algılayabilen ve kendisini başka yöne çevirerek engelden kaçabilmektedir. Arduino ve ultrasonik sensör kullanarak yapacağımız bu proje hakkındaki detaylar yazımızın devamında.
12.10.2021 tarihli yazı 7847 kez okunmuştur.
Engelden Kaçmak İçin Ultrasonik Sensör Nasıl Kullanılır
Robotu yapmaya başlamadan önce ultrasonik sensörün nasıl çalıştığını anlamak önemlidir. Çünkü bu sensör engeli tespit etmek için önemli bir role sahiptir. Ultrasonik sensörün çalışmasındaki temel prensip, sensörün ultrasonik ışınları iletmek ve ultrasonik ışınları yüzeye çarptıktan sonra almak için geçen süreyi not etmektir. Daha sonra mesafe, formül kullanılarak hesaplanır. Bu projede, yaygın olarak kullanılan HC-SR04 Ultrasonik Sensör kullanılmıştır.
Böylece, HC-SR04’ün Trig pini en az 10us için yüksek yapılır. Her biri 40 KHz’lik 8 darbe ile bir sonik ışın iletilir.
Sinyal yüzeye çarpar ve geri döner. HC-SR04’ün alıcı pini olan Echo tarafından yakalanır.
Işının geri dönüş süresi değişken olarak kaydedilir ve aşağıdaki formül ile mesafe hesaplanır:
Mesafe= (Zaman x Havadaki Ses Hızı (343 m/s))/2
Mesafe= (Zaman x Havadaki Ses Hızı (343 m/s))/2
Kullanılan Malzemeler
► Arduino uno veya nano
► HC-SR04 Ultrasonik Sensör
► L298N Motor Sürücü
► 5V DC Motor
► Batarya
► Tekerler
► Şasi
► Jumper kablo
► HC-SR04 Ultrasonik Sensör
► L298N Motor Sürücü
► 5V DC Motor
► Batarya
► Tekerler
► Şasi
► Jumper kablo
Devre Şeması
Engelden Kaçan Robot için Arduino Kodu
HC-SR04’ün trig ve echo pinleri tanımlanır. Trig pini Arduino nano’nun GPIO9’a ve echo pini ise Arduino nano’nun GPIO10 pinine bağlanmıştır.
int trigPin = 9; // trig pin of HC-SR04
int echoPin = 10; // Echo pin of HC-SR04
L298N Motor Sürücüsü için giriş pinleri tanımlanır. L298N, kendisine bağlı motorun yönünü kontrol etmek için kullanılan 4 tane veri giriş pinine sahiptir.
int revleft4 = 4; //REVerse motion of Left motor
int fwdleft5 = 5; //ForWarD motion of Left motor
int revright6 = 6; //REVerse motion of Right motor
int fwdright7 = 7; //ForWarD motion of Right motor
int trigPin = 9; // trig pin of HC-SR04
int echoPin = 10; // Echo pin of HC-SR04
L298N Motor Sürücüsü için giriş pinleri tanımlanır. L298N, kendisine bağlı motorun yönünü kontrol etmek için kullanılan 4 tane veri giriş pinine sahiptir.
int revleft4 = 4; //REVerse motion of Left motor
int fwdleft5 = 5; //ForWarD motion of Left motor
int revright6 = 6; //REVerse motion of Right motor
int fwdright7 = 7; //ForWarD motion of Right motor
Setup() fonksiyonunda, kullanılan GPIO pinlerinin veri yönleri tanımlanır. Dört motor pini ve trig pini OUTPUT olarak tanımlanır ve echo pini INPUT olarak tanımlanır.
pinMode(revleft4, OUTPUT); // set Motor pins as output
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT);
pinMode(trigPin, OUTPUT); // set trig pin as output
pinMode(echoPin, INPUT); //set echo pin as input to capture reflected waves
loop fonksiyonunda, HC-SR04 ile hesaplanan mesafeye göre motor yönü ayarlanır. Mesafe, robotun önüne gelen nesne mesafesini gösterecektir.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // send waves for 10 us
delayMicroseconds(10);
duration = pulseIn(echoPin, HIGH); // receive reflected waves
distance = duration / 58.2; // convert to distance
delay(10);
Mesafe, tanımlanan mesafeden daha büyükse, yolunda hiçbir engel yoktur ve ileri yönde hareket edecektir.
if (distance > 19)
{
digitalWrite(fwdright7, HIGH); // move forward
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, HIGH);
digitalWrite(revleft4, LOW);
}
Mesafe, tanımlanan mesafeden daha az ise, ileride bir engel var demektir. Bu durumda robot bir süre duracak ve geriye doğru hareket edecek, daha sonra tekrar bir süre duracak ve sonra başka bir yöne dönecektir.
if (distance < 18)
{
digitalWrite(fwdright7, LOW); //Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(500);
digitalWrite(fwdright7, LOW); //movebackword
digitalWrite(revright6, HIGH);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, HIGH);
delay(500);
digitalWrite(fwdright7, LOW); //Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(100);
digitalWrite(fwdright7, HIGH);
digitalWrite(revright6, LOW);
digitalWrite(revleft4, LOW);
digitalWrite(fwdleft5, LOW);
delay(500);
}
Bu şekilde robot, yolundaki herhangi bir engele takılmadan hareket edecektir.
Kod:
int trigPin = 9; // trig pin of HC-SR04
int echoPin = 10; // Echo pin of HC-SR04
int revleft4 = 4; //REVerse motion of Left motor
int fwdleft5 = 5; //ForWarD motion of Left motor
int revright6 = 6; //REVerse motion of Right motor
int fwdright7 = 7; //ForWarD motion of Right motor
long duration, distance;
void setup() {
delay(random(500,2000)); // delay for random time
Serial.begin(9600);
pinMode(revleft4, OUTPUT); // set Motor pins as output
pinMode(fwdleft5, OUTPUT);
pinMode(revright6, OUTPUT);
pinMode(fwdright7, OUTPUT);
pinMode(trigPin, OUTPUT); // set trig pin as output
pinMode(echoPin, INPUT); //set echo pin as input to capture reflected waves
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // send waves for 10 us
delayMicroseconds(10);
duration = pulseIn(echoPin, HIGH); // receive reflected waves
distance = duration / 58.2; // convert to distance
delay(10);
// If you dont get proper movements of your robot then alter the pin numbers
if (distance > 19)
{
digitalWrite(fwdright7, HIGH); // move forward
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, HIGH);
digitalWrite(revleft4, LOW);
}
if (distance < 18)
{
digitalWrite(fwdright7, LOW); //Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(500);
digitalWrite(fwdright7, LOW); //movebackword
digitalWrite(revright6, HIGH);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, HIGH);
delay(500);
digitalWrite(fwdright7, LOW); //Stop
digitalWrite(revright6, LOW);
digitalWrite(fwdleft5, LOW);
digitalWrite(revleft4, LOW);
delay(100);
digitalWrite(fwdright7, HIGH);
digitalWrite(revright6, LOW);
digitalWrite(revleft4, LOW);
digitalWrite(fwdleft5, LOW);
delay(500);
}
}
Kaynaklar:
►arduino.cc/en/reference/wire
►dronebotworkshop.com/i2c-arduino-arduino/
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
ANKET