- Potrebni materiali:
- Koncept robota, ki se izogiba oviram:
- Shema vezja in razlaga:
- Programiranje mikrokrmilnika PIC:
- Robot Avoider za ovire v akciji:
Obstacle Avoider Robot je še en slavni robot, ki popestri vdelane projekte. Za tiste, ki so novi robot za izogibanje oviram, je to le običajen robot na kolesih, ki lahko krmili svojo pot, ne da bi pri tem zadel nobeno oviro. Obstaja veliko načinov za izdelavo robota, ki preprečuje ovire, pri čemer bomo uporabili en ultrazvočni senzor (spredaj) in dva IR senzorja (levo / desno), tako da bo naš robot imel oči v vseh treh smereh. Tako ga lahko naredite veliko pametnejšega in hitrejšega, če zaznate predmete na vseh treh straneh in ustrezno manevrirate. Tukaj tožimo mikrokrmilnik PIC16F877A zaradi tega robota, ki se izogiba oviram.
Delovanje robota, ki se izogiba oviram, je mogoče opazovati v realnem času, imenovanem roboti za čiščenje doma. Čeprav so tehnologija in senzorji, ki se uporabljajo pri njih, precej zapleteni, koncept ostaja enak. Poglejmo, koliko lahko dosežemo z običajnimi senzorji in mikrokrmilniki PIC.
Preverite tudi druge naše robote, ki se izogibajo oviram:
- Robot, ki preprečuje ovire na osnovi Raspberry Pi
- DIY pametni robot za sesanje s pomočjo Arduina
Potrebni materiali:
- PIC16F877A
- IR senzor (2 št.)
- Ultrazvočni senzor (1Nos)
- Motor z enosmernim gonilom (2 št.)
- L293D Motor voznik
- Ležalniki (lahko tudi sami izdelate kartone)
- Napajalnik (kateri koli razpoložljivi vir energije)
Koncept robota, ki se izogiba oviram:
Koncept robota, ki se izogiba oviram, je zelo preprost. S senzorji zaznavamo prisotnost predmetov okoli robota in s temi podatki ne trčimo robota nad temi predmeti. Za zaznavanje predmeta lahko uporabimo poljubne senzorje, kot so IR senzor in ultrazvočni senzor.
Pri našem robotu smo uporabili ameriški senzor kot sprednji senzor in dva IR senzorja za levo oziroma desno. Robot se bo premaknil naprej, če pred njim ni predmeta. Tako se bo robot premikal naprej, dokler ultrazvočni senzor (ZDA) ne zazna nobenega predmeta.
Ko ameriški senzor zazna predmet, je čas, da spremenite smer robota. Lahko se obrnemo levo ali desno, da se odločimo za smer obračanja s pomočjo IR senzorja preverimo, ali je v bližini leve ali desne strani robota kakšen predmet.
Če je na sprednji in desni strani robota zaznan ugovor, se bo robot vrnil in zavil levo. Robota naredimo, da teče nazaj za določeno razdaljo, da med zavijanjem ne trči na predmet.
Če je na sprednji in levi strani robota zaznan ugovor, se bo robot vrnil in zavil desno.
Če robot doseže vogal sobe, bo zaznal predmet, prisoten v vseh štirih. V tem primeru moramo robota voziti nazaj, dokler se nobena stran ne osvobodi.
Drug možen primer je , da bo predmet spredaj, vendar ga morda ne bo niti na levi niti na desni strani, v tem primeru se moramo naključno obrniti v katero koli smer.
Upam, da bi to dalo grobo predstavo o tem, kako deluje ovira, zdaj nadaljujmo z vezjem, da zgradimo tega bota in uživamo v akciji.
Shema vezja in razlaga:
Na zgornji sliki je prikazan celoten diagram vezja robota, ki se izogiba oviram na podlagi PIC. Kot lahko vidite, smo uporabili dva IR senzorja za zaznavanje predmetov na levi in desni strani robota ter ultrazvočni senzor za merjenje razdalje predmeta, ki je prisoten pred robotom. Za pogon dveh motorjev, ki sta prisotna v tem projektu, smo uporabili tudi modul motornega pogona L293D. To so navadni enosmerni motorji za kolesa, zato jih je mogoče enostavno izpeljati. Naslednja tabela vam bo pomagala pri povezavah.
S. Št |
Povezan z |
Povezan z |
1. |
IR senzor Levi ven |
RD2 (pin 21) |
2. |
IR senzor Desni zunanji zatič |
RD3 (nožica 22) |
4. |
Zatič motorja 1 kanal A |
RC4 (zatič 23) |
5. |
Zatič motorja 1 kanal B |
RC5 (nožica 25) |
6. |
Zatič motorja 2 kanala A |
RC6 (pin 26) |
7. |
Zatič motorja 2 kanala B |
RC7 (zatič 27) |
8. |
Ameriški sprožilni zatič |
RB1 (nožica 34) |
9. |
Ameriški odmevni zatič |
RB2 (nožica 35) |
Modul gonilnika motorja, kot je L293D, je obvezen, ker V / I zatiča mikrokrmilnika PIC ne more pridobiti količine toka, ki je potrebna za delovanje enosmernega motorja z enosmernim tokom. Senzorje in modul napaja napajanje + 5V, ki ga regulira 7805. Modul gonilnika motorja se lahko napaja tudi z + 12V, vendar sem se za ta projekt pravkar držal razpoložljivih + 5V.
Celotnega Robota v mojem primeru napaja Power Bank. Uporabite lahko tudi katero koli navadno napajalno enoto in mimo regulacijskega odseka ali pa uporabite zgornje vezje in uporabite katero koli 9V ali 12V baterijo za robota, kot je prikazano na zgornjem vezju. Ko bodo vaše povezave končane, bo spodaj videti približno tako
Programiranje mikrokrmilnika PIC:
Programiranje PIC-a za delo pri izogibanju oviram je zelo enostavno. Prebrati moramo le vrednost teh treh senzorjev in temu primerno zagnati motorje. V tem projektu uporabljamo ultrazvočni senzor. Že smo se naučili, kako povezati ultrazvok z mikrokrmilnikom PIC, če ste tu novi, se prijazno vrnite k tej vadnici, da boste razumeli, kako ameriški senzor deluje s PIC, saj bom tukaj preskočil podrobnosti o njem, da se ne bi ponovil.
Celoten program ali to Robot je podan na koncu te strani, sem še dodatno pojasnil pomembne kose programu spodaj.
Kot vemo, se vsi programi začnejo z deklaracijami vhodnih in izhodnih zatičev. Tu so štirje zatiči modula motornega gonilnika in zatiči sprožilca izhodni zatiči, medtem ko bodo vhodni zatič Echo in dva IR izhodna zatiča. Za uporabo modula Timer 1 bi morali uporabiti ultrazvočni senzor.
TRISD = 0x00; // PORTD je deklariran kot izhod za povezovanje LCD TRISB1 = 0; // Sprožilni zatič ameriškega senzorja je poslan kot izhodni zatič TRISB2 = 1; // Odmevni zatič ameriškega senzorja je nastavljen kot vhodni zatič TRISB3 = 0; // RB3 je izhodni zatič za LED TRISD2 = 1; TRISD3 = 1; // Oba zatiča IR senzorja sta deklarirana kot vhod TRISC4 = 0; TRISC5 = 0; // zatiči motorja 1, deklarirani kot izhodni TRISC6 = 0; TRISC7 = 0; // 2 zatiča motorja, prijavljena kot izhodna T1CON = 0x20;
V tem programu bi morali pogosto preverjati razdaljo med senzorjem in objektom, zato smo ustvarili funkcijo z imenom izračunaj_daljavo (), znotraj katere bomo razdaljo merili po metodi, opisani v vadnici za povezovanje senzorjev v ZDA. Koda je prikazana spodaj
void izračuna_dalja () // funkcija za izračun razdalje US {TMR1H = 0; TMR1L = 0; // počistite bitov časovnika Trigger = 1; __zakasni_us (10); Sprožilec = 0; medtem ko (Echo == 0); TMR1ON = 1; medtem ko (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); razdalja = (0,0272 * zajeto) / 2; }
Naslednji korak bi bil primerjati vrednosti ultrazvočnega senzorja in IR senzorja ter robota ustrezno premakniti. Tu sem v tem programu uporabil vrednost cm kot kritično razdaljo, pod katero bi moral robot začeti spreminjati smer. Uporabite lahko želene vrednosti. Če ni predmeta, se robot samo premakne naprej
če (razdalja> 5) {RC4 = 0; RC5 = 1; // Motor 1 naprej RC6 = 1; RC7 = 0; // motor 2 naprej}
Če je predmet zaznan, bo razdalja manjša od cm. V tem primeru upoštevamo vrednosti levega in desnega ultrazvočnega senzorja. Glede na to vrednost se odločimo, da zavijemo levo ali desno. Uporablja se zakasnitev ms, tako da je sprememba vidna smer.
če (RD2 == 0 && RD3 == 1 && razdalja <= 5) // Levi senzor je blokiran {back_off (); RC4 = 1; RC5 = 1; // motor 1 stop RC6 = 1; RC7 = 0; // Motor 2 naprej __delay_ms (500); } izračuna_dalja (); if (RD2 == 1 && RD3 == 0 && distance <= 5) // Desni senzor je blokiran {back_off (); RC4 = 0; RC5 = 1; // Motor 1 naprej RC6 = 1; RC7 = 1; // motor 2 zaustavitev __delay_ms (500); }
Včasih ultrazvočni senzor zazna predmet, vendar ga IR senzorji ne zaznajo. V tem primeru robot privzeto zavije levo. Lahko tudi zasukate desno ali v naključni smeri glede na vaše želje. Če so predmeti na obeh straneh, potem gremo nazaj. Koda za enako dejanje je prikazana spodaj.
izračuna_dalja (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // Oba senzorja sta odprta {back_off (); RC4 = 0; RC5 = 1; // Motor 1 naprej RC6 = 1; RC7 = 1; // motor 2 zaustavitev __delay_ms (500); } izračuna_dalja (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Oba senzorja sta blokirana {back_off (); RC4 = 1; RC5 = 0; // motor 1 vzvratno RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (1000); }
Robot Avoider za ovire v akciji:
Delovanje projekta je zelo zanimivo in zabavno za opazovanje. Ko končate s svojim vezjem in kodo, samo vklopite svojega Bota in ga pustite na tleh. Moral bi biti sposoben prepoznati ovire in se jim pametno izogniti. Tu pa prihaja zabaven del. Kodo lahko spremenite in tako naredite več stvari, na primer tako, da se izogne stopnicam, postane pametnejša s shranjevanjem dragocenih zavojev in kaj ne?
Ta robot vam bo pomagal razumeti osnove programiranja in se naučiti, kako se bo dejanska strojna oprema odzvala na vašo kodo. Vedno je zabavno programirati tega robota in opazovati, kako se vede za kodo v resničnem svetu.
Tu smo uporabili isto PIC ploščo, ki smo jo izdelali za utripanje LED z mikrokrmilnikom PIC, in jo uporabili v drugih projektih PIC Tutorial Series.
Vaš robot bi moral biti podoben tistemu, ki je prikazan na zgornji sliki. Popolno delovanje tega projekta je prikazano v spodnjem videu.
Upam, da ste projekt razumeli in ste uživali pri njegovi izdelavi. Če imate kakršne koli dvome ali ste se zataknili, lahko v razdelku s komentarji objavite svoja vprašanja, jaz pa se bom potrudil odgovoriti nanje.