Arduino Projeleri
#13Gelişmiş

Engelden Kaçan Robot

~2 saatTemel motor sürücü bilgisi

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 PiniBağ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

arduino-13-engelden-kacan-robot.ino
1#include <Servo.h>
2Servo tarayici;
3const int TRIG=9, ECHO=10;
4const int IN1=5, IN2=6, IN3=7, IN4=8;
5
6void 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
15long 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}
21void ileri(){ digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
22void geri(){ digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); }
23void sagaDon(){ digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH); }
24void solaDon(){ digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW); }
25void dur(){ digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);digitalWrite(IN3,LOW);digitalWrite(IN4,LOW); }
26
27void 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).

Bu projenin kodunu AI ile özelleştir

Farklı pin, ek özellik ya da başka bir sensör mü istiyorsun?