czech english

Jak programátor k robotovi přišel

jednoduchá tříkolka

Jednoho dne jsem se rozhodl postavit si vlastního robota. Příčina tohoto rozhodnutí byla jednoduchá – prostě jsem záviděl svému robotickému okolí, že si má s čím hrát a já ne. Přece jen, hrát si s autodráhou už se nehodí a robotika se ukázala jako výborné zábava. Brzy se však ukázalo, že elektronika věda sama o sobě (navíc se jí asi nedá vyhnout) a ve srovnání s programy se o dost náročněji ladí (jsem taky programátor). Nakonec jsem se ale i přes počáteční chuchvalce drátů dostal zdárně do cíle.

Co tedy můj robot (říkejme mu pracovně Robůtek I) umí?
  • Je to taková tříkolka, která umí pomocí točení dvou bočních koleček jezdit dopředu a dozadu a otáčet se o 90 stupňů – byl jsem líný pouštět se do složitějších výpočtů polohy při jiných úhlech – také kvůli dále popsané robůtkově featuře – rychlé ztrátě orientace.
  • Polohu počítá z informací dodávaných enkodéry, které jsou napojeny na kolečka. Z počátku jsem používal infra-prosvěcování šesti dírek, které jsou v malém převodovém kolečku o Merkura – stavebnice, ze které je celá konstrukce. To bylo ale ďábelské „rozlišení”, které umožňovalo i Robůtkovi omezenému na úhly 90 stupňů dostat se po chvíli provozu jakýmkoliv směrem do jakéhokoliv bodu. Později jsem proto přešel na asi klasičtější řešení s černobílými paprsky a jejich detekci CNYčkem.
  • Jako mozek jsem pro Robůtka vybral jednočip AVR AT90S4433. Ani s touto technologií jsem neměl žádné zkušenosti. Moje seznamování s ní proto neprobíhalo nijak hladce, ačkoliv jsem nakonec na Robůtkovi použil stejný čip, se kterým jsem si začínal hrát – uznávám, že hlavně díky velké odolnosti tohoto jednočipu proti různým elektronickým „botám”.
  • Robůtek umí zobrazovat, co si zamanete na tří číslicovém sedmi segmentovém displeji.
Největší problém, který jsem s AVRkem řešil, byl výběr správného softwaru na nahrávání programu do čipu a k němu odpovídajícímu kabelu. Kombinací je k nalezení spousta. Snažil jsem se – kvůli své přirozené lenosti – najít nejminimálnější funkční řešení. A že jsem vyzkoušel hodně variant! Také kvůli jednomu velkému začátečnickému problému – nefungovalo mi vůbec nic a já nevěděl, kde a jak hledat chybu. V zapojení AVRka? V kabelu? V softwaru? Ve svém kódu do AVRka? Prostě hrůza.
Nakonec se ale vše v dobré obrátilo a správnou kombinaci jsem našel. Nezní to jednoduše?
  1. Vezmu AVR-studio
  2. Napíšu v něm kód v Céčku
  3. Přeložím AVR-GCCčkem přidaným do AVR-studia jako externí kompilátor
  4. Přeložený kód nahraji IC-PROGem přes FUN-CARD kabel do vypnutého AVRka v základním zapojení
  5. Zapnutím AVR po odpojení kabelu se program spustí
Takže mám program v AVRku, vím o tom, že tam je, a umím ho spustit. Co tedy můj program s Robůtkem umí? Ušetřím Vás desítek testovacích prográmků na blikání ledek, testování tlačítek, funkce časovačů a přerušení. Jako svou poslední aplikaci před rozebráním konal Robůtek následující:
Pohyboval se po pomyslných čtvercích rozměrů asi 25x25 cm (celý robot se vejde do čtverce). Na začátku byl v jednom pevně daném čtverci a měl za úkol dostat se do čtverce, který byl na začátku vložen pomocí tlačítka a nárazníku. Ve čtvercích v robotově cestě ale mohly být překážky. Když robot na takovou překážku narazil (předním nárazníkem), zapamatoval si ji v EEPROM, vrátil se do předchozího čtverce, ve kterém překážka nebyla a našel jinou nejkratší cestu do cíle, která nevedla přes čtverce, na nichž byly už zjištěné překážky.

Zde je stručný popis použitých postupů a odkazů na stránky, z nichž jsem čerpal. Na nich také najdete příslušná schemata, která už se snadno zkombinují do funkčního celku. Konkrétní součástky, které budu označovat kódem, se dají pod tímto kódem najít v katalogu a zakoupit v obchodu GM Electronic v Praze na Florenci.
Kostra a motory
Kostra robota je postavena výhradně ze stavebnice Merkur. Přední kolečko je vyrobeno s pingpongového míčku s navlečenou osičkou uprostřed. Dva stejnosměrné motůrky pochází ze stavebnice Merkur 2.1.Pozor! V jedné stavebnici je pouze jeden motorek!
Napájení
Jako jediný zdroj napětí na robotovi používám 5 akumulátorových tužkových monočlánků zasazených do pouzdra na monočlánky A306361.
Základní deska
Jako jedinou desku na součástky používám nepájivé kontaktní pole N-ZSB212, které výrazně usnadňuje začátečnickou konstrukci, a zjednodušuje testování. Jeho nevýhodou je snížená přehlednost, když je na něm více zapojení, a větší rozměry o proti klasickému plošnému spoji.
Řídící jednotka
Jako řídící jednotku jsem použil microcontroller AT90S4433 od firmy Atmel. Vyznačuje se nízkou cenou (asi 170kč), není nutné používat vnější programátor, má dostatečné množství I/O linek (20), 4kB paměti na kód, 256B EEPROM (vnitřní programem měnitelná, stálá (používám ji na ukládání informací o jednotlivých čtvercích)). Je snadno dostupný poměrně použitelný software. Základní schema zapojení se dá najít na této stránce. Pro funkci CPU je v podstatě potřeba zapojit pouze krystal (Q8MHZ) k pinům XTAL1,2 s přilehlými dvěma kondenzátory, napětí (asi 5V) na VCC a zem na GND. Vše ostatní už je navíc. Programovací kabel ani software, zmiňovaný na té stránce, se mi neosvědčily.
Programovací kabel
Pro programování CPU používám jednoduchý kabel, který najdete zde. Jsou k němu potřeba jen 3 odpory 220 ohmů (RR220R) a konektor do LPT portu (CAN25V).
Software
K psaní programu používám AVR-studio od firmy Atmel, ve kterém se dají s výhodou ladit aplikace i na simulátoru procesoru. Sharewarová verze sice neobsahuje kompilátor jazyka C, ale od AVRFreaks se dalo stáhnout AVG-GCC, které šlo používat podle přiloženého návodu jako kompilátor uvnitř AVR-studia. V nové verzi AVR-studia (4.0) ještě externí kompilátor používat nelze, takže se hodí pouze pro psaní v AVR-assembleru. K nahrání přeloženého programu do CPU používám program IC-PROG. Pro výše popsaný kabel je potřeba v nastavení adaptéru v programu vybrat ze seznamu „Fun-card”. Pokud jste s mikrokontrolery ještě nepracovali, určitě si přečtěte i článek Blikáme LEDkou, který jsme pro vás pro tyto účely připravili.
Display
Pro zobrazování hlášek robota používám třímístný sedmi segmentový displej s multiplexováním (HD-514RD -tento kód je pro čtyřmístný (třímístný nemůžu najít v katalogu)). Jako driver displeje (převodník se 4 vstupy udávajícími zobrazované číslo binárně a 7 výstupy, které ovládají jednotlivé ledky na displayi) používám DM74LS47. Principiálně není potřeba, ale šetří výstupy CPU o tři a usnadňuje zobrazování čísel… Displej je řízen multiplexovaně, takže pomocí časovače v CPU, který v přesných intervalech střídavě zobrazuje číslice na jednotlivých místech displeje, je dosaženo efektu ovládání všech míst současně za použití jen tří výstupů CPU navíc.
Řízení Motorů
Motory jsou řízeny pomocí dvojitého H-bridge L293D, jehož aplikaci můžete najít například zde.Tedy pomocí čtyř výstupů CPU je řízen pohyb obou motorů vpřed a vzad.
Enkodéry
Na každém z obou koleček je připevněn kotouček s černobílými paprsky, které jsou snímány optočlenem CNY70. Jeho analogový výstup se převádí na digitální například takto. Pomocí trimru (v obvodu označen jako R4) PT6HK010 se nastaví práh pro komparátor LM393 mezi černým a bílým políčkem. Výstupem hradla je už digitální signál (černá/bílá).

Zaujal vás tento článek? Našli jste věcnou chybu či překlep? Nebo něčemu nerozumíte? Napište nám!