Fyzikální kabinet FyzKAB

Články Prostředí mBlock + modul Arduino MFS Funduino a mBlock (doplnění)

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, +5 V. Je třeba rozpojit zkratovací spojku (jumper) J1 – tím se odpojí rezistor 10 kΩ mezi +5 V a pinem A4 (tento rezistor je na MFS kvůli čidlu DC18B20viz 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. Čidlo LM-35 je tedy třeba zasunout opačně – tj. zakulacenou částí pouzdra směrem dolů.
Program v  mBlock:

Teplotní čidlo LM-35

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 Monitoru, 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ů.

rozšíření

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.

rozšíření čínské

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 (ten zakulacený) načítá a vrací hodnotu teploty změřenou čidlem DS18B20. Takže jak vidíme, můžeme toto rozšíření klidně použít i bez znalosti čínštiny.

Program

Teplotní čidlo Maxim/Dallas DS18B20

V tomto programu se výsledná teplota odesílá na sériový port modulu Arduino. Pokud bychom cht&eacaron;li využít pro zobrazené teploty LED zobrazovače, kterými je shield Funduino osazen, bude program vypadat takto:

Teplotní čidlo Maxim/Dallas DS18B20

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:

Teplotní čidlo Maxim/Dallas DS18B20

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ý:

sonar

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 Monitoru, kde zadáváme stupeň natočení (0–9, což odpovídá 0–180°).

Servo

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í:

Krokový motor

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:

Krokový motor

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.

Reklama:
UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!