Programování | Pojďme programovat elektroniku | Arduino

Pojďme programovat elektroniku: Postavíme čtyřmotorové autíčko

  • Konec nudy!
  • Už žádné blikající diody
  • Už toho víme dost, abychom postavili něco pro velké kluky!

Arduino, které měří teplotu, dálkově ovládá zavlažovací systém na zahradě anebo třeba zahraje váš oblíbený song, je sice fajn, kam se však nějaké měření a spínání hrabe na pocit, když se před vámi Arduino poprvé rozjede a za hlasitého vrčení se odporoučí kamsi do sousedního pokoje.

Na maličkou chvíli zažijete hrdý pocit trosečníka Toma Hankse, který na pustém ostrově poprvé rozdělal oheň, anebo astronauta Garyho Sinise, jenž právě ušetřil drahocenný ampér elektrického proudu a návratový modul mise Apollo 13 se tak úspěšně vrátí na zemský povrch.

Bude to sice krátký pocit, záhy se vám totiž vybije armáda baterií, ale bude to stát za to. Dnes se proto podíváme na to, jak pomocí Arduina roztočit elektromotor a postavíme si autíčko.

Na první pohled je to vlastně docela jednoduché – vždyť s baterií a jednoduchým motorkem vykuchaným z elektrovláčku nebo autodráhy si snad v dětství hrál každý pořádný kluk. Jenže opak je pravdou.

Spotřeba jako sovětský tank

Motor, který se má postarat o to, aby se ta kára s Arduinem na střeše opravdu někam dopravila, totiž není malý OLED displej, LED dioda, anebo piezoměnič z minulého dílu, které k chodu potřebují naprosto zanedbatelný elektrický proud a obvyklé pracovní napětí 3,3V/5V.

Elektromotor je prostě trošku jiná liga. Pokud bude výkonnější, s napájením, které mu může dodat samotné Arduino, se jednoduše nespokojí. A co teprve, pokud těch motorů budete mít více? Ostatně to je i můj případ, v týdnu mi totiž z daleké Asie dorazila velká obálka a uvnitř byly čtyři elektromotory s úpravou pro model automobilu včetně kol.

627430453 422126771 322603333
Co kolo to vlastní motor. Ale pozor, takový luxus si přirozeně řekne o hromadu energie – klidně by stačil jen náhon na dvě kola.

Stačilo by je tedy pouze přimontovat k lehké desce a na ni položit pouzdro s dostatečným množstvím AA baterií – mohl bych třeba každý z motorů napájet boxem se čtyřmi AA (4 × 1,5V = 6V) a deska velikosti listu A5 by na plný výkon vyrazila vstříc nejbližší stěně. Rozměrově lákavá 9V baterie na fotografii níže totiž není pro motory zrovna nejvhodnější.

552152227 890282751 82461309
Nejlepším přítelem bastlíře je kus balzového dřeva a lepící pistole – glue gun. Pomocí něj jsem přilepil vše dohromady.

MOSFET, čili tranzistor

Napájení bychom tedy sice měli, ale jak to celé vlastně pomocí Arduina ovládat? Jednoduchý elektromotorek nemá žádnou sběrnici I2C nebo GPIO piny. Má jen + a -. Skrze GPIO piny Arduina může protékat maximálně pár desítek mA elektrického proudu, což je pro mé motory příliš málo, takže je nemohu tímto způsobem připojit k mikropočítači a jen na daných pinech programově zapínat a vypínat napájení. Potřebuji nějakého prostředníka.

Oním prostředníkem by mohl být obvod s tranzistorem MOSFET, kterému z Arduina pošlu elektrický signál, díky kterému zapne, anebo naopak vypne druhý izolovaný okruh, který může pracovat s mnohem vyšším napětím a proudem než samotné Arduino.

948250964 158825853 148226374
Modul s tranzistorem, pomocí kterého mohu zapnout, anebo vypnout izolovaný obvod – třeba právě obvod s vyšším napětím pro elektromotor

Zapojení holého obvodu s MOSFETem může být pro začátečníka (včetně mě) docela oříšek, proto lze pořídit hotové moduly se vším všudy. Jeden z nich s tranzistorem IRF520 vidíte na fotografiích výše a jeho cena se na asijských e-shopech pohybuje okolo dvacetikoruny.

Ze snímků je patrné, že disponuje trojicí pinů pro spojení s Arduinem (napětí, zem a signální vodič) a poté šroubovými konektory pro izolovaný elektrický okruh. Z Arduina pak tento okruh můžeme programově zapínat a vypínat.

Když bychom měli takové moduly dva, na jeden můžeme zapojit levý pár kol a na druhý pravý pár. Při jízdě vpřed spustíme oba okruhy a při pokusu o zabočení vlevo jen ty pravé a naopak.

Kouzelný H-můstek

Předchozí modul s tranzistorem má jednu slabinu. Pokud budu stavět autíčko, přeci od něj budu chtít i zpátečku, což v praxi u jednoduchých elektromotorů představuje změnu polarity napájení. K tomu slouží tzv. H-můstky.

Internet opět nabízí hromadu modulů pro ovládání motorů pomocí H-můstků, já však tentokrát sáhl po jednoduchém švábu L293D. Šestnáctipinový čip je maličký a v balíčku za 40 korun mi jich dorazilo hned pět.

923027719 216397247 793146137
Dvojitý H-můstek L293D, aneb i s malým švábem lze roztočit velké motory

Čip L293D v sobě obsahuje dva H-můstky, takže jedním čipem mohu ovládat dva jednoduché motory. Jak takové ovládání funguje v praxi? L293D má šestnáct pinů. Na jeden z nich připojím v tomto kontextu „vysoké napětí“ pro běh samotných motorů (může být v rozsahu 4,5 až 36 V). Na další piny pak připojím samotné motory (do každého může téct maximálně 500 mA el. proudu) a nakonec tu jsou piny pro ovládání motorů třeba z Arduina.

Každý motor má na čipu tři ovládací piny. Když je připojím třeba k Arduinu, mohu pak ovládat směr rotace motorů vzájemnou kombinací silných, nebo naopak slabých signálů, které na tyto piny pošlu, a také rychlost.

283262649
Schéma zapojení L293D se dvěma motory (M) a Arduinem jako řídícím mikropočítačem. Čip má tady dva zdroje napětí (červeně). Pro motory (4,5-36V) a pro logiku (5V). První dodá baterie, druhý třeba Arduino, které může být na tutéž baterii také napojené a vyrobí stabilních 5V. (Zdroj: TechBitar)

Dejme tedy tomu, že k L293D připojím jeden motor, jehož ovládací piny budou připojené na piny Arduina číslo 2, 4 a 3. Aby se motor rozjel jedním směrem, napíšu:

digitalWrite(2, LOW);
digitalWrite(4, HIGH);

No, a pokud by se měl rozjet opačným směrem (L293D změní polaritu napájení motoru), jednoduše signály prohodím:

digitalWrite(2, HIGH);
digitalWrite(4, LOW);

Pak je tu ale ještě ten třetí pin. Jedná se o pin ENABLE, který slouží pro zapojení a odpojení samotného motoru. Tento pin mohu připojit ke zdroji 5V napětí a L293D tím dám najevo, že je motor neustále připravený k chodu. Anebo jej připojím na digitální pin Arduina s podporou PWM.

O PWM jsme se už v našem seriálu bavili, když jsme pomocí něj nastavovali jas LED diody v rozsahu 0-255 (tma-plný jas). V tomto případě by pulzně-šířková modulace mohla posloužit zase k nastavení rychlosti motoru.

Pokud by tedy byl pin ENABLE namísto na stálém 5V napětí připojený na některý z PWM pinů Arduina (třeba pin 3), mohl bych pro nastavení maximální rychlosti napsat:

analogWrite(3, 255);

Pro nastavení teoretické poloviční rychlosti (záleží samozřejmě na specifikaci použitých motorů):

analogWrite(3, 127);

A pro vypnutí motoru:

analogWrite(3, 0);

H-můstek L293D pak adekvátně upraví napájení motorů, který analogicky sníží otáčky.

Jedemééé!

Takže si to zrekapitulujme. Jeden čip L293D vystačí k ovládání dvou motorů. Já pořídil rovnou čtyři motory, takže potřebuji dva L293D. Každý motor má zároveň 3 logické ovladače (dva pro určení směru otáček a jeden pro rychlost/zapojení), takže k plnému ovládnutí potřebuji na Arduinu 12 volných digitálních pinů, čímž na takovém základním modelu Uno spotřebuji naprosto všechny a nezbudou mi žádné další pro dodatečné periferie (LED osvětlení, bezdrátová komunikace atp.).

616964699 816532106
Dvojice driverů L293D na nepájivém poli propojená s jednotlivými motory a řídícími piny na desce Arduino UNO. Tím pádem jsem vyčerpal skoro všechny GPIO piny na desce.

Volba některého z integrovaných modulů, které počet nutných logických vodičů může snížit, tedy není úplně k zahození.

Základní zapojení motorů je hotové a po zbytek večera se už můžete bavit programováním samotného řízení. Jízda vpřed a vzad je jednoduchá – stačí dát oběma čipům L293D na všech řídících pinech stejnou kombinaci signálů, nicméně zatáčení je už hotová věda.

674980774 630662140
A je hotovo. O čelní osvětlení se stará RGB LED dioda, o hlasitý doprovod piezoměnič a o napájení motorů samostatná 9V baterie schovaná na spodní straně. Arduino je napájené vlastní baterií. Opět zopakuji, že 9V baterie není pro napájení Arduina a motorů vůbec vhodná, nicméně jsem ji pro první prototyp použil pro její malé rozměry.

Pokud nemá autíčko volný přední pár kol a další motorek pro zatáčení, musíme zatáčet jako tank. V takovém případě se tedy vždy levý pár kol točí opačně než ten pravý, čili se autíčko točí na místě buď doleva, anebo doprava. Pokud bude pohyb auta zcela automatický, musíme si pak spočítat, jak dlouho trvá otočení třeba o 90 stupňů a po tuto dobu pak v ostrém provozu věnovat sekvencí, která zabočuje třeba doleva. Anebo můžeme vybavit autíčko třeba modulem digitálního kompasu a natočení měřit pomocí něj.

Tímto způsobem tedy můžeme v programu postupně určit automatickou trasu vozítka, anebo připojit do hry bezdrátové ovládání. Pokud bychom namísto Arduina použili třeba NodeMCU s Wi-Fi, o kterém už v našem seriálu byla také řeč, mohli bychom vozítko ovládat třeba z webového prohlížeče s tlačítky pro konkrétní směr. Dále se nabízí Bluetooth (i to jsme si už v našem seriálu vyzkoušeli) a nakonec tu je ještě jednoduchá 2,4GHz a 433MHz komunikace pomocí některého z mnoha vysílačů a přijímačů, které jsme si už také vyzkoušeli.

Jak to vše ale namontovat společně s ostatními senzory na naše vozítko, bude zase náplní některého z dalších článků. Vy si prozatím objednejte motory a kus balzové desky, protože kdo si ještě nepostavil vlastní bourák, neví co je to život.

Téma: Programování pro děti

programovaniprodeti.jpgAlgoritmické myšlení, logické uvažování, dovednost analyzovat problém a najít jeho řešení… to se hodí už dnes a do budoucna budou tyto schopnosti čím dál důležitější. Zábavnou formou se k nim vyplatí vést i děti. Sledujeme pro vás dostupné nástroje, stavebnice, služby a postupy.

Doporučujeme speciál Computeru Programování pro děti. Za 99 Kč si ho můžete objednat online a během několika dnů vám dorazí do poštovní schránky.

Diskuze (29) Další článek: Týden Živě: Vyzkoušeli jsme virtuální realitu od Sony

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,