Následující příklad bude nejen drobným rozšířením předešlého příkladu, ale ukážeme si, jak lze modulem Arduino kromě vyvolání události předat i nějakou tu užitečnou informaci – a to hned dvěma postavičkám! K modulu Arduino připojíme čidlo teploty a vlhkosti vzduchu DHT11. S vlastnostmi a použitím čidla DHT11 jsme seznámili v lekci Senzor teploty a vlhkosti vzduchu DHT11.
Hodnotu teploty budeme načítat dříve popsaným způsobem, pak odesílat postavičce Pandy. Hodnotu vlhkosti obdobným způsobem postavičce Medvěda, kterou ale budeme muset nejdříve na scénu přidat. Pro odeslání zprávy (a především i nějakého jejího obsahu) použijeme z rozšíření Upload Mode Broadcast následující blok:
Jméno zprávy (zde zatím message
) určuje název zprávy (jakousi hlavičku), podle kterého se může zpráva zpracovat, odeslaná hodnota (zde 1
) udává hodnotu, která bude v rámci zprávy odeslána.
Začneme připojením čidla DHT11 k modulu Arduino. Čidlo DHT11 je součástí sady „Arduino MAXI Starter kit“. Podrobné připojení čidla bylo sice popsáno v kapitole Senzor teploty a vlhkosti vzduchu DHT11, ale někoho by třeba mohlo zmást, že tam byl připojen i LCD displej. Pro jistotu si zde proto uvedeme elektronické a blokové schéma ještě jednou. Zároveň k tomu přidáme i tabulku propojení jednotlivých pinů čidla DHT11 a modulu Arduino.
DHT11 | modul Arduino |
---|---|
S | 4 |
+ | 5V |
GND | GND |
Blokové schéma
Elektronické schéma
Po zapojení elektronické části se pustíme do softwarové části našeho projektu.
Nejdříve na kartě „Zařízení“ vytvoříme následující blokový program pro modul Arduino. Pro obsluhu připojeného čidla teploty a vlhkosti DHT11 použijeme naše rozšíření MAXI Starter Kit, které obsluhu čidla výrazně zjednodušuje. Rozšíření MAXI Starter Kit umožňuje obsluhovat několik čidel, proto na samém začátku musíme typ čidla nastavit a také definovat, který datový pin modulu Arduino použijeme pro načítání výstupních dat. V tomto příkladu jsme použili pin číslo 4
.
Jak vidíme na následujícím kódu, jakmile máme připojené čidlo DHT definované, můžeme pomocí příkazů z rozšíření Upload Mode Broadcast začít odesílat hodnoty načtených veličin. Pro odeslání teploty využíváme zprávu s názvem TEPLOTA
. Zároveň odesíláme hodnotu vlhkosti a to v podobě zprávy VLHKOST
. Modul Arduino hodnoty naměřených veličin zkrátka jen odesílá v podobě zpráv se zadanými hlavičkami. Absolutně neřeší, kdo a jak je bude zpracovávat.
Jediné, co je třeba si ještě uvědomit, je fakt, že je rychlost čidla DHT11 není nikterak závratná. Dokonce lze říci, že ve své podstatě se jedná o poměrně pomalé čidlo. Takže je třeba se smířit mezi jednotlivými měřeními s určitou časovou prodlevou. Ze stejného důvodu je dobré po inicializaci čidla chvilku počkat. Z tohoto důvodu nekonečná smyčka začíná nejdříve čekáním, pak se teprve načítají hodnoty. Kdybychom to tak neudělali, byly by první načtené a pak odeslané a zobrazené hodnoty v podobě nedefinované hodnoty NaN.
Pokud jsme si stanovili, že postavička Panda bude přijímat a zobrazovat pouze hodnotu teploty, vytvoříme pro postavičku program postavený jen na zachycení události přijetí zprávy TEPLOTA
– viz následující kód:
Abychom hlášku trochu „vyšperkovali“, nepoužili jsme jen pouhé zobrazení zachycené hodnoty ze zprávy TEPLOTA
, ale pomocí bloků spojení textových řetězců vytvoříme celou hlášku typu: „TEPLOTA je 20 °C“.
Už nyní bychom mohli oba kódy vyzkoušet. Výsledkem by byla výchozí postavička Pandy, která by v pravidelných čtyřsekundových intervalech „vykřikovala“ hodnotu teploty.
Přemýšlivý čtenář jistě již nyní tuší, jak asi bude vypadat programový kód pro postavičku Medvěd. Jestliže Panda odchytává zprávu TEPLOTA
, je jasné, že Medvěd bude podobným způsobem reagovat na zprávu VLHKOST
.
Nyní je tedy asi jediným problémem, jak na pracovní scénu přidat postavičku Medvěda a kam vložit jeho blokový kód. Ale ani to není příliš těžké, protože prostředí mBlock je opravdu intuitivní.
Novou postavičku přidáme na kartě „Postavičky“ pomocí ikony , která je pod seznamem použitých postaviček. V následné knihovně postaviček si vybereme kategorii „Zvířata“ a zvolíme svou oblíbenou položku. Volbu potvrdíme tlačítkem OK .
V seznamu postaviček se nám zobrazí nová postavička, pokud na ni klikneme, otevře se nám na pracovní ploše prázdný prostor pro kód zvolené postavičky. V případě právě přidané postavičky Medvěda, vytvoříme kód obdobný předešlému. Dokonce pokud se nám nechce kód znova vytvářet, můžeme kód postavičky Panda označit a metodou „Ctrl+C & Ctrl+V“ zkopírovat na pracovní plochu Medvěda. Nesmíme však kód Medvěda upravit tak, aby zachytával zprávu VLHKOST
a správným způsobem získanou hodnoty vypisoval.
Celý program (tj. pro Arduino, Pandu a Medvěda) lze stáhnout z:
http://
Pokud jsme již předchozí kód zkoušeli, tedy přeložili a nahráli do modulu Arduino, nyní již jej překládat nemusíme. Přece jsme změnili jen kód v prostředí mBlock, modul Arduino již dávno vysílá, co má. Jakmile se tedy přepneme na kartu „Zařízení“ začnou kódy postaviček Panda a Medvěd reagovat na zprávy zasílané modulem Arduino.
Čistě jen z estetických důvodů je dobré ještě obě postavičky na scéně prostředí mBlock umístit na vhodné místo. Toho lze docílit buď kliknutím na postavičky na scéně a posunutím metodou „Drag & Drop“, nebo pomocí nastavení souřadnic X, Y ve vlastnostech postaviček (vpravo od seznamu postaviček). Na scéně prostředí mBlock bychom mohli vidět například následující situaci:
Na předchozím obrázku vidíme, že zrovna toto umístění obou postaviček se nám příliš nezdařilo, neboť se jejich komiksové bubliny vzájemně zakrývají. Druhá věc, která nás asi zarazí, je formát prezentových číselných hodnot. Uvedení hodnot s přesností na dvě desetinná čísla, zvláště při výchozí přednosti čidla DHT11 není úplně ideální. Zde se však nejedná o problém prostředí mBlock, ale na vině je modul Arduino!
Jak bylo zmíněno v dřívější poznámce, hodnota zprávy odesílaná prostřednictvím rozšíření Upload Mode Broadcast je vždy jako textový řetězec. Modul Arduino před odesláním číselné hodnoty získané z čidla DHT11 provede konverzi reálného čísla na text, to vždy provede na formát s dvěma desetinnými místy. A to provádí i při celočíselné hodnotě, tedy provede formální přidání dvou nul za desetinnou tečkou.
Pokud bychom chtěli přinutit naše zvířátka, aby na sebe pokřikovala hodnoty bez desetinných míst, musíme konverzi z čísla na text vyřešit sami – nejlépe již v modulu Arduino.
Následující kód je verzí programu pro modul Arduino, pokud použijeme rozšíření MAXI Starter kit ve verzi 1.0.
Úkolem oranžových bloků z kategorie textových proměnných rozšíření MAXI Starter kit je odříznutí dvou desetinných míst i s desetinnou tečkou v převedeném čísle na řetězec. Až takto upravená hodnota je odeslána pro postavičky Panda a Medvěd. Nyní již přichází hodnoty teploty a vlhkosti sice stále jako text, ale bez desetinných míst. Ve funkčních kódech zvířátek žádná změna není třeba, neboť co dostanou, to zobrazují.
Celý program (tj. pro Arduino, Pandu a Medvěda) lze stáhnout z:
http://
Následující kód již stojí na novější verzi rozšíření MAXI Starter kit a využívá nových blokových příkazů, které jsou v našem rozšíření dostupné až ve verzi 1.1 a vyšší.
Kód programu využívá blok pro přímý převod reálného čísla na text, dokonce s možností počtu desetinných míst. Nemusíme tedy ořezávat desetinnou tečku a dva poslední znaky desetinných míst textových proměnných, ale rovnou použijeme konverzní funkci, která nám do textových proměnných převede hodnoty teploty a vlhkosti.
V následujícím kódu vidíme použití příkazu Reálné číslo na Text
, který převádí číselnou hodnotu na text. Pomocným parametrem této funkce je možnost zadání počtu desetinných míst. Zde je tento parametr jak u teploty, tak u vlhkosti nastaven na hodnotu 0, která odpovídá převodu na celé číslo. Tato funkce nejenže převádí číslo na zadaný text se zadaným počtem desetinných míst, ale v případě potřeby i dané číslo zaokrouhlí.
Celý program (tj. pro Arduino, Pandu a Medvěda) lze stáhnout z:
http://
Když se podíváme na předchozí kód, možná nás napadne, že použití textových proměnných je v tuto chvíli úplně zbytečné, neboť do ní jen vložíme převedený tvar čísla na text. Ale to můžeme rovnou vložit jako textový parametr přímo do funkce pro odeslání zvířátkům v prostředí mBlock. Použití verze 1.1 rozšíření MAXI Starter kit nám tedy umožní vytvořit následující jednoduchou podobu kódu.
Celý program (tj. pro Arduino, Pandu a Medvěda) lze stáhnout z:
http://
Výsledná podoba výstupu v podobě odezvy obou zvířátek na scéně prostředí mBlock je již asi předvídatelná. V případě zvážení přesnosti čidla DHT11 by asi bylo lepší teplotu prezentovat s přesností na jedno desetinné místo. Ale toho lze již docílit jednoduchou změnou parametru určující počet desetinných míst převodu čísla na text.
Ohledně interakce z modulu Arduino směrem k prostředí mBlock to asi stačí. Ukázali jsme si, že lze „pouze“ vyvolávat události, nebo dokonce odesílat užitečná data. V další části tohoto textu se podíváme na možnou interakci směrem z prostředí mBlock do modulu Arduino.