- Potřebné materiály:
- Koncept vyhýbání se překážkám robotem:
- Schéma zapojení a vysvětlení:
- Programování mikrokontroléru PIC:
- Robot vyhýbajících se překážkám v akci:
Obstacle Avoider Robot je další slavný robot, který okoření vložené projekty. Pro ty, kteří jsou novým robotem vyhýbajícím se překážkám, je to jen normální robot na kolečkách, který se dokáže pohybovat po cestě bez narážení na překážky. Existuje mnoho způsobů, jak v projektu postavit robota pro vyhýbání se překážkám, použijeme jeden ultrazvukový senzor (přední) a dva IR senzory (levý / pravý), aby náš robot měl oči ve všech třech směrech. Tímto způsobem to můžete udělat mnohem chytřejší a rychlejší detekcí objektů na všech třech stranách a odpovídajícím způsobem manévrovat. Tady žalujeme mikrokontrolér PIC PIC16F877A pro tuto robotu vyhýbající se překážkám.
Činnost robota vyhýbajícího se překážkám lze pozorovat z produktu v reálném čase, který se nazývá domácí čisticí roboti. Ačkoli technologie a senzory použité v těchto zařízeních jsou mnohem komplikovanější, koncept zůstává stejný. Podívejme se, kolik toho můžeme dosáhnout pomocí našich normálních senzorů a mikrokontrolérů PIC.
Zkontrolujte také naše další roboty zabraňující překážkám:
- Robot se vyhýbá překážkám založeným na malině Pi
- Inteligentní vysavač pro domácí kutily pomocí Arduina
Potřebné materiály:
- PIC16F877A
- IR senzor (2Nos)
- Ultrazvukový senzor (1Nos)
- Stejnosměrný převodový motor (2Nos)
- Ovladač motoru L293D
- Lehátka (Můžete si také vytvořit vlastní pomocí lepenek)
- Power bank (jakýkoli dostupný zdroj energie)
Koncept vyhýbání se překážkám robotem:
Koncept vyhýbání se překážkám je velmi jednoduchý. Pomocí senzorů detekujeme přítomnost objektů v okolí robota a pomocí těchto dat nekolidujeme robota s těmito objekty. K detekci objektu můžeme použít jakékoli použití senzorů, jako je infračervený senzor a ultrazvukový senzor.
V našem robotu jsme použili americký senzor jako přední senzor a dva IR senzory pro levý a pravý. Robot se pohne vpřed, pokud před ním není žádný předmět. Robot se tedy bude pohybovat vpřed, dokud ultrazvukový senzor nezjistí žádný předmět.
Když je senzor detekován objektem v USA, je čas změnit směr robota. Můžeme se otočit doleva nebo doprava, abychom se rozhodli směr otáčení, pomocí infračerveného senzoru zkontrolujeme, zda se v blízkosti levé nebo pravé strany robota nenachází nějaký předmět.
Pokud je na přední a pravé straně robota detekován předmět, robot se vrátí a zahne doleva. Robota přimíme, aby běžel dozadu na určitou vzdálenost, aby se při zatáčce nesrazil s objektem.
Pokud je na přední a levé straně robota detekován předmět, robot se vrátí a zahne doprava.
Pokud robot dosáhne rohu místnosti, vycítí předmět přítomný ve všech čtyřech. V tomto případě musíme robotem jet dozadu, dokud se některá ze stran neuvolní.
Dalším možným případem je, že před sebou bude nějaký objekt, ale nemusí tam být žádný objekt ani na levé, ani na pravé straně, v tomto případě se musíme náhodně otočit kterýmkoli směrem.
Doufám, že by to poskytlo přibližnou představu o tom, jak funguje Vyhýbač překážek. Nyní pojďme k Obvodnímu diagramu, abychom postavili tohoto robota a užili si ho v akci.
Schéma zapojení a vysvětlení:
Kompletní schéma zapojení tohoto robota vyhýbajícího se překážkám založeného na PIC je uvedeno na obrázku výše. Jak vidíte, použili jsme dva infračervené senzory k detekci objektů nalevo a napravo od robota a ultrazvukový senzor k měření vzdálenosti objektu, který je před robotem. K pohonu dvou motorů přítomných v tomto projektu jsme také použili modul ovladače motoru L293D. Jedná se pouze o běžné stejnosměrné převodové motory pro kola, a proto je lze snadno odvodit. Následující tabulka vám pomůže při připojení.
S.No |
Připojeno od |
Připojen k |
1 |
IR senzor Vynechaný kolík |
RD2 (vývod 21) |
2 |
IR senzor Přímý kolík |
RD3 (vývod 22) |
4 |
Motor 1 kanál A pin |
RC4 (vývod 23) |
5 |
Motor 1 kanál B kolík |
RC5 (kolík 25) |
6 |
Motor 2kanálový A kolík |
RC6 (vývod 26) |
7 |
Motor 2kanálový B kolík |
RC7 (vývod 27) |
8 |
Spouštěcí kolík USA |
RB1 (vývod 34) |
9 |
US Echo Pin |
RB2 (kolík 35) |
Modul ovladače motoru, jako je L293D, je povinný, protože množství proudu požadovaného pro provoz stejnosměrného převodového motoru nemůže být získáváno I / O pinem mikrokontroléru PIC. Senzory a modul jsou napájeny napájením + 5 V, které je regulováno 7805. Modul ovladače motoru může být napájen i pomocí + 12V, ale pro tento projekt jsem se jen přichytil na dostupných + 5 V.
Celý robot je v mém případě napájen Power bankou. Můžete také použít jakoukoli běžnou napájecí banku a projít regulační sekcí nebo použít výše uvedený obvod a použít jakoukoli 9V nebo 12V baterii pro robota, jak je znázorněno na schématu výše. Jakmile jsou vaše připojení hotová, níže by to vypadalo nějak takto
Programování mikrokontroléru PIC:
Naprogramování PIC tak, aby pracovalo s vyhýbající se překážkám, je opravdu snadné. Musíme přečíst hodnotu těchto tří senzorů a podle toho řídit motory. V tomto projektu používáme ultrazvukový senzor. Už jsme se naučili, jak propojit ultrazvuk s mikrokontrolérem PIC, pokud jste zde noví, laskavě se vraťte k tomuto tutoriálu, abyste pochopili, jak americký senzor pracuje s PIC, protože zde přeskočím podrobnosti, abych se vyhnul opakování.
Kompletní program nebo tento robot je uveden na konci této stránky, jsem dále vysvětlil důležité kousky programu níže.
Jak víme, všechny programy začínají deklaracemi vstupních a výstupních pinů. Zde jsou čtyři piny modulu Motor Driver a piny Trigger výstupními piny, zatímco vstup Echo a dva IR out piny budou vstupovány. Měli bychom inicializovat modul Timer 1, abychom jej mohli používat s ultrazvukovým senzorem.
TRISD = 0x00; // PORTD deklarován jako výstup pro propojení LCD TRISB1 = 0; // Spouštěcí kolík amerického snímače je odeslán jako výstupní kolík TRISB2 = 1; // Echo pin amerického senzoru je nastaven jako vstupní pin TRISB3 = 0; // RB3 je výstupní pin pro LED TRISD2 = 1; TRISD3 = 1; // Oba piny infračerveného senzoru jsou deklarovány jako vstupní TRISC4 = 0; TRISC5 = 0; // Piny motoru 1 deklarované jako výstup TRISC6 = 0; TRISC7 = 0; // Motor 2 piny deklarované jako výstup T1CON = 0x20;
V tomto programu bychom museli poměrně často kontrolovat vzdálenost mezi senzorem a objektem, proto jsme vytvořili funkci s názvem Calc_distance (), uvnitř které budeme měřit vzdálenost metodou popsanou v tutoriálu o propojení senzorů v USA. Kód je uveden níže
void spočítat_vzdálenost () // funkce pro výpočet vzdálenosti USA {TMR1H = 0; TMR1L = 0; // vymazání časovacích bitů Trigger = 1; __delay_us (10); Spouštěč = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); vzdálenost = (0,0272 * čas) / 2; }
Dalším krokem by bylo porovnat hodnoty ultrazvukového senzoru a infračerveného senzoru a podle toho pohybovat robotem. Zde jsem v tomto programu použil hodnotu cm jako kritickou vzdálenost, pod kterou by měl robot začít provádět změny směru. Můžete použít upřednostňované hodnoty. Pokud tam není žádný předmět, robot se jen pohybuje vpřed
if (vzdálenost> 5) {RC4 = 0; RC5 = 1; // Motor 1 vpřed RC6 = 1; RC7 = 0; // Motor 2 vpřed}
Pokud je detekován objekt, pak vzdálenost klesne pod cm. V tomto případě uvažujeme hodnoty levého a pravého ultrazvukového senzoru. Na základě této hodnoty se rozhodneme zahnout doleva nebo doprava. Zpoždění ms se používá, aby byla viditelná změna směru.
if (RD2 == 0 && RD3 == 1 && vzdálenost <= 5) // Levý senzor je blokován {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stop RC6 = 1; RC7 = 0; // Motor 2 vpřed __delay_ms (500); } vypočítat_vzdálenost (); if (RD2 == 1 && RD3 == 0 && vzdálenost <= 5) // Pravý senzor je blokován {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vpřed RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); }
Ultrazvukový senzor někdy detekoval objekt, ale IR senzor by nezjistil žádný objekt. V tomto případě se robot ve výchozím nastavení otočí doleva. Podle svých preferencí jej také můžete otočit doprava nebo v náhodném směru. Pokud jsou na obou stranách objekty, uděláme to zpět. Kód pro provedení stejného postupu je uveden níže.
vypočítat_vzdálenost (); if (RD2 == 0 && RD3 == 0 && vzdálenost <= 5) // Oba senzory jsou otevřené {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vpřed RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (500); } vypočítat_vzdálenost (); if (RD2 == 1 && RD3 == 1 && vzdálenost <= 5) // Oba senzory jsou blokovány {back_off (); RC4 = 1; RC5 = 0; // Motor 1 zpátečka RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (1000); }
Robot vyhýbajících se překážkám v akci:
Práce na projektu je velmi zajímavá a zábavná. Jakmile svůj obvod a kód dokončíte, stačí zapnout Bot a nechat jej na zemi. Mělo by být schopné identifikovat překážky a chytře se jim vyhnout. Ale tady přichází ta zábavná část. Můžete upravit kód a přimět ho dělat více věcí, jako je vyhýbat se schodům, dělat to chytřejší ukládáním drahých tahů a co ne?
Tento robot vám pomůže porozumět základům programování a naučí se, jak bude skutečný hardware reagovat na váš kód. Naprogramovat tohoto robota a sledovat, jak se chová pro kód ve skutečném světě, je vždy zábavné.
Zde jsme použili stejnou desku PIC perf, kterou jsme vyrobili pro blikání LED pomocí mikrokontroléru PIC a tuto desku jsme použili v dalších projektech řady PIC Tutorial.
Váš robot by měl vypadat podobně jako na obrázku výše. Kompletní fungování tohoto projektu je uvedeno ve videu níže.
Doufám, že jste pochopili projekt a užili jste si jeho stavbu. Máte-li jakékoli pochybnosti nebo uvíznete, můžete použít své komentáře k zaslání svých otázek a já se pokusím odpovědět na tyto otázky.