- Gerekli malzemeler:
- Engelden Kaçan Robot Kavramı:
- Devre Şeması ve Açıklaması:
- PIC Mikrodenetleyicinizin Programlanması:
- Engel Önleyici Robot İş Başında:
Engel Avoider Robot, gömülü projeleri renklendiren bir başka ünlü robottur. Yeni Engellerden kaçınan robot olanlar için, herhangi bir engele çarpmadan yolunda gidebilen normal bir tekerlekli robottur. Robotumuzun her üç yönde de gözleri olacak şekilde bir Ultrasonik Sensör (ön) ve iki IR sensörü (Sol / Sağ) kullanacağız. Bu şekilde, her üç taraftaki nesneleri algılayarak ve buna göre manevra yaparak çok daha akıllı ve daha hızlı hale getirebilirsiniz. Burada bu engelden kaçan robot için PIC Mikroişlemci PIC16F877A'ya dava açıyoruz.
Bir engelden kaçınma robotunun çalışması, Ev temizlik robotları adı verilen gerçek zamanlı bir üründen gözlemlenebilir. Bunlarda kullanılan teknoloji ve sensörler çok karmaşık olsa da konsept aynı kalıyor. Normal sensörlerimizi ve PIC mikro denetleyicilerimizi kullanarak ne kadar başarılı olabileceğimize bir bakalım.
Ayrıca diğer Engelden Kaçan Robotlarımızı da kontrol edin:
- Raspberry Pi Tabanlı Engelden Kaçan Robot
- Arduino kullanarak DIY Akıllı Vakum Temizleme Robotu
Gerekli malzemeler:
- PIC16F877A
- IR Sensörü (2Nos)
- Ultrasonik Sensör (1Nos)
- DC Dişli Motor (2Nos)
- L293D Motor Sürücüsü
- Şezlonglar (Kartonları kullanarak kendi şezlonglarınızı da oluşturabilirsiniz)
- Güç bankası (Mevcut herhangi bir güç kaynağı)
Engelden Kaçan Robot Kavramı:
Engelden Kaçan Robot kavramı çok basittir. Robotun etrafındaki nesnelerin varlığını algılamak için sensörler kullanıyoruz ve bu verileri robotu bu nesneler üzerinde çarpıştırmamak için kullanıyoruz. Bir Nesneyi tespit etmek için IR sensörü ve Ultrasonik sensör gibi herhangi bir sensör kullanabiliriz.
Robotumuzda ön sensör olarak ABD sensörünü ve sırasıyla sol ve sağ için iki kızılötesi sensör kullandık. Robot, önünde herhangi bir nesne olmadığında ileri doğru hareket edecektir. Böylece robot, Ultrasonik (ABD) sensör herhangi bir nesneyi algılayana kadar ileri hareket edecektir.
ABD sensörü tarafından bir nesne algılandığında, robotun yönünü değiştirme zamanı gelmiştir. Dönüş yönüne karar vermek için sola veya sağa dönebiliriz, robotun Sol veya sağ tarafına yakın herhangi bir nesne olup olmadığını kontrol etmek için IR sensörü yardımıyla kullanırız.
Robotun ön ve sağ tarafında bir nesne tespit edildiğinde robot geri dönecek ve sola dönecektir. Robotun dönüş yaparken nesneye çarpmaması için belirli bir mesafe geriye doğru koşmasını sağlıyoruz.
Robotun ön ve sol tarafında bir nesne tespit edildiğinde robot geri gelip sağa dönecektir.
Robot odanın bir köşesine ulaşırsa, nesnenin dördünde de mevcut olduğunu algılar. Bu durumda, herhangi bir taraf serbest kalana kadar robotu geriye doğru sürmemiz gerekir.
Olası bir başka durum ise , önde bir cisim olacağıdır, ancak ne sol tarafta ne de sağ tarafta herhangi bir cisim olmayabilir, bu durumda rastgele herhangi bir yöne dönmemiz gerekir.
Umarım bu, bir Engelden kaçınmanın nasıl çalıştığına dair kabaca bir fikir vermiştir, şimdi bu botu inşa etmek ve hareket halindeyken keyfini çıkarmak için Devre Şeması ile devam edelim.
Devre Şeması ve Açıklaması:
Bu PIC tabanlı engellerden kaçınma robotunun tam devre şeması yukarıdaki resimde gösterilmektedir. Gördüğünüz gibi, robotun sırasıyla sol ve sağındaki nesneleri tespit etmek için iki IR sensörü ve robotun önünde bulunan nesnenin mesafesini ölçmek için bir Ultrasonik sensör kullandık. Bu projede bulunan iki motoru sürmek için ayrıca bir L293D Motor Sürücü modülü kullandık. Bunlar sadece tekerlekler için sıradan DC dişli motorlardır ve bu nedenle çok kolay bir şekilde türetilebilir. Aşağıdaki tablo bağlantılarda size yardımcı olacaktır.
S.No |
Bağlandı |
Bağlı |
1 |
IR sensörü Sol pim |
RD2 (iğne 21) |
2 |
IR sensörü Sağ çıkış pimi |
RD3 (22 numaralı pin) |
4 |
Motor 1 Kanal A pimi |
RC4 (iğne 23) |
5 |
Motor 1 Kanal B pimi |
RC5 (iğne 25) |
6 |
Motor 2 Kanal A pimi |
RC6 (iğne 26) |
7 |
Motor 2 Kanal B pimi |
RC7 (pim 27) |
8 |
ABD Tetik Pimi |
RB1 (34 numaralı iğne) |
9 |
ABD Yankı Pimi |
RB2 (iğne 35) |
L293D gibi bir motor sürücü modülü zorunludur çünkü DC dişli motoru çalıştırmak için gereken akım miktarı PIC mikro denetleyicinin G / Ç pini tarafından sağlanamaz. Sensörler ve modül, 7805 tarafından düzenlenen + 5V beslemesinden güç alır. Motor sürücü modülü + 12V kullanılarak bile çalıştırılabilir, ancak bu proje için mevcut + 5V'a bağlı kaldım.
Tam Robot benim durumumda bir Power bank tarafından desteklenmektedir. Ayrıca herhangi bir sıradan güç bankasını kullanabilir ve regülatör bölümünü geçebilir veya yukarıdaki devreyi kullanabilir ve yukarıdaki devre şemasında gösterildiği gibi Robot için herhangi bir 9V veya 12V pil kullanabilirsiniz. Bağlantılarınız tamamlandıktan sonra aşağıdaki gibi görünecektir
PIC Mikrodenetleyicinizin Programlanması:
PIC'inizi Engellerden kaçınmak için çalışmak üzere programlamak gerçekten çok kolay. Sadece bu üç sensörün değerini okuyup Motorları buna göre sürmeliyiz. Bu projede bir Ultrasonik sensör kullanıyoruz. PIC mikrodenetleyici ile ultrasonik arayüzün nasıl yapıldığını zaten öğrendik, eğer burada yeniyseniz lütfen bir ABD sensörünün bir PIC ile nasıl çalıştığını anlamak için bu eğiticiye geri dönün, çünkü tekrarı önlemek için burada ayrıntıları atlayacağım.
Programın tamamı veya bu Robot bu sayfanın sonunda verilmiştir, aşağıda programın önemli parçalarını daha ayrıntılı olarak açıkladım.
Bildiğimiz gibi tüm programlar Giriş ve Çıkış pin bildirimleri ile başlar. Burada Motor Sürücüsü modülünün Dört pini ve Tetik pimleri Çıkış pimleridir, Yankı pimi ve iki IR çıkış pini girilecektir. Zamanlayıcı 1 modülünü Ultrasonik sensör ile kullanmak için başlatmalıyız.
TRISD = 0x00; // PORTD, LCD TRISB1 = 0 arabirimi için çıktı olarak ilan edildi; // US sensörünün tetikleme pini çıkış pini TRISB2 = 1 olarak gönderilir; // US sensörünün yankı pini giriş pini TRISB3 = 0 olarak ayarlanmıştır; // RB3, LED TRISD2 = 1 için çıkış pinidir; TRISD3 = 1; // Her iki IR sensör pini de giriş TRISC4 = 0 olarak ilan edilir; TRISC5 = 0; // Çıkış TRISC6 = 0 olarak tanımlanmış motor 1 pinleri; TRISC7 = 0; // Çıkış T1CON = 0x20 olarak tanımlanmış motor 2 pini;
Bu programda , sensör ile nesne arasındaki mesafeyi sık sık kontrol etmemiz gerekecekti, bu nedenle, ABD sensör arabirimi öğreticisinde tartışılan yöntemle mesafeyi ölçeceğimiz calculate_distance () adlı bir işlev oluşturduk. Kod aşağıda gösterilmiştir
void calculate_distance () // US'nin mesafesini hesaplamak için işlev {TMR1H = 0; TMR1L = 0; // zamanlayıcı bitlerini temizle Trigger = 1; __delay_us (10); Tetik = 0; while (Echo == 0); TMR1ON = 1; while (Eko == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); mesafe = (0,0272 * alınan zaman) / 2; }
Bir sonraki adım , Ultrasonik sensör ve IR sensörünün değerlerini karşılaştırmak ve robotu buna göre hareket ettirmek olacaktır. Burada, bu programda, Robotun yönde değişiklik yapmaya başlaması gereken kritik mesafe olarak bir cm değeri kullandım. Tercih ettiğiniz değerleri kullanabilirsiniz. Nesne yoksa robot sadece ileri doğru hareket eder
eğer (mesafe> 5) {RC4 = 0; RC5 = 1; // Motor 1 ileri RC6 = 1; RC7 = 0; // Motor 2 ileri}
Bir nesne tespit edilirse, mesafe cm'nin altına inecektir. Bu durumda sol ve sağ Ultrasonik sensör değerlerini dikkate alıyoruz. Bu değere göre ya sola dönmeye ya da sağa dönmeye karar veriyoruz. Yön değişikliğinin görünür olması için ms'lik bir gecikme kullanılır.
if (RD2 == 0 && RD3 == 1 && mesafe <= 5) // Sol sensör engellendi {back_off (); RC4 = 1; RC5 = 1; // Motor 1 durdurma RC6 = 1; RC7 = 0; // Motor 2 ileri __delay_ms (500); } hesapla_distance (); if (RD2 == 1 && RD3 == 0 && mesafe <= 5) // Sağ sensör engellendi {back_off (); RC4 = 0; RC5 = 1; // Motor 1 ileri RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); }
Bazen Ultrasonik sensör bir nesneyi algılar, ancak IR sensörleri tarafından algılanan hiçbir nesne olmaz. Bu durumda robot varsayılan olarak sola döner. Ayrıca tercihlerinize göre sağa veya rastgele bir yönde dönmesini sağlayabilirsiniz. Her iki tarafta da nesneler varsa geriye doğru gitmesini sağlıyoruz. Aynısını yapmanın kodu aşağıda gösterilmiştir.
hesapla_distance (); if (RD2 == 0 && RD3 == 0 && mesafe <= 5) // Her iki sensör de açık {back_off (); RC4 = 0; RC5 = 1; // Motor 1 ileri RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); } hesapla_distance (); if (RD2 == 1 && RD3 == 1 && mesafe <= 5) // Her iki sensör de engellendi {back_off (); RC4 = 1; RC5 = 0; // Motor 1 ters RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (1000); }
Engel Önleyici Robot İş Başında:
Projenin çalışması çok ilginç ve izlemesi eğlenceli. Devre ve Kodunuzla işiniz bittiğinde, Botunuzu açın ve yerde bırakın. Engelleri tespit edebilmeli ve akıllıca bunlardan kaçınabilmelidir. Ama işte işin eğlenceli kısmı. Kodu değiştirebilir ve bir merdivenden kaçınmak, değerli dönüşleri saklayarak daha akıllı hale getirmek gibi daha fazla şey yapmasını sağlayabilirsiniz.
Bu Robot, programlamanın temelini anlamanıza ve gerçek bir donanımın kodunuza nasıl yanıt vereceğini öğrenmenize yardımcı olacaktır. Bu robotu programlamak ve gerçek dünyada kod için nasıl davrandığını izlemek her zaman eğlencelidir.
Burada PIC mikrodenetleyiciyi kullanarak yanıp sönen LED için yaptığımız aynı PIC perf kartını kullandık ve bu kartı PIC Eğitim Serisinin diğer projelerinde kullandık.
Robotunuz yukarıdaki resimde gösterilene benzer bir şeye benzemelidir. Bu projenin tam çalışması aşağıdaki videoda gösterilmektedir.
Umarım projeyi anladınız ve bir tane oluşturmaktan zevk almışsınızdır. Herhangi bir şüpheniz varsa veya takılıp kalırsanız, sorularınızı göndermek için yorum bölümünü kullanabilirsiniz, ben de cevaplamak için elimden geleni yapacağım.