- Potrebni materijali:
- Koncept robota koji izbjegava prepreke:
- Kružni dijagram i objašnjenje:
- Programiranje vašeg PIC mikrokontrolera:
- Robot Avoider s preprekama u akciji:
Prepreka Avoider Robot još je jedan poznati robot koji začini ugrađene projekte. Za one koji su novi robot koji izbjegava prepreke, to je samo normalan robot na kotačima koji se može kretati svojim putem bez udaranja po preprekama. Postoji mnogo načina za izradu robota koji izbjegava prepreke. U projektu ćemo koristiti jedan ultrazvučni senzor (sprijeda) i dva IR senzora (lijevo / desno), tako da naš robot ima oči u sva tri smjera. Na ovaj način možete ga učiniti puno pametnijim i bržim otkrivanjem predmeta na sve tri strane i u skladu s tim manevrirajte. Ovdje tužimo PIC mikrokontroler PIC16F877A za ovog robota koji izbjegava prepreke.
Rad robota koji izbjegava prepreke može se promatrati iz proizvoda u stvarnom vremenu nazvanog Roboti za čišćenje doma. Iako su tehnologija i senzori koji se koriste u njima mnogo komplicirani, koncept ostaje isti. Pogledajmo koliko možemo postići pomoću naših normalnih senzora i PIC mikrokontrolera.
Provjerite i ostale naše robote koji izbjegavaju prepreke:
- Robot za izbjegavanje prepreka zasnovan na Raspberry Pi-u
- Uradi sam pametni robot za usisavanje pomoću Arduina
Potrebni materijali:
- PIC16F877A
- IR senzor (2Nos)
- Ultrazvučni senzor (1Nos)
- Istosmjerni motor (2Nos)
- L293D vozač motora
- Ležaljke (možete i sami izraditi pomoću kartona)
- Banka napajanja (bilo koji dostupan izvor napajanja)
Koncept robota koji izbjegava prepreke:
Koncept robota koji izbjegava prepreke vrlo je jednostavan. Pomoću senzora otkrivamo prisutnost predmeta oko robota i koristimo te podatke da ne naletimo na robota nad tim objektima. Da bismo otkrili objekt, možemo koristiti bilo koje senzore poput IR senzora i ultrazvučnog senzora.


U našem robotu koristili smo američki senzor kao prednji, a dva IR senzora za lijevu i desnu. Robot će se pomicati naprijed kad prije njega nema predmeta. Dakle, robot će se kretati naprijed dok ultrazvučni (US) senzor ne otkrije bilo koji objekt.

Kada američki senzor otkrije objekt, vrijeme je da promijenite smjer robota. Možemo skrenuti ulijevo ili udesno, da bismo odlučili smjer okretanja, pomoću pomoću IC senzora provjeravamo postoji li neki objekt u blizini lijeve ili desne strane robota.
Ako je na prednjoj i desnoj strani Robota otkriven prigovor, tada će se robot vratiti i skrenuti lijevo. Robota natjeramo da trči unatrag na određenu udaljenost kako se ne bi sudario s objektom tijekom izvođenja zavoja.

Ako je na prednjoj i lijevoj strani Robota otkriven prigovor, tada će se robot vratiti i skrenuti udesno.

Ako robot dosegne kut sobe, osjetit će objekt prisutan u sve četiri. U ovom slučaju moramo robota voziti unatrag dok se bilo koja strana ne oslobodi.

Drugi mogući slučaj je da će se objekt nalaziti sprijeda, ali možda ga neće biti ni na lijevoj ni na desnoj strani, u ovom slučaju moramo nasumično skrenuti u bilo kojem smjeru.

Nadamo se da bi ovo dalo grubu ideju o tome kako izbjegavač prepreka djeluje, sada nastavimo s krugovnim dijagramom za izgradnju ovog bota i uživanje u njemu na djelu.
Kružni dijagram i objašnjenje:

Kompletni dijagram sklopa ovog robota koji izbjegava prepreke zasnovan na PIC- u prikazan je na gornjoj slici. Kao što vidite, koristili smo dva IR senzora za otkrivanje objekata s lijeve i desne strane robota i ultrazvučni senzor za mjerenje udaljenosti predmeta koji je prisutan ispred robota. Također smo upotrijebili modul L293D Motor Driver za pogon dva motora prisutna u ovom projektu. To su samo obični istosmjerni motori za kotače i stoga se vrlo lako mogu izvesti. Sljedeća tablica pomoći će vam u povezivanju.
|
S.Br |
Povezano iz |
Spojen na |
|
1 |
IR senzor Lijevi vanjski klin |
RD2 (pin 21) |
|
2 |
IR senzor Desni vanjski pin |
RD3 (pin 22) |
|
4 |
Priključak motora 1 kanala A |
RC4 (iglica 23) |
|
5 |
Motor 1 Kanal B pin |
RC5 (iglica 25) |
|
6 |
Priključak motora 2 kanala A |
RC6 (iglica 26) |
|
7 |
Priključak motora 2 kanala B |
RC7 (pin 27) |
|
8 |
Američka okidačka igla |
RB1 (pin 34) |
|
9 |
US Echo Pin |
RB2 (pin 35) |
Modul pogonskog sklopa motora poput L293D obvezan je jer se količina I struje potrebna za pokretanje istosmjernog motora ne može dobiti iz I / O pina PIC mikrokontrolera. Senzori i modul napajaju se od + 5V opskrbe koju regulira 7805. Modul pogonskog motora može se napajati čak i pomoću + 12V, ali za ovaj sam se projekt zadržao na dostupnih + 5V.
Kompletnog Robota u mom slučaju napaja Power banka. Također možete upotrijebiti bilo koju uobičajenu banku napajanja i proći odjeljak regulatora ili upotrijebiti gornji krug i upotrijebiti bilo koju bateriju od 9 V ili 12 V za robota, kao što je prikazano na gornjoj shemi sklopa. Kad su vaše veze gotove, u nastavku će izgledati otprilike ovako

Programiranje vašeg PIC mikrokontrolera:
Programiranje vašeg PIC-a za rad na izbjegavanju prepreka zaista je jednostavno. Moramo samo pročitati vrijednost ova tri senzora i u skladu s tim pokretati motore. U ovom projektu koristimo ultrazvučni senzor. Već smo naučili kako povezati ultrazvuk s PIC mikrokontrolerom, ako ste novi ovdje, vratite se na to uputstvo kako biste razumjeli kako američki senzor radi s PIC-om, jer ću ovdje preskočiti detalje o njemu kako bih izbjegao ponavljanje.
Kompletan program ili taj robot je dano na kraju ove stranice, ja dodatno objasnio važne komade programa u nastavku.
Kao što znamo, svi programi počinju s ulaznim i izlaznim deklaracijama pin-a. Ovdje su četiri pina modula motornog pogona i pinovi okidača izlazne pinove, dok će se uvesti Echo i dva IC izlazna pina. Trebali bismo inicijalizirati modul Timer 1 da bismo ga koristili s ultrazvučnim senzorom.
TRISD = 0x00; // PORTD deklariran kao izlaz za povezivanje LCD TRISB1 = 0; // Okidački pin američkog senzora šalje se kao izlazni pin TRISB2 = 1; // Echo pin američkog senzora postavljen je kao ulazni pin TRISB3 = 0; // RB3 je izlazni pin za LED TRISD2 = 1; TRISD3 = 1; // Oba pina IR senzora deklarirani su kao ulazni TRISC4 = 0; TRISC5 = 0; // Igle motora 1 deklarirane kao izlaz TRISC6 = 0; TRISC7 = 0; // Motor 2 pinova deklarirani kao izlaz T1CON = 0x20;
U ovom bismo programu prilično često morali provjeravati udaljenost između senzora i objekta, pa smo stvorili funkciju zvanu izračunaj_daljinu () unutar koje ćemo izmjeriti udaljenost metodom koja je opisana u vodiču za sučelje američkog senzora. Kôd je prikazan u nastavku
praznina izračunaj_daljinu () // funkcija za izračunavanje udaljenosti SAD-a {TMR1H = 0; TMR1L = 0; // obriši bitove vremena Okidač = 1; __zakasni_us (10); Okidač = 0; dok je (Odjek == 0); TMR1ON = 1; dok je (Odjek == 1); TMR1ON = 0; zauzeto vrijeme = (TMR1L - (TMR1H << 8)); udaljenost = (0,0272 * zauzeto vrijeme) / 2; }
Sljedeći korak bio bi uspoređivanje vrijednosti ultrazvučnog senzora i IR senzora i pomicanje robota u skladu s tim. Ovdje sam u ovom programu koristio vrijednost cm kao kritičnu udaljenost ispod koje bi robot trebao početi mijenjati smjer. Možete koristiti željene vrijednosti. Ako nema predmeta, robot se samo kreće naprijed
ako je (udaljenost> 5) {RC4 = 0; RC5 = 1; // Motor 1 prema naprijed RC6 = 1; RC7 = 0; // Motor 2 prema naprijed}
Ako se otkrije objekt, udaljenost će pasti ispod cm. U ovom slučaju razmatramo vrijednosti lijevog i desnog ultrazvučnog senzora. Na temelju ove vrijednosti odlučujemo ili skrenuti lijevo ili desno. Koristi se kašnjenje od ms tako da je promjena usmjerena na vidljivo.
ako (RD2 == 0 && RD3 == 1 && udaljenost <= 5) // Blokiran je lijevi senzor {back_off (); RC4 = 1; RC5 = 1; // Motor 1 zaustavljanje RC6 = 1; RC7 = 0; // Motor 2 naprijed __zastoji_ms (500); } izračunati_daljinu (); if (RD2 == 1 && RD3 == 0 && distance <= 5) // Desni senzor je blokiran {back_off (); RC4 = 0; RC5 = 1; // Motor 1 prema naprijed RC6 = 1; RC7 = 1; // Motor 2 zaustavljanje __delay_ms (500); }
Ponekad bi ultrazvučni senzor otkrio objekt, ali IR senzori ne bi otkrili nijedan objekt. U ovom slučaju robot se prema zadanim postavkama okreće ulijevo. Također ga možete natjerati da skrene udesno ili u slučajnom smjeru prema vašim željama. Ako s obje strane postoje predmeti, učinit ćemo da se to vrati unatrag. Kôd za isto je prikazan u nastavku.
izračunati_daljinu (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // Oba senzora su otvorena {back_off (); RC4 = 0; RC5 = 1; // Motor 1 prema naprijed RC6 = 1; RC7 = 1; // Motor 2 zaustavljanje __delay_ms (500); } izračunati_daljinu (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Oba senzora su blokirana {back_off (); RC4 = 1; RC5 = 0; // Motor 1 unazad RC6 = 1; RC7 = 1; // Motor 2 zaustavljanje __delay_ms (1000); }
Robot Avoider s preprekama u akciji:
Rad na projektu je vrlo zanimljiv i zabavan za gledanje. Nakon što završite sa svojim krugom i kodom, samo uključite svoj Bot i ostavite ga na zemlji. Trebao bi biti u stanju prepoznati prepreke i pametno ih izbjeći. Ali, dolazi zabavni dio. Možete izmijeniti kôd i učiniti da radi više stvari poput izbjegavanja stepenica, čineći ga pametnijim spremajući dragocjene zavoje, a što ne?
Ovaj će vam robot pomoći da razumijete osnovno programiranje i naučite kako će stvarni hardver reagirati na vaš kôd. Uvijek je zabavno programirati ovog robota i gledati kako se ponaša za kôd u stvarnom svijetu.
Ovdje smo koristili istu PIC perf ploču koju smo napravili za treptanje LED-a pomoću PIC mikrokontrolera i koristili je ovu ploču u drugim projektima PIC Tutorial Series.

Vaš bi robot trebao izgledati slično onome prikazanom na gornjoj slici. Kompletni rad ovog projekta prikazan je u video ispod.
Nadam se da ste razumjeli projekt i uživali u njegovoj izradi. Ako sumnjate ili ste zapeli, možete upotrijebiti odjeljak za komentare da biste postavili svoja pitanja, a ja ću se potruditi odgovoriti na njih.
