Engelden Kaçan Robot
Proje Amacı
Önündeki engelleri ultrasonik sensörle algılayıp geri çekilip yön değiştiren bir robot yapar — kod bilinçli olarak basit tutuldu, servo ile taramalı algılama bir sonraki geliştirme adımı olarak notlarda bırakıldı.
Gerekli Malzemeler
- Arduino Uno
- HC-SR04
- SG90 Servo (sensör döndürme için)
- L298N Motor Sürücü
- 2x DC Motor + Tekerlek
- Kaide/Şasi
Gerekli Kütüphaneler
Servo — Arduino IDE ile birlikte gelir, ekstra kurulum gerekmez.
Pin Bağlantıları
| Bileşen Pini | Bağlantı |
|---|---|
| HC-SR04 TRIG | D9 |
| HC-SR04 ECHO | D10 |
| Servo Sinyal | D11 |
| L298N IN1 | D5 |
| L298N IN2 | D6 |
| L298N IN3 | D7 |
| L298N IN4 | D8 |
Devre Şeması
Arduino Kodu
| 1 | #include <Servo.h> |
| 2 | Servo tarayici; |
| 3 | const int TRIG=9, ECHO=10; |
| 4 | const int IN1=5, IN2=6, IN3=7, IN4=8; |
| 5 | |
| 6 | void setup(){ |
| 7 | tarayici.attach(11); |
| 8 | pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT); |
| 9 | pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); |
| 10 | pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); |
| 11 | tarayici.write(90); |
| 12 | delay(300); |
| 13 | } |
| 14 | |
| 15 | long mesafeOlc(){ |
| 16 | digitalWrite(TRIG,LOW); delayMicroseconds(2); |
| 17 | digitalWrite(TRIG,HIGH); delayMicroseconds(10); digitalWrite(TRIG,LOW); |
| 18 | long t=pulseIn(ECHO,HIGH,30000); |
| 19 | return t*0.0343/2.0; |
| 20 | } |
| 21 | void ileri(){ digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); } |
| 22 | void geri(){ digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); } |
| 23 | void sagaDon(){ digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); } |
| 24 | void solaDon(){ digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); } |
| 25 | void dur(){ digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,LOW); } |
| 26 | |
| 27 | void loop(){ |
| 28 | long onMesafe=mesafeOlc(); |
| 29 | if(onMesafe>0 && onMesafe<20){ |
| 30 | dur(); |
| 31 | geri(); delay(300); dur(); |
| 32 | |
| 33 | tarayici.write(150); delay(400); |
| 34 | long sagMesafe=mesafeOlc(); |
| 35 | |
| 36 | tarayici.write(30); delay(600); |
| 37 | long solMesafe=mesafeOlc(); |
| 38 | |
| 39 | tarayici.write(90); delay(300); |
| 40 | |
| 41 | if(sagMesafe>solMesafe){ sagaDon(); } else { solaDon(); } |
| 42 | delay(400); |
| 43 | dur(); |
| 44 | } else { |
| 45 | ileri(); |
| 46 | } |
| 47 | } |
Çalışma Açıklaması
Bu basit versiyonda sensör sabit yöne bakar; servo eklenip sağa-sola taratılarak daha akıllı yön seçimi yapılabilir (kodda servo tanımlı ama örnek akışta kullanılmadı, geliştirme fikri olarak bırakılmıştır).
Test Bilgisi
Robotu çalıştırın, önüne bir engel (kutu, el) koyun. Robotun engeli algılayıp geri gidip döndüğünü, sonra farklı yöne devam ettiğini gözlemleyin.
Olası Sorunlar ve Çözümleri
Robot engellere çarpıyorsa: mesafeOlc() fonksiyonunun doğru çalıştığını Seri Monitör'den ayrıca test edin, algılama eşiğini (20cm) artırın. Robot sürekli aynı yöne dönüyorsa: servo ile sağ-sol tarama ekleyip en açık yönü seçen bir mantık kurun (kod bu yönde geliştirilebilir). Motorlar dengesiz dönüyorsa: iki motorun da aynı voltaj/hızda çalıştığını kontrol edin, gerekirse PWM ile hız dengelemesi yapın.
Alternatif Çözümler
Tek sabit yönlü sensör yerine servo üzerine monte edilmiş HC-SR04 ile 180° tarama yaparak en uygun kaçış yönü akıllıca seçilebilir. Ultrasonik sensör yerine birden fazla IR mesafe sensörü 360° yerleştirilerek çok yönlü algılama sağlanabilir. Basit 'geri-dön' mantığı yerine bir haritalama/SLAM algoritmasına doğru genişletilebilir (ileri seviye).
Benzer Projeler
Çizgi İzleyen Robot
Zemin üzerindeki siyah bir çizgiyi 2 IR sensörle takip ederek otonom hareket eden bir robot yapar; iki sensörün ürettiği 4 olası HIGH/LOW kombinasyonu robotun tüm yön kararlarını belirler.
Bluetooth Kontrollü Araba
Telefondaki bir Bluetooth uygulamasından gelen tek karakterlik komutlarla (F/B/L/R/S) 2 tekerlekli bir robotu yönlendirir — HC-05'in 3.3V mantık seviyesi burada gerçek bir tuzak barındırır (bkz. Çalışma Açıklaması).
Parmak İzi ile Kapı Kilidi
R307 parmak izi sensörüyle önceden kaydedilmiş bir parmak izini tanıyıp doğrulandığında servo ile kilidi açar; tanıma işlemi sensörün kendi üzerinde yapılır, Arduino sadece sonucu okuyup kilide iletir.