Bu projemizde Arduino Uno kartına bağlanan Ultrasonik Mesafe sensörünü kullanarak Engelden Kaçana Robot yapılacaktır. Sağ, sol ve ileri yönlerinin kontrolü için 3 adet Ultrasonik Mesafe Sensörü kullanmak yerine 1 adet Ultrasonik Mesafe Sensörünü Servo Motora bağlıyoruz. Böylece engel algılandığı zaman Servo'nun hareketleriyle yön belirleme yapılacaktır. Proje için kullanacağımız malzemeler:
Arduino UNO
2WD Robot Araba Kiti
9V Pil
L298N Motor Sürücü
2 Adet DC Motor
1 Adet Servo Motor
HC-SR04
Jumper Kablolar
Devre şeması aşağıdaki gibi verilmiştir.

Öncelikle DC Motor pinlerini ve HC-SR04'ün pinlerini tanımlayarak kodlamaya başlıyoruz.
#define in1 2
#define in2 4
#define enA 10
#define in3 6
#define in4 5
#define enB 9
#define trig 13
#define echo 12
#define max_mesafe 100
Kullanacağımız birimleri tanımlıyoruz.
Servo servo;
NewPing dalga(trig, echo, max_mesafe);
unsigned int uzaklik;
unsigned int on_uzaklik;
unsigned int sol_uzaklik;
unsigned int sag_uzaklik;
unsigned int zaman;
void setup() içerisinde pinlerin modunu tanımlıyoruz ve Servo'nun bağlı olduğu pini belirtiyoruz.
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
servo.attach(8);
void loop() içerisinde fonksiyon basamaklarını yazıyoruz. Robotun hızını belirliyoruz.
digitalWrite(enA, 2);
digitalWrite(enB, 2);
Uzaklık mesafesini ayarlayarak robotun hareketlerini uzaklığa göre kodluyoruz.
servo.write(90);
sensor_olcum();
on_uzaklik = uzaklik;
if (on_uzaklik > 25 || on_uzaklik == 0)
{
ileri();
}
İleri, geri, sağ, sol ve dur fonksiyonlarını yaratıyoruz.
void ileri()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(200);
}
Sensörün ölçümü ve hareketiyle ilgili yazmamız gereken fonksiyonu yazıyoruz.
void sensor_olcum()
{
delay(50);
zaman = dalga.ping();
uzaklik = zaman / US_ROUNDTRIP_CM;
}
Kodların tamamı aşağıda verilmiştir.
#include <NewPing.h>
#include <Servo.h>
#define in1 2
#define in2 4
#define enA 10
#define in3 6
#define in4 5
#define enB 9
#define trig 13
#define echo 12
#define max_mesafe 100
Servo servo;
NewPing dalga(trig, echo, max_mesafe);
unsigned int uzaklik;
unsigned int on_uzaklik;
unsigned int sol_uzaklik;
unsigned int sag_uzaklik;
unsigned int zaman;
void setup() {
// put your setup code here, to run once:
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
servo.attach(8);
}
void loop() {
delay(500);
digitalWrite(enA, 2);
digitalWrite(enB, 2);
servo.write(90);
sensor_olcum();
on_uzaklik = uzaklik;
if (on_uzaklik > 25 || on_uzaklik == 0)
{
ileri();
}
else
{
dur();
servo.write(180);
delay(500);
sensor_olcum();
sol_uzaklik = uzaklik;
servo.write(0);
delay(500);
sensor_olcum();
sag_uzaklik = uzaklik;
servo.write(90);
delay(300);
if (sag_uzaklik > sol_uzaklik)
{
sag();
delay(200);
ileri();
}
else if (sol_uzaklik > sag_uzaklik)
{
sol();
delay(200);
ileri();
}
if (sol_uzaklik = sag_uzaklik)
{
geri();
}
}
}
void ileri()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(200);
}
void geri()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(200);
}
void sol()
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(200);
}
void sag()
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(200);
}
void dur()
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(200);
}
void sensor_olcum()
{
delay(50);
zaman = dalga.ping();
uzaklik = zaman / US_ROUNDTRIP_CM;
}

Servo motor nereye bağlanıcak şemada gözükmüyor