Merhaba arkadaşlar. Bu yazımızda “Engelden Kaçan Robot nedir, nasıl yapılır?” konularından bahsedeceğiz.

Engelden kaçan robotu yap, sonra çizgi izleyeni de yapmanı tavsiye ederiz 🙂 >>>>Çizgi İzleyen Robot Yap!

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. Gelin önce malzemelere göz atalım.

Gerekli Malzemeler

Engelden Kaçan Robot Devresi

 

Fritzing Engelden Kaçan Robot Devresi

Ultrasonik Sensörün Çalışma Prensibi

Ultrasonik Sensör Çalışma Prensibi

Ultrasonik sensörün çalışma prensibinden bahsettiğimiz videomuza buradan göz atabilirsiniz.

Robotun Gövdesi

Robotumuzun gövde montajını daha önceden yaptığımız Çizgi İzleyen Robot uygulamasında bulabilirsiniz. Yaptığımız robotun gövdesi aynı olup sadece kullanılan sensörler değişmiştir.

Projemizin son hali şekilde gibidir.

 

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 :

Engelden Kaçan Robot Algoritması

Bu algoritmayı Arduino’da yazalım 🙂

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,
  {
    go_backward();  // 150 ms geri git
    delay(150);
    turn_right();  // 250 ms sağa dön
    delay(250);
  }
  else {  // değil ise,
    go_forward(); // ileri git
  }

}



void motor_left(String dir, int spd) // sol motor kontrolü
{ // yön(dir) ve hız(spd) için değişkenler.
  if ( dir == "FORWARD")             // FORWARD komutu ileri hareket için.
  {
    digitalWrite(MotorL1, LOW);
    digitalWrite(MotorL2, HIGH);
    analogWrite(MotorLE, spd);
  }

  if ( dir == "BACKWARD")           //BACKWARD komutu geriye hareket için.
  {
    digitalWrite(MotorL1, HIGH);
    digitalWrite(MotorL2, LOW);
    analogWrite(MotorLE, spd);
  }

}
void motor_right(String dir, int spd)// sağ motor kontrolü
{ // yön(dir) ve hız(spd) için değişkenler.
  if ( dir == "FORWARD")             // FORWARD komutu ileri hareket için.
  {
    digitalWrite(MotorR1, HIGH);
    digitalWrite(MotorR2, LOW);
    analogWrite(MotorRE, spd);
  }

  if ( dir == "BACKWARD")           //BACKWARD komutu geriye hareket için.
  {
    digitalWrite(MotorR1, LOW);
    digitalWrite(MotorR2, HIGH);
    analogWrite(MotorRE, spd);
  }
}

void go_forward() // Robot ileri gitsin.
{
  motor_right("FORWARD", 200); // Sağ ve sol motorlar ileri yönde 200 hızında
  motor_left("FORWARD", 200);
}
void turn_right() // Robot sağa dönsün.
{
  motor_right("BACKWARD", 200); //Sağ motor 200 hızında geri
  motor_left("FORWARD", 200); //Sol motor 200 hızında ileri
}

void go_backward() // Robot geri gitsin.
{
  motor_right("BACKWARD", 200); //Sağ motor 200 hızında geri
  motor_left("BACKWARD", 200); //Sol motor 200 hızında geri
}

Bir robot uygulamamızın daha sonuna geldik. Bir başka projede görüşmek üzere, takipte kalın 🙂

8 Yorumlar

  1. sitenizden satın aldığım arduino uyumlu nrf24l01 +pa ile arabya doğru şekilde bağlantı yaptım ama yazdığım kod ile test ettiğimde transmitterin çalışmadığını söylüyor bana yardımcı olrmusunuz …

    • NRF24L01 ile uzaktan kontrol uygulamamıza buradan göz atabilirsiniz. Yazdığınız kodun amacını bilmediğimden net bir yorum yapamıyorum fakat uygulamamıza göz attıktan sonra yazılımınızı kontrol edebilirsiniz.

  2. Merhabalar engelden kaçan robot yapımı için tüm parçaları sitenizden temin ettim ancak robotu çalıştırdığımda engelleri algılamıyor? Herşeyi doğru yaptığımı düşünüyorum yardımcı olabilir misiniz?

    • Merhaba. Arduino IDE’nin sağ üst kısmında bulunan “Seri Port Ekranı”nı kontrol ettiniz mi? Ultrasonik sensörü robottan söküp ayrı bir devrede test edebilir misiniz?

    • Stoklarla ilgili bilgi almak için destek@robotistan.com adresimizden bilgi alabilirsiniz. Stokta olmayan ürünlerde yandaki “Stoklara Düşünce Haber Ver” kısmına tıklayarak stok bilgilerini takip edebilirsiniz.
      4 motora sahip robot kullanmak istiyor ve aynı programdan faydalanmak istiyorsanız aynı taraftaki motorları paralel bağlamanız gerekir. Yani sağ ön motor ile sağ arka motor, sol ön motor ile sol arka motor paralel bağlanmalıdır.

CEVAP VER