Robot stopař

Tento robot je mým prvním autonomním strojem. Až na elektroniku je celý „poskládán“ z LEGA. Primární účel, tedy sledování čáry, splňoval hned od prvních testování, a tak jsem se rozhodl doplnit ho senzory pro detekci překážek.

Senzor čáry

Senzor pro sledování čáry je vytvořen ze dvou reflexních optočlenů CNY70. Každý optočlen obsahuje IR diodu, která emituje světlo. Světlo se v závislosti na barvě podlahy odráží více(bílá), nebo téměř vůbec(černá). Odražené světlo detekuje fototranzistor. Senzor čáry je vyroben na samostatné desce umístěné na podvozku robotu. Možné je připojit na výstup z fototranzistoru komparátor a pomocí trimru přesně nastavit hodnotu, kdy bude spínat.

Schéma senzoru čáry

Osazená deska

Senzor překážek

Senzor překážek se skládá ze 2 IR LEDek a detektoru SFH5110-36, který je citlivý pouze při frekvenci 36kHz. Díky tomu nemůže detektor sepnout při osvícení slunečním světlem. Bohužel může sepnout při kontaktu s dálkovým ovladačem třeba od televize, protože většina ovladačů pracuje právě na frekvenci 36kHz. Proto je potřeba vyřešit odolnost proti externím zdrojům softwarově. Protože robot má 2 zdroje 36kHz(2 IR LED) může detekovat, na jaké straně se překážka nachází.

Při prvních pokusech v nepájivém poli, jsem nemohl detektor zprovoznit. Detektor pracoval jen když jsem odpojil mikrokontrolér. Po prohlédnutí na osciloskopu jsem zjistil, že mikrokontrolér generuje a do obvodu vysílá signál o vysoké frekvenci a detektor si s tím neumí poradit. Řešení tohoto problému je velice jednoduché a jak jsem poté zjistil, je naznačeno i v datasheetu. Na napájení detektoru se připojí RC filtr, který odstraní rušivé signály v napájení. Detektor pak pracuje naprosto bez problému.

Pravou IR LED generuji signál 36kHz o délce přibližně 600us a zároveň čtu výstup z detektoru. Následuje 600us pauza a poté generuji signál pro levou IR LED také 600us(tato doba je dopuručená v datasheetu) a zároveň čtu výstup z detektoru. 600us pauza a celý podprogram může proběhnout znovu.

Řízení motorů

Robot je postaven na dvoukolovém podvozku s diferenčně řízenými koly a jedním opěrným. Pohon zajištují 2 lego motory s převodovkou, která je vyrobena z lego dílů. Motory jsou napájeny 9V baterií. Pro jejich řízení je použit dvojitý H-můstek L298N. Při výrobě desky jsem zjistil, že tento obvod vydrží opravdu tvrdé zacházení ;-). Jako mírná nevýhoda se ukázaly neintegrované ochranné diody, tudíž se musí zapojit externě. 4 Diody na jeden motor, celkem tedy 8 diod zabírá celkem velký prostor na desce. Pro provoz obvodu je kromě hlavního napájecího napětí, také napětí pro logiku (5V), které odebírám z napěťového stabilizátoru 7805. Stabilizátor je použit i pro napájení dalších obvodů na desce. Každý motor se ovládá třemi signály: Enable, Směr1, Směr2. Pro chod motoru musí být Enable v log 1 a směrové signály musí mít nestejnou hodnotu.

Mikrokontrolér

Mikrokontrolér zpracovává veškerá data, která získá od senzorů, a podle toho ovládá motory. V tomto robotu je použit mikrokontrolér AT89S52 od firmy Atmel. Zapadá tedy do staré, ale stále populární řady x51 založené na mikrokontroléru 8051 od Intelu. Napájecí napětí je +5V, je připojen k stabilizátoru 7805. Čip potřebuje resetovací obvod, který je složen z kondenzátoru a rezistoru. Tento obvod jsem doplnil tlačítkem, abych mohl v případě nějakého problému čip resetovat. Dále je k němu připojen krystal 24MHz. Pin 31(EA) musí být připojen na log 1, aby procesor načítal program z vnitřní paměti. K mikrokontroléru je na část portu P0 připojen H-můstek, na P2 senzory čáry, senzor překážek je připojen na externí přerušení na portu P3. Deska obsahuje uživatelské prvky jako 2 tlačítka a 3 LEDky, kterým se dají přiřadit libovolné funkce.

Schéma základní desky

Kliknutím na schéma se otevře velké a čitelné.

Osazená deska

Program

Program je napsán v jazyce symbolických adres(assembler). Programů jsem napsal více a podle potřeby jsem je měnil. V současné době je v robotu program umožňující přepínání mezi dvěma podprogramy pomocí tlačítka na desce. První podprogram sleduje čáru a v případě detekce překážky se zastaví. Druhý podprogram nepoužívá senzor čáry, jede rovně a jakmile narazí na překážku, pootočí se na druhou stranu než byla překážka detekována. Vytvořil jsem také program, který v případě detekce překážku objel.

Programování

Pro programování mikrokontrolérů využívám programátor Presto od firmy Asix, který podporuje programování osazených součástek - ISP(In-System Programming). Na základní desku jsem proto vyvedl programovací konektor, takže mohu „pálit“ programy bez nutnosti vyndání čipu z patice.

Fotografie

Kam dál?

 
robot_stopar.txt · Poslední úprava: 2010/06/12 20:42 autor: paulmark
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki

© 2010 - 2011 Pavel Marek