MazeBot ( Bloudící KAMbot ) Rok vypracování: 2016 Předmět: Název projektu: Vedoucí projektu: Autor 1: Autor 2: Robotika (BROB) Bloudící KAMbot Ing. František Burian, Ph.D. Jan Záviš, 173935, B/2/AMT/06 Martin Tilgner, 174416, B/2/AMT/06
Zadání projektu: Navrhněte, realizujte a otestujte autonomní robot třídy KAMbot, který zvládne autonomní průjezd bludištěm. Zadání vyžaduje navrhnout vhodné senzory a upevnit je na těleso robotu a vytvořit software, schopný za pomocí těchto senzorů se navigovat v bludišti. Prerekvizity: HW, SW (C/C++) ii
Poděkování: Tato práce byla zpracována jako závěrečný projekt v rámci řádného dokončení předmětu Robotika (BROB). Vedoucím práce byl pan Ing. František Burian, Ph.D, kterému tímto děkujeme za cenné rady k této práci. iii
Obsah 1 Úvod...- 1-1.1 Popis řešeného problému a zdůvodnění výběru...- 1-1.2 Cíl práce a očekávané výsledky...- 1-2 Arduino...- 2-2.1 Řídicí jednotky...- 2-2.2 Použité díly od Arduina pro MazeBota...- 3-2.2.1 Arduino UNO...- 3-2.2.2 Senzor shield...- 5-2.2.3 Limitní čidla...- 8-2.2.4 Krokové motorky... - 11-2.2.5 Ultrazvukové čidla...- 13-3 Zdroje a tlačítka...- 15-3.1 Napájecí zdroj... - 15-3.2 Tlačítka...- 17-3.3 Baterka...- 19-3.4 Nabíječka...- 20-4 MazeBot...- 22-4.1 Verze MazeBota...- 22-4.1.1 MazeBot V1.0...- 22-4.1.2 MazeBot V2.0...- 24-4.1.3 MazeBot V2.1...- 25-4.1.4 MazeBot V3.0...- 26-4.1.5 MazeBot V3.1 (finální verze)... - 28-4.2 Sestavení MazeBota V3.1...- 29-4.2.1 Technické nákresy...- 29 - iv
4.2.2 Sestavení nosné konstrukce...- 31-4.2.3 Osazení...- 32-4.2.4 Propojení jednotlivých komponent Arduinem...- 34-5 Bludiště...- 37-5.1 Parametry bludiště...- 37-5.2 Start a cíl...- 37-5.3 Hledání cesty...- 37-6 Programová část...- 37-6.1 Vývojové prostředí Arduino... - 37-6.2 Programovací jazyk...- 37-6.3 Algoritmus... - 37-6.3.1 Stavový automat...- 38-6.4 Ovládání ultrazvukového čidla...- 39-6.5 Ovládání motorů...- 40-6.5.1 Otočení kola...- 40-6.5.2 LEVYmotorHandle, PRAVmotorHandle...- 40-6.5.3 dopredu...- 40-6.5.4 dozadu...- 41-6.5.5 otoc90l...- 41-6.5.6 otoc90r...- 41-6.5.7 Vyhledání cíle...- 41-7 Závěr...- 42-8 Seznam použité literatury...- 43-8.1 Elektronické zdroje...- 43-8.2 Literatura...- 43-9 Seznam Obrázků a tabulek...- 44 - v
9.1 Seznam obrázků... - 44-9.2 Obsah CD... - 45 - vi
1 Úvod 1.1 Popis řešeného problému a zdůvodnění výběru Téma této práce je navrhnutí vhodných čidel, pohonných jednotek, napájení a vybrat vhodnou řídicí jednotku. Robot musí být schopen autonomně projet bludištěm a najít cíl. V dnešní době je toto téma dosti aktuální, protože se chce dosáhnout toho, aby nebezpečnou nebo příliš namáhavou práci prováděli roboti, anebo robotizované linky. Roboti nebo robotické části těla můžou pomoci i lidem s různým druhem postižení lépe se zařadit do společnosti. Tato práce řeší programování a návrh robota, který na základě informací z čidel, dokáže vyhodnotit, v jakém prostředí se pohybuje a následně podle těchto informací dojet bezpečně až do cíle bludiště. Předkládaná práce pojednává o návrhu vhodných komponent a naprogramování vhodného algoritmu. Toto téma jsme si vybraly, protože se danou tematikou zaobíráme již od studia na střední škole. 1.2 Cíl práce a očekávané výsledky Cílem této práce je sestrojení funkčního robota, který dokáže autonomně projet bludištěm a vyhledat cíl. Naším cílem je zúčastnit se robotické soutěže na Slovensku. Tato soutěž se koná v před posledním týdnu našeho semestru. Této soutěže se zúčastníme jenom v případě, že nebudeme mít v tomto týdnu testy a zkoušky. A pokud by to nevyšlo tak bychom se soutěže zúčastnili v příštím roce, ale již s vylepšeným prototypem naší dosavadní verze robota. V této práci je využita literatura od firmy Arduino ve formě manuálu. Dále je práce obohacena o poznatky z internetové stránky www.arduino.cz a naše zkušenosti. - 1 -
2 Arduino Arduino je elektronická zařízení, založeno na jednoduchém hardware a uživatelsky příjemném softwaru. Arduino je převážně určeno pro kutily, jednoduchou automatizaci a studentské soutěže. Jedná se o open source, což znamená, že jsou všechny dostupné dokumentace a vzorové programy k dostání zdarma, čehož hodně využívají studenti pro seminární práce. 2.1 Řídicí jednotky Arduino a upc o UNO ATmega328P o DUE o MEGA ATMEL SAM3U ATmega1280 o LEONARDO o NANO ATmega32u4 ATmega168 o A mnoho další Jak zde můžeme vidět, jednotlivé kyty jsou osazeny vždy jedním mikro kontrolérem značky ATmega od firmy Atmel, která vyvíjí a distribuuje tyto součástky. Jediný rozdíl je v tytu použité ATmegy. - 2 -
2.2 Použité díly od Arduina pro MazeBota Využili jsme velikého sortimentu externích přídavných perférii. Zde je popis všech součástí od firmy Arduino. 2.2.1 Arduino UNO Pro našeho robota jsme si vybrali Arduino UNO. Jedním z hlavních důvodu výběru byla naše předešlá zkušenost s touto technologií. Dalším důležitým faktorem byla velice nízká spotřeba, rozšiřitelnost o rozšiřující Shieldy a veliká kompatibilita s velikou škálou externích periférií. Nyní si popíšeme co na Arduinu UNO nalezneme a k čemu se co používá. Arduino UNO je velice přehledná deska, každý se na ní hned zorientuje a důležití věci jsou popsané pro snazší orientaci. 2 11 3 9 8 6 5 7 1 10 4 Obrázek 1- ArduinoUNO 12 13-3 -
1. Řídicí jednotka celé desky a. Jedná se o ATmega328P i. Obsahuje: 1. 32kB flash paměť 2. 2kB SRAM paměť 3. 1kB EEPROM paměť ii. Pracuje na frekvenci 16MHz 2. Tlačítko reset a. Slouží k restartu programu, což znamená, že se program spustí od úplného začátku. Například při chybě, nebo zacyklení programu. 3. USB a. Jedná se o USB typu B b. Slouží pro přenos dat mezi počítačem a Arduinem a k nahrávání programu 4. Napájecí konektor a. Slouží k připojení baterie b. Napětí přivedené na konektor musí být v rozmezí 7-12V 5. USB seriál převodník a. Slouží ke komunikaci ATmegy a naším PC 6. Led dioda ON a. Slouží k signalizaci b. Indukuje nám, že je deska pod napětím 7. RX a TX Led diody a. Blikají, pokud dochází ke komunikaci s osobním počítačem 8. L Led dioda a. Programovatelná led dioda, kterou můžeme rozsvěcet a zhasínat dle libosti a potřeby 9. ICSP 2 a. Slouží pro externí programování USB seriál převodníku 10. ICSP 1 a. Slouží pro externí programování hlavního čipu - 4 -
11. Digital I/O a. Je to sběrnice 14 digitálních vstupně výstupních pinů b. Piny označené vlnovkou se dají použít jako PWM i. Pulzně šířková modulace 12. Napájecí výstupy a. Slouží k napájení externích periférií 13. Analogové I/O a. Je to sběrnice 6 analogových stupně výstupních pinů b. Piny se ale dají v programu nastavit jako digitální i. Z toho plyne, že můžeme získat až 20 digitálních pinů Technické parametry: 14 vstupně výstupních pinů o Digitální 6 vstupně výstupných pinů o Analogové Externí napájení o Musíme ho udržovat mezi 7-12V 2.2.2 Senzor shield Jelikož Arduino samo o sobě má dosti málo propojovacích vývodů a má málo vstupních a výstupních pinů, tak je nutno pro větší projekty připojit toto rozšíření. Tento shield je převážně určen pro připojení čidel. Ale je na programátorovy jaký význam v programu přiřadí jednotlivým pinům. My jsme tento shield využil z jednoho prostého důvodu. Má na sobě rozvedenou sběrnici napájení. A díky tomuto shieldu jsme nemuseli složitě řešit jak napájet všechny periférie. Nyní tento sensor shield v4.0 popíšeme. - 5 -
4 1 2 6 3 1 5 Obrázek 2- Sensor shield v4.0 1. Rozšiřující sběrnice a. Tato sběrnice je určena pro připojení dalšího shieldu (motor shield) 2. Digitální pole pinů a. G (zem) i. Rozvod společné země pro jednotlivé periferie b. V (Ucc) i. Rozvod společného napájení +5V pro jednotlivé periférie c. S (Signál) i. Signálová vstupně výstupní sběrnice pro přenos dat a komunikaci Arduina s perifériemi 3. Volitelné pole pinů a. G (zem) i. Rozvod společné země pro jednotlivé periferie b. V (Ucc) i. Rozvod společného napájení +5V pro jednotlivé periférie c. S (Signál) - 6 -
i. Signálová vstupně výstupní sběrnice pro přenos dat a komunikaci Arduina s perifériemi ii. Tato sběrnice je programovatelná 1. Je na programátorovy jestli jednotlivé piny bude požívat jako digitální anebo analogové 4. Analog a. Je tu šest analogových vstupně výstupních konektorů, pro připojení jednotlivých čidel b. Obsahuje i. G (zem) 1. Uzemnění ii. V (Ucc) 1. Napájení +5V iii. S (Signál) 1. Signálový vstupně výstupní pin pro přenos dat a komunikaci Arduina s periférií 5. Komunikační blok a. Komunikace pomocí I2C nebo seriál COM 6. Reset a. Toto tlačítko resetuje celé Arduíno i. Program se spustí od úplného začátku Technické parametry: 13 vstupně výstupních pinů o Digital 6 vstupně výstupních pinů o Analog 1 komunikační port o I2C/UART Tlačítko reset Napájení o Napájení je z Arduina - 7 -
2.2.3 Limitní čidla Tyto čidla se využívají pro detekci překážek v námi nadefinované vzdálenosti. Jedná se o infračervená čidla. Tyto čidla jsou velice přesné. Mají snímací oblast 1mm až 60 cm. Májí ale dosti podstatnou nevýhodu. Jsou závislí na kvalitě osvětlení a barvě překážky. Infračervený paprsek se v černé barvě ztrácí, z toho plyne, že černá překážka nebude detekována. Tyto čidla máme na robotovi osazené, ale nejsou zapojeny. Zatím jsme neměli potřebu je zapnout. Do budoucna máme plán tyto čidla používat pro plynulý průjezd zatáček. Dále máme ideu tyto čidla používat jako pojistku. Pokud by se robot dostal moc blízko k překážce tak ultrazvuková čidla (budeme o nich mluvit později) budou mimo svojí snímací oblast. A tou to pojistkou bychom si to mohli ošetřit. Nyní si to to čidlo popíšeme. 1 2 3 Obrázek 3- Shield pro 4 limitní čidla - 8 -
4 5 Obrázek 4- Jedno limitní čidlo 1. Piny pro jednotlivá čidla a. Zde se připojují jednotlivá čidla i. Je to primárně určeno pro 4 limitní čidla b. Ucc i. Napájení c. GND i. Zem d. IN 1-4 i. Vstupy 1. Slouží k přenosu napětí, které se generuje na snímači, podle velikosti napětí se pak vyhodnocuje vzdálenost 2. Pole trimrů a. Pomocí těchto trimrů si ladíme velikost vstupního napětí a také ladíme jemnost a přesnost snímání jednotlivých čidel 3. Pole pinů pro přenos dat a napájení a. Ucc i. Napájení b. GN D i. Zem c. Out 1-4 - 9 -
i. Výstupní piny určeny pro propojení s analogovými piny na Arduinu 4. Piny pro připojení shieldu pro limitní čidla a. Ucc i. Napájení b. GND i. Zem c. Out i. Výstupní signál (generované napětí) 5. Samotné Limitní čidlo a. Je složeno z i. Infračervené LED diody 1. Vysílač ii. Foto diody 1. Přijímač Technické parametry: Napětí o 3,3-5V Proud o Musíme ho udržovat větší než jeden ampér Snímaná vzdálenost o Od 1mm do 60 cm - 10 -
2.2.4 Krokové motorky Tento typ krokových motorků je ideální pro pohyb robota. Tyto motorky nám umožňují řídit a regulovat pohyb. Díky tomu že víme jaká vzdálenost je jeden krok tak si můžeme vypočítat dráhu a značně nám to ulehčuje odometrii. Použili jsme krokový motor s převodovkou. Toho velice využíváme. Díky dostatečným převodům se nemusíme starat o stop signál, to nám zajistí převodovka. Nám jen stačí v programu odpojit datovou sběrnici pro daný krokový motor. Nyní si jednotlivé části popíšeme. 1 3 2 4 Obrázek 5 Shield pro jeden krokový motor 5 5 6 Obrázek 6- Krokový motor - 11 -
1. IN 1-4 a. Vstupní piny pro přenos dat z Arduina 2. Napájení a. Musí se držet přesně na 5V i. Výrobce udává 5-12V ale motorky jsou jen na 5V 3. Konektor pro připojení motorku 4. LED diody a. Indikují nám, který výstup je aktivní, neboli jaký tam máme krok 5. Upevňovací očka a. Slouží k uchycení motorku ke karoserii 6. Osička a. Osička pro připevnění kolečka Technické parametry: Převodový poměr o 1/64 Úhel kroku o 5.625/64 Průměr o 28mm Indikační LED Piny IN 1-4 - 12 -
2.2.5 Ultrazvukové čidla Ultrazvukové čidla se dají použít také jako limitní čidla. My jsme je využili pro měření vzdálenosti robota od překážky. Tento údaj nám řekne, jak moc se můžeme ještě přiblížit, než narazíme. V bludišti tímto způsobem vyhodnocuje, jestli jede robot rovně v delší uličce, volnou odbočku, anebo slepou ulici. Na robotu máme tyto čidla celkem tři. Jedno čidlo je namířené dopředu, druhé je namířeno doprava a třetí je namířeno doleva. Dozadu jsme žádné čidlo nedávali, protože nám to přišlo zbytečné. Robota se nám povedlo udělat tak malého, že není vůbec žádný problém otočit se na místě. Toto čidlo nemá vlastí shield, proto je jednoduché ho zapojit. Zapojuje se na digitální vstupně výstupní piny Arduina. A teď si ho popíšeme. 1 3 2 Obrázek 7- Ultrazvukové čidlo - 13 -
1. Trig a. Vysílač signálu 2. Echo a. Přijímač signálu 3. Propojovací piny a. Ucc i. Napájení b. Trig i. Vstupní pin pro signál z Arduina c. Echo i. Výstupní pin pro přenos dat do Arduina d. GND i. Zem Technické parametry: Snímací rozsah o Od 2 cm do 4 metrů Přesnost měření o 3mm Zorný úhle o 12 stupňů 4 piny Příkon o 2 ma - 14 -
3 Zdroje a tlačítka Jelikož jsme měli veliké potíže s velikostí tak jsme museli vytvořit vlastní napájení tohoto robotka, Dále jsme museli zařídit, aby se námi vytvořený zdroj mohl opětovně využít, což znamená vytvořit nabíjecí adaptér. A také jsme potřebovali spouštěcí tlačítka. Nyní si jednotlivé věci projdeme. 3.1 Napájecí zdroj Napájecí zdroj byl veliký oříšek. Museli jsme vytvořit zdroj, který nám bude napájet dva krokové motorky a limitní čidla. Jeden krokový motorek si vezme 600mA a máme tam dva, v součtu nám to dá 1,2A. Limitní čidla potřebují 1A. Po shrnutí nám to dá 2.2A a stabilní napětí 5V. Dlouho jsem přemýšlel a hledal inspiraci na internetu. Odpověď byla ale velice prostá. Použil jsem zdroj z auto nabíječky do auta. Jedná se o pulzní zdroj, který nám dá až 2.5A a udržuje stabilně 5V. Jelikož jsme nezapojili v této verzi robota limitní čidla, tak nám stačila 2A pojistka. Nyní si tento zdroj popíšeme. 1 2 Obrázek 8- Zdroj 5V/2.5A 3 4-15 -
1. Konektor a. Zde se připojí konektor od baterie 2. Pojistka a. Pojistku jsme dali na 2A rychlou i. Abychom nezničili Arduino 3. Samotný zdroj a. Zdroj vyndaný z nabíječky na mobil do auta 4. Elektrolitický kondenzátor a. Je tu kvůli vyhlazení a filtrování signálu Technické parametry: 5V stejnosměrných/2,5a - 16 -
3.2 Tlačítka Tlačítka jsou v robotice velmi často používány pro nastavení vstupních a počátečních parametrů, se kterými pak robot pracuje. Dále se dají využít pro spouštění programu a volby módu. Nebo se s jejich pomocí dá vyvolat přerušení. A v neposlední řadě se dá robot zastavit, pokud dělá něco nečekaného. My jsme použili dvě tlačítka. První tlačítka nám spouští a ukončuje mód jízdy v bludišti po pravé straně. Druhé tlačítko pak následně po druhé straně. Tlačítka bylo nutné ošetřit proti záchvěvům. Zde je schéma jak se správně ošetřuje tlačítko pro Arduino proti záchvěvům. Obrázek 9- Ošetření a zapojení tlačítek 2 1 3 4 6 Obrázek 10- Tlačítka reálné zapojení 5-17 -
1. Sběrnice Ucc a. Zde je rozvod Ucc až pro 8 zařízení 2. Sběrnice GND a. Zde je rozvod GND až pro 8 zařízení 3. Invertory a. Mění logickou jedničku na nulu a naopak 4. Tlačítka 5. Elektrolytické kondenzátory a. Jako filtrační 6. Odpory a. Pro přitažení logické jedničky Technické parametry: Napájení o 5V DC - 18 -
3.3 Baterka Jako zdroj jsme použili dva články ze staré baterie z notebooku. Nám stačilo napětí 8V. Ale potřebovali jsme větší kapacitu, ale ne na úkor velikosti. Tak jsme zvolili tuto variantu. Baterie má dva vývody. Jeden vede napětí do Arduina a druhý do externího zdroje. Jeden článek pokud je plně nabytý nám dá 4,2V, v celku nám to dá 8,4V. Napětí na této baterii nesmí klesnout pod 7,2V, jinak se pak články ničí. Nyní si baterii popíšeme. 2 1 3 4 Obrázek 11- Baterka 1. Baterka a. Dva články Lion 2. Vypínač 3. Konektor a. Delší je pro externí zdroj 4. Konektor a. Kratší je pro Arduino Technické parametry: Nabito 8,4V Vybito 7,2V Nabíjecí proud 0,34A - 19 -
3.4 Nabíječka Jelikož máme tak specifickou baterku, tak jsme řešili, jak ji budeme nabíjet. Odpověď byla opět prostá. Opět jsme vzali nabíječku pro starou GPS do auta. Uvnitř jsme našli vhodný nabíjecí segment. Pomocí měřící techniky, jsme zjistili, že nabíjecí proud je moc veliký. Tak jsme upravili velikosti odporů, a tak jsme dostali námi požadovanou hodnotu. Pak stačilo jen přidat signalizační diodu a speciální konektor pro připojení baterie. Tato nabíječka je napájena trafo zdrojem, nastaveným tak že simuluje zdroj z auto zásuvky. Nyní se podíváme, jak to ve skutečnosti vypadá. 1 5 2 Obrázek 12- Nabíječka 6 7 3 8 4 Obrázek 14- Vnitřek nabíječky 9 Obrázek 16- Trafo zdroj Obrázek 13- Trafo zdroj a nabíječka Obrázek 15- Trafo zdroj, nabíječka a baterka - 20 -
1. Napětí a. Napětí na baterce 2. Proud a. Proud, kterým se nabíjí baterka 3. Elektronika a. Vyndaný vnitřek z nabíječky GPS do auta 4. Trimr a. Tímto trimrem jsme si volili velikost nabíjecího proudu 5. LED dioda a. Signalizovala stav nabíjení 6. Konektor pro baterku 7. Konektor pro trafo zdroj 8. Konektor pro nabíječku 9. Nastavení napětí pro nabíječku a. Musí být nastaveno na 12V Technické parametry Napájení trafo zdroje o 230V Napájení nabíječky o 12V Nabíjecí proud baterie o 0.24A - 21 -
4 MazeBot Je to robot, který je postaven za účelem účasti na robotické soutěži ISTRobot. Tento úkol nebyl tak úplně jednoduchý. Museli jsme se držet určitých pravidel soutěže. Tyto pravidla velmi ovlivnila konečnou verzi MazeBota. Než robot dostal konečnou podobu, musel si projít určitým vývojem. 4.1 Verze MazeBota Nyní si popíšeme jednotlivé verze robota. Zde si ukážeme různé variace a kombinace různých způsobů konstrukce, a řekneme si jejich výhody a nevýhody. 4.1.1 MazeBot V1.0 Náš první návrh se moc nelišil od KAMbota. Jediný rozdíl byl v tom, že měl kola uprostřed. To jsme zvolili z jednoho prostého důvodu, aby se dokázal otočit kolem své osy. Tato verze byla moc veliká, proto jsme ji museli zavrhnout a zkusit ji zmenšit, ale o tom si povíme později. Nyní si tuto verzi popíšeme. 1 2 3 6 4 5 8 7 9 Obrázek 17- MazeBot V1.0 rozloženo - 22 -
Obrázek 18- MazeBot V1.0 složeno 1. Raspberry pi2 2. Střecha 3. Baterka a. Li-Pol 4. Lavice pro uchycení baterky 5. Kapota 6. Kolo 7. Krokový motor 8. Infračervený dálkový senzor 9. Kulička a. Všesměrová kulička - 23 -
4.1.2 MazeBot V2.0 Tato verze se dočkala kompletního zúžení. Krokové motorky se posunuly přímo k baterce, čidla se zapustila do kapoty a zarovnali se hrany. Již to není čtyř stěn, nýbrž osmi stěn. Opět bylo zachováno, že je osazen třemi infračervenými čidly. Každé čidlo kouká na jinou stranu tak abychom věděli, kam se pohybuje a jestli jede rovně. Také došlo ke zkrácení osy vyvedené z robota pro připevnění koleček. Tím jsme docílili toho, že se zmenšila šířka robota. Nyní si tento typ ukážeme. Obrázek 19- MazeBot V2.0-24 -
4.1.3 MazeBot V2.1 MazeBot V2.1 se od verze V2.0 liší jen minimálně. Byly pouze změněny pozice čidel. U této verze je jedno čidlo snímací směr jízdy dopředu a od předchozí verze je toto čidlo zapuštěné do kapoty. A pak tu jsou dvě čidla snímající levou stranu, opět jsou obě zapuštěné. Idea byla taková, že se MazeBot bude držet při jedné straně při průjezdu bludištěm. K tomuto nápadu nás přivedlo zadání do soutěže, podle kterého jsme se drželi. Je tam zmínka že do cíle dá dojet podle pravidla jedné ruky, ale že to nemusí být ta nejkratší cesta. A jak můžete vidět na obrázku pod textem tato verze je téměř totožná s předchozí, proto nese označení verze 2 ale upravený typ. Tedy V2.1. Obrázek 20- MazeBot V2.1 Potom co jsme tuto verzi vytiskly na 3D tiskárně a smontovali jsme podvozek, jsme došli ke znepokojivému zjištění. Tato verze robota, leč je velmi dobře navrhnutá a zminimalizovaná na tu nejmenší možnou podobu se do bludiště nevejde. Tato verze se sice v bludišti otočí ale má rezervu jen 5mm, což je opravdu málo. - 25 -
4.1.4 MazeBot V3.0 MazeBot V2.1 byl poslední robot, který spadal do skupiny KAMbot. Byli jsme ale nuceni opustit od této architektury a museli jsme vymyslet něco nového, ale co je důležité tak hlavně malého. Potřebovali jsme menší motorky, to vedlo ke zmenšení baterky, z důvodu váhy. Menší motorek by neuvezl tak velkého robota. Když se zmenšila baterka, museli jsme změnit i ovládací desku. Důvodem byl veliký odběr Raspberry pi2. Dlouho jsme si lámali hlavu jak to vyřešit. Odpověď byla opět velice prostá. Já i můj kolega jsme měli ze středních škol zkušenosti s Arduinem. Arduino má velice nízký odběr, k jeho napájení stačí 4 baterie 1,5V. Dále pro něj existuje široká škála kompatibilních čidel a periférií. Na obrázku můžete vidět, jak se mám tento model vyvedl. Nemá žádné šasi jako jeho předchůdci, což vedlo k veliké úspoře místa. Dále jsou zde ultrazvukové čidla, Mají větší snímací rozsah. A jako pojistka jsou zde i limitní čidla přítomnosti překážek. 1 4 2 3 5 6 Obrázek 21- MazeBot V3.0 pohled zepředu - 26 -
7 9 8 10 Obrázek 22- MazeBot V3.0 pohled zezadu 1. Arduino UNO 2. Baterka 3. Ultrazvukové čidlo 4. Voltmetr 5. Kolo nasazené na krokovém motoru 6. Všesměrová kulička 7. Senzor shield 8. Shield pro limitní čidla 9. Shieldy pro krokové motorky 10. Limitní čidlo Ale ani tato verze se neobešla bez chyb. Proto jsme udělali ještě pár úprav a tím vznikla další verze. Následující verze je obohacená o další nové prvky a byla mírně změněná konstrukce. Lépe řečeno umístění všesměrových kuliček. - 27 -
4.1.5 MazeBot V3.1 (finální verze) V této verzi přibil na zadní straně zdroj. Tento zdroj je určen pro napájení motorků, limitních čidel a tlačítek. Na tento zdroj jsou připojeny všechny periferie, které nejsou napájené z Arduina. Dále bylo upraveno umístění ultrazvukových čidel, které snímali strany. Byli jsme nuceni, dát je víš, aby nedřeli o podlahu. A přední kolečko bylo upraveno tak že si můžeme dle potřeby upravovat jeho polohu. Na matičkách je tak uchycena podložka. Tloušťkou podložky si volíme, jak moc se mám bude robot kolíbat. Kdyby se nekolíbal tak kolečka podkluzovala jako v předchozí verzi. Na obrázku pod textem je vše přehledně vidět. 1 2 3 Obrázek 24- MazeBot V3.1 pohled zezadu Obrázek 23- MazeBot pohled ze předu 1. Zdroj a. Pro napájení periferií 2. Odstraněná překážka a. Tím se zvedla ultrazvuková čidla 3. Všesměrová kulička a. Změnila se z pevné na nastavitelnou - 28 -
4.2 Sestavení MazeBota V3.1 V tomto oddílu si popíšeme, jak jsme sestavili a naprogramovali našeho bloudícího robůtka. Návrh se skládal z několika částí. Od nákresů až po konečné sestavení a oživení. Úkol to byl nelehký, ale myslíme, že se nám to docela povedlo. 4.2.1 Technické nákresy Jako každý projekt, tak i ten náš se neobešel bez technických nákresů. Nákresy jsme kreslili ručně v měřítku 1:1, abychom měli představu tak to bude vypadat ve skutečnosti. Předchozí verze jsme dělali v 3D prostředí a doplatili jsme na to. Ne na každou aplikaci se tento postup hodí. Na nákresech můžete vidět MazeBota z několika pohledů. Hodnoty na obrázcích jsou uvedeny v milimetrech. Obrázek 28- Nákres pohled zepředu Obrázek 27- Nákres pohled z boku Obrázek 26- Nákres pohled ze shora Obrázek 25- Nákres pohled zezadu - 29 -
Obrázek 29- Nákres patky pro kuličku Obrázek 30- Nákres patka pro čidla - 30 -
4.2.2 Sestavení nosné konstrukce Celá nosná konstrukce je vyrobena z plastových obdélníků různé velikosti. Jednotlivé obdélníky jsou k sobě lepeny dvousložkovým lepidlem. Na připevnění všesměrové kuličky byla použita L patka a na připevnění čidel bylo použito téčko. Jak se mám to povedlo, můžete vidět na následujícím obrázku. 1 2 3 7 6 4 Obrázek 32- Nosná konstrukce 1 Obrázek 31- Nosná konstrukce 2 1. Nosná deska pro Arduino 2. Hlavní spojovací deska 3. Zadní stěna 4. Patka pro ultrazvuková čidla 5. Patka pro kuličku 6. Box pro baterku - 31 -
4.2.3 Osazení Konstrukci máme hotovou a můžeme ji osadit elektronikou a čidly. Nejprve jsme přidělali krokové motorky. Ty jsou uchyceny na závitových tyčkách. Tato tyčky jsou uchyceny do předem připravených otvorů ve spodní části nosné konstrukce. Na motorky jsme pak mohli rovnou uchytit na soustruhu připravené kola se speciální protiskluzovou gumou. Díky tomu jsme si pak mohli nastavit optimální výšku uchycení všesměrových kuliček. Uchycení motorků a kuliček je patrné z obrázku. 1 2 3 4 5 Obrázek 33- Uchycení motorků a kuliček 1. Všesměrová kulička 2. Pneumatika 3. Kolo a. Vyrobeno ze silonu b. Průměr kola je 40mm c. Délka osičky je 1cm i. Otvor pro hřídelku z motorku si každý musí zvolit dle potřeby 4. Krokový motorek - 32 -
5. Závitová tyčka pro uchycení Dále jsme si připravili ultrazvukové čidla. Na ultrazvuková čidla jsme pomocí lepidla přidělali limitní infračervená čidla. Mohli jsme si to dovolit, protože se obě čidla mají stejný směr snímání. A také nám to velmi ušetřilo místo. 1 2 Obrázek 35- Přední ultrazvukové čidlo s limitními Obrázek 34- Boční ultrazvukové a limitní čidlo 1. Limitní čidlo přítomnosti překážek 2. Ultrazvukové čidlo Poté, co jsme si připravili čidla, jsme je osadili. Ultrazvukové čidlo se dvěma limitními čidly na boku bylo umístěno na předek robota. Jelikož bude snímat vzdálenost překážky před robotem. A limitní čidla na bocích budou snímat, kdy začala mezera v bludišti. Následně jsme do zadní části nosné konstrukce umístili z každé strany na stojato ultrazvukové čidlo s limitním čidlem. Tyto čidla se budeme využívat ke zjištění dráhy v bludišti, abychom věděli, jestli robot jede v bludišti rovně. A limitní čidla má řeknou, že robot se celý nachází v mezeře. Pak jsme přidělali signalizační voltmetr na pravou stranu robota. Tento voltmetr se využívá ke zjištění napětí na baterii. Abychom věděli, kdy ji máme dát nabít. Všechny tyto věci jsme na nosnou konstrukci lepili lepidlem. Zbytek byl na robota přidělán samořeznými vruty. Osadili jsme Arduino na vršek konstrukce. Do Arduina jsme zasadili Senzor shield pro rozšíření propojovacích pinů. Na levou stranu byly osazeny Dva motor shieldy. Pro každý motorek jeden. A na zadní stěnu byl přidělán shield pro limitní čidla překážek a přídavný zdrojový shield. Nyní máme robota úplně osazeného. Obrázek plně osazeného robota i s popisky jsme si již ukazovali v přehledu jednotlivých verzi. Naleznete to na obrázkách číslo 25 až 28. - 33 -
4.2.4 Propojení jednotlivých komponent Arduinem Tato část je dosti obtížná. Nesmí se poplést polarity napájení periférií. Co se týče datových pinů, je jedno jak si to zapojíme. Většinou si to volí programátor tak, aby se mu to co nejlépe programovalo. Co se týče našeho robota, tak zapojení je následovné. Na Arduino se připojil sensor shield V4.0. Do toho shieldu jsme pak čidla a motorky zapojili takto. Ultrazvukové čidlo přední má trigr na pinu číslo 12 a Echo na 13. Ultra zvukové čidlo levé má trigr na pinu číslo A1 a Echo na A0. A Pravé ultrazvukové čidlo má trigr na pinu číslo 2 a Echo na 3. Co se týče napájení všech čidel tak ty jsou zapojeny na sběrnici označené na U a země všech čidel jsou pak zapojeny sběrnici označené jako G. Shieldy od jednotlivých motorků jsou pak zapojeny na piny 8-11 praví motorek a 4-7 leví motorek. Napájení pro tyto shieldy je pak za zadního pomocného zdroje, aby nebo Arduino tak zatěžované. Nyní se pojďme podívat na celkové schéma. Jelikož použitý program pro generováno tohoto schématu má ve free verzi omezenou knihovnu součástek, tak vyobrazené součástky neodpovídají svým reálným protějšků, které jsme si již předvedli v předchozích kapitolách. - 34 -
1 2 7 8 5 3 4 9 Obrázek 36- Schéma zapojení Červená napájení Černá zem Zelená Trigr Žlutá Echo Oranžová praví motorek Hnědá - leví motorek Modrá tlačítko jedna Fialová tlačítko dva 1. Ultrazvuková čidla 2. Vypínač na baterce 3. Baterie 4. Zadní přídavný zdroj 5. Arduino UNO 6. Tlačítka 7. Motor shield 8. Krokový motorek 9. Signalizační voltmetr 6-35 -
Jak jste mohli zpozorovat, chybí zde sensor shield a limitní čidla. Důvod je velice prostý. Senzor shield byl použít je proto, že má na sobě rozvedenou napájecí sběrnici, která je na obrázku znázorněna nepájivým polem. A limitní čidla, jak již bylo zmíněno, nejsou v této verzi ještě zapojeny, jsou pouze osazeny pro budoucí verzi. Nyní se na vše podíváme ve zjednodušeném a přehledném blokovém schématu. Obrázek 37- Blokové schéma MazeBota Z obrázku je patrné jak probíhá komunikace v robotovi. Více o chodu tohoto malého robotka se dozvíte v části programu, která bude následovat. - 36 -
5 Bludiště 5.1 Parametry bludiště Parametry bludiště vycházejí ze soutěže ISTROBOT 2016 - Myš v bludisku. Bludiště se skládá ze sítě čtverců o rozměrech 18x18cm. Největší možný rozměr sítě je 16x16 čtverců. Stěny bludiště jsou 5cm vysoké a 1,2cm široké (+/-5%). Vnější stěna uzavírá celé bludiště. Stěny jsou z boku bílé, nahoře jsou červené. Povrch stěn by měl odrážet infračervené světlo. 5.2 Start a cíl Start se nachází v jednom ze čtyř rohů bludiště, cíl je umístěn někde v prostředku bludiště a je vytvořen ze čtyř buněk čtverců. Vchod do cíle je jen jeden. 5.3 Hledání cesty V bludišti se bude dát pohybovat podle pravidla pravé (levé) ruky. Tomuto odpovídá i náš algoritmus pro průchod bludištěm. 6 Programová část 6.1 Vývojové prostředí Arduino Arduino IDE (Integrated Development Enviroment) je napsané v jazyce Java. Jedná se o software vzniklý z výukového prostředí Processing. 6.2 Programovací jazyk Arduino je možné programovat v jazyce C nebo C++. S výhodou se dá použít knihovna Wiring, která je v dnešní době velmi rozšířená. [5] 6.3 Algoritmus Navigace MazeBota v bludišti je řešena podle pravidla levé ruky. Jednotlivé pohyby jsme rozdělili do stavového automatu. V nekonečné smyčce probíhá vyhodnocení signálů z ultrazvukových čidel. Jednotlivé vzdálenosti posíláme sériovou linkou do PC, což bylo užitečné při ladění programu. Zároveň v pravidelném časovém - 37 -
úseku přichází přerušení, ve kterém se zkontroluje aktuální stav a podle podmínek buď svůj stav změní, nebo v daném stavu robot setrvá. 6.3.1 Stavový automat Stav 0 - v tomto stavu čekáme na spuštění jízdy. Po stisku tlačítka se změní stav na stav 1. Stav 1 - stav, ve kterém robot vyhodnotí, jak vypadá bludiště kolem něj a na základě zjištěných výsledků se přesune do dalšího stavu. Stav 2 - v tomto stavu se robot otočí o devadesát stupňů do leva, poté přejde do stavu 6. Stav 3 - v tomto stavu robot jede rovně. Stejně jako ve stavu 1 se robot na základě údajů ze snímačů vzdálenosti rozhodne, zda přejde do jiného stavu. V tomto stavu také vyhodnocujeme, zda robot dosáhl cíle. - 38 -
Stav 4 - pokud se robot dostane do tohoto stavu, znamená to, že nemůže odbočit doleva ani jet rovně. Proto se robot otočí o devadesát stupňů doprava a přejde do stavu 1. Stav 5 - do tohoto stavu se robot dostane ze stavu 3, pokud může odbočit doleva. Nyní robot musí vjet do křižovatky, proto popojede rovně a přejde do stavu 2. Stav 6 - v tomto stavu má za úkol robot vyjet z křižovatky. Proto ujede deset centimetrů dopředu, poté přejde do stavu 3 6.4 Ovládání ultrazvukového čidla Vyhodnocení vzdálenosti pomocí ultrazvukového čidla probíhá ve funkci ultrazvuk, která nám vrací hodnotu datového typu float vzdálenost překážky od čidla v cm. Tato funkce potřebuje dva parametry číslo echo pinu a číslo trigger pinu daného čidla. Tato funkce vyšle puls do trigger pinu a počítá čas v mikrosekundách, za který se tento signál odražený od překážky vrátí do echo pinu. Ze vztahu pro průměrnou rychlost vyjádříme vzdálenost. Protože průměrná rychlost je definována jako uražená dráha za čas, dráha je tedy čas násobený průměrnou rychlostí. s = t v [m, s, m/s] Pro náš případ uvažujeme rychlost vzduchu v = 346,3 m/s při teplotě 25 C. Dále musíme uvažovat dvojnásobnou vzdálenost, protože ultrazvukový signál urazí cestu k překážce a poté se vrací zpět ke snímači. Výsledný vzorec pro výpočet vzdálenosti tedy je: s = t v [m, s, m s ] s = t v 1 2 [m, s, m s ] - 39 -
s = t 346,3 1 2 [m, s, m s ] s = t 0.017315 [cm, μs, ] Kde s je vzdálenost překážky od čidla a t je čas v mikrosekundách, za který se vrátil signál k čidlu zpět. 6.5 Ovládání motorů Protože používáme krokové motory, ovládáme je pulsy. Pro každý z motorů máme čítač, ve kterém sledujeme poslední puls do motoru. Pro ovládání motoru používáme několik funkcí. 6.5.1 Otočení kola Kolo má průměr d=46,17998448 mm. Podle vzorce pro výpočet obvodu kruhu můžeme zjistit, že po otočení kola o tři sta šedesát stupňů ujede robot vzdálenost s=145,0787mm. s = 2πr = πd s = π 46,17998448 = 145,0787 mm Díky převodům na kole potřebujeme pro otočení kola o tři sta šedesát stupňů 2048 pulsů do motoru. Jeden puls do motorů posune robota o 0,070839mm. 6.5.2 LEVYmotorHandle, PRAVmotorHandle Samotné otočení motoru je řešeno ve funkcích LEVYmotorHandle a PRAVmotorHandle. Obě funkce jsou void, tedy nevrací žádnou hodnotu. Jako parametr potřebují směr, kterým se mají točit, udaný jako číslo typu int a to pouze 1 a -1. Směr otáčení přičteme k čítači, jehož nejnižšími 2 bity maskujeme pin, na který přivedeme puls. 6.5.3 dopredu Pro testování jízdy jsme využívali funkci dopředu. Tato funkce je typu void, potřebuje pouze jeden parametr typu int - počet pulsů. V těle této funkce je cyklus, který - 40 -
se vykoná podle argumentu této funkce. V tomto cyklu voláme funkce LEVYmotorHandle a PRAVmotorHandle. Každý však do jiného směru robot se tak pohybuje rovně. 6.5.4 dozadu Tato funkce funguje stejně jako funkce dopředu. Jediný rozdíl v těchto funkcích je ve směru otočení motoru. 6.5.5 otoc90l Tato funkce je typu void a nepřijímá žádné argumenty. V těle této funkce proběhne sedm set šedesátkrát osmkrát volání funkcí LEVYmotorHandle a PRAVmotorHandle obě funkce voláme do stejného směru, kola se tedy točí proti sobě a robot se otočí o devadesát stupňů doleva. 6.5.6 otoc90r Tato funkce pracuje stejně jako otoc90l. Pouze volání funkcí LEVYmotorHandle a PRAVmotorHandle probíhá do opačných směrů robot se tedy otočí o devadesát stupňů doprava. 6.5.7 Vyhledání cíle Vyhledání cíle probíhá ve stavu 3. Počítáme, kolikrát jsme se setrvali ve stavu 3 a zároveň je možné odbočit doprava (jsme v cíli / křižovatce). Na základě znalosti posunu robota při jednom pulsu do motorů jsme schopni říci, že při 2500 pulsech do motoru pro pohyb vpřed robot ujede dostatečnou vzdálenost, abychom mohli vyloučit možnost, že jsme v křižovatce, tedy jsme v cíli. Pokud se změní stav, nebo nelze odbočit doprava, čítač se resetuje. - 41 -
7 Závěr Robota jsme sestavili tak, že vyhovuje požadavkům soutěže ISTROBOT 2016 pro kategorii Myš v bludisku. Při této práci jsme se snažili minimalizovat rozměry robota, což nakonec způsobilo zásadní změnu v konstrukci robota a jeho řídícího mikro kontroléru. Námi navržený robot je schopen autonomně projet bludiště pomocí pravidla levé ruky. Soutěž ISTROBOT 2016 jsme se bohužel nezúčastnili z důvodu mnoha školních povinností, nicméně robot je připraven zúčastnit se dalšího ročníku soutěže. Robot je připraven pro rozšíření dalších funkcí a řídící algoritmus je snadno rozšiřitelný. V budoucnu bychom tohoto robota rádi vybavili komunikačním modulem, aby mohl bezdrátově komunikovat se vzdáleným PC a informovat tak i operátora o jeho stavu a o stavu bludiště kolem robota. - 42 -
8 Seznam použité literatury 8.1 Elektronické zdroje [1] Wikimedia Foundation, Wikipedie, Otevřená encyklopedie [online] 1995-2013, poslední revize 2. 1. 2013, [cit. 28.4.2016], Dostupné na: << http://cs.wikipedia.org/wiki/robotika>> [2] Wikimedia Foundation, Wikipedie, Otevřená encyklopedie [online] 1995-2013, poslední revize 5. 1. 2013, [cit. 28.4.2016], Dostupné na: << http://cs.wikipedia.org/wiki/robot>> [3] e-manuál, Arduino, [online] 2014-2015, poslední revize 7. 9. 2015, [cit. 28.4.2016], Dostupné na: << http://arduino.cz/volne-dostupne-knihy-o-arduinu/>> [4] Programujeme Arduino. ARDUINO.CZ. [online]. 14.10.2014 [cit. 2016-05-04]. Dostupné na: <<http://arduino.cz/programujeme-arduino/>> 8.2 Literatura [5] NOVÁK, P. Mobilní roboty - pohony, senzory, řízení. 1. vyd. Praha: BEN, 2005. 243 s. ISBN 80-7300-141-1. - 43 -
9 Seznam Obrázků a tabulek 9.1 Seznam obrázků Obrázek 5- ArduinoUNO...- 3 - Obrázek 6- Sensor shield v4.0...- 6 - Obrázek 7- Shield pro 4 limitní čidla...- 8 - Obrázek 8- Jedno limitní čidlo... - 9 - Obrázek 9 Shield pro jeden krokový motor...- 11 - Obrázek 10- Krokový motor...- 11 - Obrázek 11- Ultrazvukové čidlo...- 13 - Obrázek 12- Zdroj 5V/2.5A...- 15 - Obrázek 13- Ošetření a zapojení tlačítek... - 17 - Obrázek 14- Tlačítka reálné zapojení... - 17 - Obrázek 15- Baterka... - 19 - Obrázek 16- Nabíječka...- 20 - Obrázek 17- Trafo zdroj a nabíječka...- 20 - Obrázek 18- Vnitřek nabíječky...- 20 - Obrázek 19- Trafo zdroj, nabíječka a baterka...- 20 - Obrázek 20- Trafo zdroj...- 20 - Obrázek 21- MazeBot V1.0 rozloženo...- 22 - Obrázek 22- MazeBot V1.0 složeno...- 23 - Obrázek 23- MazeBot V2.0...- 24 - Obrázek 24- MazeBot V2.1...- 25 - Obrázek 25- MazeBot V3.0 pohled zepředu...- 26 - Obrázek 26- MazeBot V3.0 pohled zezadu...- 27 - Obrázek 27- MazeBot pohled ze předu...- 28 - Obrázek 28- MazeBot V3.1 pohled zezadu...- 28 - Obrázek 31- Nákres pohled zezadu... - 29 - Obrázek 32- Nákres pohled ze shora...- 29 - Obrázek 30- Nákres pohled z boku...- 29 - Obrázek 29- Nákres pohled ze předu...- 29 - Obrázek 34- Nákres patky pro kuličku...- 30 - - 44 -
Obrázek 33- Nákres patka pro čidla...- 30 - Obrázek 35- Nosná konstrukce 2...- 31 - Obrázek 36- Nosná konstrukce 1...- 31 - Obrázek 37- Uchycení motorků a kuliček...- 32 - Obrázek 38- Boční ultrazvukové a limitní čidlo...- 33 - Obrázek 39- Přední ultrazvukové čidlo s limitními...- 33 - Obrázek 40- Schéma zapojení...- 35 - Obrázek 41- Blokové schéma MazeBota...- 36-9.2 Obsah CD Práce v PDF Program Obrázky sestavy Video - 45 -