Připojujeme další moduly k MFS Funduino – tentoráte s pomocí mBlock
Multifunkční rozšíření modulu Arduino označované Multi-Function Shield (nebo též MFS, či Funduino), které doplňuje modul Arduino např. o LED zobrazovače, signalizační LED, bzučákem… Jak dále uvidíme, lze i připojit a řídit další obvody a moduly, jako je servo, sonar nebo třeba krokový motor.
V tomto textu nám dnes nepůjde o samotné připojení těchto periférií, to je již popsáno v článku Připojujeme „periférie“ k Multi-function Shield (Funduino), ale zaměříme se softwarovou část. Konkrétně na vytvoření ovládacího programu v prostředí mBlock. Toto prostředí je spíše primárně zaměřeno na počáteční výuku programování u dětí, ale jeho možnosti mají značný přesah. Tak proč jej nevyužít zejména u začátečníků i jako nástroj pro vývoj programů modulu Arduino?
1. Teplotní čidla
1.1. Teplotní čidlo LM-35
První a základní ukázkou jen měření teploty pomocí teplotního čidla LM-35. Značnou výhodou tohoto čidla je napěťový výstup (0–5 V) a jeho linearita. Čidlo LM-35 zasuneme do konektoru shieldu Funduino označeného jako U5 (v popisu desky ozn. 7b). Piny konektoru jsou (zleva doprava): GND
, A4
, J1
– tím se odpojí rezistor 10 kΩ mezi +5 V
a pinem A4
(tento rezistor je na MFS kvůli čidlu DC18B20
– viz dále).
- POZOR!
- Jen ještě připomínám, že na desce plošného spoje je u tohoto konektoru předtištěn tvar pouzdra obvodu
DS18B20
. ČidloLM-35
je tedy třeba zasunout opačně – tj. zakulacenou částí pouzdra směrem dolů.
Program v mBlock:
Jak vidíme, jedná se o poměrně jednoduchý kód, kde v nekonečné smyčce načítáme analogovou hodnotu na vstupním pinu A4
do proměnné val. Tuto hodnotu pak přepočítáváme na hodnotu teploty – proměnná temp
. Výslednou hodnotu pak vypisujeme na sériový port modulu Arduino.
Jen zde upozorním, že mBlock používá výstup na sériový port s nastavením 115200 baudů. Na to je třeba vzpomenout při nastavení aplikace Serial Monitor
u, která bude výstup na sériovém portu modulu Arduino sledovat.
Aplikace mBlock nemá integrovaný nástroj pro načítání sériového portu (tzv. Serial Monitor
), je tedy třeba řešit načítání výstupní informace nějakou externí aplikací. Sériových monitorů lze z internetu stáhnout hned několik, já osobn&eacaron; používám sériový monitor, který je doplňkem prohlížeče Google Chrome.
1.2. Teplotní čidlo Maxim/Dallas DS18B20
Teplotní senzor DS18B20
(firma Maxim, popř. Dallas) umožňuje měřit teplotu v rozsahu –55 až +125 °C. Čidlo je možné zakoupit jak v pouzdře TO-92
(podoba běžného tranzistoru), tak i ve vodotěsné variantě v nerezové tyčince. Pro komunikaci s modulem Arduino je u čidla DS18B20
využita sběrnice OneWire
, která využív´ pouze jeden komunikační vodič.
Připojení čidla je vyřešeno přímo na desce multifunkčního shieldu. Čidlo vsuneme do konektoru U5
(popis 7b), přesně podle vyznačeného předtisku na desce (zakulacená část pouzdra směrem nahoru).
Pro komunikaci s obvodem, musíme zapojit rezistor mezi napájecí napětí +5 V
a datový pin A4
. To provedeme zkratováním zkratovací propojky (jumper) J1
.
Protože samotné ovládání tohoto čidla již není tak jednoduché, jako u čidla předchozího, použijeme pro ovládání předem připravené rozšíření. To můžeme nainstalovat volbou přidání rozšóření dole na listě seznamu bloků.
K dispozici máme takové dvě základní rozšíření. Bohužel jedno je v čínštině (vývojář: TSUNG), druhé v turečtině (vývojář: mekablock). Paradoxně se mi více osvědčilo rozšíření čínské. Naštěstí toto rozšíření nabízí jen dva bloky.
První blok slouží k nastavení (konfiguraci) čidla. V rozklikávacím poli si zvolíme číslo pinu, na kterém čidlo komunikuje. V případě čidla připojeného k rozšíření MFS
(Funduino) se jedná o vstup A4
. Druhý blok (DS18B20
. Takže jak vidíme, můžeme toto rozšíření klidně použít i bez znalosti čínštiny.
Program
V tomto programu se výsledná teplota odesílá na sériový port modulu Arduino. Pokud bychom chtěli využít pro zobrazené teploty LED zobrazovače, kterými je shield Funduino osazen, bude program vypadat takto:
V druhém programu využíváme ještě jedno rozšíření a to rozšíření MSF určené přímo pro shield Funduino. Do standardního prostředí mBlock přidává tyto bloky:
My zde využíváme jen procedury display text zabezpečující vypsání 4 znaků na LED zobrazovače, pomocí které zobrazujeme hodnotu teploty. Zároveň si všimněte, že tento blok zvládne zobrazit i číselnou proměnnou bez potřebného řešení konverze čísla na text.
2. Sonarové čidlo
Dalším čidlem připojitelným k modulu Arduino a tedy multifunkčnímu shieldu je sonarové čidlo. Čidlo je osazeno čtyřmi vývody. Dva zajišťují napájení (+5 V
a GND
) a zbylé dva jsou pro spuštění signálu TRIG
a pinu pro data ECHO
. Zjištění vzdálenosti se spustí pomocí 10 μs dlouhého signálu HIGH
. Čidlo vyšle sonarový signál (osm pulzů, 40 kHz) a čeká na odpověď (odraz zvuku od překážky).
Ovládání sonarového čidla má prostředí mBlock integrováno již v základní podobě (mezi bloky Čidla
), nemusíme tedy instalovat žádné potřebné rozšíření. Program bude tedy opravdu jednoduchý:
Paradoxně nejsložitější strukturou celého programu je spojení hodnoty vzdálenosti a textu s určením jednotek. Výsledná vzdálenost je opět odesílaná na sériový port. Kdo si z modulu Funduino chce vyrobit sonarovou jednotku zobrazující vzdálenost přímo na LED zobrazovačích, může se inspirovat v předešlém propgramu.
3. Servo
Servo si můžeme představit jako motorek s převodovkou, který se umí natočit do předem stanovené polohy. Natočení serva je řízeno pulzním signálem, u kterého se mění tzv. střída (tj. poměr šířky vysoké úrovně HIGH
a nízké LOW
). Kontrolér serva (např. RC přijímač modelářské soupravy) posílá v pravidelném intervalu 50 Hz kladný pulz, na jehož šířce závisí natočení serva. Zpravidla při délce pulzu 1500 μs je servo v neutrální pozici (střed). Se zkracováním pulzu až někam k 500 μs se servo natáčí vlevo, s prodlužováním až k cca 2400 μs pak vpravo. Je dobré vědět, že každé servo má jiné krajní hodnoty a není vůbec dobré, pokud je budeme překračovat.
Z tohoto d&urong;vodu asi nebudeme zkoušet řešit tvorbu ovládacích sekvencí svépomocí, ale opět užijeme některé z již připravených rozšíření. Rozšíření pro samotné servo jsem moc nenašel, tak zpravidla využívám rozšíření 8bots actuator
(vývojář: saquarema), které jako jednu kategorii příkazů obsahuje i bloky pro servo.
V následujícím programu je použito i rozšíření pro práci s textovými řetězci Strings
(vývojář: extransfer). To se využívá pro zpracování vstupu ze Serial Monitor
u, kde zadáváme stupeň natočení (0–9,
což odpovídá 0–180°).
4. Krokový motor
Poslední pohybovou jednotkou, kterou se budeme zabývat, je krokový motor. V principu jde o motor s několika cívkami, jejichž zapínáním dochází k postupnému natáčení rotoru o předem definovaný úhel.
Následující program ukazuje tu nejelementárnější metodu otáčení krokového motoru. Jedná se o postupné zapínání jednotlivých vinutí. Nebudu zde tajit, že pro efektivnější řízení se opět dá použít rozšíření.
Program bez rozšíření:
Pro ovládání krokového motoru lze využít i rozšíření ULN2003 Step Motor Sürücü
(vývojář: extransfer), se kterým pak bude program vypadat následujícím způsobem:
Použitě rozšíření je však v turečtině. První blok nastavuje počet kroků na jednu otáčku a zapojené piny, další nastaví rychlost otáčení a blok v nekonečně smyčce vždy udělá 200 kroků. Záporné znaménko určuje směr otáčení.
Závěr
Ukázali jsme si příklady připojení některých základních „perifěrií“ k modulu Arduino přes Multi-Function Shield (Funduino) a ovládaných prostředím mBlock. I v tomto případě vidíme, že prostředí mBlock lze docela dobře využít. Dokonce díky některým rozšířením, které jsou již pro některé periférie připravené, může toto programování dokonce jednodušší, protože nemusíme řešit některá nastavení vzájemné komunikace, konfiguraci pinů a podobně.
I když se prostředí mBlock asi těžko stane profesionálním nástrojem pro vývoj IoT aplikací, což ale jistě nikdo neočekává, může být příjemným pomocníkem těm, kteří s touto problematikou teprve zaˇínají. Tomu jistě může pomoci i multifunkční Shield Funduino.