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.

Proje hakkında yorumlarınızı aşağıdaki ‘Yorumlar’ kısmında bizimle paylaşabilirsiniz.

Siz de yaptığınız projeleri Twitter ve Instagram üzerinden #Robotistan hashtagi ile bizimle paylaşın, projenizi hesabımızda paylaşalım !

Twitter ve Instagram Hesaplarımız: @Robotistan

 

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,
  {
    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
  
}

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

22 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.

    • Projemizdeki tüm malzemelerin bulunduğu bir kit mevcut değil. Bu işlemi yapabilecek tüm malzemelerin bulunduğu bir robot kiti arıyorsanız sitemizde bulabilirsiniz.

    • Motorların ikisi de çalışıyor ve iki motor da ileri-geri hareket edebiliyorlar ise sürücüde sorun yoktur. Robota sadece “ileri git” veya sadece “geri git” gibi komutlar verip hamlelerini test edebilirsiniz. Bu testi gibi “sağa dön” ve “sola dön” komutları vererek de yapabilirsiniz. Bu şekilde motordaki ileri ve geri yönleri anlaşılır. Eğer motorlar doğru yönde dönüyorlarsa ve robotu yere koyduğunuzda hafif yalpalayarak gidiyorsa motor ile tekerlekler tam oturmamış olabilir.

  3. 6 tane kalem pili belirtildigi sekilde bagladim. Hersey calisiyor ama motorlara tam guc gitmiyor. Sanki titriyor gibi bir hareket var. Ancak bu haldeyken arduino kartini kablosuyla seri porta bagladigimda hersey duzgun calisiyor. Sorun nerede anlamadim…

  4. Engelden kaçan bir robot yaptım hc-sr04 mesafe sensörünü servo motorun üzerine bağladım. Hareketten kaçıyor ama servo motora kod yazamadım yardımcı olabilir misiniz. Kodları yüklerken hata veriyor. Yüklediğim kodları yollayayım isterseniz.

    • Nerede sorun yaşadığınızı anlayamadım. Motorları ayrıca test ettiğinizde ileri-geri hareketlerini doğru yapıyorlar mı? Sensörünüz mesafe görüyor mu? İkisi de doğru çalışıyorsa programı tekrar kontrol edebilir misiniz?

  5. Tayfun bey abi ardinoda yeni basladim yazilima bu proje ile ilgili her malzeme mevcut elimde kafama tek takilan yazarken ardinoya yeni sayfami acmamiz gerkiyor

    • Arduino’da yeni boş sayfa açabilirsiniz veya içinde program olan sayfadaki kodları silip kendi kodunuzu yazabilirsiniz.

  6. Uluslararası İHL Sivas
    ADMİN BEY ,sayfanızdaki içerikler çok işime yaradı , kod doğru çalışıyor;
    Sayfanızın düzenini de çok takdir ettim , çizgi izleyen vb robotların kodları ve bağlanış şekli de varmış ,inşallah bu kodu ve bağlamayı bitirince
    diğerlerine geçeceğim…
    TEŞEKKÜRLER…

CEVAP VER

Please enter your comment!
Please enter your name here