Arduino ile Engelden Kaçan Robot Yapımı
> Blog > Arduino > Arduino ile Engelden Kaçan Robot Yapımı
Arama
14.09.2021
Arduino ile Engelden Kaçan Robot Yapımı

Engelden Kaçan Robot Nedir?

Engelden kaçan robot, diğer adıyla engel algılayan robot, otonom olarak çevre kontrolü yapabilen ve hareketini önleyebilecek cisimleri atlatabilen robot tipidir.

Çevre kontrolünü sağlayabilmesi için ultrasonik, kızılötesi vb. gibi çeşitli sensörlere ihtiyaç duyar.

Arduino ile Engelden Kaçan Robot Yapımı

Ultrasonik sensör ile karşılaştığımız engelleri algılayıp buna göre yön değiştiren bir robot yapacağız.

Robotumuzun hızını ve yönünü bir motor sürücü ile kontrol edeceğiz.

Gerekli Malzemeler

  1. Arduino Uno
  2. Çok Amaçlı Robot Platformu (Biz Platforma kitini kullandık. Dilerseniz bu kiti de kullanabilirsiniz.)
  3. L298N Voltaj Regulatörlü Çift Motor Sürücü Kartı
  4. HC-SR04 Ultrasonik Mesafe Sensörü
  5. Pil
  6. 6’lı AA Pil Yuvası
  7. Jumper

 

Algoritma

Robotumuzu kodlamaya başlamadan önce hangi işlemleri takip edeceğimizi bilmemiz gerekiyor. Temel amacımız robotun bir engele takılmaması olacaktır. Örnek olarak geniş bir zeminde engelle karşılaştığında sağ yöne hamle yapan bir robotun temel algoritmasını göstermek istiyorum :

 

Arduino Kodları

#define echoPin 12 //Ultrasonik sensörün echo pini Arduino'nun 12.pinine

#define trigPin 13 //Ultrasonik sensörün trig pini Arduino'nun 13.pinine tanımlandı.

#define MotorR1 7

#define MotorR2 6

#define MotorRE 9  // Motor pinlerini tanımlıyoruz.

#define MotorL1 5

#define MotorL2 4

#define MotorLE 3

 

long sure, uzaklik; //süre ve uzaklık diye iki değişken tanımlıyoruz.

void setup() {

  // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış),

  // bu dalgaları Echo pini ile geri aldığı için INPUT (Giriş) olarak tanımlanır.

  pinMode(echoPin, INPUT);

  pinMode(trigPin, OUTPUT);

 

  pinMode(MotorL1, OUTPUT);

  pinMode(MotorL2, OUTPUT);

  pinMode(MotorLE, OUTPUT); //Motorlarımızı çıkış olarak tanımlıyoruz.

  pinMode(MotorR1, OUTPUT);

  pinMode(MotorR2, OUTPUT);

  pinMode(MotorRE, OUTPUT);

  Serial.begin(9600);

 

}

 

void loop() {

  digitalWrite(trigPin, LOW); //sensör pasif hale getirildi

  delayMicroseconds(5);

  digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi

 

  sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor

  uzaklik = sure / 29.1 / 2; //ölçülen süre uzaklığa çevriliyor

  Serial.println(uzaklik);

  if (uzaklik < 15) // Uzaklık 15'den küçük ise,

  {

    geri();  // 150 ms geri git

    delay(150);

    sag();  // 250 ms sağa dön

    delay(250);

  }

  else {  // değil ise,

    ileri(); // ileri git

  }

}

void ileri(){  // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.

 

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif

  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif

  analogWrite(MotorRE, 150); // Sağ motorun hızı 150

 

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif

  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif

  analogWrite(MotorLE, 150); // Sol motorun hızı 150

}

 

 

void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.

 

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif

  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif

  analogWrite(MotorRE, 0); // Sağ motorun hızı 0 (Motor duruyor)

 

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif

  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif

  analogWrite(MotorLE, 150); // Sol motorun hızı 150

}

void geri(){ // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif

  digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif

  analogWrite(MotorRE, 150); // Sağ motorun hızı 150

 

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif

  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif

  analogWrite(MotorLE, 150); // Sol motorun hızı 150

}