Arduino İle Labirent Çözen Robot Yapımı

62 16.854

Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ tarafından herhangi birisini referans alırsa, labirenttin çıkışını bulacaktır. Bu işlem sadece labirentin çözümünün temeli. Peki labirent yolunda ilerlerken yolun bittiğini ve hangi tarafa dönmesini nasıl anlayacak ? . İşte bu noktada iki sensör daha devreye girecek. Birinci sensör öne bakarak sürekli mesafeyi kontrol edecek ve yolun bitip bitmediği anlaşılacak. Diğer sensör ise diğer duvarı takip edecek. Kısacası sensörler sol ön ve sağ tarafları kontrol edecek. Sağ ve sol sensörler duvarın devamlılığını kontrol edecek. Örneğin sol tarafta boşluk var iken sağ tarafta duvar varsa ve ön taraf da boş ise robot ileri hareket edecektir. Robotun karşılaşacağı her durum için ayrı bir senaryo oluşturularak robotun hareketleri belirlenecek.

Projeyi Satın Al

Malzemeler:

  • Arduino Uno
  • 3 Adet Hc-Sr04 Ultrasonik Sensör
  • L293D Motor Sürücü
  • Robot Kiti ( 2 DC Motor, Robot Şasesi , Sarhoş Tekerlek)
  • Batarya

Devre Şeması:

Devre şemasına bakarak bağlantıları yapalım. Motor sürücünün 8. pini motor volatjı 16. pini ise 5v lojik voltajdır. Aşağıdaki şekilden de pinlerine bakabilirsiniz.

Fritzing Dosyasını Buradan indirebilirsiniz>> labirent Devre Şeması

Sensörleri aşağıdaki şekildeki gibi konumlandırın.

 

Arduino Kodu:

#define sol_motor_hiz 11 // Sol motor hız pini
#define sag_motor_hiz 10 // Sağ motor hız pini
#define sol_motor_1 8 // Sol motor pin 1
#define sol_motor_2 9 // Sol motor pin 2
#define sag_motor_1 7 //Sağ motor pin 1
#define sag_motor_2 6 // Sağ motor pin 2

int sag_sensor_echo = A0;// sağ sensör
int sag_sensor_trigger = A1;// sağ sensör
int sol_sensor_echo = A2;// sol sensör
int sol_sensor_trigger = A3;// sol sensör
int on_sensor_echo = A4; // Ön sensör
int on_sensor_trigger = A5; // Ön sensör

void setup()
{
pinMode(on_sensor_trigger, OUTPUT);
pinMode(on_sensor_echo, INPUT);
pinMode(sol_sensor_trigger, OUTPUT);
pinMode(sol_sensor_echo, INPUT);
pinMode(sag_sensor_trigger, OUTPUT);
pinMode(sag_sensor_echo, INPUT);
pinMode(sol_motor_hiz, OUTPUT);
pinMode(sag_motor_hiz, OUTPUT);
pinMode(sol_motor_1, OUTPUT);
pinMode(sol_motor_2, OUTPUT);
pinMode(sag_motor_1, OUTPUT);
pinMode(sag_motor_2, OUTPUT);
delay(5000);
}

void loop()
{
long on_sensor_zaman, sol_sensor_zaman, sag_sensor_zaman, sag_mesafe, sol_mesafe, on_mesafe;
digitalWrite(on_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(on_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(on_sensor_trigger, LOW);
on_sensor_zaman = pulseIn(on_sensor_echo, HIGH);
on_mesafe = on_sensor_zaman/29/2;
digitalWrite(sol_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sol_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(sol_sensor_trigger, LOW);
sol_sensor_zaman = pulseIn(sol_sensor_echo, HIGH);
sol_mesafe = sol_sensor_zaman/29/2;
digitalWrite(sag_sensor_trigger, LOW);
delayMicroseconds(2);
digitalWrite(sag_sensor_trigger, HIGH);
delayMicroseconds(5);
digitalWrite(sag_sensor_trigger, LOW);
sag_sensor_zaman = pulseIn(sag_sensor_echo, HIGH);
sag_mesafe = sag_sensor_zaman/29/2;
analogWrite(sol_motor_hiz, 0);
analogWrite(sag_motor_hiz, 0);
analogWrite(sol_motor_1, 0);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 0);

if(on_mesafe >8)
{
if(sag_mesafe >7 && sag_mesafe< 13)
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 150);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
if(sag_mesafe >=13)
{
analogWrite(sol_motor_hiz, 255);
analogWrite(sag_motor_hiz, 60);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
if(sag_mesafe <=7)
{
analogWrite(sol_motor_hiz, 60);
analogWrite(sag_motor_hiz, 255);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
}
}
if(sol_mesafe <=20 && sag_mesafe>20 && on_mesafe <=8) { sag();}
if(sol_mesafe >20 && sag_mesafe>20 && on_mesafe <=8) { sag(); }
if(sag_mesafe <=20 && sol_mesafe>20 && on_mesafe <=8) { sol(); }
if(sag_mesafe<=20 && sol_mesafe<=20 && on_mesafe<=8) { tam_donus(); }
}

void sol()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 0);
analogWrite(sol_motor_2, 255);
analogWrite(sag_motor_1, 0);
analogWrite(sag_motor_2, 255);
delay(700);
}

void sag()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 255);
analogWrite(sag_motor_2, 0);
delay(800);
}

void tam_donus()
{
analogWrite(sol_motor_hiz, 120);
analogWrite(sag_motor_hiz, 120);
analogWrite(sol_motor_1, 255);
analogWrite(sol_motor_2, 0);
analogWrite(sag_motor_1, 255);
analogWrite(sag_motor_2, 0);
delay(1200);
}

Kaynak : Let’s Make Robots

Bunları da beğenebilirsin

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

  1. robotu yapamayan köylü :(((

    bütün aşamaları dediğiniz gibi yaptım robotum deli gibi kendi etrafında 360 derece dönüyor lütfen yardım edin ödev teslimim rica ediyorum

    1. BUM1N

      Kendi etrafında dönmeden kastın nedir? Bir tekerlek ileri diğeri geri mi yoksa biri sabit diğeri mi dönüyor eğerki biri sabit biri dönüyorsa toplam 12 voltluk pile ihtiyacın var .eğer ikiside hareketliyse bağlantıları kontrol et veya kodlamada sıkıntı olmalı ben düzenleyerek kullanıyorum yapımcı donanımsal eksiklerden fazla yazılımsal eksiklikler çok fazla

  2. ali d.

    Projeyi sorunsuz şekilde yapabilen oldu mu arkadaşlar? yorumlarda sürekli olumsuz paylaşımlar yapılmış. Yapabilen lütfen bizle de paylaşsın. Projeyi sunmama 20 gün kaldı ve malzemelerden başka hiç bişey yok ortada

  3. FatiH

    Merhaba. Bu kodda ne yapmaya çalişiyor tam olarak anlamış değilim! sağ tarafını takip ederek çıkışı buldurmaya çalışıyor anladıgım kadarıyla. Ben motorların 1,2 nolu uclarını tam anlamayarak
    if(sag_mesafe >7 && sag_mesafe< 13)
    {
    analogWrite(sol_motor_hiz, 120);
    analogWrite(sag_motor_hiz, 150);
    analogWrite(sol_motor_1, 255);
    analogWrite(sol_motor_2, 0);
    analogWrite(sag_motor_1, 0);
    analogWrite(sag_motor_2, 255);
    }
    bu blokta sağa girinti varsa 7-13 cm arası hafif sağa dönsün demek istemiş diye yorumladım. o zaman 1 blok ötede if(sag_mesafe <=7)
    {
    analogWrite(sol_motor_hiz, 60);
    analogWrite(sag_motor_hiz, 255);
    analogWrite(sol_motor_1, 255);
    analogWrite(sol_motor_2, 0);
    analogWrite(sag_motor_1, 0);
    analogWrite(sag_motor_2, 255);
    } blogunda sağa çok yaklaşınca bu araba daha da sağa gitmeye calışmayacakmı? bunu tam olarak yapabilen var mi?

    1. BUM1N

      Dostum aynı sorun bendede vardı sensörlerin yerini değiştirmek gerekiyor değiştirince sorun düzeldi.

      1. Ali Oktay

        Nasıl yani sağ sensör le solu mu yoksa biraz sensörleri oynatacaz mı kardeş?

        1. BUM1N

          Sağ sen sör ile sol sel sensörü değiştirmelisin

    2. FatiH

      Arkadaslar çözümü motorların bağlı oldugu 2 kabloyu yer değiştirerek bulduk!

  4. Emre

    Arduino R3 clone ile kullanırsak olur mu ?
    ayrıca nasıl pil alalım link ürün linki atar mısınız ?

  5. Ahmet kerim biçer

    mustafa bey ben öğrenciyim numaram 05395548586 numaram bu aynı sorunu yaşıyorum bunu yapamazsam okul bitmicek yardımcı olurmusun.

  6. sinan

    analogWrite(sol_motor_hiz, 120); hocam bu kod hata veriyor bunun nedeni ne olabilir hata mesajında hız belirtilmediğini söylüyor yardımcı olabilir misiniz?

    1. kağan karataş

      #include (sol_motor_hız , 11);
      yazcaksın başına

  7. ATTİLA KOÇ BK

    pil kaç volt (AKLIMDA KALDI)

  8. mustafa keçeci

    Sorunu çözdüm arkadaşlar; aracın verilen kod ile kararlı çalışabilmesi için şu değişiklikleri yaptım; sensörler sarhoş tekerleğin olduğu kısıma monte edilecek (ilginç bir durum ama sarhoş tekerlek ön kısımda olduğunda benim araç daha kararlı çalıştı) çizimde belirtilen sağ ve sol sensörün yerini değiştirdim, ayrıca L293D motor sürücüsündeki bir bağlantı da değiştirildi, şimdi sorunsuz çalışıyor. İsteyenler için yardımcı olacaksa yeni devre şemasını yükledim. İnceleyebilirsiniz;
    https://i.hizliresim.com/2JEjbE.jpg

    1. İbrahim UYSAL

      Mustafa senin dediğin sistemi yaptım 4 tane 1.5 voltluk piller kullandım elimi sesnsörlerin önüne koyduğumda motorlardan kısık sesli çalışma sesi geliyor ama motorları hareket ettirmiyor ben devreden çalışmadığını düşünüyorum güç yetmiyor gibi geliyor siz ne dersiniz sorun pillerde gibi duruyor pil olarak ne önerirsiniz ?

    2. Kullanıc1337

      Mustafa bey benim bu projeyi hemen yetiştirmem lazım. Eminsiniz değil mi? Başkabir proje yapamam ve buna başladım. Ben hem 6 volt pil kullandım arduino ve sensörlere. Sadece L293D ye lippo kullandım. Olur mu? Çalışması için aynı kod olur mu. Ve çalışması için sadece enerji vermem mi gerekli? Başka bişey yapmalı mıyım. Sadece pili takmam yeter mi.

  9. mustafa keçeci

    Robotu 4 defa tam anlamıyla söküp tekrar birleştirdim. Projedekileri adım adım kontrol ederek 4 defa uyguladım, fakat sonuç aynı kendi etrafında dönüp duruyor veya karşısına engel çıktığında durmayıp çarpıyor, sensör kaynaklı olabilir dedim değiştirdim yine aynı. Bağlantılar kesinlikle projedeki ile birebir aynı. Komutlardaki hızlar çok yüksek değil mi? Ayrıca mesafeleri nasıl düşürebiliriz. Bazı arkadaşlara batarya zayıf olabilir demişsiniz. bende lipo batarya mevcut 3 amp., bununla da denedim sonuç aynı. Yani bataryadan kaynaklı bir sorun değil, şu projeyi gerçekleştirdiniz mi ? yani sağlıklı çalışıyor mu? çünkü videoda görünen farklı bir yapıya benziyor. Yardımcı olursanız sevinirim.

    1. ali d.

      @Mustafa Keçeci dediğiniz gibi bende de aynı sorun var. l298n ile denedim. Arduino ile motor sürücüyü 12 v lipo ile besledim robot deli gibi yerinde dönüyor. Ayrıca ön sensör önünde engel varsa da yoksa da hiç bir tepki vermiyor. Yardımcı olabilecek arkadaş var mı ?

  10. erkin

    Usta ya ben robotu yaptım fakat kendi kafasına göre hareket ediyor ne yapmam lazım yardımcı olursan sevinirim

  11. İSİMSİZ

    birşey sorabilirmiyim kodun bu bölümünü
    #define sol_motor_hiz 11 // Sol motor hız pini
    #define sag_motor_hiz 10 // Sağ motor hız pini
    #define sol_motor_1 8 // Sol motor pin 1
    #define sol_motor_2 9 // Sol motor pin 2
    #define sag_motor_1 7 //Sağ motor pin 1
    #define sag_motor_2 6 // Sağ motor pin 2

    kısada olsa açıklıyabilirmisiniz koda tek anlıyamadığım bölüm bura şimdiden cevaplkadığınız içi saolun
    NOT:EYER BU KODU ANLAMAMI SAĞLIYACAK BİR KAYNAKÇA BİLİYORSANIZ YAZARSANIZ SEVİNİRİM

    1. Elfen

      Orada motor pinlerini tanımlamış. Detaylı olarak konuya bakmak istersen variable diye arat.

  12. İSİMSİZ

    kardeşim birşey sorucam çok acil elimde L293B MOTOR SÜRÜCÜSÜ VAR L293D MOTTOR SÜRÜCÜSÜ YERİNE L293B MOTOR SÜRÜCÜSÜ KULANSAM HERHANGİ BİR SIKINTI OLUŞURMU EN YAKIN ZAMND CEVAP VERİRSEN ÇOK SEVİNİRİM ŞİMDİDEN TEŞEKÜRLER

    1. Arda Keleş

      l293b sürücü d ye göre daha fazla güçlüdür. l293b lik projelerde l293d motor sürücüsünü klullanamassın ama l293d lik projelerde l293b kullanırsan pek sorun olmaz

  13. Abdulkadir

    Hocam merhaba bu micromouse (Labirent Cozen Robot) kategorisindeki robotlarin mesafe sensorleri SHARP IR denilen farkli led seklindeki sensorler kullaniliyor. O sensoru kullanmalarinin sebebi nedir?

  14. erhan öztürk

    Hocam Sol sensör ne yaptıysam çalışmıyor, ve sağ tekerler yavaş sol tekerler hızlı dönüyor. L298Nsürücü kullandım.

  15. ALEMDAR

    İKİ AMPERLİK POWER BANK VAR ONU TAKSAM OLURMU ELİMDEKİ 9 VOLTLUK PİLİDE ARDUİNOYA BAĞLASAM ?

  16. ALEMDAR

    ABİ ROBOTU YAPTIM KOMPLE SONUNDA AMA İLERLEMİYOR HATTA HİÇ BİRŞEY YAPMIYOR 9 V STANDART PİL TAKTIM OLMADI BU ALET KAÇ AMPERLE ÇALIŞIYOR VE BAŞKA Bİ TAVSİYEN VARMI ?BU BENİM PROJE ÖDEVİM BİRAZ ERKEN CVP YAZABİLİRSEN SEVİNİRİM BU ARADA ROBOT ÇALIŞIRSA YOUTUBE YE YÜKLEYECEĞİM….

    1. Sezgin GÜL

      Alemdar robotun çalışmama sebebi düşük amper pil kullandığından kaynaklı. Motorların hız kontrolündeki pwm değerleri düşük olduğu için fazla akıma gerek duyar. O nedenle kullanacağın pilin akımı 3 amper civarı olsa iyi olur. Bu arada motorları ayrı pille beslemen de fayda var. 9v pillerin akımı düşüktür. lipo pil kullanabilirsin.

  17. Mehmetk

    Kucuk=7 olacak

  18. Mehmetk

    Bazi yerleri anlamadim.cevaplayabilirseniz cok makbule gecer.
    Sagmesafe(kucuk=) de motoro sag duvara yaklasmis demek degil mi? Budurumda siz sag motoru geri sol motoru ileri cevirmissiniz ki bu motorun saga donmesini saglara ve motor duvara carpar.. ben mi yanlis anladkm?

    1. Sezgin GÜL

      bahsettiğin yerde iki motor da ileri dönüyor fakat hızları farklı olduğu için sag_mesafe<7 kısmında sağ motor sol motordan daha hızlı dönerek robotu sola doğru hareket ettiriyor. Alttaki sag() ve sol() fonksiyonlara bakarsan orada motorların dönüş yönlerini görebilirsin.

      1. kemals

        o halde solmotor1 ileri sagmotor2 ileriyi temsil ediyor.. anladım ..ben genelde sag1 ileri sol1 ileri yaparım kafam karıştı

  19. mustafa çağrı kurt

    hocam kodları aynı şekilde kopyalamama rağmen hata mesajı alıyorum

  20. Ahmet kerim biçer

    çalışmıyor sensörler görmüyor amaçsızca dönüyor iletişime geçme şansım varsa lütfen yardımcı olun

    1. Sezgin GÜL

      Kaç volt ve amperde pil kullandınız ? Normalde akımı yüksek pil kullanmanız gerekiyor. koddaki motor hız değerleri düşük olduğu için o pwm değerinde yeterince güç alamıyordur. Pili değiştirme imkanınız yok ise koddaki hız değerlerini arttırmanız gerekiyor

  21. Yusuf

    Slm arkadaşlar ben bu ödevi yeni aldım merakımdan girdim ama güzel birsey yapmak istiyorum bunun icin bana gereken mazemelerin isimlerini atarmısınız simdiden tesekürler

  22. ali d.

    Projeniz güzel ama yorumlarda çalışmadığını söyleyenler olmuş. Ayrıca bu projeyle ilgili pek video göremedim bi tek siz varsınız. Malzemeleri de sipariş ettim. umarım çalışmamazlık etmez. Yapıp deneyince olumlu-olumsuz geri döneceğim. teşekkürler…

    1. EmreÖ

      ne oldu sonuç?

  23. Ahmet

    Hocam bu projeyi pic ile 16f877a yapmam lazım kodları konusunda bana yardımcı olabilir misiniz? Lütfen dönün cevabınızı bekliyorum

  24. mahmut

    Merhaba hocam batarya nasıl bir batarya olucak.

  25. Ahmet Kerim BİÇER

    herşeyi aynı yaptık motorlar 6v 2000rpm dc motor herşey aynı ama pil ısınıyor yerdeyken ilerlemiyor 6v pille besledik gitmiyor

    1. Sezgin GÜL

      pil ısınıyor ise kısa devre vardır muhtemelen. kablo bağlantılarını kontrol etmenizde fayda var.

  26. ALEMDAR

    ARDUİNO UNU DİYORSUNUZ AMA FARKLI BİR ARDUİNO KULLANMIŞSINIZ GİBİ SONRADAN Bİ SIKINTI OLURMU ?

    1. Sezgin GÜL

      kullanabilirsiniz. sorun olmaz

      1. ALEMDAR

        ONCELİKLE SORUMU CVP LADIĞINIZ İÇİN TESEKKUR EDERİM İKİNCİ OLARAK.BİZ DONEM SONU PROJESİ OLARAK BUNU YAPACAIZ ACABA DİYORUM İKİNCİ DONEM BUNA BİDE BLUTHOUT KONTROLU OZELLİĞİ KOYABİLİRMİYİZ KODLAMA İSİNDE DAHA YENİYİZ KONTROL İÇİN PİN KALIRMI VEYA MİKRO DENETLEYİCİDE HAFIZA KALIRMIDİYE Bİ FİKRİMİZ YOK ?

  27. Ünsal Durmus

    Hocam L298N motor sürücü kullanacak olsam pinleri nasıl vericem, 3 tane sol motor sag motor hareketi vermişsiniz.

  28. Hıyar

    Böyle bir devre çok saçma Allah aşkına bu robot çıkmaza geldiginde ne yapacak?

  29. Soner

    Merhaba kolay gelsin labirent çözen robotu proje ödevi olarak yapmayı düşünüyorum labirent in genişliği nasıl olmalıdır ve son olarak herhangi bir labirent te robot çözenbilir mi ilginiz için teşekkür ederim

  30. Emin ERKMEN

    ÇALIŞMIYOR! Kaç kere denedim söktüm taktım ama çalışmıyor saçma sapan hareketler yapıyor.

  31. Alper Eraslan

    Merhaba.Projenizi yapmayı düşünüyoruz robot kiti için şu model uygun olur mu? urun.n11.com/diger/arduino-akilli-robot-araba-motor-sase-ve-tekerlek-kit-P153356514?cid=604001&gclid=CNuwytyxsNICFSEM0wodnggMxw&gclsrc=aw.ds ayrıca motor sürücüsünün bağlantı şemasını ve sensörlerin şemasının daha iyi görünen bir resmi mevcutsa elinizde yardımcı olabilir misiniz?

    1. Sezgin GÜL

      Bahsettiğiniz robot kiti kullanabilirsiniz. Detaylı resim ne yazık ki mevcut değil.

  32. Emin ERKMEN

    Hocam aynısını birebir uyguladım ama robot çok saçma hareket ediyor. Yardımcı olabilir misin?

    1. Sezgin GÜL

      Bağlantılarınız doğru ve sensörlerin konumları uygun ise enerji yetersizliğinden kaynaklanabilir

      1. Emin ERKMEN

        kodlarda sıkıntı yok yani?

        1. Sezgin GÜL

          Kodlarda sorun yok videodaki robotta kullanılan kodlardır. Motor yönlerini doğru taktınız mı. Yön komutlarında doğru yönde dönüyorlar mı bunları da kontrol ediniz. Şöyle bir durum da var . Eğer robotu beslediğiniz pilin enerjisi az ise kod kısmında motorların hareketi için verilen analog değeri arttırabilirsiniz.

          1. Emin ERKMEN

            Peki bu robot. En kısa yolu nasıl bulabilir. İkinci kez aynı labirentten geçtiği zaman en kısa yoldan gitmesi için ne yapmamız gerekiyor?

          2. Sezgin GÜL

            Çizgili olan labirenti çözen robotlarda o özellik mevcut. İlerleyen günlerde o tarz proje paylaşacağım.

          3. Emin ERKMEN

            Bu robotun üstüne ekleme yapabilir misiniz? 1 hafta içinde? Bu bizim için çok önemli.

          4. Emin ERKMEN

            ??

  33. Salih burak

    Hocam robot boyutları tam olarak nedir

    1. Sezgin GÜL

      Robot boyutunu labirentin genişliğine göre seçerseniz daha mantıklı olur. Normal deneme yapacaksanız kendinize göre boyut belirleyebilir veya hazır iki tekerlekli robot kitlerden kullanabilirsiniz

  34. pers

    Mesafe okuma işlemi fonksiyon ile yapisaydi daha güzel olurdu.loop un içerisinde surekli motorlari durdurmak ve calıştırnak çok mantıklı olmamış. Ayni sekilde yön kontrollerinin hepsi fonksiyonlarda olsaydi daha iyi olurdu. Iyi çalışmalar.