Engelden kaçan robot, 2WD şasi, iki DC motor, L298N motor sürücü, HC-SR04 mesafe sensörü ve Arduino ile yapılır. Robot ileri giderken önündeki mesafeyi sürekli ölçer. Mesafe 25 cm'nin altına düşünce durur, biraz geri gider, sağa ve sola bakar ve daha boş olan tarafa dönerek yoluna devam eder.
Engelden kaçan robot, robotiğe başlayan öğrencilerin en sevdiği projelerden biridir. Bu yazıda iki tekerlekli (2WD) bir şasi, L298N motor sürücü ve HC-SR04 mesafe sensörüyle kendi yolunu bulan bir robot yapıyoruz. Bağlantıları, karar mantığını ve hazır kodu adım adım anlatıyoruz. Sensörü servo üzerine koyarak robotun sağa sola bakmasını da sağlıyoruz.
Engelden kaçan robot nedir?
Engelden kaçan robot, önündeki engelleri bir sensörle algılayıp çarpmadan yön değiştiren otonom bir araçtır. Otonom, insan kumandası olmadan kendi kararını veren demektir. Robot sürekli üç işi tekrarlar: algılar, karar verir ve hareket eder. Robot süpürgeler de engelleri benzer bir mantıkla algılar.
Robotumuzda HC-SR04 sensörü algılar, Arduino Uno karar verir, L298N sürücü de motorları döndürür. Arduino'nun pinleri motor çalıştıracak kadar akım veremez. L298N bu yüzden Arduino'dan gelen küçük sinyalleri motorlar için güçlü akıma çevirir.
Hangi malzemeler gerekir?
Engelden kaçan robot için 2WD şasi kiti, L298N motor sürücü, HC-SR04 sensör, SG90 servo, Arduino Uno ve iki 18650 pilli bir pil kutusu gerekir.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| 2WD araç seti (şasi, motorlar, tekerlekler) | 1 | Robotun gövdesi ve hareket sistemi |
| L298N çift motor sürücü kartı | 1 | İki motorun yönünü ve hızını kontrol eder |
| HC-SR04 ultrasonik mesafe sensörü | 1 | Öndeki engelin mesafesini ölçer |
| SG90 mini servo motor | 1 | İsteğe bağlı; sensörü sağa ve sola çevirir |
| Arduino UNO R3 | 1 | Mesafeyi okur, nereye gideceğine karar verir |
| 18650 ikili pil yuvası, anahtarlı | 1 | Motorları ve Arduino'yu besler; anahtarla açılır |
Kitin tam içeriği ürün sayfasında yazar. Ayrıca iki adet koruma devreli 18650 pil, uygun bir şarj cihazı ve erkek-dişi jumper kablo gerekir.
Robot nasıl bağlanır?
Robot, motorlar L298N'ye, L298N'nin kontrol pinleri Arduino'ya, sensör ve servo da Arduino'nun 5V hattına bağlanarak kurulur. Bağlantıyı yaparken pil kutusunun anahtarı kapalı olsun.
| Parça ucu | Arduino pini | Görevi |
|---|---|---|
| L298N ENA / IN1 / IN2 | D5 / D2 / D3 | Sol motorun hızı ve yönü |
| L298N ENB / IN3 / IN4 | D6 / D4 / D7 | Sağ motorun hızı ve yönü |
| HC-SR04 Trig / Echo | A0 / A1 | Ses dalgası gönderir / yankıyı alır |
| Servo sinyal (turuncu) | D9 | Sensörü 30°, 90° ve 150°'ye çevirir |
| HC-SR04 ve servo VCC / GND | 5V / GND | Besleme |
| Pil (+) anahtardan sonra | VIN ve L298N 12V girişi | Arduino ve motor beslemesi |
| Pil (−) | GND ve L298N GND | Ortak toprak |
- Motorları ve tekerlekleri şasiye kitin talimatına göre takın. Sol motoru L298N'nin OUT1-OUT2, sağ motoru OUT3-OUT4 klemensine bağlayın.
- L298N üzerindeki ENA ve ENB jumper'larını çıkarın; bu pinler hız için Arduino'ya bağlanacak.
- Kontrol pinlerini tablodaki gibi Arduino'ya bağlayın.
- HC-SR04'ü servo koluna yapıştırın ve servoyu şasinin önüne sabitleyin. Sensör ve servo kablolarını bağlayın.
- Pil kutusunun artısını L298N'nin 12V girişine ve Arduino'nun VIN pinine, eksisini L298N GND'sine ve Arduino GND'sine bağlayın.
- Kodu USB ile yükleyin, USB'yi çıkarın, robotu yere koyup anahtarı açın.
Bir tekerlek ters dönüyorsa o motorun iki kablosunu klemenste yer değiştirin. Sürücünün ayrıntıları L298N motor sürücü yazısında.
Robot nasıl karar verir?
Robot, önündeki mesafe 25 cm'den büyükse ileri gider; küçükse durur, 0,3 saniye geri gider, sağa ve sola bakar ve daha boş olan tarafa döner. İki taraf da kapalıysa yaklaşık yarım tur dönerek geri döner. Bu mantık aşağıdaki kodda loop() içinde yazılıdır.
- Mesafe 25 cm'den büyükse iki motor ileri döner.
- Değilse robot durur ve 300 ms geri gider.
- Servo sensörü 30°'ye (sağ) ve 150°'ye (sol) çevirir, iki mesafeyi ölçer.
- İki taraf da 25 cm'den yakınsa robot 800 ms dönerek geri döner.
- Değilse daha uzak ölçülen tarafa 400 ms döner.
#include <Servo.h>
const byte ENA = 5, IN1 = 2, IN2 = 3; // sol motor
const byte ENB = 6, IN3 = 4, IN4 = 7; // sağ motor
const byte TRIG = A0, ECHO = A1;
const int ESIK = 25; // cm: bundan yakınsa engel var
const int HIZ = 180; // 0-255 arası PWM
Servo kafa;
const byte cikis[] = {ENA, IN1, IN2, ENB, IN3, IN4, TRIG};
long mesafe() {
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long sure = pulseIn(ECHO, HIGH, 30000);
return sure == 0 ? 400 : sure / 58;
}
// sol, sag: 1 = ileri, -1 = geri, 0 = dur
void sur(int sol, int sag) {
digitalWrite(IN1, sol > 0); digitalWrite(IN2, sol < 0);
digitalWrite(IN3, sag > 0); digitalWrite(IN4, sag < 0);
analogWrite(ENA, HIZ); analogWrite(ENB, HIZ);
}
long bak(int aci) {
kafa.write(aci);
delay(400);
return mesafe();
}
void setup() {
for (byte i = 0; i < 7; i++) pinMode(cikis[i], OUTPUT);
pinMode(ECHO, INPUT);
kafa.attach(9);
kafa.write(90);
delay(1000);
}
void loop() {
if (mesafe() > ESIK) { sur(1, 1); delay(50); return; }
sur(0, 0); delay(200);
sur(-1, -1); delay(300); // biraz geri
sur(0, 0);
long sag = bak(30), sol = bak(150);
kafa.write(90); delay(300);
if (sag < ESIK && sol < ESIK) { sur(1, -1); delay(800); } // geri dön
else if (sag >= sol) { sur(1, -1); delay(400); } // sağa dön
else { sur(-1, 1); delay(400); } // sola dön
sur(0, 0);
}
sur() işlevi iki motorun yönünü belirler. Robotu sağa döndürmek için sol tekerlek ileri, sağ tekerlek geri döner; robot olduğu yerde döner. Servo kütüphanesi Arduino Uno'da D9 ve D10'un PWM özelliğini kapatır; bu yüzden hız pinleri olarak D5 ve D6 seçildi. Servo 30°'de sola bakıyorsa koddaki 30 ve 150 değerlerini yer değiştirin. Dönüş süreleri (400 ve 800 ms) motor hızına göre değişir; robotunuzu deneyerek ayarlayın.
Servo kullanmayacaksanız sensörü şasinin önüne sabitleyin. Bu durumda robot engel gördüğünde hep aynı yöne (örneğin sağa) dönebilir.
Hangi güvenlik kurallarına dikkat edilmeli?
Robot 18650 lityum iyon pille çalıştığı için pil güvenliğine özellikle dikkat edin:
- Robotu yalnızca pille çalıştırın. 220V şebeke elektriğine hiçbir parça bağlamayın.
- Pilleri bir yetişkinin gözetiminde, 18650'ye uygun bir şarj cihazıyla şarj edin. Şarj olan pili gözetimsiz bırakmayın.
- Koruma devreli pil kullanın. Pilleri ters takmayın; pilin iki ucunu metal bir eşyayla birleştirmeyin, kısa devre yangına yol açabilir.
- Ezilmiş, şişmiş, kılıfı yırtılmış ya da ısınan pili kullanmayın ve çöpe atmayın; pil toplama kutusuna verin.
- Robot çalışmıyorken anahtarı kapatın. Kablolara ve motorlara dönerken dokunmayın.
Lityum iyon pillerin ayrıntıları 18650 Li-ion pil rehberi yazısında. 18650 kullanmak istemezseniz 4 kalem pil (6 V) de kullanabilirsiniz; L298N yaklaşık 2 V kaybettirdiği için robot daha yavaş gider.
Ödevinizi nasıl sunarsınız?
Ödevinizi, robotu küçük bir labirentte çalıştırıp karar mantığını bir akış şemasıyla açıklayarak sunabilirsiniz.
- Akış şeması: "Ölç → 25 cm'den büyük mü? → evet: ileri, hayır: dur, geri, bak, dön" adımlarını kutu ve oklarla çizin.
- Deney 1: Eşiği 15, 25 ve 40 cm yapın. Her birinde robotun labirentten kaç saniyede çıktığını ve kaç kez çarptığını yazın.
- Deney 2: Aynı parkuru servolu ve servosuz deneyin. Hangisinin daha az takıldığını karşılaştırın.
- Gözlem: Robotun yumuşak (kumaş) ve sert (kitap) engellere tepkisini karşılaştırın; ses dalgasının yansımasını anlatın.
Labirenti kitaplar ve karton kutularla kurabilirsiniz. Benzer robot projelerine çizgi izleyen robot yazısından, kitlere robotik ürünler ve kitler kategorisinden bakabilirsiniz.
Sık sorulan sorular
Robot neden yerinde dönüyor ya da geri gidiyor?
Robot yerinde dönüyorsa motorlardan birinin kabloları ters bağlanmıştır; ileri komutunda o tekerlek geri döner. Önce robotu havaya kaldırıp ileri komutunda iki tekerleğin de aynı yöne döndüğünü kontrol edin. Ters dönen motorun iki kablosunu L298N klemensinde yer değiştirin. İki motor da ters dönüyorsa robot geri gider; o zaman iki motorun kablolarını da değiştirin.
L298N yerine başka sürücü kullanılabilir mi?
Evet, L9110 ya da TB6612 gibi başka çift motor sürücüler de kullanılabilir. TB6612 daha az gerilim kaybettirir ve daha az ısınır. L298N ise öğrenci projelerinde en yaygın sürücüdür, klemensli olduğu için bağlaması kolaydır ve örnek kodu boldur. Başka bir sürücü seçerseniz pin adlarını ve kodu o sürücüye göre değiştirmeniz gerekir.
Servo olmadan robot çalışır mı?
Evet, servo olmadan da robot çalışır; sensör şasinin önüne sabitlenir. Bu durumda robot engeli görünce hep aynı yöne döner ya da rastgele bir yön seçer. Servolu robot iki tarafı ölçüp boş olanı seçtiği için dar yerlerde daha az takılır. Başlangıçta servosuz yapıp sonra servo eklemek, ödevinizde iki yöntemi karşılaştırma fırsatı verir.
Robot neden engele çarpıyor?
Robot genellikle çok hızlı gittiği ya da sensör engeli göremediği için çarpar. Hızı düşürün (koddaki HIZ değeri) ya da eşiği büyütün. HC-SR04 ince sandalye ayaklarını, yumuşak kumaşı ve sensöre eğik duran yüzeyleri iyi göremeyebilir. Sensör yalnızca önündeki dar bir koniyi görür; robotun köşesi yandaki engele takılabilir. Sensörü şasinin tam ortasına yerleştirin.
Robota hangi pil uygundur?
Bu robot için koruma devreli iki 18650 Li-ion pil ya da 4 kalem pil uygundur. İki 18650 seri bağlanınca yaklaşık 7,4 V verir; L298N'den sonra motorlara yeterli gerilim kalır. Kalem pillerle robot daha yavaş gider ama daha güvenlidir. 9 V pil motorlar için uygun değildir, çünkü yüksek akım veremez ve çabuk biter.
Özet
- Engelden kaçan robot algılar, karar verir ve hareket eder.
- HC-SR04 mesafeyi ölçer, Arduino karar verir, L298N motorları sürer.
- Bağlantı: ENA D5, IN1 D2, IN2 D3, ENB D6, IN3 D4, IN4 D7, Trig A0, Echo A1, servo D9.
- Mesafe 25 cm'nin altına düşünce robot durur, geri gider, bakar ve boş tarafa döner.
- 18650 pilleri yetişkin gözetiminde şarj edin; kısa devre ve hasarlı pilden kaçının.
- Ödevde eşik mesafesi ve servolu-servosuz yapıyı labirentte karşılaştırın.
