- Potrebné materiály:
- Koncepcia robota vyhýbajúceho sa prekážkam:
- Schéma zapojenia a vysvetlenie:
- Programovanie mikrokontroléra PIC:
- Robot vyhýbajúcich sa prekážkam v akcii:
Obstacle Avoider Robot je ďalší slávny robot, ktorý vylepšuje vložené projekty. Pre tých, ktorí sú novým robotom vyhýbajúcim sa prekážkam, je to len normálny robot na kolieskach, ktorý dokáže navigovať svoju cestu bez toho, aby narazil do akýchkoľvek prekážok. Existuje mnoho spôsobov, ako postaviť robota na vyhýbanie sa prekážkam v projekte, ktorý bude používať jeden ultrazvukový senzor (predný) a dva IR senzory (ľavý / pravý), aby náš robot mal oči vo všetkých troch smeroch. Takto to urobíte oveľa inteligentnejším a rýchlejším detekciou objektov na všetkých troch stranách a zodpovedajúcim spôsobom s nimi manévrujete. Tu žalujeme mikrokontrolér PIC PIC16F877A pre túto robotu vyhýbajúcu sa prekážkam.
Činnosť robota, ktorý sa vyhýba prekážkam, je možné sledovať z produktu s názvom Domáce upratovacie roboty v reálnom čase. Aj keď sú technológia a snímače použité v týchto zariadeniach oveľa komplikovanejšie, koncepcia zostáva rovnaká. Pozrime sa, čo všetko dokážeme pomocou našich bežných senzorov a mikrokontrolérov PIC.
Skontrolujte tiež naše ďalšie roboty vyhýbajúce sa prekážkam:
- Prekážke vyhýbajúcej sa malinám Pi
- DIY inteligentný robot na vysávanie pomocou Arduina
Potrebné materiály:
- PIC16F877A
- IR senzor (2Nos)
- Ultrazvukový senzor (1Nos)
- DC prevodový motor (2Nos)
- Ovládač motora L293D
- Lehátka (Môžete si tiež vytvoriť vlastné pomocou lepeniek)
- Napájacia banka (akýkoľvek dostupný zdroj napájania)
Koncepcia robota vyhýbajúceho sa prekážkam:
Koncept robota vyhýbajúceho sa prekážkam je veľmi jednoduchý. Senzory používame na zisťovanie prítomnosti objektov v okolí robota a pomocou týchto údajov nezrážame robota s týmito objektmi. Na detekciu objektu môžeme použiť akékoľvek senzory ako IR senzor a ultrazvukový senzor.
V našom robote sme použili americký senzor ako predný senzor a dva infračervené senzory pre ľavý, respektíve pravý. Robot sa pohne dopredu, ak pred ním nie je žiadny predmet. Robot sa teda bude pohybovať vpred, kým ultrazvukový snímač (USA) nezistí akýkoľvek objekt.
Keď je snímačom USA detekovaný objekt, je načase zmeniť smer robota. Môžeme sa otočiť doľava alebo doprava, aby sme určili smer otáčania, pomocou infračerveného senzora skontrolujeme, či sa v blízkosti ľavej alebo pravej strany robota nenachádza nejaký predmet.
Ak je na prednej a pravej strane robota zistená prekážka, robot sa vráti späť a zabočí doľava. Robota prinútime bežať dozadu na určitú vzdialenosť, aby sa počas zákruty nezrazil s predmetom.
Ak je na prednej a ľavej strane robota zistený predmet, robot sa vráti späť a zabočí doprava.
Ak robot dosiahne roh miestnosti, vycíti predmet prítomný vo všetkých štyroch. V takom prípade musíme ísť robotom dozadu, kým sa niektorá zo strán neuvoľní.
Ďalším možným prípadom je , že vpredu bude objekt, ale nemusí byť vľavo ani na pravej strane, v takom prípade sa musíme náhodne otočiť ktorýmkoľvek smerom.
Dúfam, že by to poskytlo približnú predstavu o tom, ako funguje vyhýbanie sa prekážkam. Teraz pokračujme v obvodovom diagrame, aby sme postavili tohto robota a užili si ho v akcii.
Schéma zapojenia a vysvetlenie:
Celý obvodový diagram tohto robota vyhýbajúceho sa prekážkam založeným na PIC je znázornený na obrázku vyššie. Ako vidíte, na detekciu objektov vľavo a vpravo od robota sme použili dva infračervené snímače a ultrazvukový snímač na meranie vzdialenosti objektu, ktorý sa nachádza pred robotom. Na pohon dvoch motorov prítomných v tomto projekte sme tiež použili modul ovládača motora L293D. Sú to len bežné jednosmerné prevodové motory na kolesá, a preto sa dajú ľahko odvodiť. Nasledujúca tabuľka vám pomôže pri spojeniach.
S.No |
Pripojené z |
Pripojený k |
1 |
IR snímač Vynechaný kolík |
RD2 (kolík 21) |
2 |
Infračervený snímač Kolík vpravo |
RD3 (kolík 22) |
4 |
Motor 1 kanál A kolík |
RC4 (kolík 23) |
5 |
Motor 1 kanál B kolík |
RC5 (kolík 25) |
6 |
Motor 2 kanál A pin |
RC6 (kolík 26) |
7 |
Motor 2 kanálový B kolík |
RC7 (kolík 27) |
8 |
Spúšťací kolík USA |
RB1 (kolík 34) |
9 |
Ozubený kolík USA |
RB2 (kolík 35) |
Modul budiča motora ako L293D je povinný, pretože veľkosť prúdu potrebného na chod jednosmerného prevodového motora nemôže byť získavaná I / O pinom mikrokontroléra PIC. Senzory a modul sú napájané z napájacieho zdroja + 5 V, ktorý reguluje 7805. Modul budiča motora je možné napájať aj pomocou napätia +12 V, ale pre tento projekt som zostal na dostupných + 5 V.
Kompletný robot je v mojom prípade napájaný powerbankou. Môžete tiež použiť ľubovoľnú bežnú powerbanku a prejsť časťou regulátora alebo použiť vyššie uvedený obvod a použiť akúkoľvek 9V alebo 12V batériu pre robota, ako je znázornené na schéme zapojenia vyššie. Akonáhle sú vaše pripojenia hotové, nižšie by to vyzeralo asi takto
Programovanie mikrokontroléra PIC:
Naprogramovanie vášho PIC na prácu pre vyhýbajúcu sa prekážkam je naozaj ľahké. Musíme iba prečítať hodnotu týchto troch senzorov a podľa toho riadiť motory. V tomto projekte používame ultrazvukový senzor. Už sme sa naučili, ako prepojiť ultrazvukové rozhranie s mikrokontrolérom PIC, ak ste tu nový, láskavo sa vráťte k tomuto výukovému programu, aby ste pochopili, ako americký snímač pracuje s PIC, pretože tu budem preskakovať podrobnosti, aby ste sa vyhli opakovaniu.
Kompletný program alebo tento robot je uvedený na konci tejto stránky, som ďalej vysvetlil dôležité kúsky programu nižšie.
Ako vieme, všetky programy sa začínajú deklarovaním vstupných a výstupných pinov. Tu sú štyri piny modulu Motor Driver a piny Trigger výstupné piny, zatiaľ čo vstup Echo a dva IR výstupné piny budú vstupné. Mali by sme inicializovať modul Timer 1, aby sme ho mohli používať s ultrazvukovým snímačom.
TRISD = 0x00; // PORTD deklarovaný ako výstup pre prepojenie LCD TRISB1 = 0; // Spúšťací kolík amerického snímača je odoslaný ako výstupný kolík TRISB2 = 1; // Echo pin amerického snímača je nastavený ako vstupný pin TRISB3 = 0; // RB3 je vystupny pin pre LED TRISD2 = 1; TRISD3 = 1; // Oba piny IR snímača sú deklarované ako vstup TRISC4 = 0; TRISC5 = 0; // piny motora 1 deklarované ako výstup TRISC6 = 0; TRISC7 = 0; // Motor 2 piny deklarované ako výstup T1CON = 0x20;
V tomto programe by sme museli pomerne často kontrolovať vzdialenosť medzi snímačom a objektom, preto sme vytvorili funkciu s názvom Calculate_Distance (), vnútri ktorej budeme merať vzdialenosť metódou popísanou v návode na prepojenie snímačov v USA. Kód je uvedený nižšie
void count_distance () // funkcia na výpočet vzdialenosti USA {TMR1H = 0; TMR1L = 0; // vymazanie časovacích bitov Trigger = 1; __delay_us (10); Spúšťač = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); vzdialenosť = (0,0272 * čas) / 2; }
Ďalším krokom by bolo porovnanie hodnôt ultrazvukového snímača a infračerveného snímača a podľa toho pohybovanie robotom. Tu som v tomto programe použil hodnotu cm ako kritickú vzdialenosť, pod ktorou by mal robot začať robiť zmeny v smere. Môžete použiť vaše preferované hodnoty. Ak nie je žiadny predmet, robot sa iba pohne dopredu
if (vzdialenosť> 5) {RC4 = 0; RC5 = 1; // Motor 1 vpred RC6 = 1; RC7 = 0; // Motor 2 vpred}
Ak je detekovaný objekt, vzdialenosť klesne pod cm. V tomto prípade uvažujeme hodnoty ľavého a pravého ultrazvukového snímača. Na základe tejto hodnoty sa rozhodneme odbočiť doľava alebo doprava. Pre viditeľnosť zmeny smeru sa používa oneskorenie ms.
if (RD2 == 0 && RD3 == 1 && vzdialenosť <= 5) // Ľavý senzor je zablokovaný {back_off (); RC4 = 1; RC5 = 1; // Motor 1 zastavenie RC6 = 1; RC7 = 0; // Motor 2 vpred __delay_ms (500); } vypočítať_vzdialenosť (); if (RD2 == 1 && RD3 == 0 && vzdialenosť <= 5) // Pravý snímač je blokovaný {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vpred RC6 = 1; RC7 = 1; // Motor 2 zastávka __delay_ms (500); }
Ultrazvukový senzor niekedy detekoval objekt, ale IR senzor by ho nezistil. V takom prípade sa robot štandardne otočí doľava. Môžete ho tiež otočiť doprava alebo náhodným smerom na základe vašich preferencií. Ak sú na oboch stranách predmety, urobíme to posunom dozadu. Kód na vykonanie rovnakého postupu je uvedený nižšie.
vypočítať_vzdialenosť (); if (RD2 == 0 && RD3 == 0 && vzdialenosť <= 5) // Oba snímače sú otvorené {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vpred RC6 = 1; RC7 = 1; // Motor 2 zastávka __delay_ms (500); } vypočítať_vzdialenosť (); if (RD2 == 1 && RD3 == 1 && vzdialenosť <= 5) // Oba senzory sú zablokované {back_off (); RC4 = 1; RC5 = 0; // Motor 1 spiatočka RC6 = 1; RC7 = 1; // Motor 2 zastávka __delay_ms (1000); }
Robot vyhýbajúcich sa prekážkam v akcii:
Fungovanie projektu je veľmi zaujímavé a je zábavné ho sledovať. Keď skončíte s okruhom a kódom, stačí zapnúť Bot a nechať ho na zemi. Mala by byť schopná identifikovať prekážky a vyhnúť sa im inteligentne. Tu však prichádza zábavná časť. Môžete upraviť kód a umožniť mu robiť viac vecí, napríklad vyhnúť sa schodom, urobiť ho inteligentnejším ukladaním drahých otočení a čo nie?
Tento robot vám pomôže porozumieť základom programovania a naučí sa, ako bude skutočný hardvér reagovať na váš kód. Naprogramovať tohto robota a sledovať, ako sa správa v kóde v reálnom svete, je vždy zábavné.
Tu sme použili tú istú dosku PIC perf, ktorú sme vyrobili na blikanie LED pomocou mikrokontroléra PIC a túto dosku sme použili v ďalších projektoch série PIC Tutorial.
Váš robot by mal vyzerať podobne ako ten, ktorý je zobrazený na obrázku vyššie. Kompletné fungovanie tohto projektu je zobrazené na videu nižšie.
Dúfam, že ste pochopili projekt a páčilo sa vám jeho zostavenie. Ak máte pochybnosti alebo ste uviazli, môžete použiť svoje komentáre v sekcii komentárov a pokúsim sa ich zodpovedať.