Vysoké učení technické v Brně Fakulta elektrotechniky a komunikačních technologií Ústav automatizace a měřicí techniky
Projekt do předmětu Základy robotiky: Robot „Člověče, nezlob se!“ květen 2015
Autoři:
Dušan Benda Lukáš Doležal
Vedoucí práce:
Ing. Vlastimil Kříž
OBSAH 1
Historie projektu .......................................................................................................................... 3
2
Hardwarová část .......................................................................................................................... 4 2.1
Mechanická část .................................................................................................................... 4
2.2
Elektronická část ................................................................................................................... 4
2.2.1
Řídicí jednotka CM5...................................................................................................... 4
2.2.2
Robotické rameno .......................................................................................................... 4
2.2.3
Hrací pole....................................................................................................................... 5
2.2.4
Obousměrný převodník USB – UART .......................................................................... 5
2.2.5
Obousměrný převodník USB – RS232 s galvanickým oddělením USB portu ............. 6
2.2.6
Bluetooth modul HC05 .................................................................................................. 7
2.2.7
Grafický displej s dotykovou obrazovkou ..................................................................... 8
2.2.8
Řadič displeje ILI9341 .................................................................................................. 8
2.2.9
Dotyková vrstva displeje ............................................................................................... 8
2.2.10 Procesor grafického displeje ........................................................................................ 10 2.2.11 Řídicí deska grafického displeje .................................................................................. 11 3
Softwarová část .......................................................................................................................... 12 3.1
Hrací algoritmus robotu ...................................................................................................... 12
3.1.1 3.2
Odstranění chybového stavu ........................................................................................ 12
Obslužný program displeje s dotykovou obrazovkou ......................................................... 13
3.2.1
ASF knihovny .............................................................................................................. 13
3.2.2
Základní funkce řídicího programu ............................................................................. 14
3.2.3
Popis stavového automatu ........................................................................................... 14
3.2.4
Obsluha STMPE610 .................................................................................................... 16
3.2.5
Obsluha sériové linky .................................................................................................. 17
3.2.6
Stavový automat pro vyhodnocení telegramu ............................................................. 18
3.2.7
Přehled kódu pro procesor grafického displeje ........................................................... 19
4
Budoucnost projektu .................................................................................................................. 20
5
Zhodnocení práce....................................................................................................................... 21
6
Použité zdroje ............................................................................................................................ 22
7
Seznam obrázků ......................................................................................................................... 23
2
1 HISTORIE PROJEKTU Projekt původně vznikl ve druhém ročníku na Střední průmyslové škole elektrotechnické v Brně, Kounicova 16 jako příspěvek do soutěže KyberRobot 2011, konkrétně do kategorie Bioloid Freestyle, kterou každoročně pořádá Technická univerzita v Liberci. Základ robotu sestávající se z hracího pole a herního algoritmu byl tehdy vytvořen během pouhých dvou měsíců, což se samozřejmě negativně podepsalo na samotném výsledku soutěže, pro kterou byl robot primárně vytvořen. Tehdy jsem na projektu pracoval sám (Dušan Benda), a protože jsem spíše zaměřen na konstrukci hardwaru, tak jsem přibral do týmu dva programátory Jiřího Kyzlinka a Aleše Pernikáře. Během roku byl vytvořen a odladěn program a opět jsme se zúčastnili soutěže KyberRobot 2012, kde jsme tehdy získali první místo ve zmíněné kategorii. Následně jsme se zúčastnili mezinárodní soutěže RobotChallenge2013v kategorii Freestyle pořádané každoročně ve Vídni, kde jsme v konkurenci dvaceti robotů obsadili šesté místo. Poslední soutěž, které jsme se s robotem zúčastnili, byla pořádána pod záštitou Matematicko fyzikální fakulty Univerzity Karlovi v roce 2014. Opět jsme soutěžili v kategorii týkající se freestylu „Art, Robots&Entertainment“, kde jsme získali v konkurenci deseti robotů první místo. Největším nedostatkem robotu je komunikační interface s lidským protihráčem, konkrétně hrací kostka, která byla zobrazována pomocí trojice LED diod v binárním tvaru, což se ukázalo jako ne příliš šťastné řešení. Robot dále disponuje výpisy herních stavů - aktuální obsazení pozic hracího pole s určením pozic pro jednotlivé figurky, popřípadě pokud dojde k narušení hry, například vlivem špatného tahu, tak robot posílá po sériové lince informace, z kterých lze vzniklý problém vyřešit. Pro zobrazení této komunikace byl však potřeba převodník z RS232 na USB a počítač se spuštěným komunikačním terminálem, což při ladění programu není problém, ale pokud má robot sloužit například jako reklamní poutač, tak použití počítače není vždy možné. Proto jsem se rozhodl (Dušan Benda) společně s Lukášem Doležalem vytvořit komunikační interface prostřednictvím externího dotekového displeje, který odstraní potřebu počítače v případě stavových výpisů. Stále je však možné připojit robot pomocí USB sběrnice popřípadě prostřednictvím bluetooth přímo s počítačem.
3
2 HARDWAROVÁ ČÁST 2.1 Mechanická část Mechanickou část lze rozdělit na dvě části, a to na část týkající se samotného hracího pole (vytvořeno v původním projektu) a ovládacího panelu. Hrací pole je svařeno z jäklových profilů 30x15 mm do čtverce o rozměrech 460x460x30 mm. Rám je překryt ocelovým plechem, který tvoří hrací desku a je ke kostře přivařen. Do hrací desky bylo vyvrtáno čtyřicet otvorů o průměru 10 mm pro umístění tlačítek. Kvůli vyztužení byly do rámu navařeny ještě dva jäklové profily 10x10 mm ve tvaru T. Hrací pole bylo stejně jako figurky nastříkáno práškovou barvou (figurky odstínem RAL3000 (červená) a RAL5010 (modrá), hrací pole RAL9010 (bílá)). Ovládací panel byl vytvořen dodatečně v rámci řešení tohoto projektu. Slouží k uložení veškeré řídicí elektroniky a displeje s dotykovou vrstvou. Ovládací panel je ve tvaru kvádru o velikosti 242x177x53 mm a lze jej rozdělit na podstavu a kryt. Na podstavě jsou navařeny šrouby M4 pro uchycení řídicí jednotky CM5, pěti-kolíkových konektorů pro připojení hracího pole a desek plošných spojů pro obousměrný převodník UART – RS232 a USB – RS232. V podstavě byly dále vytvořeny otvory pro přepínač Hra/Programování, USB konektor a napájecí konektor. Na krytu jsou navařeny jäklové profily 15x15 mm s šrouby M4 pro uchycení displeje s dotykovou vrstvou. V krytu byly dále vytvořeny otvory pro displej s dotykovou vrstvou, pro dva pěti-kolíkové konektory a přepínač pro zapnutí a vypnutí celého zařízení. Veškerá výkresová dokumentace k mechanické části včetně rendrovaných vizualizačních fotografií byla vytvořena v návrhovém programu SolidWorks.
2.2 Elektronická část 2.2.1 Řídicí jednotka CM5 Řídící jednotka CM5 společně s robotickým ramenem jsou jediné části celé konstrukce, které byly zakoupeny jako hotový výrobek. Stavebnici Bioloid nabízí firma Robotis za zhruba 30000 Kč. Tuto stavebnici jsme měli k dispozici na střední škole, a proto jsme ji využili. Řídicí jednotka CM5 je osazena mikrokontrolérem ATmega128, který disponuje dvěma UART kanály a programovou pamětí 128kB. Na vstupní piny mikrokontroléru jsou dále připojeny tlačítka, signalizační LED a na UART kanály převodníky UART – RS232 a UART – RS485. Mikrokontrolér má v sobě nahraný bootloader, takže je ho možné programovat z počítače přes sériovou linku RS232 nastavenou rychlostí, v tomto případě 57600 baud. CM5 zajišťuje komunikaci mezi připojenými motory (přes RS485) a deskou s mikrokontrolérem ATmega16 (RS232 57600 baud) sloužící k vyčítání aktuálního obsazení hracího pole. 2.2.2 Robotické rameno Rameno je složené celkem ze sedmi motorů AX-12 ze stavebnice Bioloid firmy Robotis. Jedná se v podstatě o „inteligentní“ modelářské servomotory, kterou jsou schopné nastavovat se v rozsahu 0 - 300° s dělením tohoto intervalu na 1024 hodnot. Motory jsou osazeny a řízeny mikrokontrolérem ATmega8, který zajišťuje komunikaci s mikrokontrolérem ATmega128 v jednotce CM5. Motory byly použity, protože jsme je měli k dispozici, ale díky jejich nízké opakovatelnosti, teplotní závislosti a vůli v plastových převodech jsou nejslabším článkem celého zařízení. Pro získání lepších výsledků by bylo nutné použít motory s kovovou převodovkou a větším krouticím momentem, což by ale zase bylo mimo naše finanční možnosti.
4
2.2.3 Hrací pole Na vrchní straně hracího pole, kde probíhá celé dění hry, se nachází robotické rameno. Pod krycí deskou hracího pole se nachází čtyřicet tlačítek zapojených do maticové klávesnice 5x8, která je připojena k mikrokontroléru ATmega16. Dále je zde umístěn stabilizátor na 5 V pro mikrokontrolér, který v závislosti na požadavku z řídicí jednotky CM5 posílá přes sériovou linku RS232 do jednotky CM5 aktuální obsazení hracího pole. Spojení s ovládacím terminálem je vytvořeno pomocí dvou pěti-kolíkových konektorů. Jeden pro připojení napájecího napětí a komunikační linky s motory AX-12 a druhý pro komunikační sériovou linku s mikrokontrolérem ATmega16. 2.2.4 Obousměrný převodník USB – UART V dosavadní verzi bylo připojení k počítači řešeno prostřednictvím odposlechu komunikace sériové linky RS232 mezi řídicím mikrokontrolérem ATmega128 a mikrokontrolérem ATmega16. K tomu bylo tedy nutné použít počítač s RS232 vstupem, nebo použít převodník USB – RS232. Většina počítačů v dnešní době však přímý RS232 vstup nemá a použití převodníku také není nejlepším řešením. Proto jsme se rozhodli pro testování komunikace během ladění programu pro mikrokontrolér ATmega16 navrhnout a zkonstruovat převodník přímo z UART – USB, takže je možné připojit mikrokontrolér přímo k počítači. Bylo zvažováno použití integrovaných obvodů od firmy FTDI, ale kvůli jejich vysoké ceně byl nakonec zvolen převodník od firmy Silicon Laboratories CP2102, který pro dané zařízení plně dostačuje. Obvod je možné napájet přímo z připojeného USB konektoru, takže nepotřebuje externí napájení. CP2102 je vysoce integrovaný převodník USB – UART (pro svou správnou činnost potřebuje minimální počet externích součástek), který disponuje standardem USB 2.0 fullspeed, interní EEPROM pamětí a oscilátorem a asynchronní sériovou sběrnicí UART s řízením všech signálů (RXD, TXD, RTS, CTS, DSR, DTR, DCD a RI). Pro připojení k PC stačí nainstalovat potřebné ovladače od firmy Silicon Laboratories a obvodubude po připojení k USB sběrnici přidělen virtuální COM port s volným číslem. Otevření komunikačního kanálu je CP2102 indikováno změnou logického stavu na výstupu ̅̅̅̅̅̅̅̅̅̅̅̅̅, na který je připojena signalizační LED dioda svítící v případě otevření komunikačního kanálu. Jedinou nevýhodou CP2102 je pouzdro QFN, ve kterém se součástka vyrábí. Při výrobě desky plošných spojů převodníku a následném osazení se v amatérských podmínkách jen těžko odhalují chyby vzniklé špatným osazením součástky na desku. Nicméně při použití horkovzdušného pájení není osazení tak problematické. Vhodnější by samozřejmě bylo nechat si desku zakázkově vyrobit, nejlépe pocínovanou a s maskou.
obr. č. 1 Převodník USB-UART
5
2.2.5 Obousměrný převodník USB – RS232 s galvanickým oddělením USB portu Popisovaný převodník (obr. č. 1) v kapitole 2.2.4 fungoval pouze jako ladící prvek a ve finálním zařízení nebyl použit, a to kvůli přímému připojení USB portu k převodníku CP2102, který je přímo z USB portu napájen, což může vést k poškození USB portu vlivem poruchy –zvýšení napětí nad dovolený limit vlivem zkratu na obvodu CP2102, statická elektřina, atd. Proto byl použit integrovaný obvod ADuM3160 pro galvanické oddělení USB portu, který je schopný zachovat komunikační rychlost fullspeed USB sběrnice. Napájení integrovaného obvodu je řešeno pomocí dvou napájecích zdrojů, což je asi jediná nevýhoda tohoto obvodu. Jako první je využit přímo USB port napájející první galvanicky oddělenou polovinu obvodu ADuM3160 a pro napájení druhé poloviny obvodu ADuM3160 je použito napájecí napětí 5 V získané stabilizací hlavního napájecího napětí celého zařízení 12 V. Galvanicky oddělené signály jsou přivedeny na převodník USB – UART CP2102. Následně jsou UART signály RXD a TXD dále přivedeny na převodník logických úrovní TTL – RS223 tvořený integrovaným obvodem MAX232 firmy Texas Instruments. Obvod MAX232 disponuje dvěma převodníky TTL – RS232, v tomto případě je však použit pouze jeden z nich. Signály na logické úrovni RS232 převedené obvodem MAX232 jsou dále připojeny na konektor, který slouží k připojení desky převodníku USB – RS232 k dalším perifériím.
6
2.2.6 Bluetooth modul HC05 Pro lepší konektivitu robotu s počítačem, popřípadě chytrým telefonem, byl dále do zařízení implementován bluetooth modul HC-05, který rovněž odposlouchává sériovou linku RS232 mezi mikrokontrolérem ATmega128 a ATmega16, takže je možné připojit robot až na dvě nezávislá zařízení (pomocí USB kabelu a bezdrátově prostřednictvím bluetooth). Samotný bluetooth moduluje napájen z 3V3 stabilizátoru a právě kvůli napájecímu napětí 3V3 musely být použity převodníky napájecích úrovní 3V3 – 5 V. Výstup bluetooth modulu je TTL, takže po připojení převodníků napětí je možné připojit modul přímo k mikrokontroléru s UART kanálem. HC-05 pracuje na standardu bluetooth 2.0. Tovární nastavení modulu je následující: slave mód, ID HC-05, heslo pro spárování 1234 a baud rate 9600, 8, 1, n. Protože je možné modul přenastavit vstupem do takzvaného AT módu, tak bylo změněno ID modulu na Clovece_nezlob_se, heslo pro spárování zůstalo stejné a komunikační rychlost byla změna na 57000, 8, 1, n. Otevření komunikačního kanálu s počítačem nebo mobilem je detekováno změnou blikání signalizačních LED diod (jedna zůstane svítit a druhá změní periodu blikání). Všechny jednotlivé modulu v zařízení spolu komunikují po sběrnici RS232, takže bylo nutné navrhnout a zkonstruovat ještě jednu desku, která převádí logické úrovně RS232 sběrnice na TTL logiku. Pro převodník TTL – RS232 byl opět použit integrovaný obvod MAX232, tentokrát s oběma zapojenými převodními kanály. Přes tuto desku jsou periferie připojeny následovně CM5 (RS232) – grafický displej (TTL) a CM5 (RS233) – bluetooth modul HC05 (TTL). V případě odposlechu komunikační linky by stačilo připojit pouze přijímací RXD výstupu, protože vysílací TXD výstup v případě odposlechu nemůže být ani připojen. Deska ale byla navržena jako univerzální, takže je ji možné použít i v dalších aplikacích.
obr. č. 2 Bluetooth modul HC-05
7
2.2.7 Grafický displej s dotykovou obrazovkou Základním požadavkem zadání bylo zobrazování režimu hry na grafickém displeji. Pro tento účel byl zvolen RGB displej o rozlišení 240x320pixlů a barevné hloubce 16bit na pixel. Je umístěn i s řadičem ILI9341 na jedné DPS. Tento modul je primárně určen pro připojení k platformě Raspberry Pi a byl zakoupen z internetového obchodu DX (obr. č. 3). Displej je vybaven i dotykovou vrstvou, se snímáním založeným na rezistivním principu.
obr. č. 3 Použitý modul s grafickým displejem
2.2.8 Řadič displeje ILI9341 Display je řízen řadičem ILI9341,firmy ILITEK. Ten je osazen na výše zmiňované DPS. Podporuje paralelní 8-/9-/16-/18-bit data bus MCU interface, 6-/16-/18-bit data bus RGB interface a 3-/4vodičovou serial peripheral interface (SPI). Řadič má rozsah napájecího napětí 1.65V ~ 3.3V I/O. Dále obsahuje interní stabilizátory napětí pro samotný LCD display a další podpůrné obvody. ILI9341 podporuje full color (16 bit) nebo 8bit-color display mode. Je možné aktivovat i režim spánku pro maximální snížení spotřeby v zařízeních napájenými bateriemi. 2.2.9 Dotyková vrstva displeje Vrstva je složena ze dvou průhledných fólií, které jsou potaženy vodivou vrstvou (obr. č. 4). Každá fólie je opatřena dvěma elektrodami. Po doteku prstem dojde k propojení horní a dolní fólie. Jakmile je na jednu vrstvu připojeno napětí, vytvoří se dělič napětí ve směru procházejícího proudu a na druhé vrstvě je napětí možno měřit (obr. č. 5) .
8
obr. č. 4 Snímací fólie dotykové vrstvy
obr. č. 5 Náhradní schéma snímacích fólií
O vyhodnocení pozice doteku se stará driver STMPE610, který je osazen na desce společně s displejem. Má zabudovány vhodné obvody pro odečtení doteku pomocí 4-vodičové rezistivní metody popisované výše. Čip má zabudován interní buffer o velikosti 128x32bit. Zde jsou ukládány vyhodnocené pozice doteku. Komunikace s budičem je možná přes I2Cnebo SPI sběrnici. Na desce je výhodně zapojen na stejnou SPI sběrnici jako používá budič ILI9341.
obr. č. 6 Blokové schéma STMPE610
Jakmile je detekován na displeji stisk, je v STMPE610 spuštěna sekvence, která pomocí ADC převodníků vyhodnotí pozici X, Y a Z. Pozice X a Y udává souřadnici doteku a hodnota Z dává 9
informaci o síle stisku, kterou vyhodnotí z velikosti proudu tekoucího dotykovou vrstvou. Dohromady jde o 32bitovou informaci a ta je uložena do bufferu FIFO v interní paměti STMPE610. Tato čtecí sekvence se opakuje až do ukončení stisku. Jakmile stisk odezní, je vyvoláno přerušení. To generuje změnu logické úrovně na pinu STMPE610, na kterou zareaguje procesor. Data o stisku jsou pomocí SPI přečtena z bufferu a v procesoru je vypočtena pozice a síla stisku. 2.2.10 Procesor grafického displeje Pro řízení grafického displeje a budiče dotykové vrstvy byl vybrán procesor firmy Atmel ATxmega32E5. AVR XMEGA je rodina výkonných osmibitových procesorů(obr. č. 7) s rozsáhlým vybavením periferiemi.
obr. č. 7 Blokové schéma ATxmega32
Vybrané parametry procesoru: 32 KB Flash 4 KB Sram Tři 16-bit čítače/časovače dva kanály USART, plně-duplexní a polo-duplexní konfigurace Jeden two-wire interface Jeden serial peripheral interface (SPI) Jeden 16-bit timer reálného času s vlastním oscilátorem a korekcí. Jeden šestnáctikanálový, 12-bit, 300ksps A/D převodník Jeden dvoukanálový 12-bit, 1Msps D/A převodník Podpora QTouch® knihovny (Kapacitní snímání doteku) Watchdog timer Provozní napětí 1.6 – 3.6V Provozní frekvence0 – 32MHz při 2.7V, možnost využití fázového závěsu pro zvýšení
10
2.2.11 Řídicí deska grafického displeje Mikroprocesor ATxmega32E5 je osazen na DPS (obr. č. 8), která je pomocí konektoru připojena přímo k desce s grafickým displejem. Toto řešení je výhodné zejména pro vedení signálních cest SPI sběrnice, které musí být kvůli přeslechům co možná nejkratší.
obr. č. 8 Připevnění řídicí desky k desce displeje
Deska je navržena (Příloha 1) s ohledem na požadovanou funkci obvodů grafického displeje. Tedy odposlech sériové linky a ovládání GPIO na řídicím procesoru robotu. Vzhledem k tomu, že procesor pracuje s logikou 3,3 V a řídicí jednotka CM5 s 5 V, bylo třeba zajistit převedení těchto logických úrovní. Převod z vyššího napětí na nižší je proveden pomocí zenerovy diody. Převod na úroveň 5V je proveden za pomoci tranzistoru v zapojení se společnou bází.Schémata obou typů převodníků jsou na obr. č. 9. Deska je osazena i lineárním stabilizátorem napětí LDO1702. Ten upravuje přiváděné napětí 5V na 3V3 potřebné pro napájení procesoru.
obr. č. 9 Schémata převodníků logických úrovní
11
3 SOFTWAROVÁ ČÁST 3.1 Hrací algoritmus robotu Hrací algoritmus sice nebyl součástí řešení toho projektu, ale pro lepší orientaci je zde uveden. Na začátku programu se zkontrolují připojené periferie a vypíše se oznámení o jejich stavu. Následuje výběr jazyka (aktuálně je k dispozici čeština a angličtina), ve kterém budou zobrazovány stavové zprávy. V případě, že nějaká figurka chybí, nemůže hra pokračovat, stejně jako pokud nějaký předmět v poli přebývá. Pomocí vnitřního časovače se generuje hodnota hrací kostky, provede se modulo šesti a přičte se jednička, což je celé číslo v rozmezí 1 až 6. Tato hodnota se zobrazí ve výpisu v textovém terminálu a na jednotce pomocí signalizačních LED v binárním tvaru. Dále jsou pravidla podobná jako v reálné deskové hře „Člověče, nezlob se“. Střídají se algoritmy pro určování robotova tahu a analýzy pohybu figurek lidského protivníka. Pro nasazení figurky na startovní pozici je nutné, aby na kostce padla šestka, pokud nemá hráč ani robot v hracím poli ani jednu figurku, tak se kostkou „hází“ třikrát. Pokud ani po třetí nepadne na hrací kostce šestka a na tahu je hráč, tak je nutné, aby hráč zdvihl a následně položil figurku, kterou má v domečku. Tímto způsobem kvituju robotu stav, že ví o nemožnosti provést tah, vypíše se stavový výpis a hra pokračuje. Algoritmus robotovy hry je jednoduchý, snaží se co nejdříve dostat jednu figurku do domečku a následně čeká na nasazení druhé figurky. Když přijde na řadu hráč, opět se vygeneruje hodnota kostky a může provést libovolný tah. Robot dokáže díky tlačítkům na hrací ploše správně rozeznat, kam a odkud se posunula která figurka. V paměti je uloženo, které pozice byly obsazené figurkami v minulém tahu, což se porovná s aktuálním stavem a rozdíl znamená poslední provedený pohyb. Hráč je upozorněn, jestliže provedl tah, který není podle pravidel, např. pokud se posunul o nesprávný počet políček, pokud nasadil bez šestky na kostce nebo pokud přesunul figurku robota. Takto se zabraňuje podvodům nebo omylům. V případě, že jeden z hráčů dostane obě své figurky do domečku, tak vyhrává, a robot je připraven na další hru. 3.1.1 Odstranění chybového stavu Robot se do bez východiskového stavu dostává po přerušení komunikace mezi motory AX-12 a řídicí jednotkou CM5, což se většinou stává vlivem špatného kontaktu v připojovacích konektorech motorů AX-12. Motor se sice ihned připojí k jednotce zpátky, ale požadavek na nastavení pozice se vlivem rozpojení komunikace ztratil. Funkce pro nastavování motorů na zvolenou pozici jsou napsány tak, že hlídají čas, od kterého byl vyslán požadavek pro nastavení pozice motoru. Pokud čas vypršel tak program na této pozici „zamrzne“ – motor požadavek zachytil, ale než stačil odpovědět, tak došlo k přerušení komunikačního kanálu, nebo řídící jednotka vyslala požadavek, ale motor už požadavek neobdržel. Potom co nastane tento stav je jedinou možností provést reset robotu, kdy proběhne inicializace a motory jsou řídicí jednotkou opět zaznamenány, což ale znamená přerušit celou hru a začít hrát od začátku. Zde jsme zvažovali použití EEPROM paměti, do které by se ukládaly stavy, z nichž by se dalo poznat, ve kterém stavu robot „zamrznul“ (ukládání aktuálního obsazení pole, tj. pozice figurek, hodnotu kostky, kdo je zrovna na tahu atd.). Pokud by nastala chyba komunikace, tak by se vyvolalo interní přerušení od watchdog časovače, a program by zjišťoval, zda byl zresetován watchdog časovačem, nebo jde o korektní začátek nové hry, z čehož by se usoudila startovní pozice, buďto startovní, nebo poslední známá před watchdog resetem. Nicméně ukládání stavových hodnot hry do paměti není pro životnost paměti úplně ideální a navíc problém vůbec neřeší. Proto byly upraveny funkce pro nastavení pozice motorů tak, že 12
dojde k vyslání požadavku, a pokud nedojde v definovaném čase k přijetí odpovědi od motoru, tak se požadavek nastavení pozice vysílá znovu. Požadavek je vyslán celkem dvacetkrát, což plně dostačuje, pokud chyba vznikla špatným kontaktem v konektoru motoru. V případě, že ani podvacáté řídicí jednotka nedostane na vyslaný požadavek odpověď, tak program pokračuje dál. Během hry je možné občas postřehnout, že robot přeskočí některé předem nadefinované pozice a nastaví se až do další pozice, což je způsobeno špatným kontaktem v konektorech motorů, který se vlivem pohybu robotického ramene občas přeruší, ale ihned při změně polohy dojde opět ke správnému kontaktu. Řešení tohoto problému však není stále naprosto ideální, ale s použitým hardwarem lze tento problém vyřešit, buď zastavením programu (tak jak tomu bylo doposud), nebo zkusit problém odstranit a pokud se to nepovede, tak opět program ukončit, nebo pokračovat dál (současné řešení).Během ladění programů se však nikdy nestalo, že by se robot dostal do stavu, kdy by se naprosto nekontrolovatelně pohyboval (narážel uchopovacími čelistmi do hrací plochy, shazoval figurky, atd). Nejlepším řešením by bylo nepoužívat konektory a veškeré kabely napájet přímo na desky plošných spojů, což ale pro úpravy a následnou demontáž robotického rameno opět není nejvhodnější řešení.
3.2 Obslužný program displeje s dotykovou obrazovkou 3.2.1 ASF knihovny Pro vývoj software do procesoru ATxmega32E5 byly využity Atmel® Software Framework (ASF) knihovny. Ty jsou vytvořeny výrobcem čipu pro snadné ovládání vestavěných anebo externích periferii. Program byl vytvářen v prostření Atmel Studio® 6 kde jsou knihovny snadno použitelné. Výrobce poskytuje i přehlednou dokumentaci software vytvořenou nástrojem Doxygen.
13
3.2.2 Základní funkce řídicího programu Program je navržen jako stavový automat dle diagramu na obr. č. 10. Inicializace Periferií
Zobrazení úvodního okna
časová prodleva
Zobrazení Volby Jazyka
English? Czech?
english
cesky
Zobrazení Volby režimu hry
Robot Robot? Robot Uzivatel?
Zobrazení herního okna Robot Uživatel
výhra
Zobrazení herního okna Robot Robot
výhra
Okno vítěze
obr. č. 10 Vývojový diagram grafických oken
3.2.3 Popis stavového automatu Inicializace Proběhne konfigurace vstupně výstupních pinů procesoru. Jako zdroj hodinového signálu je použit interní 32MHz oscilátor se zabudovanou teplotní kompenzací. Je spuštěn watchdog timer. Dále je třeba po sběrnici SPI inicializovat registry obvodů STMPE610 a ILI9341. K nastavování registrů STMPE610 byla vytvořena knihovna s definicemi registrů a funkcemi pro zápis a čtení dat. Obvod ILI9341 je obsluhován pomocí ASF knihoven, které byly mírně modifikovány.
14
Uvítací obrazovka Po inicializaci se na displeji zobrazí na pět sekund úvodní uvítací obrazovka (obr. č. 11).Po uplynutí této doby se okno překreslí a uživatel je vyzván k výběru jazyka(obr. č. 12).
obr. č. 11 Uvítací obrazovka
obr. č. 12 Volba jazyka
Volba jazyka Volba je provedena stiskem nad příslušným vykresleným tlačítkem. Jakmile je jazyk vybrán program nastaví na výstupních pinech, určených k ovládání robotu, příslušnou kombinaci, která je vyhodnocena a zpracována robotem. Všechny další výpisy jsou zobrazeny ve zvoleném jazyce. Volba režimu hry Po zvolení systémového jazyka se vykreslí okno volby režimu hry(obr. č. 13).Volba je provedena
obr. č. 13 Volba režimu hry
stiskem nad příslušným vykresleným tlačítkem a opět vyvolá kombinaci výstupů, která je zpracována robotem. Tím končí nastavovací sekvence pomocí výstupů procesoru a začíná hra. V režimu hry se provádí pouze odposlech sériové linky a na základě takto získaných dat se zobrazují informace činnosti robota, je vykresleno herní okno (obr. č. 14) skládající se ze tří částí: Textové pole - (dole) zobrazuje varovné, chybové a informativní hlášky o průběhu hry. Kostka - (střed) graficky znázorňuje počet políček, o které se má figurka v daném kole posunout. 15
Okno pozic(na okrajích) ve dvou oknech, nadepsaných příslušným hráčem se zobrazují pozice figurek v aktuálním kole. Okno pozic hráče, který je právě na tahu, je vždy zvýrazněno červeným rámečkem.
obr. č. 14Herní okno
Okno vítěze Pokud některý hráč dostane všechny figurky do domečku, je prohlášen za vítěze zobrazením vítězné obrazovky. Obrazovka má barvu stejnou jako figurky příslušného hráče. Současně je zobrazeno tlačítko, kterým je možné začít novou hru. 3.2.4 Obsluha STMPE610 Program probíhá v nekonečné smyčce. V každém průchodu je čten stav pinu, který je připojen k vývodu STMPE610 indikujícím vnitřní přerušení po úspěšné detekci stisku. Po detekování tohoto přerušení je zvolen jako SLAVE na SPI právě STMPE610 a jsou přečtena všechna data uložená v interní paměti. Čtení probíhá na frekvenci 1MHz maximální možné pro tento čip. Na ( obr. č. 15) je záznam z logického analyzátoru při čtení jednoho vzorku z bufferu. Datové vodiče v pořadí shora jsou:MOSI MISO SCK A CS. Dle délky stisku se počet uložených vzorků může lišit. Maximální velikost dat je dána velikostí bufferu (FIFO), která je 128*32bitů. Při přetečení bufferu během stisku jsou data zahozena a čeká se na další přerušení.
16
obr. č. 15 Čtení z bufferu STMPE610
3.2.5 Obsluha sériové linky Po příjmu každého znaku je generováno přerušení od sériové linky. Každý telegram, který má být vyhodnocen, musí mít přesný tvar. Skládá se z řídicího znaku, dat a textu. Apostrof značí, že daný znak bude po sériové lince odeslán jako číslo, které znaku přiřazuje standardní ASCII tabulka.
'#''#"X''X''Y''Z''Z' 't"e''x''t' '\n' Telegram vždy začíná dvěma znaky '#' tedy podle ASCII bude po sériové lince odesláno dvakrát dekadické číslo 35. Následuje tzv. řídící kód (XX) ten je reprezentací indexu do tabulky umístěné v procesoru, pomocí které se rozhodne, jak se naloží s dalšími daty přijatými v konkrétním telegramu. Data jsou reprezentována kódem (Y)a kódem (ZZ)Těchto pět znaků musí být přijato bezprostředně po sobě. Hodnota příslušného kódu (XX,Y,ZZ) je vždy vyjádřena jako hexadecimální číslo, které je po sériové lince odesláno pomocí ASCII číselné reprezentace jednotlivých znaků. Dále následuje příslušný text telegramu, jehož znaky jsou opět odeslány jako čísla dle ASCII. Celá sekvence musí být vždy ukončena znakem '\n' tedy dle ASCII bude odeslána konkrétně hodnota 10. Z takto definovaného protokolu jasně vyplývá, že je možno rozlišit až 255 různých telegramů a každý tento telegram pak může obsahovat jedno 4-bitové a jedno 8-bitové číslo. Maximální délka textu byla stanovena na 100 znaků. Pokud do této doby nepřijde ukončovací znak. Telegram bude zahozen. Takto složený telegram je volen z důvodu univerzálnosti. Vzhledem k tomu, že se jedná o odposlech sériové linky, který probíhá pomocí terminálu na PC, je třeba zajistit, aby byly výpisy čitelné jak pro procesor grafického displeje, tak pro uživatele na PC. Proto jsou odesílány pouze ASCII tisknutelné znaky. Uživatel PC tedy každý telegram vidí jako výpis na jednom řádku. Skládá se z hexadecimálních čísel, pro uživatele nepotřebných, a textu informujícím o činnosti robotu.
17
3.2.6 Stavový automat pro vyhodnocení telegramu Program napsán dle tohoto schématu (obr. č. 16) zajistí vyhodnocení pouze takové zprávy, která bude složena z předem definované sekvence. Pojmem "hexchar" jsou myšleny znaky, které reprezentují čísla v hexadecimální číselné soustavě, tedy '0'-'F'.Ve stavovém diagramu jsou modrou barvou vyznačeny podmínky pro skok do dalšího stavu programu. Každá tato podmínka znamená porovnávání právě přijatého znaku. Červenou barvou jsou vyznačeny akce spojené s vyhodnocením přijatých dat. Do pole y[i] se ukládají řídicí znaky a text je zaznamenán do bufferu. Po vykonání celé sekvence, je za podmínky, že byl přijat znak '/n', vyhodnocen text a data. Celá sekvence se potom může opakovat. Ke vstupu do tohoto automatu dochází při přerušení po přijmu jednoho znaku na sériové lince.
obr. č. 16 Stavový diagram příjmu zprávy po sériové lince
18
3.2.7
Přehled kódu pro procesor grafického displeje
app_widget.h - definice konstant pro funkce zajišťující vykreslování na display app_widget_solution.h - definice rutiny přerušení po stisku nad vykresleným tlačítkem a inicializace proměnných potřebných pro zobrazovací rutiny. asf.h - includování asf knihoven buttons.h - deklarace funkcí obsluhujících tlačítka na řídicím modulu robota buttons.c - definice funkcí obsluhujících tlačítka na řídicím modulu robota digi_font.h - deklarace struktury obsahující data reprezentující font digi_font.c - inicializace struktury obsahující data reprezentující font digi_fontData.h - data reprezentující font main.c - hlavní nekonečná smyčka programu, vyhodnocení stisku na touchscreen, hlavní stavový automat. main.h- pomocné deklarace pro main.c serial_uart.c - funkce obsluhující sériovou linku. Stavový automat sériové linky. Vyhodnocovací switch přijatého telegramu. serial_uart.h- deklarace funkcí v serial uart.c spiServices.c - funkce pro obsluhu přepnutí přenosové rychlosti SPI pro STMPE610 a ILI9341. spiServices.h - deklarace funkcí prospiServices.c STMPE610.c- knihovna funkcí pro obsluhu STMPE610 po sběrnici SPI. STMPE610.h- deklarace funkcí pro spi Services.c winPaint.h - deklarace všech funkcí zajišťujících překreslování grafických komponent na displeji winPEnd.c- funkce zajišťující obsluhu grafických komponent v závěrečném okně hry a jeho vykreslení winPGame.c - funkce zajišťující obsluhu grafických komponent v okně hry a jeho vykreslení. winPIntro.c - funkce zajišťující obsluhu grafických komponent v úvodním okně hry a jeho vykreslení winPLang.c - funkce zajišťující obsluhu grafických komponent v okně volby jazyka a jeho vykreslení winPOpt.c- funkce zajišťující obsluhu grafických komponent okně volby režimu hry a jeho vykreslení conf_board.h - konfigurace vstupních a výstupních pinů conf_clock.h - konfigurace oscilátoru conf_fonts.h - konfigurace systémového fontu conf_ili9341.h - konfigurace driveru ILI9341 conf_membag.h - konfigurace dynamické paměti conf_spi_master.h - konfigurace sběrnice SPI conf_stmpe610.h - konfigurace driveru STMPE610 conf_sysfont.h - konfigurace systémového fontu conf_timeout.h - konfigurace čekacích rutin conf_usart_serial.h - konfigurace sériové linky (USART) conf_win.h - konfigurace grafických oken conf_wtk.h - konfigurace grafických knihoven
Ve složce ASF je uložen kompletní kód využitých částí ASF knihoven firmy ATMEL.
19
4 BUDOUCNOST PROJEKTU Softwarová a hardwarová stránka robotu, která byla vyráběna svépomocí, nevyžaduje enormní změny. Možná by bylo lepší nahradit tlačítka pod hracím polem například hallovými sondami, které by snímaly polohu hrací figurky přesněji, například zda je figurka na středu nebo na okraji políčka a podle této informace přesněji nastavovat robotické rameno. Nejslabším článkem robotu je samotné robotické rameno postavené z motorů AX-12 ze stavebnice Bioloid. Tyto motory, jejichž převodovky jsou vyrobeny z plastu, mají nízkou opakovatelnost, enormní teplotní závislost a velkou vůli v převodech. Proto se občas stane, že robot pokládá na jedno a to samé políčko figurku rozdílně (nikdy se netrefí na stejnou pozici naprosto přesně dvakrát po sobě). Proto by bylo vhodné použít jiné motory, a to minimálně s kovovou převodovkou, která bude minimálně teplotně závislá a bude mít menší vůli v převodech.Volba lepších pohonů v sobě nese samozřejmě vyšší cenu jednotlivých komponent, takže v případě upgradu bude uvažováno cenově přijatelné řešení.
20
5 ZHODNOCENÍ PRÁCE Práce byla splněna dle daného zadání. Robot je možné nastavit prostřednictvím grafického dotykového displeje a následně na displeji sledovat průběh hry, což jsou stavové výpisy, pozice jednotlivých figurek, pořadové číslo kola atd. Zároveň bylo zachováno stálé připojení robotu prostřednictvím standardního USB typu B. V původní verzi bylo použito externího převodníku RS232 – USB, který je v nynější verzi implementován přímo v samotném zařízení. Pro lepší konektivitu byl nad rámec zadání projektu přidán bluetooth modul HC-05, který je možné spárovat přímo s počítačem, nebo například s chytrým telefonem s textovým terminálem a stavové výpisy tak sledovat bezdrátově do maximální vzdálenosti sedmi metrů od robotu. Byly odstraněny chybové stavy, do kterých se robot dostává vlivem výpadku komunikace mezi motory a řídicí jednotkou CM5, což je popsáno v kapitole 3.1.1. Práce tedy byla splněna v plném rozsahu zadání a robot je včetně komunikačního interface plně funkční.
21
6 POUŽITÉ ZDROJE [1] TEXAS INSTRUMENTS. Datasheet SLAA384A [online]. 2010. Dokument dostupný na: www.ti.com [cit. 1. 5. 2015]. [2] ATMEL. Datasheet 8/16-bit Atmel AVR XMEGA Microcontrollers [online]. 2008. Dokument dostupný na: www.atmel.com [cit. 1. 5. 2015]. [3] ATMEL. Manual 8/16-bit Atmel AVR XMEGA Microcontrollers[online]. 2007. Dokument dostupný na: www.atmel.com [cit. 1. 5. 2015]. [4] STMICROELECTRONICS. Datasheet 8STMPE610. 2005. Dokument dostupný na: www.st.com [cit. 1. 5. 2015]. [5] ILITEK. Datasheet ILI9341 [online]. 2010. Dokument dostupný na: www.ilitek.com [cit. 1. 5. 2015]. [6] SILICON LABORATORIES. DatasheetCP2102 [online]. 2013. Dokument dostupný na: www.silabs.com [cit. 1. 5. 2015]. [7] ATMEL. DatasheetATmega16 [online]. 2010. Dokument dostupný na: www.atmel.com [cit. 1. 5. 2015]. [8] TEXAS INSTRUMENTS. DatasheetMAX232 [online]. 2014. Dokument dostupný na: www.ti.com [cit. 1. 5. 2015]. [9] ANALOG DEVICES. DatasheetADuM3160 [online]. 2011. Dokument dostupný na: www.analog.com [cit. 1. 5. 2015]. [10] GUANGZHOU CHENG INFORMATION TECHNOLOGY. DatasheetHC-05 [online]. 2010. Dokument dostupný na: www. wavesen.com [cit. 1. 5. 2015].
22
7 SEZNAM OBRÁZKŮ obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr. obr.
č. 1 Převodník USB-UART ................................................................................................ 5 č. 2 Bluetooth modul HC-05 .............................................................................................. 7 č. 3 Použitý modul s grafickým displejem ......................................................................... 8 č. 4 Snímací fólie dotykové vrstvy ..................................................................................... 9 č. 5 Náhradní schéma snímacích fólií ................................................................................ 9 č. 6 Blokové schéma STMPE610 ....................................................................................... 9 č. 7 Blokové schéma ATxmega32 .................................................................................... 10 č. 8 Připevnění řídicí desky k desce displeje .................................................................... 11 č. 9 Schémata převodníků logických úrovní .................................................................... 11 č. 10 Vývojový diagram grafických oken ........................................................................ 14 č. 11 Uvítací obrazovka .................................................................................................... 15 č. 12 Volba jazyka ............................................................................................................ 15 č. 13 Volba režimu hry ..................................................................................................... 15 č. 14 Herní okno ............................................................................................................... 16 č. 15 Čtení z bufferu STMPE610 ..................................................................................... 17 č. 16 Stavový diagram příjmu zprávy po sériové lince .................................................... 18
23