Arduino robot – „Požárník“

Autorem robota i článku je Kuba Pokluda

Asi všichni známe roboty, vyráběné přímo společností Arduino. Jsou to taková autíčka, prodávaná jako stavebnice nebo už sestavená a stojí spoustu peněz. Vždy mě lákala stavba něčeho, co by se umělo koordinovaně pohybovat a případně provést nějakou jednoduchou aktivitu.Arduino robotMůj první robot byl AnaBot K1. Název vznikl složením slov analogový robot. V té době jsem se bál práce s procesory, tak jsem se rozhodl postavit robota pouze na základě tranzistorů a pár pasivních součástek. Tento robot uměl reagovat na náraz, otočit se, sledovat černou čáru a zastavit na kraji stolu. Když zohledním svou tehdejší, ne právě hlubokou, znalost elektroniky, byl to obrovský úspěch.Analogový robot AnaBot K1Asi dva roky na to jsem se konečně osmělil, překonal blok ve své hlavě a koupil si první klon Arduina. Všem začátečníkům bych tímto příběhem chtěl říct „JDĚTE DO TOHO, NENÍ SE ČEHO BÁT“. Programování je opravdu jednoduché, určité základy už jsem znal ze školy, tak jsem se začal učit trošku jinou syntaxi a specifický přístup k psaní programů.

Přibližně rok a půl na to jsme ve škole dostali v informatice za úkol ročníkový projekt. Zadání jsme si mohli vymyslet sami, muselo ale jít o programování na úrovni, která se vyučujícím bude zdát adekvátní středoškolským znalostem. Ve složitých programech se moc neorientuji, naopak si troufám říci, že mám dobré znalosti elektrotechniky. Proto jsem navrhl, že postavím robota a ejhle… ono to prošlo…

Programování je zde skutečně jednodušší, naproti tomu jsem si dal za cíl vyrobit kompletně hardware a elektroinstalaci. Zde mám možnost se „vyřádit“ a ještě k tomu dělat projekt, který mě bude opravdu bavit.

Hardware

Dal jsem se do práce. Na začátku byla dřevotřísková deska, dva motory z tiskárny a nějaký binec, co můj kutloch dal. Co kutloch nedal, jsem sehnal během jednoho odpoledne v železářství.

Rozhodl jsem se pro dvoumotorový pohon. Takto je řízení nejjednodušší. Robot má tři kola. Dvě jsou nezávisle hnaná, třetí je pasivní. Když obě kola jedou dopředu, robot se pohybuje dopředu. Rozdílem rychlostí těchto kol můžu regulovat poloměr zatáčení a když je pustím proti sobě, tak se robot otáčí na místě.Arduino robot - spodní detailní pohledZ hliníkových šneků z jakési sovětské stavebnice a plastových koleček z tiskárny jsem dal dohromady dvě převodovky. Jako hřídele kol jsem použil závitovou tyč M6. Každou její polovinu jsem ukotvil do dvojice kuličkových ložisek. Protože se ale na tak malá ložiska nevyrábí použitelné domky, a zároveň nebudou nijak zvláště zatěžována, koupil jsem objímky na topenářské trubky s gumovým těsněním a zavřel ložiska do nich. Je to funkční a relativně čisté řešení. Podvozek byl hotov.

Napájení

K napájení robota jsem použil dvojici lithium-iontových článků, typu 18650 (dále jen baterie). Tím jsem získal napětí mezi 8,4 V (stav plného nabití) a 5,6 V (stav zásahu podpěťové ochrany). Nabíjení je zatím externí. Tento typ akumulátorů je velmi náchylný na hluboké vybití, přebití či zkrat. Proto jsem použil několik analogových ochran, abych zaručil maximální spolehlivost, bez ohledu na průběh programu.

Kromě rozvodu bateriového napětí, má robot ještě rozvody stabilizovaných 5 V. Procesor Arduina je dimenzovaný na práci s tímto napětím, zároveň je dobré mít stabilní napájení senzorů, aby nebyly měřené hodnoty ovlivňovány klesajícím napětím baterie (snižováním jasu IR LED diody by se měnila intenzita odraženého světla, což by vedlo k nemožnosti identifikovat černou čáru.) Motory jsou napájeny přímo z baterie, proto není u 5 V rozvodů požadavek na příliš velký odběr proudu, můžu tedy použít lineární (ztrátovou) stabilizaci s užitím integrovaného obvodu 7805.Stabilizátor 5 V

Podpěťová ochrana

Lithium-iontové baterie jsou velmi náchylné k hlubokému vybíjení. Když dojde k vybití pod cca 2 V na článek, je nebezpečné pokoušet se baterii znova nabíjet (riziko exploze). Doporučené minimální napětí je okolo 2,5 V na článek, každý výrobce jej ale uvádí jinak. Já chci být k baterii šetrnější, proto nastavím podpěťovou ochranu na 5,6 V, tedy 2,8 V na článek.

Navrhl jsem jednoduchý obvod s užitím MOSFET tranzistoru, ovládaného operačním zesilovačem. Operační zesilovač zde používám jako komparátor, tedy k porovnání hodnot napětí na obou jeho vstupech. Na invertující vstup přivádím referenční napětí, které získávám LED diodou v sérii s rezistorem. Díky exponenciální voltampérové charakteristice LED diody ji můžu pro tento účel využít. (i při nepatrném kolísání proudu je na ní stejný úbytek napětí.) Neinvertující vstup poté používám k měření napětí baterie. Toto napětí zde přivádím přes trimr. Trimr se chová jako nastavitelný odporový dělič a díky tomu je možné přesně nastavit vypínací úroveň.

U popisovaného obvodu ale nastal problém. V důsledku vnitřního odporu baterie dojde k tomu, že po odpojení zátěže její napětí vzroste. To vedlo k opětovnému připojení zátěže a mezi těmito dvěma stavy se obvod rozkmital. Problém jsem vyřešil přidáním kladné zpětné vazby. Díky ní po prvním odpojení ochrany klesne napětí na neinvertujícím vstupu operačního zesilovače téměř k nule a proto už k opětovnému sepnutí obvodu nedojde. MOSFET tranzistor odpojuje záporný pól baterie. Svorka GND je zde tedy výstup, připojena na společnou zem soustavy. Svorka +Ubat je přes pojistku a spínač připojena na kladný pól baterie, svorka -Ubat je pak připojena přímo na záporný pól baterie.Podpěťová ochranaNa následujícím obrázku je snímek obrazovky osciloskopu. Modrá křivka znázorňuje vstupní napětí, žlutá pak výstupní napětí. Pro měření jsem měl ochranu připojenou k laboratornímu zdroji a simuloval chování vybité baterie. Nejdříve výstupní napětí klesá spolu se vstupním, až po určitou úroveň (5,8 V). Následně je výstup odpojen až do restartu ochrany (i přes opětovné zvýšení napětí).Snímek obrazovky osciloskopu

Řízení motorů

Motory mají výrazně větší odběr proudu, než by byl samotný mikrokontrolér schopen dodat. Proto je nutné vyrobit ovládací desku, která je mikrokontrolérem řízená a dokáže dodat dostatečný proud pro fungování motorů. Také potřebuji mít možnost provozu motorů v obou směrech. U stejnosměrného motoru se změny směru otáčení dá docílit přepólováním napájecího napětí, proto jsem zvolil použití tzv. H-můstku. Princip vysvětlím na značně zjednodušeném schématu, sestávajícím z čtveřice spínačů.Princip řízení motorůMůžeme vidět, že spínáním diagonálně umístěných spínačů docílíme průchodu proudu motorem oběma směry. Nikdy se ale nesmí stát, že se sepnou dva spínače nad sebou, což by vedlo ke zkratu baterie.

Aby k tomu, v důsledku chybného programu nedošlo, navrhl jsem jednoduchý hradlový obvod. Schéma pro ovládání jednoho motoru (polovina desky) je na následujícím obrázku.Ochrana baterieFD znamená povel pro jízdu vpřed, BK pak povel pro jízdu vzad. Pokud deska obdrží oba tyto povely současně, motor zůstane vypnutý. Používám hradla typu NAND, konkrétně CMOS obvod 4093B.

Mechanické spínače jsou zde nahrazeny bipolárními tranzistory. Motor je indukční zátěž, proto na něm po odpojení napájení vznikají napěťové špičky. Z toho důvodu je k H-můstku připojen i Grätzův usměrňovací můstek, který napěťové špičky vrací do baterie, bez ohledu na jejich polaritu.

Pro odstranění elektromagnetického rušení, vzniklého jiskřením v komutátoru motoru, je paralelně k motoru připojen keramický kondenzátor o kapacitě 10 nF. Motory je možné spínat buď logickým signálem na plný výkon nebo použít PWM regulace. Jak jsem psal výše, motory pracují s nestabilizovaným napětím baterie, proto do desky vede 5 V pro hradla, i napětí z baterie.

Senzory

K řízení pohybů robota potřebuji měřit veličiny v jeho okolí a následně je softwarově vyhodnocovat. Mnou použité Arduino Nano má 8 analogových vstupů a 14 digitálních pinů, které je možné použít jako vstupy i výstupy.

Při čtení z analogového vstupu je Arduino schopno rozlišit 1024 hodnot, kdy 0 je ekvivalentem 0 V a 1023 je ekvivalentem 5 V. Závislost mezi čtenou hodnotou a napětím na pinu je lineární.

Digitální vstup umožňuje číst logickou hodnotu LOW (< 2,5 V) nebo logickou hodnotu HIGH (≥ 2,5 V).

Většina senzorů je postavena na základě součástek, které mění svůj elektrický odpor v závislosti na velikosti měřené veličiny. Tyto změny odporu jsou ale pro měření nepoužitelné, proto je nutné tyto součástky zapojit do série s rezistorem či proudovým stabilizátorem a převést je tak na změny napětí.Arduino robot - horní pohled

Nárazový spínač

Toto je nejjednodušší senzor, který jsem použil. Funguje na principu spojení pružného a pevného kontaktu při nárazu. Tyto senzory jsem instaloval tři.

Původně jsem zamýšlel, identifikovat náraz analogově a pro všechny tři tak použít jediný vodič, což se ukázalo jako velmi nespolehlivé řešení. Princip byl poměrně jednoduchý, při každém nárazu dělit napětí v jiném poměru. Když se tedy aktivuje kontakt A, bude na analogovém vstupu plných 5 V. Když se aktivuje kontakt B, bude na analogovém vstupu napětí U=5 x 10000/(10000 + 2000), tedy 4,16 V. Při aktivaci kontaktu C bude napětí 2,5 V.

Měření na osciloskopu ukázalo, že při aktivaci nárazového kontaktu napětí zakolísá, než se ustálí. Z tohoto důvodu jsem paralelně s analogovým vstupem Arduina připojil 100 nF kondenzátor, který toto kolísání spolehlivě odfiltroval (alespoň na obrazovce osciloskopu). Způsobil ale jiný problém. Napětí díky němu rostlo plynule. Tedy při aktivaci kontaktu B začalo napětí postupně stoupat. Než se dostalo na zmiňovaných 4,16 V, bylo procesorem vyhodnoceno jako 2,5 V, tedy aktivace kontaktu C.Nárazový senzor - chybné řešeníŘešením bylo použít digitální vstupy. Tím sice použiji o dva vodiče více, ale bude zajištěna vyšší spolehlivost senzoru. Senzory mám tedy zapojené jako tři nezávislé obvody, kdy při rozpojeném kontaktu čte Arduino hodnotu 1 a při spojení kontaktu hodnotu 0. Opět jsem použil vyhlazovací kondenzátor.Nárazový senzor

IR senzory

Robot používá IR senzory ke dvěma různým účelům. Dvojice senzorů je umístěna na podvozku, těsně nad zemí a má za úkol sledovat černou čáru a detekovat hranu stolu. Tento modul sestává z dvojice IR LED diod a dvojice fototranzistorů. LED diody svítí na podložku a ta odráží toto záření do fototranzistorů. V případě bílé barvy podložky je reflektováno velké množství záření, fototranzistory tak výrazně sníží svůj elektrický odpor. Při černé barvě podložky dochází k podstatně nižší reflexi. Tento rozdíl je měřitelný. V případě, že robot dojede na hranu stolu, je reflexe téměř nulová, což vede k okamžitému zastavení robota.IR senzor čáryDalší trojice IR senzorů slouží k vyhledání a následování plamene svíčky. Když se robot dostane ke svíčce dostatečně blízko, zastaví se, aktivuje ventilátor a svíčku sfoukne. K tomuto účelu používá celkem 12 IR fototranzistorů. Oheň je silným zdrojem IR záření, proto je možné detekovat svíčku na vzdálenost několika desítek centimetrů. Tyto fototranzistory jsou spojeny do třech větví. Každá z těchto větví obsahuje 4 fototranzistory, jeden bipolární tranzistor k zesílení proudu a rezistor pro převádění proudu na napětí. Ze zapojení vyplývá, že čím je silnější záření, tím je nižší napětí.IR senzor plameneJako zdroj 12 V pro ventilátor jsem použil hotový modul, jen jsem přidal tranzistor, abych jej mohl spínat přímo z Arduina prostřednictvím logického signálu.

V zájmu tohoto článku se ještě pokusím o určité blokové schéma, které snad alespoň částečně objasní mou unikátní 3D technologii výroby, zvanou též „vrabčí hnízdo“.Blokové schéma robotaVětšina součástek je umístěna na dvou univerzálních deskách plošných spojů. Na jedné desce je podpěťová ochrana a na druhé jsou dva H-můstky s ochranou baterie. Stabilizátor 5 V a zdroj 12 V pro ventilátor jsou umístěny v bílém kvádru pod Arduinem.

Využití pinů Arduina

A1 – IR čára R
A2 – IR čára L
A3 – IR svíčka L
A4 – IR svíčka M
A5 – IR svíčka R
D2 – náraz L
D3 – R motor BK
D4 – náraz M
D5 – R motor FD
D6 – L motor BK
D7 – náraz R
D8 – ventilátor
D9 – L motor FD
D10 – zámek motorů

Software

Zdrojový kód si můžete stáhnout v textovém souboru.

Co můj robot umí

Po sepnutí kolébkového spínače se rozsvítí červená LED dioda na desce ochrany baterie. V případě, že je baterie dostatečně nabita, rozsvítí se také červená LED kontrolka napájení na modulu Arduina.

Po startu Arduina (necelá sekunda od sepnutí kolébkového spínače) začne blikat červená LED na modulu Arduina, pod trvale svítící kontrolkou napájení. Toto je výzva k výběru režimu.

Kdykoliv při běhu robota je možné motory uzamknout páčkovým spínačem, aby se robot nerozjel.

Robot má tři režimy. Pro použití je nutné zvolit jeden z nich, aktivací příslušného nárazového senzoru, během blikání červené LED diody na desce Arduina.

Režim hledání svíčky

Tento režim je volen aktivací pravého nárazového senzoru. V tomto režimu dokáže robot následovat plamen svíčky (zdroj IR záření). Až se dostane dostatečně blízko, zastaví a sepne ventilátor, čímž sfoukne svíčku. Tento režim je ovlivněn IR pozadím, a proto není spolehlivý za intenzivního slunečního světla. Spolehlivost tohoto režimu je naopak vysoká za umělého osvětlení zářivkami, LED svítidly, či ve stínu.

Detekce svíčky funguje v ideálních podmínkách (plamen svíčky ve správné výšce, v zorném úhlu senzorů, s minimem IR pozadí) na vzdálenost 130 cm a kratší.

Po aktivaci se robot otočí čelní stranou ke svíčce a následně se k ní rozjede přímočaře. Pokud se tak nestane a robot se rozjede na jinou stranu, svíčka nebyla nalezena nebo se tímto směrem nachází silnější zdroj IR záření.

Nárazový režim

Tento režim je volen aktivací středního nárazového senzoru. V tomto režimu se robot řídí mechanickými nárazovými senzory. Při aktivaci jednoho z nich se nejdříve vrátí, následně zatočí směrem od překážky a pokračuje v jízdě vpřed. V tomto režimu je IR senzor pro sledování čáry používán jako detekce kraje stolu. Zde se robot zastaví.

Režim sledování čáry

Levý nárazový senzor spustí režim sledování čáry. V tomto režimu je robot schopen následovat černou čáru na bílém podkladě. V případě opuštění čáry se robot začne otáčet na místě, dokud opět nenajde černou čáru.

Rozdíl mezi programováním Arduina a počítače

Programování Arduina je poněkud odlišné od programování aplikací pro počítač v jazyce C. Syntaxe je velmi podobná, ale cykly se zde provádí jinak.

Základem programu je cyklus „loop“, který se neustále opakuje. Protože je potřeba zachovat vysokou rychlost tohoto opakování, je doporučeno používat vnořené cykly či funkce jen omezeně. Důvodem je nutnost kontroly veličin ze senzorů, s co možná nejvyšší frekvencí. Stroj musí mít přehled o větším množství veličin současně, proto v tomto cyklu používám spíše podmínky „if“ či větvení „switch“.

Uvedu příklad: Po sepnutí požaduje robot po uživateli volbu režimu provozu. Svou připravenost k této volbě indikuje blikáním LED diody. Toto blikání ale nemůžu provést prostřednictvím příkazu „delay()“, protože v době tohoto čekání by robot věnoval veškerý svůj výpočetní výkon na dotazy, jestli již uplynul požadovaný čas a senzory by tak byly slepé. Pokud by tedy uživatel nedržel nárazový senzor dostatečně dlouho, nemusel by na jeho aktivaci software vůbec zareagovat.

Proto je nutné tzv. pasivní čekání, kdy může cyklus probíhat dále, ale čas je stále měřen. Na základě toho LED bliká a dotazy na aktivaci senzoru jsou kladeny výrazně častěji.

Popis programu

Na začátku jsem si nadefinoval konstanty. To je dobré pro pozdější orientaci, abych si nemusel pamatovat, ke kterému pinu Arduina mám co připojené.

Sepnutí motoru bez použití konstanty by vypadalo takto: „digitalWrite(9, HIGH);“

S použitím konstanty si ale nemusím pamatovat, že povel pro jízdu levého motoru dopředu mám odeslat přes pin 9. Na začátek programu si tedy nadefinuji konstantu jako „const int LmotorF=9“ a následně mi stačí do příkazu uvést „digitalWrite(LmotorF,HIGH);“ Hodnotu konstanty také můžu jednoduše změnit na jediném místě v případě nutnosti úpravy hardware.

Následně ve funkci „setup“ nastavím, které z digitálních pinů budu používat jako vstupy a které jako výstupy. Analogové piny zde uvádět nemusím, protože se dají použít pouze jako vstupy. Můžu zde také zahájit sériovou komunikaci přes USB rozhraní a posílat si tak do počítače naměřené hodnoty ze senzorů. Vývojové prostředí Arduino IDE pak umí tuto komunikaci přijímat a zobrazovat. Tuto možnost jsem použil zejména při kalibraci a ladění hardware.

Funkce

Ve svém programu používám dvě vlastní funkce. Ostatní procesy provádím v cyklu „loop“ a spouštím je podmínkami. V okamžiku vstupu do funkce se „loop“ cyklus zastaví v místě jejího volání a jsou aktivně prováděny pouze příkazy ve funkci, až do jejího skončení. To je ale velmi nevýhodné, z výše zmíněných důvodů.

Funkce, které používám, slouží k načtení hodnoty z nárazových senzorů, či z IR senzorů pro vyhledávání svíčky. Čtení probíhá rychle, tak není použití těchto funkcí nebezpečné. Naopak přispívají k výraznému zjednodušení podmínek v samotném „loop“ cyklu.

Funkce pro vyhodnocení signálu z IR senzorů už číselné ekvivalenty napětí na analogových pinech porovná a vrátí tak přímo číslo od 0 do 4, podle polohy svíčky (0 – IR signál nebyl zachycen, 1 – signál je nejsilnější vlevo, 2 – signál je nejsilnější uprostřed, 3 – signál nejsilnější vpravo a 4 – robot je ke svíčce dostatečně blízko na to, aby se zastavil a aktivoval ventilátor). Těchto 5 výstupních hodnot funkce je pak přímo předáváno větvení „switch“, které na jejich základě ovládá motory.

Na stejném principu pracuje funkce pro načítání hodnoty z nárazových senzorů.

Tělo programu

Jak jsem již zmínil, na začátku je vyžadováno zadat režim robota. Než bude toto provedeno, nemůže program jít dále. Proto jsem zde použil „while“ cyklus, který čeká na aktivaci jednoho z nárazových senzorů a v průběhu tohoto čekání zajišťuje blikání červené LED diody na Arduinu jako signalizaci pro uživatele, že se má režim zvolit. (Od okamžiku zadání není možné volbu měnit za chodu, je nutné stisknout Reset tlačítko na Arduinu.)

Následně dojde k větvení programu, kdy probíhá pouze zvolená část. V rámci každé z nich jsou, dle potřeby, načítány veličiny ze senzorů. Na jejich základě pak program ukládá do proměnných požadovaný stav motorů. Tyto podprogramy neovládají přímo motory, pouze ukládají do proměnných požadavky.

Až na konci „loop“ cyklu je načtena hodnota ze zámku motorů a IR senzorů pro detekci čáry (v tomto okamžiku detekují kraj stolu). Pouze když je zámek motorů odemknut a zároveň se robot nenachází na kraji stolu, je požadavek, uložený v proměnné, odeslán do ovladače motorů. Tím se zajistí spolehlivost reakce na změnu stavu zámku i kontroly kraje stolu.

Podprogramy

Nyní se zmíním o jednotlivých částech větvení „switch“.

Sledování čáry

Zde je algoritmus velmi jednoduchý. Používám dva senzory. Když jsou oba senzory nad černou čárou, neodráží se příliš mnoho IR záření. V tuto chvíli není důvod měnit směr, proto jede robot rovně. V okamžiku, kdy se jeden ze senzorů dostane mimo čáru, odrazí se více záření, což je vyhodnoceno jako opuštění čáry. Na to software reaguje zastavením protilehlého motoru, což způsobí zatočení. V případě, že oba senzory opustí čáru, začne se robot otáčet na místě do chvíle, než znova nalezne čáru. Otáčí se vždy jedním směrem, takže toto znovunalezení čáry není příliš spolehlivé – když je zatáčka točená na opačnou stranu, robot se otočí o 180 ° a začne se vracet.

Navrhl jsem řešení, které by do dvojice jednorozměrných polí ukládalo každou desetinu sekundy aktuální stav motorů (1 nebo 0). Při každém uložení by se hodnoty posunuly, tak by zde bylo vždy posledních 10. Při vykolejení by se hodnoty v každém z těchto polí sečetly a na základě porovnání výsledků by bylo možné předpokládat orientaci zatáčky, tedy i výhodnější směr otáčení robota. Pro motor, který by jel po vnitřní straně zatáčky, by byla hodnota menší, protože častěji zastavoval. Toto řešení ale v praxi nefungovalo. Nevím, jestli byla chyba v převedení myšlenky do programu nebo v samotné myšlence, ale při vykolejení se robot začal poměrně chaoticky pohybovat.

Myslím si, že vznikl problém ve „vnuceném“ čase čtení. Je poměrně vysoká šance, že v okamžicích čtení zrovna oba motory běžely. Základ teorie by mohl fungovat, ale bylo by potřeba vyřešit problém, kdy ukládat a jak poznat, které hodnoty jsou ještě aktuální. Zkoušel jsem možnost „uložení při každé změně“. Zde se vyskytl problém, že pokud robot jel dlouho bez zatočení a až poté vykolejil, nebyly uložené hodnoty aktuální.

Nárazový režim

Zde využívám opět „switch“, spolu se zmíněnou funkcí pro identifikaci směru nárazu. Při nárazu do překážky jede robot sekundu vzad a následně se otočí o 90 °. Funkce může sice vracet pouze hodnoty 0 až 3, přesto má můj switch 5 větví. Důvodem je, že reakce na náraz probíhá ve dvou krocích. V prvním kroku se robot vzdálí, v druhém kroku zatočí. Nejdříve se tak aktivuje jedna z větví 0 – 3, které zajistí couvnutí, a následně program přesměrují do větve 4 nebo 5 pro zatočení ve správném směru (směrem od překážky). Když tak robot narazí vpravo, kousek se vrátí, následně se na místě otočí vlevo a pokračuje v přímočaré jízdě.

Robot se nemůže začít otáčet na místě hned po nárazu, protože by to vedlo k oděru nárazových senzorů, které se v tu chvíli dotýkají překážky. Při couvání i otáčení, je opět využito principu pasivního čekání, nikoliv příkazu „delay()“. Díky tomu tak robot okamžitě zareaguje na uzamčení motorů či (nepravděpodobné) dojetí na kraj stolu.

Režim vyhledání svíčky

Zde je využito, dříve zmíněné, funkce pro porovnání IR záření. Ta rovněž přímo ovládá větvení „switch“. V okamžiku, kdy je IR záření nejsilnější uprostřed, rozjede se robot vpřed. Na změny polohy svíčky reaguje zatáčením na místě. Když funkce vyhodnotí, že je svíčka dostatečně blízko, zastaví motory a aktivuje ventilátor. Po sfouknutí svíčky ventilátor zůstane běžet až do stisku tlačítka reset, uzamčení zámku motorů či odpojení napájení.

Závěr

Na závěr bych rád řekl, že nikdy není nic dokonalé a vždy je prostor pro nějaké zlepšení. Jak jsem psal na začátku, robot vznikal jako projekt do školy, proto byla jeho stavba časově limitovaná. Při podobných projektech je přeci jen lepší mít pár týdnů rezervu, než v noci před odevzdáním zjistit, že polovina věcí nefunguje a že si už vlastně ani nepamatuji, který drát mi kam vede.

Po odevzdání mám samozřejmě obrovskou spoustu nápadů, co vše by mohl robot ještě umět, ale jak se znám, asi si nechám robota na ukazování, jako jeden z mála projektů, který se mi nepodařilo postupným vylepšováním dovést k naprosté zkáze. Možná časem udělám šasi, či pod robota nalepím LED pásek.

Jako příklad vylepšení bych uvedl funkci „auto range“ u senzorů na vyhledání svíčky, která by přepínala mezi dvěma rozsahy měření, na základě IR pozadí, aby bylo možné svíčku najít i za denního světla.

Více mých projektů najdete na YouTube, kanál KUBA64.

Leave a Reply