Engelden Kaçan Robot

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;
}


Son Paylaşımlar