- Szükséges anyagok:
- Az akadálykerülés robotjának fogalma:
- Áramkör és magyarázat:
- A PIC mikrovezérlő programozása:
- Akadálykerülő robot működés közben:
Az Obstacle Avoider Robot egy másik híres robot, amely beágyazott projekteket színesít. Azok számára, akik új Obstacle avoider robotok, ez csak egy normál kerekes robot, amely képes akadálytalanul eljutni. Az Obstacle avoider robot felépítésének számos módja van abban a projektben, amelyben egy ultrahangos érzékelőt (elöl) és két IR érzékelőt (balra / jobbra) fogunk használni, hogy robotunknak mindhárom irányban szeme legyen. Így sokkal okosabbá és gyorsabbá teheti azáltal, hogy mind a három oldalon tárgyakat észlel, és ennek megfelelően manőverez. Itt bepereljük a PIC16F877A PIC mikrovezérlőt ezért az akadálykerülő robotért.
Az akadályokat elkerülõ robot mûködése az otthoni tisztító robot nevû valós idejû termékbõl figyelhetõ meg. Bár az ezekben alkalmazott technológia és érzékelők nagyon bonyolultak, a koncepció ugyanaz marad. Lássuk, mennyit érhetünk el normál érzékelőink és PIC mikrokontrollereink használatával.
Ellenőrizze a többi akadálykerülő robotunkat is:
- Málna Pi alapú akadály elkerülése robot
- DIY intelligens porszívó robot Arduino segítségével
Szükséges anyagok:
- PIC16F877A
- IR érzékelő (2Nos)
- Ultrahangos érzékelő (1Nos)
- DC sebességváltó motor (2Nos)
- L293D motorvezérlő
- Cheeses (saját is készíthet kartonokat)
- Teljesítménybank (bármilyen rendelkezésre álló áramforrás)
Az akadálykerülés robotjának fogalma:
Az akadálykerülő robot koncepciója nagyon egyszerű. Szenzorok segítségével észleljük a robot körüli tárgyak jelenlétét, és ezeket az adatokat arra használjuk, hogy ne ütközzünk a robot felett. Egy objektum észleléséhez használhatunk bármilyen érzékelőt, például IR érzékelőt és Ultrahangos érzékelőt.
Robotunkban az amerikai érzékelőt használtuk első érzékelőként, illetve két IR-érzékelőt a bal, illetve a jobb oldalon. A robot akkor halad előre, ha nincs előtte tárgy. Tehát a robot addig halad előre, amíg az ultrahangos (USA) érzékelő nem észlel semmilyen tárgyat.
Amikor az amerikai érzékelő észlel egy tárgyat, ideje megváltoztatni a robot irányát. Vagy fordulhatunk balra vagy jobbra, hogy meghatározzuk az irányt, az IR szenzor segítségével ellenőrizzük, hogy van-e valami tárgy a robot bal vagy jobb oldala közelében.
Ha a robot elülső és jobb oldalán észlelnek kifogást, akkor a robot visszajön és balra fordul. A robotot arra késztetjük, hogy egy bizonyos távolságot hátrafelé szaladjon, hogy a kanyarodás közben ne ütközzen össze a tárgyon.
Ha a robot elülső és bal oldalán kifogást észlelnek, akkor a robot visszajön és jobbra fordul.
Ha a robot eléri a szoba sarkát, akkor mind a négyben lévő tárgyat érzékeli. Ebben az esetben vissza kell vezetnünk a robotot, amíg bármelyik oldal szabaddá nem válik.
Egy másik lehetséges eset az , hogy lesz egy tárgy elöl, de lehet, hogy sem a bal, sem a jobb oldalon nincs semmilyen tárgy, ebben az esetben véletlenszerűen kell bármelyik irányba fordulnunk.
Remélem, ez durva képet adott volna az Obstacle avoider működéséről, folytassuk a Circuit Diagrammal, hogy felépítsük ezt a botot, és élvezzük működés közben.
Áramkör és magyarázat:
A fenti képen látható ennek a PIC-alapú akadálykerülő robotnak az áramköre. Mint látható, két IR szenzort használtunk a robot bal és jobb oldalán lévő tárgyak észlelésére, valamint egy ultrahangos érzékelővel a robot előtt lévő objektum távolságának mérésére. A projektben jelen lévő két motor meghajtására egy L293D motorvezérlő modult is használtunk. Ezek csak közönséges egyenáramú motorok a kerekekhez, ezért nagyon könnyen levezethetők. Az alábbi táblázat segítséget nyújt a kapcsolatokhoz.
S.No |
Csatlakozás innen: |
Csatlakozva valamihez |
1 |
IR-érzékelő Bal oldali csap |
RD2 (21. tű) |
2 |
IR-érzékelő Jobb oldali csap |
RD3 (22. tű) |
4 |
1. motor 1. csatorna A tű |
RC4 (23. érintkező) |
5. |
1. motor B csatornája |
RC5 (25. érintkező) |
6. |
2. motor A csatornája |
RC6 (26. érintkező) |
7 |
2. motor B csatornája |
RC7 (27. érintkező) |
8. |
USA kiváltó csap |
RB1 (34. tű) |
9. |
US Echo Pin |
RB2 (35-ös érintkező) |
Az L293D- hez hasonló motorvezérlő modul kötelező, mivel a DC-hajtómotor működtetéséhez szükséges árammennyiséget nem tudja beszerezni a PIC mikrokontroller I / O-csapja. Az érzékelőket és a modult a + 5V táp táplálja, amelyet a 7805 szabályoz. A motorvezérlő modul még 12 V-os feszültséggel is táplálható, de ehhez a projekthez most ragaszkodtam a rendelkezésre álló + 5 V-hoz.
A teljes robotot egy Power bank hajtja az én esetemben. Használhat bármilyen szokásos tápegységet is, és áthaladva a szabályozó szakaszon, vagy használhatja a fenti áramkört, és bármilyen 9V vagy 12V akkumulátort használhat a robothoz, a fenti kapcsolási rajz szerint. Miután a kapcsolatok elkészültek, az alábbiakban valami ilyennek tűnik
A PIC mikrovezérlő programozása:
A PIC programozása egy Obstacle avoider munkához nagyon egyszerű. Csak le kell olvasnunk ennek a három érzékelőnek az értékét, és ennek megfelelően kell hajtanunk a motorokat. Ebben a projektben ultrahangos érzékelőt használunk. Már megtanultuk az ultrahangos interfészt a PIC mikrovezérlővel, ha új vagy itt, kérjük, térjen vissza ehhez a bemutatóhoz, hogy megértse, hogyan működik egy amerikai szenzor egy PIC-szel, mivel az ismétlés elkerülése érdekében itt kihagyom a részleteket.
A teljes program vagy ez a robot az oldal végén található, az alábbiakban részletesen kifejtettem a program fontos darabjait.
Mint tudjuk, minden program az Input and Output pin deklarációkkal kezdődik. Itt a Motor Driver modul négy csapja és a Trigger csapok a kimeneti csapok, míg az Echo és két IR kimenő tüskék kerülnek bemenetre. Inicializálnunk kell a Timer 1 modult, hogy az ultrahangos érzékelővel együtt használhassuk.
TRISD = 0x00; // a PORTD az interfész LCD TRISB1 = 0 kimeneteként deklarálva; // Az USA-érzékelő kioldócsapját TRISB2 = 1 kimeneti tűként küldi el; // Az amerikai érzékelő visszhangcsapja TRISB3 = 0 bemeneti tűként van beállítva; // RB3 a TRISD2 LED = 1 kimeneti csapja; TRISD3 = 1; // Mindkét IR érzékelő tüske deklarált bemenetként TRISC4 = 0; TRISC5 = 0; // Az 1. motor csapjai kimenetként deklarálva TRISC6 = 0; TRISC7 = 0; // Motor 2 érintkezõje kimenetként deklarálva T1CON = 0x20;
Ebben a programban elég gyakran kellene ellenőriznünk a szenzor és az objektum közötti távolságot, ezért hoztunk létre egy calc_distance () nevű függvényt, amelyen belül megmérjük a távolságot az amerikai érzékelő interfész oktatóanyagában tárgyalt módszerrel. A kód alább látható
void calc_distance () // függvény az USA távolságának kiszámításához {TMR1H = 0; TMR1L = 0; // törli az időzítő biteket Trigger = 1; __késleltetés_ (10); Kiváltó = 0; míg (Echo == 0); TMR1ON = 1; míg (Echo == 1); TMR1ON = 0; idő: = (TMR1L - (TMR1H << 8)); távolság = (0,0272 * felvett idő) / 2; }
A következő lépés az ultrahangos érzékelő és az infravörös érzékelő értékeinek összehasonlítása lenne, és ennek megfelelően mozgatná a robotot. Itt Ebben a programban cm értéket használtam, mint azt a kritikus távolságot, amely alatt a robotnak el kell kezdenie változtatni az irányt. Használhatja a preferált értékeket. Ha nincs tárgy, a robot csak halad előre
if (távolság> 5) {RC4 = 0; RC5 = 1; // 1. motor előre RC6 = 1; RC7 = 0; // 2. motor előre}
Ha egy tárgyat észlel, akkor a távolság cm alatt lesz. Ebben az esetben a bal és jobb ultrahangos érzékelő értékeit vesszük figyelembe. Ezen érték alapján úgy döntünk, hogy balra vagy jobbra fordulunk. Ms késleltetést használunk, hogy a változás iránya látható legyen.
if (RD2 == 0 && RD3 == 1 && távolság <= 5) // A bal érzékelő blokkolva van {back_off (); RC4 = 1; RC5 = 1; // Motor 1 leállás RC6 = 1; RC7 = 0; // 2. motor előre __ késleltetés_ms (500); } kiszámítja a távolságot (); if (RD2 == 1 && RD3 == 0 && távolság <= 5) // A jobb oldali érzékelő blokkolva van {back_off (); RC4 = 0; RC5 = 1; // 1. motor előre RC6 = 1; RC7 = 1; // 2. motor leállítása __delay_ms (500); }
Néha az ultrahangos érzékelő észlelt egy tárgyat, de az infravörös érzékelők nem érzékeltek semmilyen tárgyat. Ebben az esetben a robot alapértelmezés szerint balra fordul. Azt is megteheti, hogy jobbra vagy véletlenszerű irányba forduljon az Ön preferenciái alapján. Ha mindkét oldalon vannak tárgyak, akkor visszafelé haladunk. Az ehhez hasonló kód az alábbiakban látható.
kiszámítja a távolságot (); if (RD2 == 0 && RD3 == 0 && távolság <= 5) // Mindkét érzékelő nyitva van {back_off (); RC4 = 0; RC5 = 1; // 1. motor előre RC6 = 1; RC7 = 1; // 2. motor leállítása __delay_ms (500); } kiszámítja a távolságot (); if (RD2 == 1 && RD3 == 1 && távolság <= 5) // Mindkét érzékelő blokkolva van {back_off (); RC4 = 1; RC5 = 0; // 1. motor hátramenet RC6 = 1; RC7 = 1; // Motor 2 stop __delay_ms (1000); }
Akadálykerülő robot működés közben:
A projekt működése nagyon érdekes és szórakoztató nézni. Miután végzett az áramkörrel és a kóddal, csak kapcsolja be a botot, és hagyja a földön. Képesnek kell lennie az akadályok felismerésére és okos elkerülésére. De itt jön a szórakoztató rész. Módosíthatja a kódot, és több olyan dologra késztetheti, mint például a lépcső elkerülése, az értékes fordulatok tárolásával okosabbá tétele, és mi nem?
Ez a robot segít megérteni a programozás alapjait, és megtudhatja, hogyan reagál egy tényleges hardver a kódjára. Mindig szórakoztató programozni ezt a robotot, és figyelni, hogyan viselkedik a kód a valós világban.
Itt ugyanazt a PIC perf táblát használtuk, amelyet a LED villogásához PIC mikrovezérlővel készítettünk, és ezt a lapot a PIC Tutorial sorozat más projektjeiben is használtuk.
Robotjának valami hasonlónak kell lennie, mint a fenti képen látható. A projekt teljes működését az alábbi videó mutatja.
Remélem, megértette a projektet, és élvezett egy ilyen építését. Ha kétségei merülnek fel vagy elakadt, használhatja a megjegyzés rovatban kérdéseit, és megpróbálok minden tőlem telhetőt megválaszolni.