Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Robotik

Engelden Kaçan Robot Yapımı: Arduino, L298N, HC-SR04

Engelden Kaçan Robot Yapımı: Arduino, L298N, HC-SR04
Kısa cevap

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

MalzemeAdetNe işe yarar?
2WD araç seti (şasi, motorlar, tekerlekler)1Robotun 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 motor1İsteğe bağlı; sensörü sağa ve sola çevirir
Arduino UNO R31Mesafeyi okur, nereye gideceğine karar verir
18650 ikili pil yuvası, anahtarlı1Motorları 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 ucuArduino piniGörevi
L298N ENA / IN1 / IN2D5 / D2 / D3Sol motorun hızı ve yönü
L298N ENB / IN3 / IN4D6 / D4 / D7Sağ motorun hızı ve yönü
HC-SR04 Trig / EchoA0 / A1Ses dalgası gönderir / yankıyı alır
Servo sinyal (turuncu)D9Sensörü 30°, 90° ve 150°'ye çevirir
HC-SR04 ve servo VCC / GND5V / GNDBesleme
Pil (+) anahtardan sonraVIN ve L298N 12V girişiArduino ve motor beslemesi
Pil (−)GND ve L298N GNDOrtak toprak
  1. 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.
  2. L298N üzerindeki ENA ve ENB jumper'larını çıkarın; bu pinler hız için Arduino'ya bağlanacak.
  3. Kontrol pinlerini tablodaki gibi Arduino'ya bağlayın.
  4. HC-SR04'ü servo koluna yapıştırın ve servoyu şasinin önüne sabitleyin. Sensör ve servo kablolarını bağlayın.
  5. 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.
  6. 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.
Engelden kaçan robot karar akış şeması: robot öndeki mesafeyi ölçer, 25 cm'den büyükse ileri gider; değilse durur, 300 ms geri gider, servoyu 30° ve 150° açılarına çevirip sağ ve sol mesafeyi ölçer; iki taraf da 25 cm'den yakınsa 800 ms dönerek geri döner, değilse daha uzak tarafa 400 ms döner; pinler ENA D5, IN1 D2, IN2 D3, ENB D6, IN3 D4, IN4 D7, Trig A0, Echo A1, servo D9
Robot 25 cm'den yakın engelde durur, geri gider, iki yana bakar ve daha boş olan tarafa 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.

Bu yazıdaki ürünler

Diğer yazılar