proBot © Ondřej Staněk
mikrokontrolér ATMega8-16PU „mozek robota“ Senzor překážek (CNY70 + infra LED) Z čeho se robot skládá? mozek robota, senzory, efektrory, zdroj energie AA 1,2V NiMH nabíjecí tužkové baterie Podvozek robota jsem postavil ze stavebnice Lego Technic, která je k těmto účelům úplně ideální :). Robot je poháněn dvěma devítivoltovými motorky. Vpředu je otočné kolečko, takže robot může snadno měnit směr nebo se otáčet na místě. Jako každý správný robot má i ten můj sensory, díky kterým dokáže reagovat na podněty z okolní prostředí. Velmi se mi osvědčil infračervený sensor (tady na obrázku). Je složen z infračervené LED diody a fototranzistoru. LED dioda svítí na podklad a zpět odražený infračervený paprsek je snímán fototranzistorem. Čím víc světla se od podkladu odrazí, tím má fototranzistor menší odpor. Analogový signál čidla je převáděn logickým obvodem na digitální. Převod signálu je velmi jednoduchý – jakmile odpor fototranzistoru klesne pod určitou mez, překlopí se obvod z logické nuly na jedničku a obráceně – pokud se odpor zase zvýší, překlopí se zpět na logickou nulu. Převod analogového signálu na digitální je důležitý, neboť řídící mikrokontrolér může zpracovávat pouze logické hodnoty. Čidlo bohužel reaguje i na světlo ze žárovky a přímé sluneční záření, a to přestože je vybaveno filtrem proti dennímu světlu. To u sensorů čáry umístěných v podvozku vozidla tolik nevadí, protože jsou pouze pár milimetrů nad povrchem. Daleko větší problém se objevil u čidel překážek, které míří přímo před robota a jsou tudíž na okolní světelné poměry velmi citlivé. Tuto nepříjemnou vlastnost se mi nakonec podařilo do jisté míry obejít tím, že jsem nárazové sensory vybavil ještě další infračervenou LED diodu s větší svítivostí. Toto je součástka pro příjem signálu z dálkového ovladače. Podobné jsou například v televizi nebo cd přehrávači. Umožňuje dálkové ovládání robota. Led diody indikují stav jednotlivých sensorů a usnadňují jejich kalibraci. Robot je napájen čtyřmi tužkovými bateriemi. A teď k tomu nejdůležitejšímu... Dva infračervené senzory CNY70 k detekci čáry Infračervený přijímač signálů z dálkového ovladače LED dioda - „kontrolka“ světelná signalizace 9V elektromotor Lego Technic
Jednočipový počítač (mikrokontrolér) Atmel ATmega8 frekvence: 8MHz osmibitový procesor Harvardská architektura (paměť programu oddělena od paměti dat) paměť: 1KB Static RAM, 512B EEPROM paměť programu: 8KB FLASH ISP - programování čipu přímo v aplikaci (zařízení), např. přes LPT (port tiskárny) 3 vstupně/výstupní rozhraní, takzvané porty - slouží ke komunikaci s okolím (každý port má osm pinů) Další periferie řadiče přerušení (interrupt) čítače, časovače komunikace s ostatními zařízeními: sběrnice I2C, USART A/D převodník Jednočipový počítač, nazývaný též mikrokontrolér je mozkem robota. Vyhodnocuje signály ze senzorů a ovládá motory. Jádro procesoru má takt 8Mhz, to znamená že zvládne za vteřinu vykonat 8 miliónů instrukcí. Instrukce operují pouze s osmibitovými čísly. (To jsou celá čísla od nuly do 255). To ale neznamená, že by nedokázal zpracovávat i složitější čísla - pouze je k tomu potřeba víc cyklů procesoru. Vetší čísla se rozloží na několik osmibitových čísel, které potom procesor zpracovává postupně ve více krocích. Tento konkrétní mikrokontrolér má Harvardskou architekturu: Paměť pro program je oddělena od paměti dat. To umožňuje v jednom taktu načíst programovou instrukci a zároveň přistupovat do paměti. Nevýhoda tohoto řešení je zřejmá - paměť je roztříštěná a nadá se tak efektivně využít. Opakem je von Neumannova architektura, uplatněná především ve stolních počítačích. Určitě víte, že v počítači jsou data i programy uloženy společně na jednom disku (nebo případně v operační paměti). Jinak se ale mikrokontrolér stolnímu počítači velice podobá - například běh programů funguje u obou na úplně stejném principu. Do paměti RAM se ukládají mezivýsledky a data. Při odpojení napájení jsou veškerá data ztracena. Paměť EEPROM je pomalejší než RAM, ale zato dokáže data uchovávat i při odpojeném napájení, takže je vhodná pro ukládání nastavení (např. u mobilních telefonů). Programová paměť se při odpojení napájení samozřejmě také nesmaže, ale narozdíl od paměti EEPROM však nelze za běhu programu měnit. Program se do mikrokontroléru nahrává přes počítač. Není vůbec potřeba mikrokontrolér z plošného spoje vyjímat, pouze stačí připojit k robotovi programovací kabel a přepsat paměť novou verzí programu. Jak vidíte na obrázku, mikrokontrolér má spoustu nožiček (tzv. pinů), pomocí kterých komunikuje s okolním prostředím. Mikročipy mají celou řadu dalších periferií, ale ty už jsou nad rámec této prezentace. Konec nudné teorie, podíváme se, jak to vypadá v praxi! :) SRAM x Dynamic RAM (nutnost po přečtení obnovit) E2PROM ~ Electronically Erasable Programmable Read-Only Memory ISP ~ In System Programmable LPT ~ port tiskárny RISC ~ redukovaný instrukční soubor CISC ~ úplný instrukčním soubor
prototyp 1 „tank“ Toto je můj první robot. Má pásový podvozek
Segway prototyp 2 - robot „akrobat“ princip dynamické stabilizace
Princip sledování čáry Oba senzory jsou nad čárou, motory běží dopředu. Robot jede rovně Levý senzor Pravý senzor L P levý motor pravý motor
Princip sledování čáry Pravý senzor ztrácí kontakt s čárou Zastavíme levý motor, robot začne zatáčet doleva. Levý senzor Pravý senzor L P S T O P levý motor pravý motor
Princip sledování čáry Robot ztratil čáru, protože zatáčka je moc prudká. Pustíme levý motor v opačném směru, robot se začne otáčet kolem vlastní osy. Senzory umístěné mimo osu robota se přibližují k čáře. L P Levý senzor Pravý senzor levý motor pravý motor
Princip sledování čáry Levý senzor je opět v kontaktu s čárou.. L P Levý senzor Pravý senzor S T O P levý motor pravý motor
Vývojový diagram (jak ten robot vlastně funguje??) Inicializuj porty (senzory, motory..) Vývojový diagram (jak ten robot vlastně funguje??) Oba senzory nad čárou? Překážka? Popojeď kousek po spirále (jedno kolo se točí pomaleji,ale s každým cyklem se zrychluje) Otoč se o 180° ano ne Objeď překážku správným směrem Popojeď rovně ano Interrupt (INT1): Přerušení příjem signálu z IR vysílače Zastav motory, čekej na pokyn k pokračování v činnosti ne Pouze jeden senzor nad čárou? Zatoč směrem k čáře. (zastav jedno kolo) ano ne Žádný senzor nad čárou? ne Otoč se kolem vlastní osy ve směru, kde byla čára naposledy viděna (motory běží proti sobě) ano Rozhlídnul jsi se už kolem sebe?
Programování mikrokontroléru AVR assembler velmi podobný strojovému kódu instrukce zpracovávají pouze osmibitová čísla ANSI-C vyšší programovací jazyk pracuje s běžnými datovými typy (integer, float, array, text) podmínky a cykly přenositelnost kódu lepší čitelnost strojový kód
Schéma zapojení jsem navrhl v programu EAGLE 4.16r2 Light
Návrh plošného spoje
Výroba plošného spoje FeCL3
proBot © Ondřej Staněk
Prameny David Matoušek: Práce s mikrokontroléry Atmel AVR Burkhard Mann: C pro mikrokontroléry www.robotika.cz www.programujte.com
Tak to je konec.. www.gvp.cz/~ostan ostan89@gmail.com Ondra Staněk