a micromouse egy robot, amely labirintusmegoldó algoritmust használ egy labirintus probléma önálló megoldására. Ebben a bejegyzésben megosztom, hogy a csapatomnak és nekem hogyan sikerült ezt megtenni néhány nagyon hasznos ember nagyon szükséges útmutatásával.
az UC Berkeley őszi félévében egy diák által vezetett osztályba vettem egy robotot, amely önállóan megoldja a labirintus problémáját. A gondolataim az, hogy ha UC Berkeley-ben vagy, érdekel az elektronikai projektek, és nagyon irányított programot keres fantasztikus oktatókkal, ez egy remek hely! Számomra ez a tanfolyam különleges, mert itt kezdtem el a robotika, a bütykölés és a gyártás útját, és ez az, amit nagyon élveztem. Ez a tanfolyam nagyszerű alapokat adott nekem,és az út során többet tanultam, amikor új projektekbe kezdtem.
itt van egy durva utasításkészlet arról, hogyan kezdheti el a Micromouse projektet kezdőként:
- Alkatrészlista
- a hardver alkatrészek összerakása
- a Teensy mikrovezérlő beállítása & Arduino IDE
- Teensy pinOut Bevezetés
- érzékelők használata
- feszültségszabályozás
- H híd Motor vezérlő a motor vezérléséhez
- a Hall Effect Rotorary Encoder használatával
- az egészet összerakva
- kódolás
- hogyan lehet irányítani a hardvert kóddal
- érzékelés
- PID vezérlés
- labirintus megoldó algoritmus
- finomhangolás
- how to troubleshoot
Parts List
- mechanikus alkatrészek
- alváz
- kerekek
- sok ragasztószalag, hacsak nem szándékozik 3D nyomtatni egyedi alkatrészeket, vagy pénzt költeni egyedi tartók vásárlására
- elektromos alkatrészek
- Breadboard, vezetékek
- két 5 voltos mini egyenáramú motor
- egy kis 7-9 voltos akkumulátor
- 7805 feszültségszabályozó
- Hall érzékelő rotorary encoder
- H-híd
- Teensy (vagy bármilyen kis mikrovezérlő. Arduino is működik!)
- két távolságérzékelő (infravörös érzékelőt használtam)
a hardver összerakása
2.1 A Teensy mikrovezérlő beállítása & Arduino IDE
a Teensy egy mikrovezérlő, amely úgy működik, mint egy Arduino. Az egyik nagy előnye a mérete. Ahogy a neve is sugallja, a Teenst kicsi és kompakt, ami nagyszerű!
kezdjük azzal, hogy a Teensy-t néhány fejléccsap tetejére helyezzük, majd a fejléc csapjait a Teensy-re forrasztjuk, majd szilárdan rögzítjük a kenyérlemezünkre.
ha még nem tette meg, telepítse az Arduino IDE-t a számítógépére. https://www.arduino.cc/en/Main/Software
nagyon fontos: ha Teensy 3.1-et használ, győződjön meg róla, hogy telepítette az Arduino verzióját, amely kompatibilis a Teensy-vel. Itt található a Link a Teensyduino telepítéséhez, hogy a Teensy együttműködhessen az Arduino IDE-vel: https://www.pjrc.com/teensy/td_download.html
2.2 Az áramkör
2.21) Az akkumulátor tápellátása: az áramellátásnak legalább 7,2 V-nak kell lennie. A körzeti egyezmény szerint ezt hívhatjuk Vcc2-nek.
2.22) 5V szabályozott tápegység: az elektronikus chip alkatrészeknek gyakran stabil tápfeszültségre van szükségük a megfelelő működéshez. A probléma az, hogy olyan eszközöknél, mint például a motorok, amelyek nagy változó mennyiségű áramot képesek felvenni, ez a tápfeszültség csökkenését okozza. Ezért van szükségünk feszültségszabályozóra, hogy ezt a Stabil 5V-ot a többi elektronikus alkatrészhez szállítsuk.
2.23) mikrovezérlő: ez minden olyan robot agya, amely úgy tűnik, hogy bármilyen intelligens gondolkodással rendelkezik. A mikrokontroller az elején bonyolultnak tűnhet, de az induláshoz valójában nem olyan nehéz. Itt vannak az alapok: egyszerű, de nagyon fontos.
2.23 a) digitális bemeneti csapok: képesek bináris jelek olvasására és írására. A különböző mikrokontrollerek logikai szintje eltérő, de a legtöbb mikrokontroller logikai szintje 3,3 V vagy 5 V. például az Arduino egy mikrokontroller, amelynek logikai szintje 5 V. olvasáskor az 5V közelében lévő feszültség magas, míg a 0V közelében lévő feszültség alacsony.
2.23 B) impulzusszélesség-Modulált (PWM) csapok: ezek digitális bemeneti csapok, amelyek különleges képességgel rendelkeznek impulzusszélesség-modulált jel kiadására. Ez egy digitális jel, amely az idő bizonyos százalékában magas, az idő másik százalékában pedig alacsony. Ez az úgynevezett munkaciklus. A 60% – os terhelhetőségű PWM jel a logikai szint magas az idő 60% – ában, míg a logikai szint alacsony az idő 40% – ában. Tudjon meg többet a PWM-ről itt.
2.23 c) Analóg Csapok: ezek a csapok képesek analóg feszültséget olvasni bárhol 0-tól az említett voltig. Az Arduino esetében 0-5V. különböző felbontással olvashatják, attól függően, hogy hány bit analóg-digitális átalakítót használnak. Egy 8 bites analóg-digitális átalakító 2^8 = 256 felbontást képes olvasni. 5V-os logikai szint esetén 5V/256 = 19,5 mV pontossággal képes olvasni.
2.23 d) digitális megszakítások: A mikrokontrollerek néhány digitális csapja megszakítási jelként konfigurálható. A megszakítás nagyon klassz. Ha egy pin van beállítva, mint egy megszakítás pin, azt észleli, vagy (1) egy emelkedő jel él (2) egy csökkenő jel él vagy (3) változást logikai szinten. Ezek bármelyike kiváltja azt, amit megszakítási szolgáltatási rutinnak (ISR) hívunk. Az ISR egy rövid függvény a kódban, amely akkor aktiválódik, amikor megszakítást észlel.
2.26) motorok: a motorok olyan eszközök, amelyek feszültség esetén fordulnak. Ebben az esetben a csiszolt egyenáramú motort használjuk. Azért nevezték el, mert van benne egy kommutátor DC kefe, amely segít abban, hogy feszültség esetén megfelelően forduljon. A motorok általában nagy áramot húznak, és minden motornak van egy bizonyos feszültségteljesítménye. Amikor a motorok megfordulnak, hátsó emf-et termelnek. Ez ellentmondásosnak tűnhet, de a maximális fordulatszámon forgó motor a hátsó emf miatt a legkevesebb áramot veszi fel. Éppen ellenkezőleg, az elakadt motor (azaz mozogni akar, de a külső erők miatt nem tud) vonzza a legtöbb áramot.
2.25) motorvezérlő: erre a motor sebességének/irányának mikrokontroller segítségével történő szabályozásához van szükség. Ennek oka az, hogy a mikrokontroller nem képes elegendő feszültséget vagy áramot szolgáltatni a motor meghajtásához. Ezenkívül, amikor a motorok forognak, a generált hátsó emf könnyen károsíthatja a mikrokontrollert. A kettő között interfészre van szükség a motor sebességének és irányának szabályozásához. A használt motorvezérlő egy SN754410 négyszeres Half-H meghajtó volt. Amit a motorvezérlő csinál, az az, hogy a mikrovezérlőből érkező jelet (általában impulzusszélesség-modulált jelet) veszi, majd aktiválja a digitális kapcsolót az akkumulátorról a motorra. Mit csinál, hogy bekapcsolja a digitális kapcsolót az akkumulátorról a motorra rendkívül gyorsan. Ha ez a digitális kapcsoló az idő 100% – ában (vagy 100% – os üzemi ciklusban) van bekapcsolva, a motor teljes teljesítményen működik. Ha a digitális kapcsoló csak az idő 50% – ában van bekapcsolva, akkor a motor 50% – os teljesítményen működik.
2.26) kódolók: a kódolók okos eszközök, amelyek érzékelik a mozgást. Mint például, néhány kódoló érzékeli, hogy hányszor forog egy kerék, mások még pontosabbak, hogy pontosan megmondják, hogy a robotkar milyen szögben fordult stb. A Mikromouse esetében olyan kódolókat használunk, amelyek érzékelik, hogy hányszor fordult meg egy kerék. Vannak hall-effektus-kódolók vagy optikai kódolók. Kétféle kódoló, de alapvetően ugyanazt csinálja. Digitális impulzust váltanak ki, amikor egy kerék elfordul! A hall-effektus kódoló működése az, hogy van egy kis állandó mágnes valamiben, amely a motor tengelyéhez van rögzítve. Amikor a motor megfordul, a mágnes is megfordul. Vannak olyan érzékelők, amelyek érzékelik, amikor a mágnes elhaladt. Amikor ez megtörténik, olyan impulzust küld, amelyet egy mikrokontroller képes olvasni. Ezt a jelet általában egy digitális megszakító pin-kódként konfigurált pin-kódra küldjük.
2.27) infravörös távolság érzékelők: érzékeli távolság infravörös. Amit csinál, az az, hogy infravörös jelet bocsát ki, és megvárja, amíg a jel visszapattan, hogy meghatározza, milyen messze van az objektum tőle. Kísérletezhet, de ha ferde felületről eltéríti a jelet, előfordulhat, hogy nem kap leolvasást az infravörös érzékelőről. Ez nem olyan ideális. Ez az infravörös érzékelő korlátozott hatótávolsággal is rendelkezik, amely képes érzékelni a távolságokat. A piros vezeték az 5 V-os teljesítményhez, a fekete vezeték a GND-hez, a sárga vezeték a jelhez. Ehhez az infravörös érzékelőhöz, attól függően, hogy az infravörös érzékelő milyen mértékben érzékeli az objektumot, más analóg feszültséget ad ki. Mit tehetünk, hogy olvassa el, hogy az analóg feszültség egy mikro-vezérlő. Olvassa el az adatlapot itt, hogy további információkat tudjon meg az infravörös érzékelőről.
2.3 kapcsolási rajzok & huzalozás
itt van egy durva kapcsolási rajz. Megjegyzés: nem határoztam meg pontosan, hogy mely csapokhoz kell csatlakoztatni a vezetékeket. Ennek oka az, hogy a pin-számok attól függően változnak, hogy melyik mikrovezérlőt használja, de itt, megadom az átfogó elveket:
a jeladó jeleit digitális megszakító tűre kell vezetni. Így, amikor jelet küld, a mikrokontroller tudja, hogy a kerék 1 fordulót fordult.
az infravörös érzékelő jeleit analóg bemeneti tűre kell kötni.
a motorvezérlőbe táplált jeleknek egy PWM csapból kell származniuk.
*helyezze kapcsolási rajz
3.0 Kód & Controls:
nem fogok kiküldetés kódot, de itt van néhány általános fogalmak:
3.1 hogyan lehet az egeret mozgatni egyenes vagy viszont:
ez az egér vezérlése differenciáltan. Két kerék van, mindkét keréken két motorral. Ha mindkét kerék azonos sebességgel forog, az egér egyenesen megy. Ha a bal kerék felgyorsul, miközben a jobb kerék lelassul, az egér jobbra fordul. Ezt differenciál vezérlésnek nevezik.
3.2 Controls & hibajavítás
de meg kell gondolni, hogyan kell irányítani az egeret. Hogyan érjük el, hogy mozogjon a labirintusban anélkül, hogy falnak ütközne? Azt gondolhatnánk, hogy két egyenlő jelet küldünk a bal és a jobb motornak, hogy megmondjuk az egérnek, hogy menjen egyenesen. Tehát az egérnek egyenesen kell mennie? Hibás! Különböző okok miatt a motorok nem reagálnak úgy, ahogy mondjuk. Alapvetően minden motor szinte azonos, de nem pontosan ugyanaz. A hardver soha nem épül tökéletesen, és mindig van valami véges hiba.
hogyan győződhetünk meg arról, hogy az egér valóban abba az irányba mozog, ahová mondjuk? Szükségünk van az úgynevezett zárt hurkú vezérlésre. Ez azt jelenti, hogy mi csatlakozzon érzékelők a kimenet mérésére, majd az eredményt visszatáplálja a bemenetbe a hibajavítás elvégzéséhez. Erről majd később. Szükségünk van egy PID (arányos integrál derivált) vezérlőre.
ebben az esetben érdemes lehet elérni, hogy az egér szigorú távolságot tartson a faltól. Mondjuk, 5 cm-re a jobb oldali faltól. Ezt nevezzük alappontnak. A beállított ponttól való bármilyen eltérés az, amit hibának nevezünk. Ha hibát észlel, azt akarjuk, hogy az egér kijavítsa magát. Ha a hiba nagy, nagy korrekciós műveletet akarunk. Ha a hiba kicsi, egy kis korrekciós műveletet akarunk.
az egér oldalán található érzékelők meghatározzák az egér faltól való távolságát. Tegyük fel, hogy az egér túl messze van a jobb oldali faltól. Azt akarjuk, hogy a bal kerék gyorsabban forduljon, míg a jobb kerék lassabban fordul, hogy az egér jobbra mozoghasson a hiba kijavítása érdekében. Ha az egér nagyon messze van az 5 cm-es alapponttól, például 10 cm-re a faltól, akkor azt akarjuk, hogy a bal kerék nagyon gyorsan forduljon, míg a jobb kerék sokat lassuljon. Ha az egér csak 6 cm-re van a faltól, akkor azt akarjuk, hogy a bal kerék növelje a sebességet, a jobb kerék pedig csökkentse a sebességét, de csak nagyon kis mértékben.