Dnešní povídání bude o světlu a co s ním mBot umí dělat. Ovládáním hřbetních světel zpravidla u nás v Domečku začínáme dětem ukazovat práci s robůtky. Důvodem je, kromě toho, že děti rády vidí bezprostřední výsledek činnosti svého programu i to, že na práci s LED světly se dá tak nějak mimochodem vysvětlit i pár základních programovacích struktur, bez kterých se později neobejdete.
MBot má k dispozici dvě LED světla na hřbetní části. Umí ovládat obě najednou i každé zvlášť. Každé světlo pracuje v RGB barevném modelu, což znamená, že umí míchat tři základní barvy – červenou, modrou a zelenou. Smícháním těchto primárních barev umí vytvořit jakoukoliv sekundární barvu. Programový blok „Nastav LED na desce“ vám toto umožňuje zadáním číselných parametrů pro všechny tři barevné kanály. V každém z nich můžete nastavit úroveň světla v barevném kanálu prostřednictvím hodnoty od 0 do 255.
Tip: Abyste nestříleli naslepo, zaexperimentujte si s různými druhy barevných světel v online barevném editoru ( Naleznete zde ).Získané hodnoty zkuste zadat do programu mBotovi.
Zkuste si v mblock3 poskládat a přenést do mBota následující program.
Program začíná v mblock3 hlavičkou. To je ten widget s půlkulatou stříškou nahoře, kterým náš program začíná. A mimochodem – to je velmi důležité zmínit – program se plní od příkazu/widgetu, který je umístěn v „nejvyšším patře“ programu směrem dolů. V našem případě je to příkaz, který vám nastaví LED na desce na „vše“ (tedy obě světla aktivně budou svítit podle hodnot zadaných v jednotlivých barevných kanálech). V našem případě jsme dali hodnotu 255 pouze do kanálu červené barvy, což znamená, že mBot bude svítit nejsilněji co umí červenou barvou.
Příkaz „čekej 1 sekund“ znamená, že mBot bude plnit přesně jednu sekundu činnost, kterou měl zadanou o příkaz předtím. Trošku kostrbatě tím chci říci, že bude svítit červenou barvou přesně jednu sekundu.
Tip: Příkaz čekej je v mBotím programování univerzální a neplatí pouze jen na světla. Můžete ho použít později třeba i na stanovení časových limitů pro pohyb atp. Hodnotu v kolečku můžete libovolně měnit přepsáním na různé časy (hodnota je vždy v sekundách). Hodnotu můžete přepsat i na číslo s desetinnou čárkou (pouze místo čárky pište desetinnou tečku :-))
Pokud program v plnění příkazů dojede na konec, donekonečna plní poslední příkaz. V našem případě rozsvítí obě LED světla s nastavenými kanály na hodnotu 0, čili by výsledkem měla být černá barva. MBot tento příkaz vyplní tak, že nebude svítit vůbec. Pokud nastavíte všechny barevné kanály na hodnotu 255 bude mBot svítit bíle.
Program Blik 1, který máte mimochodem i za článkem ke stažení, bude proveden následovně. MBot třikrát blikne, pokaždé jinou barvou (červenou, pak zelenou a nakonec modrou). Činnost mBota poté co blikne modrou barvou skončí, stejně jako program.
Zkuste použít program Blik 1 z předešlého povídání a přidejte příkaz „opakuj stále“ tak, aby výsledek vypadal tak jako na následujícím obrázku.
Příkazu, který reprezentován widgetem „opakuj stále“ se v programátorském jazyce říká smyčka. Jeho úkolem je opakovat to, co se nachází v jeho hranicích. V našem případě jsou to příkazy/widgety, které ohraničuje widget „opakuj stále“. V případě, že se program při plnění dostane do podobné smyčky cykluje donekonečna. Někdy se tato vlastnost hodí a lze ji využít pro jednoduché úkony, jako je třeba blikání pořád dokola třemi barvami.
Tip: Mblock3 umí i smyčky s přesně daným počtem cyklů. Widget této smyčky je stejný jako widget smyčky s nekonečným počtem opakování. Liší se pouze možností zadat číselně přesný počet cyklů. Po splnění přesného počtu cyklů pak program vyskakuje z této smyčky a pokračuje v plnění příkazů, které jsou za touto smyčkou.
Následující program Blik 3 vám má demonstrovat způsob, jak ovládat obě hřbetní světla mBota jednotlivě.
Všechny příkazy v tomto programu už byste měli znát. Nová je pouze vzájemná kombinace příkazů. Výsledkem činnosti tohoto programu je střídavé blikání bílého světla na levé i pravé LED. Tohoto výsledku jsme dosáhli tím, že dáváme za sebou příkazy k rozsvícení levého i pravého světla bez příkazu „čekej“ mezi nimi. MBot tak oba příkazy vyplní téměř současně, přičemž to téměř je tak těsné, že si toho lidské oko nemá šanci všimnout. Navenek se tedy zdá, že byly příkazy pro pravou i levou LED splněny zároveň.
Hrátky se světly jsou u dětí velmi oblíbené. Zkuste si třeba naprogramovat mBota jako policejní auto s modročerveným majákem. V příští lekci k němu můžete připojit i odpovídající zvuk. Nebo zkuste mBota naprogramovat aby vysílal nějaký text morseovkou. Možností je spousta…
Říká se, že chcete-li někomu zajistit opravdu nezapomenutelné vánoce, darujte jeho dětem pod stromeček bubínek a trumpetku. MBot je ale slušně vychovaný robot a na rozdíl od dětí z něj trpící rodič může snadno vytáhnout baterky, když už je hluk k nesnesení.
Programování samotného zvuku je v rámci Makeblocku tak trapně jednoduché, že je téměř umění napsat napsat o tom celý článek. Poněkud složitějším se však stává, pokud chcete vytvořit smysluplnou melodii.
V zásadě se zvuk zadává pomocí jednoduchého příkazu (viz. následující obrázek).
Zlomyslně doufám, že teď jsem vám trošku zamotal hlavu, protože pro mě to také nebylo, jsa hudebním nevzdělancem – technikem, jednoduché téma. Zkusím to celé rozklíčovat tak, aby to bylo uchopitelné a hlavně, aby to téma bylo pro dospěláka, který ho chce vysvětlit dítěti použitelné.
Každý tón, který slyšíme (a který také umí mBot vydat) má určitou frekvenci (to je to čemu říkáme výška tónu) a také určitou délku trvání. Oba tyto parametry je třeba do příkazu zadat. Můžeme tyto příkazy zadávat buď přímo jako výšku tónu (noty od c2 do d8), nebo jako frekvence v Hertzích. Délku tónu můžeme zadat buď jako ty noty (nota dvojitá, celá, půlová, čtvrťová, nebo osminová), nebo prostě jako časový interval v milisekundách (1 sekunda = 1000 milisekund).
Tip: Frekvence jednotlivých not najdete na následujícím odkazu.V tabulce jsou uvedeny i frekvence půltónů.
My chceme ovšem programovat písničky. Na webu můžete nalézt řadu notových záznamů různých melodií. Ze začátku doporučuji vybírat jednoduché lidové písně – ideální třeba melodie z klavírních škol atp.
Chceme-li programovat melodie z not je třeba sledovat tvar noty. Ten nám udává jakou délku tónu máme nastavit.
Nota celá nemá nožičku a je dutá. Nota půlová je dutá a má nožičku. Nota čtvrťová je plná a má nožičku. Nota osminová je plná, má nožičku a pozor – na nožičce má praporek.
Linek na notovém záznamu je pět. Výška tónu je zapsaná prostřednictvím umístění noty buď na lince nebo mezi linkami. Pokud jsou noty vyšší nebo nižší než počet linek na notové osnově, můžeme je zaznamenat s pomocnou malou linkou.
My máme ovšem mnohem větší počet tónů než linek v osnově. Vždy sedm tónů je sdruženo do oktávy (tóny c,d,e,f,g,a,b – číslo za písmenem je pro mBota číslem oktávy). Na notovou osnovu se, aniž by to bylo nepřehledné, vejdou pouze dvě oktávy. Problém je vyřešený prostřednictvím klíče na začátku notové osnovy, který vám určí pro které dvě oktávy je melodie zamýšlena.
Některé melodie ovšem používají mimo celých tónů i takzvané půltóny (celé tóny jsou u klavíru bílé klávesy a pro půltóny máte vyhrazené klávesy černé). Tyto půltóny mBot primárně neumí, respektive umí je zahrát, ale museli byste zadat přímo danou frekvenci (viz. tabulka v odkazu předchozího tipu). Pro děti je to ovšem docela komplikace, proto pro vaše hudební pokusy volte jako předlohy notové osnovy písniček, které neobsahují na začátku linky křížek nebo písmeno b.
Další postup je velmi jednoduchý. Procházíme písničku notu za notou a z widgetů skládáme postupně celou skladbu. Mělo by vám vzniknout něco podobného jako na obrázku. Pokud se v melodii vyskytují pomlky není nic snadnějšího než vložit mezi tóny také nějakou tu pauzičku s příkazem „čekej“.
Se zvukem se dají dělat i jiné zajímavé věci než jenom hrát melodie. U nás v Domečku si kluci zkouší třeba naprogramovat vysílání v morseovce (někteří z nich poprvé zjistí, že vůbec něco takového jako morseova abeceda existuje), nebo zkoušíme práh slyšitelnosti. Práh slyšitelnosti u člověka jsou tóny o frekvenci mezi mezi 16 Hz – 20000 Hz. Ke stažení na konci článku nabízím prográmek ve kterém mBot postupně píská tóny o vyšší a vyšší frekvenci. Při spuštění doporučuji někam uklidit domácí zvířectvo, nezaručuji že tento test budou snášet v klidu. :-)
mBot programy ke stažení
Zkušební program pro demonstraci délky tónu – zde ke stažení
Zkušební program pro demonstraci výšky tónu – zde ke stažení
Zkušební program pro test prahu slyšitelnosti (frekvence) – zde ke stažení
Po čase opět přinášíme článek od našeho čtenáře, pana Miroslava Tesaře. V předchozích článcích jsme tu měli časomíru, klávesnici nebo sudoku s Arduinem. Dnes se podíváme na Arduino projekt, který má využití snad na každé škole. Projekt „Digitálny zvonček riadený dátami pomocou SD karty“ (už vás postupně ladím na slovenštinu) je pěkným příkladem propojení dovedností programování a konstrukce elektronických obvodů. Principy popsané v projektu se dají využít dobře i v dalších projektech. Tak se na to pojďme podívat, co se dá vytvořit třeba jen Arduino NANO!
V mnohých
školských zariadeniach sa ešte aj v dnešnej dobe zvoní na vyučovacie
hodiny pomocou hodín s kyvadlom. Časy pre zvonenie sa na týchto
mechanických hodinách nastavujú pomocou kolíčkov. Ich prestavenie na iný
vyzváňací čas býva nočnou morou a v praxi nerealizovateľné
v krátkom čase. Presnosť týchto hodín je daná dobou, kedy boli uvedené do
prevádzky.
Dnes je iná doba, digitalizujeme a „Arduinujeme“. A tak prišiel rad aj na túto raritu. A ako inak, než použitím mojich obľúbených súčiastok – Arduino NANO 328P, modul RTC DS3231, obvody 75HC595 a 74HC148D. A k nim modul SD karty a 7-segmentovky.
Hlavným
kritériom nových digitálnych školských hodín bola vyššia presnosť daná RTC
modulom, použitím stávajúcich elektrických rozvodov zvončekov a jednoduchá
zmena vyzváňacích časov, čo zabezpečia dáta na SD karte. Arduino NANO je môj
obľúbený modul, je lacný, malý a poskytuje dostatok programovej
a dátovej pamäti na takéto aplikácie. Tak do toho!
Obvodové
riešenie
Modul zvonenia je ovládaný piatimi tlačidlami pre nastavenie času a voľby súboru
(funkcie budú vysvetlené detailne neskôr) a šiestym tlačidlom pre
zhasnutie displeja. Vstupné piny Arduina sú citlivé na zákmity kontaktov, bez
ich ošetrenia by zariadenie nešlo spoľahlivo ovládať. K tomu spoľahlivo
postačí RC obvod ako je uvedený na obrázku.
Daň, za ktorú platíme pri použití Arduina NANO je pomerne malý počet
pinov. Šesť tlačidiel potrebuje 6 pinov a ich detekcia v programe by
bola neefektívna. Preto som použil s výhodou obvod 74HC148D. Na vstupy sú
privedené výstupy z tlačidiel a výstupy z obvodu sú privedené do
Arduina. Funkcia obvodu je, že pri stlačení tlačidla (logická nula) sa
zvyšné vstupy zablokujú. Vyšle sa signál GS a kód stlačené klávesy. Ten
neskôr detekujeme v programe.
Dôležitou súčasťou je modul SD karty. Na SD karte je možné uložiť desať rôznych zvoniacich režimov (dané jednomiestnym postfixom). Tento počet prevyšuje potreby školského zvonenia. Softvérové ovládanie sa deje cez vstupy MISO, MOSI, SCK a CS.
Riadenie času je pomocou shield-u RTC s obvodom DS3231. Tu by som chcel upozorniť, že sa predávajú obdobné shield-y s obvodom DS1302, ktorý nie je tak presný. Preto ho neodporúčam. Obvod vysiela nepretržitý signál 32kHz, ktorý využijeme na vytvorenie signálov potrebných pre funkciu hodín. Pomocou zberníc SCL a SDA čítame/ukladáme informácie z/do obvodu.
Digitálny školský zvonček nevydáva zvoniaci signál, či melódiu, čo by principiálne
nebol problém, ale využíva pôvodné školské rozvody pre zvončeky (70V rozvod).
Preto ako výstup dostatočne postačí relé. Tu je treba upozorniť na použitie
diódy v závernom smeru pripojenú paralelne k budiacej cievke.
Indukčná záťaž by mohla spätne zaťažovať pin Arduina a dokonca ho aj
zničiť. Taktiež upozorňujem na vhodnosť použitia varistoru, ktorý chráni kontakty
relé.
Použitie
tejto koncepcie s výstupným relé môže byť výhodné pre iné aplikácie ako
len pre školský zvonček. Je možné nájsť niekoľko aplikácií s časovým ovládaním,
kde by sa dal využiť tento projekt.
Pre zobrazenie času a súboru sú použité 7-segmentové displeje, dva
pre hodiny, dva pre minúty a jeden pre postfix vybratého súboru. Ďalej sa
zobrazuje deň v týždni, takže je možné podmieniť zapnutie relé nielen
podľa času, ale aj podľa dňa v týždni.
Riadenie segmentov je realizované pomocou obvodov 74HC595. Obvod umožňuje sériový vstup dát a ich paralelný výstup pomocou záchytného registra. Zobrazované symboly sú statické bez nepríjemného preblikávania.
Na ovládanie všetkých 7-segmentových displejov postačia iba 4 piny Arduina. Činnosť obvodu som popisoval v minulom článku. Je treba dôrazne pripomenúť, že zbernica na ovládanie posuvných registrov je náchylná na presluchy. Použitím „káblikov“ na prepojenie obvodov s veľkou pravdepodobnosťou povedie k veľkému sklamaniu. Zbernicu buď vytvorte na DPS, alebo pomocou tienených káblov.
Posledným použitým obvodom je stabilizátor napätia. Nepoužil som
štandardný parametrický stabilizátor 7805, ktorý dosť hreje, ale použil som
s výhodou modul LM2596s DC-DC. Akceptované vstupné napätie je max 28V,
napätie výstupu je možné nastaviť trimrom. Maximálny odber prúdu z tohto
obvodu je 3A.
Ovládanie
digitálneho zvončeka
Vyvolanie nastavenia času a postfixu súboru sa deje pomocou tlačidla M – Mód. Jeho stlačením začne blikať postfixové číslo, pomocou ktorého sa vyberá súbor ZvoncekX.txt, kde X je postfix zobrazený na displeji. Šípkami Hore/Dole nastavujeme nové číslo postfixu.
Pomocou
tlačidiel Vľavo/Vpravo prechádzame postupne na minúty, hodiny a deň
v týždni. Ak ich hodnoty chceme zmeniť, tak použijeme šípky Hore/Dole.
Opätovným stlačením tlačidla M aktualizujeme zmenené údaje a vrátime sa
k normálnej prevádzke. Šípky Hore/Dole majú ešte jednu funkciu – pokiaľ
predtým nebolo stlačené tlačidlo M, tak šípkou hore vyvoláme zapnutie relé,
šípkou Dole zapnutie ukončíme. Tým môžeme spínať relé „mimo poradia“
v ľubovoľnej dĺžke zopnutia.
Tlačidlo
D – Displej slúži na zhasnutie 7-segmentových displejov a diód okrem
sekundoviek. Nie vždy je príjemné, keď displej svieti, keď to nie je potrebné.
Opätovným stlačením sa displej znova rozsvieti. Táto funkcia nemá žiadny vplyv
na funkciu zariadenia.
Zvoniaci program
Zvoniaci
program je realizovaný v súboroch na SD karte. Súbory musia mať pevný
názov Zvoncek, ku ktorému sa pridá číslo postfixu. Prípona súboru je .txt.
Povolené názvy súboru sú teda Zvoncek0.txt až Zvoncek9.txt (názov je možné
zmeniť v konštantách programu, nepoužívajte však diakritiku). Súbory je
nutné editovať v Poznámkovom bloku (WordPadu,….), v žiadnom prípade
nie v editoroch Word a jemu podobných.
Súbor
má pevný formát:
HH:MM tab C tab Po tab Ut tab St tab Sv tab Pi tab So tab Ne Enter
Kde:
HH –
hodiny dvojmiestne, napr. 07, 11, 21,…
MM –
minúty dvojmiestne, napr. 00, 55,…
C –
čas zvonenie v sekundách (celé číslo, nie desatinné)
Po..Ne –
údaj 1 alebo 0. Ak je na dané pozícii 1, zvonček bude zvoniť v daný čas
a deň v týždni
Záznam môže vyzerať napr. takto:
07:05 5 1 1 1 1 1 0 0
07:50 3 1 1 1 1 1 0 0
08:00 5 1 1 1 1 1 0 0
…………..
Softvér neobsahuje syntaktický analyzátor záznamov v súboru, preto
je nevyhnutné dodržať predpísanú štruktúru záznamu! Časy v zázname musia
byť zoradené vzostupne!
Ak
v zázname daný čas a daný deň v týždni súhlasí s aktuálnym
časom na displeji, zapne sa relé a rozsvieti sa dióda Zvonček na dobu
stanovenou časom C.
V priebehu
dňa je možné aktualizovať čas a ľubovoľne meniť postfix v názvu súboru,
nakoľko sa vždy znovu reštartuje vybraný súbor a čítanie záznamu sa
zastaví na najbližšom čase zvonenia. Ak zvolíme postfix súboru, ktorý
neexistuje, pri ukončení voľby tlačidlom M sa na displeji zobrazí kód chyby.
Programové riešenie môžete nájsť TU a návod je TU.
Chybí vám tlačítka na gamepadu nebo nejdou použít či namapovat? S Arduinem to lze snadno vyřešit! Prostě si vyrobte svůj gamepad na míru. Postup je velmi jednoduchý.
V gamepadu použijeme Arduino desku s mikrokontrolérem ATmega32u4, která se dokáže tvářit jako HID zařízení, tedy myš nebo klávesnice. A v tom vlastně spočívá jednoduchost tohoto projektu. O použití Arduina jako myš nebo klávesnice jsme psali v tomto článku.
Zalovte v šuplíku a připravte si následující věcičky. Pokud lovíte marně, tak vás odkazy zavedou na osvědčené produkty na e-shopu HW Kitchen.
Otevřete Arduino IDE, zkompilujte a nahrajte program: Stáhnout
Celá specifikace knihovny je na GitHub. Knihovna obsahuje několik tutoriálů, podle kterých lze postupovat ve vlastním projektu. V ReadMe.md je pěkně popsáno, co vše můžeme vytvořit. Jsou zde pokryty téměř všechny typy herních zařízení (volanty, letecké kniply, pedály, klávesnice). Knihovna dokáže vytvořit až 4 zařízení na jednom Arduinu. To znamená, že na jednom USB portu jsou fyzicky 4 gamepady!
Poznámky ke stavbě
Při nahrávání programu se může někdy stát, že proběhne kompilace, ale Leonardo nechce začít nahrávat program. Řešením je počkat na konec kompilace a zmáčknout reset tlačítko na Leonardu. Pro gamepad je celkově lepší použít menší desku Arduino MICRO.
Video s celým postupem stavby gamepadu
Projekt pro HW Kitchen a Arduino.cz nabastlil Zbyněk Daněk. Díky!
V předešlých článcích jsme se naučili programovat na našem mBotovi světlo a zvuk. Je proto na čase naučit se naprogramovat i pohyb, aby náš robůtek mohl vyrazit šířit radost do celého světa (nebo alespoň po celé domácnosti, nebo klubovně).
Řeklo by se, co je na tom pohybu? MBot buď jede rovně, nebo zatáčí a je to..
Přesto lekce, kdy se moji svěřenci učí programovat pohyb mBota patří k jedněm z nejoblíbenějších. Tak tedy pojďme na to!
MBot má podobný systém pohybu, jako tank. Ten se také řídí prostřednictvím chodu motoru (respektive tím, jaký pás se jakou rychlostí a směrem otáčí). U mBota je to to samé. Lze programovat zvlášť chod každého motorku a u každého navíc můžete naprogramovat jinou rychlost otáčení. Oproti tanku má mBot navíc pouze třetí balanční kolečko, které ovšem na řízení robůtka nemá vliv (pokud se nám tedy nezasekne, což se nám ještě nikdy nestalo :-)).
Tip: Nemějte přílišná očekávání co se přesnosti pohybu mBota týče. Konstrukce pojezdu není z geometrického pohledu příliš přesná, díly převodovky a převodové skříňky jsou z měkkého plastu a na přesnost má vliv (vzhledem k síle motorků) i povrch na kterém se mBot nachází. Právě tyto nepřesnosti mohou být ovšem pro malé robotiky klíčem k pochopení procesů a inspirací pro práci se sofistikovanějšími roboty.
Programovat pohyb můžeme dvěma různými metodami. Buď použijeme přímo příkazy, které makeblock editor nabízí pro zatáčení a jízdu vpřed, nebo vzad, nebo budeme sami řídit chod jednotlivých motorků.
V prvém případě řídíme zvlášť chod levého i pravého motorku. V tomto widgetu můžeme ovlivnit prvý parametr (v případě mBota varianty M1 a M2).
Touto volbou si můžeme zvolit, který motorek má být daným programovým blokem ovládán (pokud po nastavení bloku mBot spouští místo levého motorku pravý a naopak, došlo k prohození konektorů motorků při zapojení do hlavní desky. Pro nápravu stačí konektory prohodit a vše bude fungovat, jak má). Druhým parametrem pak ovládáme rychlost otáček (škála od 0 do 255).
Ve druhém případě prostě zadáváme přímo požadovanou činnost, kterou mBot plní. Klíčový je následující blok s časovým intervalem (widget „čekej“), který vkládáme po příkazu k provedení činnosti. Doba po kterou vykonáváme například jízdu vpřed, nebo otáčení je určující pro ujetou vzdálenost, či úhel o který se mBot otočí.
Demonstrace obou způsobů ovládání je na následujících obrázcích. Oba programy jsou ke stažení na konci článku.
Tento program nám demonstruje první metodu řízení pohybu mBota prostřednictví příkazů pro každý motor (M1 a M2) zvlášť. Směr otáčení motorku určujeme rychlostí motoru. Rychlost vyšší než 0 znamená pohyb dopředu, rychlost nižší než nule se záporným znaménkem pohyb dozadu. Program demonstruje pohyb mBota je-li aktivní pouze jeden motor i jsou -li aktivní oba motorky, každý s jiným směrem otáčení.
Výhodou tohoto způsobu řízení pohybu je možnost plynulého zatáčení (do obloučku).
Následující program nám demonstruje použití widgetu, který neovládá jednotlivé motorky, ale používá knihovnu, kde jsou typy pohybů přímo definované čtyřmi variantami prvního parametru – běž dopředu (oba motorky se stejnou rychlostí otáčí ve směru dopředné jízdy mBota), běž dozadu (stejná rychlost motorků směrem dozadu), otáčení doprava, nebo otáčení doleva (každé kolo se točí jiným směrem ve směru požadovaného pohybu). Dalším parametrem, kterým můžeme i v tomto případě ovlivnit pohyb mBota je rychlost. Opět je možné zadávat hodnoty v rozsahu -255 – 255.
Tip: Zkuste dětem zamotat hlavu a například u příkazu „běž dopředu“ zadejte jako druhý parametr rychlost se záporným znaménkem. MBot provede přesně opačnou činnost – tedy bude couvat.
Postřeh na závěr: mBot mívá problémy se vůbec rozjet při zadávání nižších rychlostí v programu. Závisí to hodně na stavu nabití baterií. Jistotou bývá rychlost nad 100.
V minulém článku jsme s mBotem jezdili a dnes si k tomu pohybu ještě něco přidáme. Tak schválně! Víte co má společného mBot a netopýr? Pokud jste zvědaví, můžete se vše dozvědět v následujícím článku.
To co mají netopýr a mBot společného je to, že jedním ze způsobů jak vnímají své okolí je echolokace. Echolokace funguje tak, že živočich (nebo mBot) vydá zvuk, ten se odrazí od překážky a vrátí se zpět, kde je vyhodnocen. Vydávaný zvuk bývá často mimo oblast slyšitelnosti (pro člověka).
Živočichové na vydávání zvuků/vysílání signálu používají hlasivky, mBot vysílá signál „očima“. Tedy ne přímo očima :-), ale ultrazvukovým modulem, umístěným na přední části mBota, který vzdáleně připomíná oči.
Senzor funguje tak, že jedno „očičko“ je vysílač který vysílá ultrazvukové pulsy (o frekvenci 42 kHz – pro zajímavost) a druhé „očičko“ slouží jako přijímač. Vyhodnocuje se doba mezi vysláním a příjmem ultrazvukového signálu. Doba od vyslání do příjmu se pak přepočítává na vzdálenost. Čidlo dokáže měřit vzdálenost od necelých tří centimetrů po čtyři metry.
Senzor ME Ultrasonic nemusí být umístěn na přední části šasi mBota a nemusí být pouze jeden. MBot umí vyhodnocovat tyto senzory v počtu limitovaném počtem vstupních konektorů (tedy max 4 u mBota). Pro kutily je tedy možné si vyhrát s úpravami konstrukce a umístit ultrazvukový senzor třeba na servo, nebo vyzbrojit mBota více senzory a naprogramovat mu složitější chování.
Me ultrazvukový snímač můžete připojit k desce mBota na kterýkoliv port. U vyšších modelů typu Ranger je třeba volit port označený žlutou barvou.
Podmínkové příkazy s mBot
Aby mBot reagoval na jakoukoliv situaci (tedy i na hodnoty snímané ultrazvukovým senzorem) je nutné v programu použít podmínkový příkaz, který nám umožní mBotovi nastavit reakci na podnět.
Jak vyplývá z názvu – tento typ příkazu se nazývá podmínkovým. Důvodem je to, že k tomu, aby bylo možné realizovat nějakou činnost je třeba splnit nějakou podmínku. V našem případě chceme, aby mBot svítil zeleným světlem pokud není překážka příliš blízko. Jakmile se překážka ocitne na 10 cm a blíže, mělo by se rozsvítit světlo červené. Podmínkou je tedy vzdálenost 10 cm, kterou porovnáváme s hodnotou, kterou nám naměřil senzor (ta část programu, která je na obrázku na světle zeleném pozadí).
V případě že je podmínka splněná, čili mBot přes ultrasonický senzor detekoval překážku, která je od mBota do 10 cm, provede se činnost v prvním „okénku“ widgetu (těch činností tam klidně může být i více). V případě, že mBot překážku nedetekoval provede se činnost ve druhém „okénku“.
V programu je použita nekonečná smyčka (opakuj stále), která neustále cykluje a neustále spouští podmínkový příkaz. Bez této smyčky by se celá činnost provedla jen jednou a program by byl ukončen.
Podmínkové příkazy mají v programování mBota nezastupitelné využití. Podmínkové příkazy lze sestavovat s určitou logikou, kde je nutné splnit například více podmínek, nebo jednu z více podmínek. Podmínky je také možné vkládat do podmínek a složitěji tak strukturovat logiku činnosti mBota, ale o tom asi v jiném článku. Do podmínek je možné vkládat nejrůznější činnost, jako v našem případě ovládání motorků.
Na předchozím obrázku lze vidět program, ve kterém je demonstrováno jednoduché ovládání motorků mBota pomocí podmínkových příkazů (ke stažení na konci článku).
Průběh tohoto jednoduchého programu (jistě si sami naprogramujete něco ještě sofistikovanějšího) je následující. Ve smyčce, která neustále spouští podmínkový příkaz se neustále testuje vzdálenost překážky od mBota. Pokud je překážka v nedohlednu (nebo mBot žádnou nevidí :-)) svítí si robůtek na hřbetě zelenou barvou a valí si to dopředu maximální rychlostí.
Pokud ovšem mBot zaregistruje překážku (je splněna podmínka) otočí se doleva, sekundu jede dopředu rychlostí 100, pak se otočí zpět doprava. Poté znovu probíhá, díky nekonečné smyčce, testování jestli před mBotem není překážka. Pokud ano, mBot se posouvá a opakuje činnost, dokud nenajde konec překážky.
Upozornění na závěr: Aby mBot „viděl“ překážku před sebou, je nutné, aby překážka k němu byla kolmo. Podle zákonu odrazu je totiž úhel odrazu roven úhlu dopadu. Pokud tedy dopadne vlnění na měřenou překážku v jiném než kolmém úhlu, odražené vlnění nedoputuje zpět do přijímací části senzoru a mBot si tím pádem myslí, že se před ním žádná překážka nenachází.
Při rozbalování modrého balíčku s mBotem jsme narazili na ovladač se spoustou tlačítek. Zjevně je možné mBota ovládat dálkově. Jak na to si povíme v tomto díle našeho povídání o krasavci s modrou metalízou – mBotovi.
Jedním ze způsobů, kterými může mBot „dálkově“ a hlavně bezdrátově komunikovat, je vysíláním i příjmem infračerveného záření (infračervené záření – záření mimo viditelné spektrum o vlnové délce 760 nm – 1mm). Zní to velmi složitě, ale jde o technologii, která se běžně používá například pro funkci ovladačů TV (a jistě si vybavíte i jiné způsoby užití).
Ovladač, o kterém je zde řeč, není třeba dokupovat zvlášť, protože je součástí základního vybavení. Součástí je i lithiové baterie, kterou je nutné do ovladače vsadit. Baterie se vkládá do jednoduchého „šuplíčku“ na spodní části ovladače (lze ho jednoduše vytáhnout nehtem – na obrázku je částečně vidět). Baterii CR 2025, která je zde použitá lze bez problémů sehnat v například hodinářství, ale již se mi jí povedlo sehnat například i ve vietnamské večerce. Při vkládání je třeba dávat pozor, strana s kladnou polaritou (se znaménkem +) by měla být navrchu. Co se nesprávného vložení baterie týče je sice ovladač víceméně „blbovzdorný“, ale na sílu by se dala baterie asi vložit i obráceně.
Prvý program, na kterém si můžeme vyzkoušet způsob, jakým můžeme přes IR dálkový ovladač vyzkoušet ovládání mBota je velmi jednoduchý (viz. obrázek). Jeho výsledkem by mělo být pouze to, že mBot bude po stisku klávesy „A“ na ovladači měnit barvy hřbetního LED světla z červené na zelenou.
Program využívá pro svou funkci podmínkového příkazu, kterým permanentně testuje, jestli bylo stisknuto na dálkovém ovladači tlačítko „A“. V případě, že bylo stisknuto tlačítko, rozsvítí na hřbetě mBota LED zelenou barvou. V případě, že tlačítko stisknuto nebylo, svítí LED červenou barvou.
MBot zvládne prostřednictvím IR ovladače rozlišit 21 různých stavů. Ovladač je sice svým designem předurčen hlavně k ovládání pohybu mBota, ovšem použít se dá i na daleko komplikovanější funkcionalitu.
Podmínkových příkazů můžeme řadit za sebou více, potom může vzniknout i komplikovanější program, díky kterému můžeme ovládat všechny čtyři typy pohybů, které nám konstrukce mBota umožňuje. Příkazy k pohybu můžeme doplnit i světelnou signalizací, abychom již z dálky viděli, jaký povel jsme vlastně mBotovi poslali.
Díky kouzlům s podmínkovými příkazy ovšem můžeme zařídit i „chytré“ chování mBota, který bude normálně reagovat na příkazy z IR ovladače, ale zároveň bude mít i svojí hlavu a pokud uvidí před sebou překážku, nebude poslouchat příkazy k jízdě ve směru překážky. Tohoto typu chování můžeme docílit vkládáním podmínkových příkazů do sebe. Ty podmínkové příkazy, do kterých je vložen jiný podmínkový příkaz, jsou těm vloženým nadřazené. V našem případě tudíž je hlavní co vidí ultrazvukový senzor a vedlejší příkaz, který přichází z ovladače.
Hřbetní deska, která je „mozkem“ mBota je osazena součástkami umožňujícími nejen příjem IR signálu, ale také jeho aktivní vysílání. Díky tomu je možné naprogramovat například jednoduchou komunikací mezi jednotlivými mBoty. Pokud tak chceme v programu mBlock 3 učinit, je třeba povolit v programu rozšíření (menu „Rozšíření“ – volba komunikace/Communication). Toto rozšíření nám přidá do seznamu programových bloků dalších sedm příkazů. Tyto příkazy nám umožňují další práci s přijímaným i vysílaným IR signálem (viz video na začátku článku). V případě, že si program IR komunikace mezi mBoty stáhnete na konci článku a spustíte jej a nemáte povolené rozšíření část použitých bloků, bloky zčervenají a vypíše se na ně text „undefined/nedefinováno“. Stačí rozšíření v programu aktivovat a můžete program normálně použít.
Tip: Jedním zdrojem IR signálu můžete ovládat i více mBotů (pokud mají nahraný odpovídající program). Zkuste s dětmi třeba zjistit dosah IR signálu. Zajímavý je i pokus se dvěma mBoty, kdy může jeden opakovat signály svému kolegovi, který „nevidí“ IR ovladač za roh. Děti takto snadno pochopí systém retranslace.
Zdravím vás bastlíři! Mám tady něco pro ty z vás, které oslovila populární platforma micro:bit a nebo po ní pokukujete, abyste mohli vytvořit vlastního robota nebo projekt!
Před časem jsem poznal jednoho z vás, bastlíře Ing. Jozefa Kovárskyho. Na to, že Jozef s microbitem zrovna začal, se mu podařily zajímavé kousky a jeho práce mě zaujala. Velmi rychle se v problematice zorientoval a nenechal se odradit, ani když něco nejelo napoprvé. Napadlo mě, že ty zkušenosti budou přínosné i pro další začínající bastlíře a usnadní jim vstup do světa robotiky a programování.
Výuková platforma BBC micro:bit je opravdu jednoduchá a dobře se s ní pracuje. Mohlo by se tak zdát, že kolem microbitu není moc co vysvětlovat a vymýšlet. Opak je ale pravdou a o tom bude následující série článků. Nebudeme se moc věnovat věcem, které jsou jasné na první pohled, ale zaměříme se na ty ne úplně zřejmé věci. Budeme si postupně hrát s microbit roboty, moduly, stavebnicemi a zkoušet uvést v život nové nápady. A teď už předávám slovo Jozefovi a jeho prvnímu úvodnímu článku. Bastlení ZDAR a díky Jozefe!
Zdravím čitateľov, ktorých láka robotika a programovanie, ale nevedia ako začať alebo odkiaľ čerpať informácie a rady. Veľa začiatočníkov odrádza aj fakt, že ak by narazili na problém, tak by museli hľadať riešenie na internete a nie vždy by to dopadlo úspešne. Nezanedbateľnou prekážkou je aj fakt, že drvivá väčšina odbornej literatúry a článkov je písaná v angličtine. Taktiež chýba pomoc alebo podpora v českom alebo slovenskom jazyku.
Napriek všetkým spomenutým faktom, som sa odhodlal zvýšiť svoju IT gramotnosť a začať programovať robotov. Samozrejme som stál pred otázkou, aký robot a programovací jazyk si zvoliť. Niekoľko hodín som pátral, porovnával a analyzoval robotické produkty pre začiatočníkov. Nakoniec som si to nechal cez noc prejsť hlavou a ráno som sa rozhodol pre výučbový mikropočítač micro:bit, ktorý je možné naprogramovať pomocou jazyka JavaScript alebo Python. Moje rozhodnutie ovplyvnil aj fakt, že uvedený mikropočítač slúži ako učebná pomôcka pre milióny školopovinných detí na celom svete. Jedná sa teda o produkt, ktorý nevyžaduje pokročilé znalosti programovania a je finančne nenáročný. Taktiež ho využije moja dcérka, pre ktorú bude vstupnou bránou do sveta IT.
Určite ste si všimli, že som zatiaľ neprezradil, aký robot som si vybral. Nemusíte sa báť, dozviete sa to, ale najskôr vám predstavím spomenutý mikropočítač.
Mikropočítač micro:bit je takpovediac malý technický zázrak, lebo je to v podstate doska plošných spojov osadená komponentami:
25 červených LED diód so senzormi osvetlenia
dve tlačidlá
25 pinov
konektor JST na pripojenie batérií
tlačidlo Reset
konektor ‚female‘ micro USB
čip rozhrania USB
Bluetooth Low Energy
procesor so senzorom teploty
pohybový senzor obsahujúci akcelerometer a magnetometer
Niektoré komponenty slúžia na interakciu s používateľom a iné sa zase dajú použiť pri programovaní ako zdroj vstupných alebo výstupných informácií.
Nebudem vás zaťažovať presným označením a parametrami jednotlivých komponentov, lebo začiatočníkovi to aj tak nič nepovie a zbytočne by to len vyvolalo dojem komplikovanosti. Užitočnejšie bude pre vás prvotné oboznámenie sa s podporovanými programovacími jazykmi mikropočítača.
Mikropočítač micro:bit je možné programovať v jazyku JavaScript a Python. Voľbu mi uľahčila platforma Microsoft MakeCode, ktorá je navrhnutá tak, aby prácu s ňou zvládol aj žiak základnej školy. Táto platforma podporuje programovací jazyk JavaScript, pričom kód programu môžete jednoducho vytvoriť použitím štandardných Blokov nesúcimi názvy Základné, Vstup, Hudba, LED, Rádio, Cyklus, Logika, Premenné, Matematika, Funkcie, Polia, Text, Hra, Obrázky, Kolíky, Sériové rozhranie a Ovládanie.
V platforme je možné si vybrať český alebo slovenský jazyk, preto som názvy Blokov neuviedol v angličtine.
Samozrejmosťou je pridanie rozširujúcich blokov, ktoré sú takpovediac ‚bespoke‘ pre konkrétne roboty alebo zariadenia, ktorých riadiacou jednotkou je spomenutý mikropočítač.
Počas programovania prebieha aj kontrola napísaného kódu, čo pomáha pri oprave chýb. Na nahratie programu z platformy do mikropočítača stačí použiť dátový USB kábel, ktorý je súčasťou balenia mikropočítača.
Následne sa dostávam k samotnému výberu robota ovládaného mikropočítačom micro:bit. Na trhu ich je široký sortiment, pričom sa líšia najmä výrobcom, konštrukciou, pohonom, verziami a príslušenstvom.
Teraz nastal ten správny okamih, aby ste sa dozvedeli, ktorý robot som si kúpil. Z pohľadu začiatočníka som sa rozhodol pre robotické auto Ring:bit car V2.0 a to kvôli podrobnému návodu od výrobcu (vrátane vzorových programov) a ľahko použiteľnému príslušenstvu. Čo sa týka verzie robota, tak druhá verzia bola jednoznačnou voľbou z pohľadu vylepšenia a zdokonalenia prvej verzie.
Na záver ďakujem, že ste si prečítali môj článok a verím, že som vám dodal odvahu začať programovať mikropočítač micro:bit. Hlavne sa nevzdávajte pri prvom probléme, na ktorý narazíte. Moje budúce články vám pomôžu sa postupne naučiť programovať robotov a priložené programy vám umožnia využiť získané poznatky v praxi.
V nasledujúcom článku predstavím mikropočítačom micro:bit ovládaný robot Ring:bit car V2.0 vrátane jeho príslušenstva, takže sa máte načo tešiť.
Dnes se podíváme mBotovi na jeho modrý zoubek. Vlastně na dva modré zoubky. MBot totiž umí komunikovat ve formátu bluetooth (blue tooth = modrý zub). Formát bluetooth byl pro zajímavost společností Ericsson pojmenován po dánském králi Haraldu Modrozubovi, jakožto hold jeho mimořádným diplomatickým schopnostem (bluetooth měl podobně diplomaticky sjednotit různé formáty). Komunikační formát bluetooth umožňuje mBotovi fungovat v hejnu (což ocení zejména tam, kde se mBot používá skupinově). Bluetooth umí také komunikaci na větší vzdálenost, což se také může hodit.
Technologie bluetooth umožňuje mBotovi, oproti komunikaci prostřednictvím IR ovladače o kterém jsme se bavili minulou kapitolu, řadu funkcionalit navíc. Především umožňuje párovou komunikaci mezi ovladačem a mBotem. Výsledkem je, že po spárování ovladače a mBota je ovladačem ovládán právě jen spárovaný robůtek a nic jiného. S využitím technologie bluetooth může mBot komunikovat třeba i s mobilem, tabletem, nebo počítačem (pomocí bluetooth adaptéru). Tento článek je primárně o bluetooth gamepad ovladači, tudíž se budu zabývat především použitím bluetooth ovladače.
MBot používá bluetooth podporující verzi 4.0+, což umožňuje bezproblémovou komunikaci s prostředím s verzí Androidu 2.3 a vyšší i applí ioS7 a vyšší. Nepodporuje iPad1, 2 ani iPhone4 a nižší.
Emisní výkon je 4dBm, což umožňuje bezproblémovou komunikaci na 20m. Běžně je ovšem možné komunikovat i na vyšší vzdálenost. Pro mBota nebývá problémem ani komunikace přes zeď.
Příprava ovladače a párování
Před použitím bluetooth ovladače je do něj nutné vložit dvě 1,5V baterie. Ovladač má minimální spotřebu, tudíž můžete vložit i jednorázové baterie.
Aby mohl mBot komunikovat s bluetooth ovladačem, je třeba jej spárovat. Před párováním je třeba, aby byl zapnutý jak mBot, tak bluetooth ovladač. Stiskneme a podržíme (dokud nezačne modrá kontrolka poblikávat) prostřední tlačítko se stylizovanou runou „B“ uprostřed. Dokud kontrolka poblikává probíhá proces párování. Počkejte dokud kontrolka nezačne trvale svítit. Pak by mělo být párování ukončeno a ovladač by měl ovládat mBota podle vámi vytvořeného programu.
Programy využívající bluetooth ovladač
Začneme tvorbou jednoduchého testovacího programu. Všechny programy jsou ke stažení na konci článku, nebo si je můžete vytvořit podle následující grafiky.
Účelem tohoto programu je demonstrovat naprogramovanou reakci mBota na stisk tlačítka „1“ na bluetooth ovladači (samozřejmě spárovaném). MBot pomocí nekonečné smyčky neustále „naslouchá“ jestli není stisknuté nějaké tlačítko bluetooth ovladače. V případě, že není stisknuté tlačítko „1“ svítí mBot červenou LED na hřbetě. V případě, že došlo ke stisku tlačítka „1“ rozsvítí zelenou LED.
Tento program je ovšem velmi triviální. Bluetooth ovladač pro mBota se typicky používá zejména pro řízení pohybu robůtka, který můžeme doplnit o nějaké sofistikovanější aktivity typu vysílání zvukových a světelných signálů a podobně. Pro tento účel můžeme postupovat dvěma cestami. Buď využijeme tlačítka a naprogramujeme reakce přímo na stisk určitých tlačítek, nebo využijeme páčkové joysticky.
Program na obrázku, pomocí kterého je možné bluetooth ovladačem řídit pohyb mBota, funguje následujícím způsobem. Pomocí tlačítek 1-4 je možné nastavit čtyři různé rychlosti pohybu. Směr pohybu je určován stiskem konců křížového tlačítka. Pokud není ani jedna volba křížového tlačítka aktivována mBot stojí na místě.
Rád bych upozornil na dva postupy, které jsou v programu použity. Prvým z nich je užití proměnné. Proměnná je vlastně kousek paměti, který označíme (v našem případě rychlost/speed) a vložíme do něj hodnotu, kterou může dál program používat aktuálně podle potřeby. Proměnnou si můžeme v programu mBlock 3 definovat v sekci „Data a Bloky“. Pro vytvoření stačí zvolit v této sekci volbu „Vytvoř proměnnou“ a zadat její jméno. Poté se v sekci „Data a Bloky“ vytvoří systémové bločky, pomocí kterých můžeme v programu dál pracovat s proměnnými (typické je nastavování počáteční hodnoty proměnné a její změny).
Dalším postupem, který jsem využil v programu a na který bych vás rád upozornil, je vkládání podmínkových příkazů, kterými určujeme směry jízdy do sebe. Vytvoříme tím podmínkový příkaz, který má více možností jak reagovat na více vstupních podmínek (v našem případě je podmínkový příkaz aktivován čtyřmi různými akcemi (stiskem konců křížového tlačítka ovladače), přičemž je na každou variantu stisku naprogramována odlišná reakce – křížovým tlačítkem můžeme určovat čtyři různé typy pohybu mBota, ale vždy právě jen jeden typ pohybu). A nesmíme zapomenout, že je zohledněna i varianta, kdy není stisknutá žádná volba a mBot stojí na místě a nedělá nic.
Další program je také určený pro ovládání rychlosti a směru pohybu mBota. Tentokrát vůbec nepoužíváme k nastavení rychlosti proměnné a navíc jsme jí schopni relativně plynule měnit. Také podmínkový příkaz je o dost jednodušší, než v předchozím případě, i když ani zde jsem se nevyhnul něčemu novému. Novinku naleznete v konstrukci podmínky v podmínkovém příkazu. Spočívá v použití logického operátoru s příkazem „nebo“ (je to ten zelený widget do kterého jsou zasazeny jednoduché operátory s nerovností). Umožňuje mi zkonstruovat podmínku, která zohledňuje dva různé parametry najednou.
Blok, který se odkazuje na páčkové joysticky bluetooth ovladače modrý bloček s kulatými stranami „Bluetooth controller joystick“ nastavitelný na čtyři varianty (LX, RX, LY a RY). Systém uspořádání by vám mohl být jasnější z doprovodného obrázku. Písmena L (left – levý) a R (right – pravý) označují umístění ovladače a druhé písmeno X. nebo Y zase osu ve které se musí ovladač pohybovat, aby byla hodnota měněna. Hodnoty obou parametrů X i Y mají hodnoty ve škále od -255 do 255, přičemž hodnota páčky v neutrální středové poloze má hodnotu +/- 0. Díky tomu, že vracená hodnota páčkových ovladačů nabývá různých velikostí, můžeme vyhodnocovat i úhel ve kterém je páčka vychýlená a různě na tuto skutečnost navázat chytře i konstrukci programu. V případě našeho programu jsem nastavil aktivaci podmínky až poli hodnot -255 – -80 nebo 80 – 255. Účelem bylo snížit chybovost při pohybu joystickem v poli hodnot blízkých nule.
Tip: Moji kluci vypozorovali, že mBot ovládaný bluetooth ovladačem pouze tlačítky je spolehlivější, ale neumožňuje rychlé změny rychlosti a směru pohybu. Tyto nedostatky zase padají pokud ovládáte mBota joysticky. Nezkusíte si vymyslet vlastní způsob ovládání?
Bluetooth u mBota netradičně
Poprosil jsem jednoho ze svých zdatnějších kutilů – robotiků o naprogramování mBota jako hudební nástroj ovládaný bluetooth ovladačem. Vytvořil kouzelně jednoduchý prográmek pomocí kterého se mu z mBota podařilo vyloudit velmi zajímavé, téměř až hudební zvuky.
A protože je Ondra velkým fanouškem Star Treku inspiroval se samozřejmě hudebním nástrojem zvaným Theremin, na který hrál pan Spock. Tento hudební nástroj je bezkontaktní a je ovládán dvěma vstupy, což je stejné u verze „Thereminu“, kterou vytvořil Ondra Čech.
Prográmek je velmi jednoduchý. Všechny příkazy jsou „zabalené“ v nekonečné smyčce, takže neustále cyklují. Prvé dva příkazy umožňují postupně vychýlením páčkových ovladačů zahrát dva tóny po sobě (páčky se vychylují v ose X). Oba tóny se hrají po dobu 100 milisekund. Hodnota výchylky páčky se sečte s hodnotou 300 (tak aby se generovala frekvence vždy kladné hodnoty o výšce, která je pro lidské ucho komfortně poslouchatelná). Obdobně jsou vyřešeny i zbylé dva příkazy umožňující světelný doprovod zvukových tónů.
Zdravím příznivce hraní, tvoření a všeho bastlení!
Asi bych tady hledal jen těžko člověka, který nezná stavebnici LEGO! S kostičkami LEGO si můžeme hrát, tvořit z nich zajímavé věci a nebo se s nimi učit programovat. A co když k nim přidáme neméně populární platformu micro:bit? To by pak mohly vznikat teprve věci!
Jsem rád, že mohu nyní uvést novou sérii článků o propojení těchto dvou světů a předávám už slovo nadšenci do LEGO Emmetovi ze skupiny BrickHackers!
Psal se rok 2019 a na e-shopu HW Kitchen1 se začaly objevovat součástky označované jako LEGO-kompatibilní. Postupně jsem jeho provozovatele Oldřicha Horáčka zasypal tolika dotazy, že jsem v něm probudil zvýšený zájem o možnosti robotiky založené na stavebnici LEGO. Z našich rozhovorů potom vzešla nabídka, abych s kostičkovým světem seznámil i zdejší čtenáře.
Dovolte, abych se představil: Internet mě zná pod jménem Emmet BrickHacker; společně s kolegou vedeme od roku 2017 kroužky robotiky pod hlavičkou BrickHackers2, nejčastěji zaměřené na LEGO Mindstorms EV3. Hned v počátku jsme narazili na skutečnost, že možnosti této stavebnice jsou značně podceňované – a to nejen z hlediska jejich mechanických možností, ale také z hlediska případného využití v pokročilejší výuce robotiky a programování.
Stavebnice LEGO nám slouží jako nástroj, jak zejména školou povinné zájemce přístupnou formou seznamovat s principy všudypřítomné techniky. Tuhle roli plní na výbornou zejména v oblasti mechanických konstrukcí. Nicméně protože LEGO je zároveň jednou z největších značek angažujících se ve vzdělávání, je oficiální elektronika ke stavebnici designována s ohledem na nasazení v běžné výuce, a tedy s předpokladem, že bude vystavena nepříliš šetrnému zacházení. To je nejspíš důvod poměrně robustních rozměrů jednotlivých komponent, což znamená, že i výslední roboti budou trochu větších rozměrů.
Pokud ale chceme ukázat, jak si oživit menší výtvory, musíme se poohlédnout po elektronice třetích stran. Zároveň hledáme platformu vhodnou pro začátečníky, což znamená bohaté zázemí různých rozšiřujících modulů, aktivní komunitu a možnost obejít se bez pájení.
Velmi brzy se mým osobním favoritem stal kapesní počítač BBC micro:bitvyvinutý pro nasazení v britském školství3 – jedním z důvodů byla i skutečnost, že je možné ho programovat z téměř jakéhokoliv typu zařízení včetně telefonu. Výrazný argument pro jeho využití padl v momentě, kdy se objevila Geekserva, DC motory a serva uzpůsobená pro zabudování do stavebnice LEGO – právě v tom okamžiku jsem vychrlil již zmiňovanou záplavu dotazů, protože to, co mi chybělo, byla šikovná deska pro řízení motorů. V odpověď mi byla představena rozšiřující deska Wukong, která byla navržena právě pro zabudování do stavebnice LEGO; mimo jiné obsahuje 8 portů pro ovládání servomotorů, 2 porty a zabudovaný driver pro ovládání DC motorů a vlastní dobíjecí baterii. Tím byl ustaven téměř perfektní triumvirát (micro:bit-wukong-geekservo) pro LEGO robotiku!
Je mi proto ctí oznámit čtenářům, že od dubna 2020 začnou BrickHackers na serveru arduino.cz publikovat seriál zaměřený právě na rozpohybování oblíbené stavebnice.
Ve výuce ukazujeme, jak věci fungují, na předmětech, se kterými se studenti běžně setkávají, abychom tak principy zbavili zdání akademické odtrženosti od všedního života, a rádi bychom tomuto přístupu zůstali věrní i v psané podobě.
Pokud jste se tedy dosud báli, že by na vás byla domácí elektronika příliš složitá, tak neváhejte a vyzkoušejte právě micro:bit – jak sami uvidíte, je navržen tak, aby byl přístupný nejen dětem, ale aby ho snadno pochopili i dospělí! A v kombinaci se stavebnicí LEGO je ještě přístupnější – model zařízení z jejích dílků sestavíte poměrně rychle a můžete se tak soustředit na promýšlení řídícího programu! Pokud v průběhu zjistíte, že by bylo lepší nějakou část konstrukce postavit trochu jinak, tak je přestavba relativně snadná a nedochází při ní ke zničení stavebního materiálu, takže se nemusíte bát experimentovat!
V následujícím článku představíme prostředí MakeCode for micro:bit – ukážeme si, jak napsat jednoduchý program v blokovém jazyku a popíšeme si některé základní bloky. Pokud vám grafické programování nesedí, ukážeme, jak přepnout prostředí do textového zápisu jazyka JavaScript4. Také si ukážeme, jak stáhnout do prostředí rozšiřující knihovny pro přídavný hardware.
Hned jak zvládneme základy, ukážeme v několika článcích, jak ovládat Geekservo: Máme pro vás připravené návody na jednoduchá vozítka, jemně naznačíme rozdíl mezi diferenciálním řízením a tzv. Ackermannovým řízením (to je to, které využívá drtivá většina aut) a když už máme ta vozítka, tak se podíváme na radiovou komunikaci více micro:bitů mezi sebou a sestavíme si dálkové ovládání.
A přestože je seriál zamýšlený hlavně pro začátečníky, pokud byste stáli o pokročilejší projekty, můžeme v budoucnu připravit podrobnější návod na motorizaci Chevroletu ZR1 ze stavebnice LEGO Technic 42093.
Možnosti stavebnice obohacené navíc o elektroniku jsou nepřeberné a někdy je těžké rozhodnout, který projekt popsat. V tomto směru neváhejte navrhovat, co dalšího by vás zajímalo, protože stejně jako po zvládnutí základů motivujeme studenty k tomu, aby si vybrali vlastní projekt na kterém se budou dále rozvíjet, i u čtenářů bychom chtěli podporovat zájem tím, že jim poradíme s tématem, které je zajímá!
1 Šenovský e-shop elektrotechnického vybavení.
2 V době vydání tohoto článku jsou stránky ve výstavbě.
3 BBC vyvinula micro:bit jako open-source hardware a na ARMu založený embedded system. Pokud neholdujete odborné hantýrce, vězte, že jde o počítač zabudovaný do šikovné destičky vybavené maticí LED světel, dvěma programovatelnými mechanickými tlačítky a velkým množstvím vstupů a výstupů, které je však obvykle nejsnazší zpřístupnit pomocí nějaké přídavné desky. První dodávky počítače v roce 2016 byly opravdu směřovány prioritně do vzdělávacího systému ve Velké Británii, cca po roce se však deska dala sehnat poměrně běžně.
4 Za jménem JavaScript se skrývá tak košatá historie zákulisních bojů vývojářů internetových prohlížečů, až se divím, že ji ještě nikdo nepřetavil do podoby knižního či filmového thrilleru. Každopádně jméno JavaScript není úplně přesným pojmenováním: skriptovací jazyk byl původně vyvinut Brendanem Eichem ze společnosti Netscape a byl pojmenován Mocha, později LiveScript a nakonec JavaScript, jak jej známe dnes, nicméně standardizovaný byl společností ECMA (European Computer Manufacturers Association) pod jménem ECMAScript.
Jak jsme již z minulých dílů zjistili, mBot rozhodně není němá tvář a umí se pěkně nahlas ozvat. A když jsme již u těch tváří, tak se dá říci, že mBot jich má velmi mnoho. Součástka, která se jmenuje LED Matrix totiž umožňuje mBotovi nejenom vrhat různé výrazy a ukazovat různé symboly, ale také se dá použít jako improvizovaný displej.
Nejnovější model mBota – série mBot explorer již obsahuje modul LED matrix, který umožňuje mBotovi vizualizovat jednoduchou monochromatickou grafiku. Ke starším modelům bylo nutno tento díl dokupovat zvlášť, mBot explorer vám tento díl dodá spolu s mBotem v typické modré krabici.
Samotný modul je nutné před použitím zkompletovat. Není to nic velkého, jen je nutné čtyřmi čepy přidělat akrylovou krytku přes modul s LED diodami a celou sestavu (pokud ji hodláme aktuálně použít) přidělat k šasi mBota. Pro připojení modul používá stejně jako každý jiný modul v prostředí mBota konektor RJ-25 modré barvy (v případě mBota připojitelný na kterýkoliv ze čtyř vstupů). Při kompletaci je vyžadována špetka síly v prstech a trocha šikovnosti, pročež by bylo dobré děti, které tento modul sestavují, po očku kontrolovat a když tak pomoci. V balíčku jsou k dispozici i náhradní čepy, pokud by se napoprvé nezadařilo.
Modul zvaný LED Matrix je pole 16×8 modrých LED diod (viz. následující obrázek). Na tomto poli může mBot podle svého programu rozsvěcet, nebo zhasínat kombinaci světel. Na práci s LED matrixem lze dětem snadno vysvětlit spoustu technik a postupů – rozsvícení kombinace LEDek na matrixu poskytuje okamžitou zpětnou vazbu.
MBot pro programové ovládání modulu LED matrix používá čtyři bloky. Pomocí příkladu se vám pokusím přiblížit práci s těmito bloky.
První program, který je i na obrázku je velmi jednoduchý a v příkladech za článkem jej najdete pod jednoduchým názvem „1234“. Tento program demonstruje činnost bloku umožňujícího zobrazování čísel.
V bloku „ukaž tvář“ pro čísla je možné nastavit dva parametry. Prvním je port na kterém je připojený modul LED Matrix k mBotovi a druhým je pole pro zadávání čísla. Bohužel je tento blok limitován zobrazovacími možnostmi modulu, který je schopný zobrazit pouze čtyři čísla. Jakékoliv vícemístné číslo, které bychom zobrazovali pomocí tohoto bloku by „utíkalo“ z displeje.
Problém většího textového, nebo číselného řetězce, který se nevejde na plochu LED matrixu můžeme vyřešit dalším blokem pro zadávání textu. Tento blok již, na rozdíl od předchozího, pracuje se souřadnicovým systémem (parametry x – vodorovná pozice a y – svislá pozice). Program, který je na obrázku a který si můžete stáhnout i v příkladech na konci článku umožňuje posun textu v horizontále právě použitím hodnoty v parametru „x“.
Popis programu: Celé tělo programu cykluje v nekonečné smyčce. Program vždy v začátku cyklu vynuluje proměnnou „posunTextu“ ve které je uložena aktuální hodnota souřadnice „x“ pro zobrazení textového řetězce. Smyčka ve které cykluje text blokem „délka“ (naleznete v úvodní podmínce cyklu) určí celkový počet znaků řetězce, který se bude zobrazovat na displeji a každý znásobí koeficientem 6 (šířka znaku) a výslednou hodnotu přičte k aktuální pozici textu. Podmínka cykluje dokud není řetězec celý zobrazen, tedy dokud není celková hodnota rovna nule.
Následuje příkaz pro zobrazení řetězce, přičemž pozice x je dána dynamicky průběhem smyčky. Další bloček od hodnoty „posunTextu“ odečte hodnotu 1 (díky tomuto příkazu se text pohybuje zprava doleva) a zobrazí výsledný stav na 100ms. Poté se cyklus opakuje s upravenou hodnotou „posunTextu“.
Tento program tedy zobrazuje na LED matrix mBota posunující se jakkoliv dlouhý text. Stačí jen text vypsat do bločků.
Program, který si můžete prohlédnout na předešlém obrázku je demonstrací jak použít pro zobrazení času bloček „ukaž čas“. Pozor tento blok sám o sobě čas neměří, pouze vám nabízí formát, jak zobrazit číselná data proměnných, ve kterých mohou být vloženy třeba časové informace (použít tento blok pochopitelně lze při troše kreativity i na leccos jiného).
Popis programu: Jak z doplňující grafiky vyplývá má program „stopky“ několik bloků, které obhospodařují dílčí funkce programu. Přepínání mezi těmito dílčími funkcemi programu je dané kombinací hodnoty proměnné akce (0 – stopky vynulované, 1 – stopky aktivně počítající) a stavem, který nastane je-li tlačítko stisknuté, či nikoliv. Podmínky, kdy je proměnná akce spojená se stiskem tlačítka jsou aktivační, umožňující uživateli zvnějšku přepínání mezi jednotlivými režimy.
Do proměnné „min“ a „sec“ se ukládá aktuální stav časového intervalu od aktivace. Přičítání času se děje v podmínce kdy akce=1 vždy po jedné sekundě cyklu. Po odpočtu 59 sekund se přičítá minuta a stav „sec“ se vynulovává.
Použití bloku pro zobrazení času pak naleznete na konci programu.
Poslední blok ovládající LED matrix, který si v tomto díle představíme, je blok „ukaž kresbu“. Pomocí tohoto příkazového bloku můžeme ovládat jednotlivé LED diody matice a jejich kombinací tak rozsvítit monochromatický obrázek. Původně byl tento blok určen pouze pro zobrazování emotikonů, ale co bychom to byli za kutily, bastlíře a hračičky, kdybychom tuto možnost nevyužili na více způsobů.
Blok „ukaž kresbu“ nám umožňuje ovlivnit pozici zobrazení obrázku (horizontálně i vertikálně) – což se velmi hodí při animování grafiky a hlavně nám umožňuje pohodlné zadávání grafiky.
Klikneme-li na okénko bločku za nápisem „draw“ rozbalí se nám menu (viz. obrázek) umožňující nám zadat parametry zobrazované grafiky. Popis horní linie tlačítek menu: tlačítko přepínající mezi režimem gumy a pera (nepotřebné), následuje tlačítko s textem „vymaž“ – vymaže komplet celou matici, potom tlačítko „všechny“ – to naopak celou matici vyplní. Další tlačítko se šipkou umožní grafiku na matici otočit o 180°. Následují tlačítka pro převrácení matice horizontálně a vertikálně a dvoupolohové tlačítko „přidat k oblíbeným/odstranění emoce“ – tím si můžete vytvořenou grafiku uložit do knihovny k oblíbeným, popřípadě jí z této knihovny odstranit.
Body na matici jsou dvoupolohové. Po kliknutí se rozsvítí modře – pak budou na LED matrixu svítit. Po dalším kliknutí se vrátí zpět do původního, nerozsvíceného stavu. Grafika je v bloku aktivní po závěřečném kliknutí na tlačítko „Dokončeno“.
V minulém úvodním díle jsme představili zajímavé možnosti, které přináší propojení populárních platforem LEGO a micro:bit. Také jsme nastínili, co nás v nové sérii článků o kombinaci LEGOµ:bit čeká. Dnes se už podíváme rovnou na první důležité téma a tím vás opět provede fanoušek LEGO Emmet ze skupiny BrickHackers!
Modelová situace: Vyzvedli jsme si svůj minipočítač micro:bit a teď přemýšlíme, jak ho naprogramovat, nebo přesněji, v čem ho naprogramovat: Samotná micro:bit foundation nabízí hned dva oficiální editory: MicroPython a Microsoft MakeCode; podporu micro:bitu však nabízí i jiná oblíbená výuková programovací prostředí jako Scratch či Swift Playgrounds1.
Uvěznila vás právě rozhodovací paralýza2? Začátečník se do této situace může snadno dostat, naštěstí je Microsoft MakeCode určen právě pro nováčky, a proto jsme se rozhodli, že veškeré příklady budeme uvádět v něm. Dalším argumentem pro jeho zvolení je skutečnost, že velká část rozšiřujících desek má již připravené knihovny (terminologií tohoto editoru se jedná o extensions, čili rozšíření). Navíc je tato volba něco jako 2v1, protože můžete přepínat mezi blokovým programováním a přímým překladem do jazyka JavaScript. Spustit ho můžete ve většině současných internetových prohlížečů a pokud používáte operační systém Microsoft Windows 10, můžete si dokonce stáhnout aplikaci, která vám zprostředkuje stejné rozhraní bez rušivých prvků ostatních oken v prohlížeči a bez nutnosti připojení k internetu (případná rozšíření, která se stahují obvykle z internetu však připojení pro stažení budou potřebovat).
Prostředí MakeCode se přihlásilo k trendu současných nástrojů pro školní výuky jazyků a umožňuje nastavení jazyka prostředí. S velkou pravděpodobností si sáhne do systémových informacích o vašich jazykových preferencích, a tedy nejspíš nastaví jako výchozí jazyk češtinu. Dovolím si vás však od ní odradit – odhlédněme od nedokonalosti překladu do českého jazyka, to je teoreticky řešitelný problém, záludnost spočívá v tom, že jazykové popisky jednotlivých rozšíření, která ovládají různé přídavné desky, jsou plně v režii autorů a Ti kromě svého mateřského jazyka obvykle přidají podporu jen pro angličtinu3. Ve výsledku by se tak mohlo stát, že by část bloků byla v češtině a část v jiném, pravděpodobně anglickém, jazyce. Navíc se angličtina stala základem pro příkazy ve většině programovacích jazyků pokud si zvyknete na její čtení, bude pro vás mnohem snadnější se zorientovat i v jiných jazycích. V celém článku budeme odkazovat na anglické prostředí – pokud si chcete jazyk přepnout, volbu najdete v zápatí úvodní stránky (viz obrázek).
Mapa prostředí MakeCode aneb Povinná nalejvárna
Ještě než se pustíme do psaní vašeho prvního programu, pojďme se v rychlosti seznámit s programovacím prostředím. Abyste se do něj přepnuli, klikněte na položku new project. Jak vidíte, opticky můžeme plochu rozdělit na záhlaví, emulátor micro:bitu, záložky s bloky, kód programu a zápatí
Největší prostor je vyhrazen té nejdůležitější části – kódu programu. Zde budeme vkládat programovací bloky. Jak vidíte, nový program vás přivítá s již předpřipravenými bloky <on start> a <forever>. Jedná se o nejzákladnější funkce a využití najdou téměř ve všech programech. Jak brzy zjistíte, bloky jsou tvarované jako skládačky, a jednak vám napovídají, jak můžete různé bloky pospojovat, jednak zabraňují vložení bloku, kam zcela určitě nepatří (ale jde o čistě syntaktickou kontrolu, nijak to nekontroluje význam jednotlivých bloků – zjednodušeně parafrázováno – zabrání vám to dát do lednice toaletní papír, ale už ne prošlý jogurt, prostě protože jogurt do lednice patří).
Začne vykonávat příkazy udělané pomocí bloků a to shora dolů. Celá funkce se vykoná právě jednou a to po spuštění programu. Pokud potřebujete na začátku programu nastavit hodnoty proměnných či zkalibrovat nějaký senzor, či nějaký motor přesunout do výchozí polohy, toto je místo, kam umístíte příslušné bloky.
Smyčka, která zajišťuje neustále se opakující činnost programu. Funkce se vykonává v nekonečném cyklu a začne se vykonávat po dokončení funkce <on start>4. Asi nejběžnějším využitím je průběžné načítání informací ze senzorů a jejich případné zpracování.
Další velmi důležitá část jsou záložky s bloky – je to programátorova brašna s nářadím. Zde naleznete bloky roztříděné do kategorií v podobě záložek. Později v tomto článku se blíže podíváme na ty nejzákladnější z nich.
Velmi šikovným nástrojem se může stát i emulátor micro:bitu umístěný v levé části pracovního prostoru. Na jednu stranu není k psaní programu vůbec potřebný, ale díky tomu, že simuluje chování počítače micro:bit, jeho vestavěných senzorů a dokonce i některých velmi základních doplňků, je možné díky němu rychle ověřit, jak se program chová.
V pravé části zápatí můžeme najít standardní ovládací prvky, takže je probereme jen stručně: Tlačítka Undo a Redo slouží k odvolání posledního kroku, případně k jeho opětovnému zavedení, po předchozím odvolání. Program si pamatuje historii vícero kroků. Nástroje Zoom Out a Zoom In slouží k přizpůsobení velikosti bloků v prostoru kódu programu.To může být užitečné, pokud je kód dlouhý, či má některá funkce vícero parametrů. Vlevo na liště potom naleznete důležité tlačítko Download a rámeček pro vložení názvu programu (k pojmenování programu budete vyzváni i když se pokusíte opustit nepojmenovaný projekt).
V záhlaví je dominantní prvek přepínač mezi blokovým programováním a jazykem JavaScript – jak již bylo řečeno, oba jazyky jsou na sebe navzájem převoditelné, dalo by se říct, že bloky jsou grafickým rozhraním pro JavaScript. Ze zkušenosti ale musím konstatovat, že překlad funguje hladce jen směrem z bloků do textového JavaScriptu, obráceně může dojít k dost nepřehledné vizuální interpretaci.
Blikáme diodami aneb Můj první program
Pokud jste dočetli až sem, mám pro vás skvělou zprávu: Konečně se vrhneme na programování!
A rozjedeme to stylově – rozblikáme matici vestavěných elektroluminiscenčních diod5. Jak jsme zmiňovali dříve, nový program vás uvítá s předpřipravenými bloky <on start> a <forever>. Rozklikněte záložku Basic a vložte do blok <show icon> do <on start>a vyberte si v roletovém menu obrázek – já obvykle nastavuji fajfku někdy přezdívanou také “nike” pro podobnost s logem stejnojmenné společnosti. Zvolený obrázek se vám rozsvítí na micro:bitu po spuštění minipočítače. Vpravo si můžete na emulátoru prohlédnout předpokládané chování.
Na první pohled se může zdát, že takovýto program je dosti neužitečný a jeho praktické využití mizivé – ale takové zdání klame: V konečném kódu se sice málokdy objeví, ale během psaní programu pro ovládání hardwaru občas potřebujeme ověřit, jestli nám teče elektrický proud, kudy téct má a neteče nám někudy, kudy nechceme – a není nic jednoduššího, než připojit na daná místa světelné diody a zjistit zda svítí. Jedná se tedy o velmi užitečný nástroj pro prověřování kódu.
A když už jsme otevřeli záložku Basic, pojďme se podívat, co nám nabízí za bloky:
Slouží k rozsvícení matice diod do podoby obrazce, který vyberete z roletového menu
Pokud vám z nějakého důvodu nestačí nabídka obrazců, můžete si vyznačit vlastní tak, že každé z 25 diod určíte, zda je rozsvícená, či zhasnutá.
Blok, který umožňuje na matici diod vypsat číslo – pokud je víceciferné, a nevejde se tak do čtverce 5×5, je vypsáno jako běžící text, který se postupně posouvá doleva, dokud nedojde nakonec.
Blok, který umožňuje na matici diod vypsat řetězec znaků, tedy nejen čísel. Pokud se nevejde do čtverce 5×5, je vypsán jako běžící text, který se postupně posouvá doleva, dokud nedojde nakonec.
Blok přikáže vláknu, ve kterém se spustí, aby se pozastavilo na určitý počet milisekund. Hodnotu můžete nastavit buď výběrem obvyklých hodnot z roletové nabídky, nebo vepsáním vlastní hodnoty.
Úplně slyším, jak si stěžujete: “Kde je slíbené blikání? Tohle prostě jenom svítí! My chceme slíbené blikání!” A pokud si nestěžujete, tak byste měli, protože je to naprostá pravda! Zatím jsme však neskončili – protože co je blikání jiného, než střídavé rozsvěcení a zhasínání? Takže nejprve jsem vás musel naučit, jak něco rozsvítit a teď to můžeme zase zhasnout a to opakovat pořád dokola… Nepřipomíná vám to popis nějakého bloku?
Do předchozího programu teď přidejme blok <show icon> do <forever>– obvykle se zde vybírá srdíčko, ale je mi jasné, že jak jsem vás teď doběhl, tak chcete vyjádřit úplně jiné emoce – tak zvolme například obrázek označený jako silly, což je nejspíš vyplazený jazyk.
Za něj – a kdykoli budu říkat za nějaký blok, budu myslet napojit pod něj -, přidejme blok <pause> a nastavme ho například na 200 ms.
Nyní zhasněme všechny diody – toho docílíte například tak, že přidáte blok <show leds> a necháte všechny čtverečky tmavé.
A nakonec ještě nastavíme, jak dlouho necháme diody zhasnuté – připojme další blok <pause> a nastavme tentokrát třeba 100 ms.
Výborně! Program nyní nejprve ohlásí nastartování programu krátkým zobrazením fajfky a potom na nás bude blikat vyplazený jazyk… Jenže zatím jen na emulátoru, protože dosud jsme program nenahráli na samotný micro:bit!
Stáčení dat aneb Jak dostanu muj-prvni-program.hex do svého micro:bitu?
Nadešel čas poohlédnout se po nějakém pěkném datovém kabelu, který bude mít na jedné straně koncovku microUSB, kterou zapojíme do micro:bitu, a na druhé konektor, kterým se připojí k vašemu počítači (s největší pravděpodobností klasické USB). Pokud jste použili správný kabel, měl by se micro:bit tvářit jako připojený disk (viz obrázek). Jestliže se nestalo nic, zkontrolujte, že jste nepoužili kabel určený jen k nabíjení.
Uživatelé aplikace pro Microsoft Windows 10 mohou jásat, protože prostředí si samo umí najít připojený micro:bit a pro uložení programu stačí zmáčknout tlačítko Download v zápatí.
Pokud patříte mezi většinu uživatelů, kteří používají rozhraní v prohlížeči, pak na vás po stisknutí tlačítka nejspíše vyskočí, že je třeba micro:bit připojit k počítači a nahrát .hex soubor. Současně s tímto upozorněním by se mělo otevřít dialogové okno, kde se dozvíte, či zvolíte, kam se soubor stáhne do vašeho počítače. Pak již stačí tento .hex soubor přetáhnout na disk micro:bitu. Nelekejte se, že chvíli poté, co tam soubor přesunete, už ho na disku nenajdete – micro:bit se jako disk jen tváří, aby vám usnadnil nahrání programu, ale jako klasické úložiště se nechová.
Ptáte se, co že je to ten .hex soubor? Stručná odpověď zní, že se jedná o komprimovanou verzi programu včetně jeho zdrojového kódu. Je možné kód kdykoli opět otevřít pomocí editoru a upravit ho6.
Takže mohu vzít soubor s programem a poslat ho třeba kamarádovi přes email?
Jistěže můžete program vzít a předat ho někomu dalšímu! To je poměrně důležitá vlastnost zdrojových kódů, protože to umožňuje program vzít, prozkoumat a případně upravit pro jinou potřebu, aniž byste museli složitě přepisovat části kódu, které už jste jednou vytvořili! A víte co? Pojďme si to rovnou vyzkoušet – zde si můžete stáhnout program, který jsem pro vás připravil – jedná se o program který při zatřesením micro:bitem simuluje hod hrací kostkou… Ačkoliv tahle kostka je trošku upravená. Přijdete na to jak? Tady je ke stažení hex soubor microbit-loaded-dice.hex.
V tomto článku už jsem vás jistě zaplavil velkým množstvím nových informací, takže co přesně dělá si vysvětlíme až někdy příště – ale pokud by vaše nadšení bylo tak obrovské, že byste chtěli domácí úkol, můžete zkusit zjistit, v jakém případě se vám na této mírně cinknuté kostce podaří hodit sedmičku.
Jak si mohu cizí program otevřít v editoru?
Pokud chcete zjistit odpověď na dobrovolný domácí úkol, tahle otázka míří správným směrem! Je třeba importovat .hex soubor s programem do vašeho editoru. Toho snadno docílíte následujícím postupem:
Přepněte se na úvodní obrazovku Microsoft MakeCode.
Stiskněte tlačítko Import.
Zvolte možnost Import File… a vyberte cestu k souboru, který chcete otevřít.
Jak pracovat s rozšiřujícími knihovnami aneb Rada na závěr
MakeCode má v základní výbavě jen ty nejběžnější knihovny, jednak aby ušetřil paměť, jednak aby vás nezahlcoval záložkami s bloky, které nepotřebujete nebo dokonce nemůžete využít, protože vám chybí hardware pro který byli napsány. V poslední kapitole si ukážeme jak takové rozšíření, nazývané zde extension můžeme přidat – pro práci s micro:bitem jde v podstatě o základní vědomost, protože téměř všechny přídavné desky, senzory či někdy i motory si přinášejí své dodatečné knihovny.
V panelu záložek s bloky vyberte záložku Advanced
Úplně na konci nabídky nových záložek vyberte Extensions, čímž se dostanete do nabídky rozšíření.
v nejjednodušším případě uvidíte balíček rozšíření v nabídce nejčastějších voleb
obvykle je však třeba rozšíření vyhledat v okně Search or enter project URL…Většinu podpůrných knihoven takto snadno najdete – můžete si vyzkoušet, že takto dohledáte třeba v předchozím článku zmiňovanou desku Wukong, stačí když vyhledáte “wukong”
Pokud ani vyhledávání nepomůže, pak je třeba do okna Search or enter project URL… zadat adresu konkrétního rozšíření v repozitáři GitHub. Můžete si vyzkoušet, že adresa https://github.com/elecfreaks/pxt-wukong vás zavede ke stejnému rozšíření.
A co dělat, pokud jste si nainstalovali extension, o kterém jste nakonec zjistili, že ho nepotřebujete a rádi byste ho odebrali? I tady je docela snadná pomoc:
V záhlaví přepněte programovací prostředí z Blocks na JavaScript.
Díky předchozímu kroku jste si v oblasti, kde se nacházel emulátor micro:bitu otevřeli správu souborů programu. Rozbalte nabídku Explorer a odstraňte nechtěnou knihovnu kliknutím na popelnici u jejího jména. Prostředí vás ještě požádá o potvrzení, že si opravdu přejete knihovnu odstranit z programu. Všimněte si, že rozšíření wuKong je zároveň příkladem knihovny, která si v sobě přinese jiné knihovny, které vyžaduje – v tomto případě knihovnu neopixel a ws2812b – obě knihovny jsou potřebné k ovládání vestavěných LED na desce Wukong. Samostatně je nemůžete odstranit, pokud ale odstraníte rozšíření wuKong, odstraníte s ním zároveň i další knihovny, které si doinstaloval, protože je potřebuje.
A to už je pro dnešek opravdu vše. Příště si rozebereme, co že jsem vám to poskytnul za kód ke stažení a jak zacházet s jednoduchými logickými a matematickými operacemi a jak reagovat na základní události jako je třeba stisknutí tlačítka!
1 Ještě více možností programovacích prostředí můžete nalézt v sice již trochu starším, ale stále užitečném přehledu V čem programovat micro:bit? vystaveném na portálu microbiti.cz.
2 “Rozhodovací paralýza (v anglickém jazyce decision paralysis) je psychologický jev, kdy je člověk neschopen se rozhodnout a zvolit si z více nabízejících se možností. Čím více variant má k dispozici, tím hůře se rozhoduje při výběru jedné z nich. Velké množství voleb ho frustruje a při konečném rozhodnutí nepociťuje takovou míru štěstí, jako kdyby předtím neměl vůbec na výběr, protože zpětně pochybuje nad správností své konečné volby.” zdroj: https://cs.wikipedia.org/wiki/Rozhodovac%C3%AD_paral%C3%BDza
3 Přidání podpory dalšího jazyka je sice z podstaty licence, pod kterou je prostředí zavedeno, možné, ale výrazně překračuje předpokládané znalosti začátečníka, proto zde tuto možnost blíže nerozvádím.
4 Zde jsem si dovolil trošku zavádějící zjednodušení pro začátečníky. Každá funkce se v micro:bitu spouští ve vlastním vláknu a vlákno <forever> se spustí po zastavení vlákna <on start>, což nejčastěji nastane jeho dokončením, nicméně přinejmenším ve starších verzích prostředí MakeCode šlo spuštěním vlákna <forever> docílit i přidáním bloku <pause> do vlákna. Prostředí se neustále vylepšuje a již by s tím neměl být problém, ale kdybyste náhodou narazili na problém s tím, že se vám vlákno <forever> spustí ještě před zastavením vlákna <on start>, máte alespoň představu odkud začít záhadu rozmotávat.
5 Známé pod zkratkou LED (zkratka z anglického Light-Emitting Diode); též označovány jako světelné diody, svítivé diody, slangově ledky, někdy označováno též pleonasmemLED diody.
6 Dlouhá odpověď by popisovala, že jde o soubor typu Intel-Hex, tedy textový soubor sloužící k definování obsahu paměti. Data jsou zakódována pomocí šestnáctkové soustavy do ASCII, což umožňuje, aby soubor byl čitelný běžným textovým editorem. Pokud vás uvedené termíny zastrašily a chcete se dozvědět více o tom, jak jsou data ukládána do souboru, můžete začít například článkem Intel HEX na Wikipedii. Pokud vás nezastraší ani angličtina, můžete se dozvědět něco víc o informacích obsažených v souborech generovaných editory určenými pro micro:bit v článku What is the format of the .hex file created by the micro:bit editors?
Ne nezačínám fantazírovat a s mBotem se rozhodně nemůžete věnovat magii a temným čárám (alespoň pokud vím :-)). Zato umí mBot velmi dobře jezdit po nakreslených čárách, popřípadě, jako dobře vychovaný robůtek umí čáru respektovat a nepřekračovat hranici. V minulém díle jsme se učili pracovat s LED Matrixa dnes se podíváme, jak robota zkrotit na čáře a používat snímač čáry.
MBot umí jezdit po čárách. Toto kouzlo mu umožňuje modul snímače čáry (Line Followeru), který je umístěný zpravidla v přední části robota (využít lze samozřejmě i jinde). Modul obsahuje dva senzory schopné snímat odražené IR záření (modul obsahuje dvě dvojkombinace LED vyzařující IR záření s fototranzistory které jsou schopné číst a přijímat IR záření odražené od blízké plochy). Podle intenzity přijímaného záření modul oznamuje mBotovi jestli vidí černou barvu (méně odraženého záření), nebo bílou barvu (více odraženého záření).
Snímač čáry – Line Follower
Jednoduchý snímač čáry, o kterém je v tomto článku řeč, snímá dvěma senzory dva stavy (černá/bílá) svého okolí. Při vzájemné kombinaci různých stavů, které mohou při snímání okolí nastat, je možné vyhodnotit jejich čtyři různé kombinace. MBot pak může být naprogramován na reakce na tyto čtyři stavy. Výsledkem může být i poměrně sofistikované chování robota.
Snímač čáry a jeho stavy
Z předchozí grafiky, kde jsou popsané čtyři stavy snímače čar, které mohou nastat vyplývají i reakce, které by mBot na danou situaci měl mít naprogramované. Proto si prohlédneme screen prvního programu, který umožňuje pohyb po čáře.
Čára ovšem nemusí sloužit pouze jako dráha, po které by robot mohl chodit, ale třeba také jako hranice, kterou mBot nemůže překročit. Na několika předváděcích akcích jsme v Domečku této schopnosti mBota s úspěchem použili při demonstraci, kdy se robot samostatně pohyboval po stole. Byl schopen volně jezdit po bílé desce stolu, jakmile se ovšem senzorem dostal za hranu desky vyhodnotil si výsledek tak, že vidí černou barvu (a tudíž hranici), couvl, otočil se a pokračoval v projíždění.
Hranice může být zároveň i obrysem bludiště, které musí mBot samostatně projet. Není tedy třeba v klubovně stavět bludiště s opravdovými stěnami. V pohodě si vystačíte s černou páskou a bílou deskou stolu a můžete si dětmi vyrobit improvizovanou únikovou hru – ale o tom asi v jiném díle mého seriálu :-).
Popis programu: Po stisknutí tlačítka se spustí program v nekonečné smyčce. Pak mohou pro robota nastat tři různé stavy, na které má naprogramované reakce. Jednak je to stav, kdy nevidí žádnou hranici – prostě jede dopředu rychlostí 100 a svítí zelenou barvou. A pak jsou dva velmi podobné stavy, kdy „vidí“ hranici buď levým senzorem, nebo pravým. V tomto případě přeruší jízdu dopředu, rozsvítí červené světlo a půl sekundy couvá. Poté v závislosti pokud mBot viděl hranici levým, nebo pravým senzorem se náhodně zatočí buď doleva, nebo dobrava (s příslušnou světelnou signalizaci) a pokračuje v jízdě dopředu.
Tip: Při hraní si s čarami je možné si to trošku začít komplikovat. Zkuste si třeba naprogramovat na situaci, kdy budou na dráze překážky, nebo bude dráha přerušena.
Popis programu: mBot, který pracuje s tímto programem má vpodstatě dva základní režimy, podle kterých se chová. Jednak je to běžný režim sledování čáry, který je odvozený od programu umožňujícího chůzi po čáře a další režim je spuštěný pokud ultrazvukový senzor zaregistruje před robotem překážku bližší než 5 cm. V tomto případě se otočí doleva a opisuje obloukovou dráhu dokud nenarazí na čáru. Pokud narazí na čáru pokračuje dál v běžném provozu jízdou po čáře.
Tip: Program s detekci překážky, který jsem vám předložil, nefunguje vždy. Je stavěný na určitou velikost překážky. Pokud by byla překážka větší než je předpokládáno, mBot by si s touto situací neporadil a vrazil do ní. Zkuste tento problém vyřešit :-).
Popis programu: Pro chod programu je deklarována proměnná testCary do které je ukládán stav počtu testů pokud mBot hledá čáru (nabývá hodnot 0, nebo 1). V případě, že robot jede po čáře je testCary stabilně na hodnotě 0. Pokud se mBot dostane do režimu sledování čáry 3, čili když nevidí přerušenou čáru, jede 1s rychlostí 100 dopředu a pak se otáčí o 90° doleva a hledá čáru a poté o 180° doprava a opět hledá čáru. V případě, že v režimu hledání čáry čáru nalezne, přestane ji hledat a okamžitě normálně vyrazí vpřed. Pokud čáru nenalezne přepne se do klidového režimu, kdy čeká na operátora a signalizuje ukončení jízdy.
Doufám, že se vám toto prvotní seznámení se světem čar líbilo. Příští článek se do tohoto tématu vrhneme ještě o něco podrobněji a představíme si sofistikovanější modul pro sledování čáry, který může mBot používat.
V minulém článku to byl ještě obecný úvod do programování robotů s microbit, dnes se již podíváme na praktické informace o robotovi Ringbit v dalším článku od Jozefa Kovárskyho, kterému tímto předávám slovo. Bastlení ZDAR!
Zdravím priaznivcov robotiky a programovania, ktorým sa do rúk dostal výučbový mikropočítač micro:bit a robot Ringbit car V2.0. Spomínané produkty som pôvodne kúpil svojej malej dcére, aby som v nej vzbudil záujem o IT. Mikropočítač vo mne vyvolal spomienky z detstva, keď bol ‚in‘ domáci počítač Didaktit Gama s programovacím jazykom Basic, ktorý bohužiaľ nebol do takej miery ‚user friendly‘, ako je tomu pri programovaní mikropočítača micro:bit s využitím platformy Microsoft MakeCode.
Platforma Microsoft MakeCode umožňuje jednoduchým spôsobom sa naučiť základy programovania v jazyku JavaScript za využitia Blokov, ktoré obsahujú základné príkazy tohto jazyka. Dokonca podporuje aj slovenčinu a češtinu, čiže nie som nútený písať program v angličtine a poznať anglické príkazy. Veľkým prínosom je možnosť pridania rozširujúcich Blokov, čomu sa nevyhnem pri programovaní robota Ringbit a jeho príslušenstva. Pokiaľ s MakeCode začínate, prečítajte si tento článok o základoch programovania v MakeCode.
Skôr než som si naprogramoval robota Ringbit, tak som si vyskúšal, čo všetko dokáže mikropočítač microbit, ktorý je vybavený:
‚display‘ (tvorí ho 25 programovateľných červených LED diód)
dvomi programovateľným tlačidlami
25 externými spojeniami (pinmi) na spodnej časti
svetelným a teplotným senzorom
pohybovými senzormi (akcelerometer a kompas)
bezdrôtovou komunikáciou ( Radio a Bluetooth)
USB rozhraním
Väčšinu vybavenia som si otestoval aj v praxi, avšak najväčší potenciál vidím vo využití pinov a v bezdrôtovej komunikácii (Bluetooth), čo je možné najlepšie uplatniť pri použití robota Ringbit a jeho príslušenstva.
Ringbit výučbový robot pre děti
Robot RingBit je skvelý hlavne pre deti na výučbu základov programovania s radom príkladov použitia. My sa ale pozrieme skôr na ďalšie veci. Robot Ringbit car V2.0 používa ako zdroj energie 3 batérie typu AAA a na pohon slúžia dva kontinuálne servomotory. Taktiež je možné, ako zdroj energie, použiť ‚powerbank‘ pripojenú cez USB rozhranie, avšak pri pripojení viac ako jedného príslušenstva neposkytne dostatočný prúd. Aby som zdroj energie robota vyriešil dlhodobo a ekologicky, tak som si kúpil nabíjačku batérií aj s nabíjateľnými batériami AAA.
Príslušenstvo Ringbit
K uvedenému robotovi sa dá kúpiť nasledovné príslušenstvo:
Najviac ma zaujal LED nárazník, ktorý je možné v platforme Microsoft MakeCode ľahko naprogramovať za pomoci rozširujúceho Bloku Neopixel. Na programovanie snímača vzdialenosti treba použiť rozširujúci Blok Sonar. Snímač čiary a pohon tohto robota sa dá naprogramovať s využitím rozširujúceho Bloku RingbitCar.
PríslušenstvorobotaRing:bit car V2.0 je možné použiť len jednotlivo, lebo výrobca počíta len s „plnohodnotnými“ analógovými pinmi P0, P1 a P2. Z toho vyplýva, že piny P1 a P2 sú trvalo určené na pohon dvoch servomotorov a pin P0 je určený na pripojenie príslušenstva. Avšak pri analýze zvyšných 22 pinov je zrejmé, že na pripojenie príslušenstva je možné využiť aj „neplnohodnotné“ analógové piny P3, P4 a P10, pričom ‚display‘ mikropočítača micro:bit je nutné vypnúť. Piny P3, P4 a P10 je možné ľahko využiť, ak micro:bit zasuniete do modulu edgebit, ktorý je plne kompatibilný s robotom Ringbit.
Modul edgebit umožňuje využitie „neplnohodnotných“ pinov mikropočítača micro:bit za použitia jumperov (koncovky male-male) a konektorov NSL 25-3. Celkom som si vystačil s pinmi P3 a P4, lebo na pin P10 som už nemal čo pripojiť.
Prvý konektor NSL 25-3 odporúčam prepojiť pomocou troch jumperov s pinmi P3, V (napätie) a G (uzemnenie). Druhý konektor NSL 25-3 odporúčam prepojiť pomocou dvoch jumperov s pinmi P4 a G (uzemnenie), pričom stredný kontakt na konektore bude neobsadený.
Na prehrávanie tónov z mikropočítača micro:bit odporúčam vytvoriť si ešte príslušenstvo reproduktor, za použitia konektora NSG 25-3 (neobsadený stredný kontakt), dvoch jumperov a minireproduktora, resp. bzučiaka.
Po posúdení možností kombinácií príslušenstva pre robot Ringbit car V2.0 odporúčam nasledovný ‚layout‘ pinov:
Treba počítať s tým, že pri súčasnom využití pinov P0 až P4 dochádza k vyššiemu zaťaženiu troch batérií AAA (odporúčam nepoužívať ‚powerbank‘) a pri použití ‚opotrebovaných‘ batérií robot Ringbit car V2.0 nemusí fungovať optimálne. Môže sa to prejaviť napr. zníženou rýchlosťou pohybu. Odporúčam použiť nové, resp. nabité batérie a znížiť jas LED nárazníka na minimum.
Následne som mohol začať programovať v platforme Microsoft MakeCode za použitia rozširujúcich Blokov spomenutých v predchádzajúcom texte. Najskôr som si vyskúšal naprogramovať príslušenstvo robota Ringbit car V2.0 jednotlivo (v balení boli priložené karty s popisom jednoduchých programov), čiže som použil len ‚plnohodnotné‘ analógové piny P0, P1 a P2. Následne som skombinoval LED nárazník (pin P3) so snímačom vzdialenosti (pin P0) a nakoniec som pridal tóny (pin P4), ktoré prehral reproduktor.
Ringbit čo sa vyhýba prekážkam, hrá a svieti
Po úspešnom skombinovaní jednoduchých programov príslušenstva robota Ringbit car V2.0 do celistvého programu, som začal postupne testovať funkčnosť snímača vzdialenosti spolu s LED nárazníkom a reproduktorom, čiže som využil piny P0 až P4. Po viacerých úpravách celistvého programu sa mi nakoniec podarilo robota spojazdniť za optimálneho fungovania spomínaného príslušenstva. Prikladám finálnu verziu programu.
Jazdenie po čiare ringbit tiež zvládol
Potom som na pin P0 namiesto snímača vzdialenosti pripojil snímač čiary, pričom piny P1 (servomotor), P2 (servomotor) a P4 (reproduktor) zostali bez zmeny. Bohužiaľ LED nárazník som už nemohol použiť, lebo na jeho fungovanie by som potreboval ďalšiu rozširujúcu dosku, takú istú, na ktorú už bol priskrutkovaný snímač čiary. Avšak som vynašiel ‚hack‘, ako využiť aspoň dve LED diódy na tejto rozširujúcej doske spolu so snímačom čiary. Pred zapnutím robota Ringbit car V2.0 som prepol spínač na spomínanej doske na pozíciu ‚Rainbow LED‘, následne som zapol robot a po rozsvietení dvoch LED diód tejto dosky som prepol spínač do polohy ‚Other modules‘.
Použitím tohto postupu zostali svietiť tieto dve LED diódy za súčasného optimálneho fungovania snímača čiary. Následne som upravil horeuvedený program tak, aby tento robot bezproblémovo fungoval s pripojeným snímačom čiary,reproduktorom a za súčasného rozsvietenia dvoch LED diód rozširujúcej dosky. Po testovaní som sa dopracoval k finálnej verzii programu.
Oba uvedené programy sú napísané v platforme Microsoft MakeCode so znalosťami začiatočníka a ich hlavným cieľom je ukázať plnohodnotné využitie robota Ringbit car V2.0 a jeho príslušenstva, s ktorým neráta ani sám výrobca. Zároveň som si tým rozšíril ‚knowledge‘ hravou formou, čo je hlavným poslaním daného robota.
Záverom sa chcem poďakovať za prečítanie môjho článku až do konca. Verím, že ste si rozšírili ‚horizon‘ a moje poznatky využijete pri programovaní micro:bit a testovaní Ring:bit car V2.0.
V budúcom článku sa chcem venovať bezdrôtovému ovládaniu uvedeného robota a jeho príslušenstva za využitia technológie ‚Bluetooth Low Energy‘ mikropočítača micro:bit.
Poznámka (Oldřich): na propojení redukce Edgebit s rozšiřujícími moduly můžete využít také kolíkovou lištu, kterou zapájíte do Edgebit a propojovací vodiče F/F. Tento způsob řešení je vidět na úvodním obrázku.
Jsou chvíle, kdy podezřívám vesmír, že zákon schválnosti je hluboce zakotven v tkanině reality! Sotva začnu se sepisováním úvodního kurzu pro MakeCode for micro:bit, oznámí vývojáři veřejný betatest nové verze, která přinese řadu užitečných vylepšení. Nováčci mohou brát tento článek jako dodatek k Něžnému úvodu do programovacího prostředí MakeCode for micro:bit, zkušení mazáci se mohou podívat na výběr novinek, které Update 2020 přinese.
Vezměme to ale popořádku: Microsoft, vývojář prostředí, opečovává MakeCode for micro:bit novou velkou aktualizací zhruba jednou ročně. Současná verze je již třetí podobou, nicméně číslování verzí začíná v duchu informatické tradice od nuly, tedy jde o vezi v2. Pokud se chcete podívat, jak vypadalo prostředí dříve, můžete si spustit předchozí verzi tak, že do URL adresy přidáte na konec (případně před #) jméno verze.1
Je dobré si tuto znalost uložit do paměti, protože se může stát, že update přinese změnu nějaké vnitřní mechaniky, se kterou počítá některé z rozšíření třetích stran, a příklady uvedené v dokumentaci nebudou v nové verzi fungovat. S tím se můžete setkat například na produktových stránkách modulů, které se úspěšně prodávají už několik let.2 Díky přístupu k dřívějším verzím máte možnost zkompilovat a náhrát program do micro:bitu i v dřívější verzi a i úplný začátečník zprovozní rozšíření bez větších problémů.
Update 2020 by měl přijít do ostrého provozu v červenu 2020, pak nejspíš bude přístupný jako veze v3. Do té doby je ve fázi veřejné betaverze, kterou můžete najít na adrese https://makecode.microbit.org/beta#, kde si můžete vyzkoušet novinky, jejichž výběr vám přinášíme níže.
Konec bezejmenných programů!
„Pojmenujte si program, ať víte, o co se jedná, až se k němu příště vrátíte!“ je natolik samozřejmá rada, kterou svým studentům na kroužcích stále opakuji, že jsem ji v minulém díle zapomněl zmínit (ačkoliv jsem ji v uváděných příkladech dodržoval, jen jsem ji explicitně neřekl). Dosud bylo prostředí MakeCode náchylné k uchovávání celé legie nepojmenovaných programů, protože pojmenování jste volili až při uložení.
To se v nadcházející verzi změní, protože hned po vytvoření nového programu budete vyzváni k jeho pojmenování! Sláva! Nepojmenované programy odcházejí… přichází éra nicneříkajících pojmenování, protože nic nebrání studentům zadat jména jako „Pepicek1“, „MujProgram“ nebo „JmenoProgramu“. Ale alespoň některé to motivuje k tomu zadat popisné jméno… že jo?
MakeCode představuje Python pro micro:bit
Minule jsme uvedli, že mezi jazyky podporované přímo micro:bit foundation patří i Python. Překlad bloků do tohoto jazyka je součástí Updatu 2020. Navíc jak Python tak JavaScript získal přehledné popisy funkcí! Drobnou vadou na kráse je skutečnost, že nejspíš půjde o nějaký dialekt Pythonu, který nebude možné otevřít v jiném editoru. Rozhodně však jde o vítané rozšíření nabídky, protože Python je stále oblíbenější programovací jazyk pro začátečníky a jeho přímý překlad z bloků tuto jeho pozici ještě posiluje.
Rozbalovací kód
Teď možná trochu předbíhám, protože praktickou ukázku si uvedeme až v příštím článku, nicméně bych rád zmínil velmi užitečnou novinku, kterou je možnost sbalit bloky událostí a funkcí.3
Grafické programovací jazyky jsou zaměřeny primárně na začátečníky, čemuž odpovídá i skutečnost, že bloky zabírají poměrně velkou část pracovního prostoru. To je přehledné, pokud je kód krátký, ale nic vám nebrání napsat tímto způsobem i rozsáhlé programy. Najde se dost lidí, kteří kouzlu těchto jazyků propadli natolik, že v nich píší skutečně komplexní kódy. Názornost bloků, která tak dobře funguje u krátkého kódu, však působí proti celkové přehlednosti u rozsáhlejších programů. Možnost sbalit jednotlivé funkce usnadňuje orientaci v celkové struktuře kódu.
Plnohodnotný debugger pro MakeCode for micro:bit
Někdy bývá znalost programovacího jazyka definována jako propojení mezi syntaxí, sémantikou a stavem programu. Syntax a sémantika je to, na co se zaměřujeme nejčastěji, ale občas je potřeba znát i v jakém stavu jsou aktuálně proměnné v programu, a tomu pomáhá právě nástroj zvaný debugger. Tento nástroj je běžnou součástí profesionálních vývojových prostředí, ale MakeCode for micro:bit má v současné verzi jen režim Slo-Mo (slow motion), který umožňuje krokovat vykonávání programu, ale není plnohodným debuggerem. To se změní s novou verzí, už teď si ho ale můžete vyzkoušet ve veřejném betatestu.
Web USB přináší pohodlí aplikace MakeCode do webového prostředí
Pokud jste dočetli až sem, vězte, že tou nejatraktivnější novinkou Updatu 2020 je technologie zvaná Web USB. Ta umožňuje „spárovat“ vaše USB zařízení přímo s webovým prohlížečem, takže když chcete nahrát nový program, stačí jen kliknout na tlačítko Download a program se rovnou stáhne do vašeho micro:bitu stejně jako v případě aplikace pro Windows 10!
Škoda jen, že v době sepsání tohoto článku je technologie přístupná pouze pro prohlížeče Chrome a Edge.
Jak spárovat micro:bit s Web USB
Vzhledem k tomu, že s nahrávání programu do micro:bitu je naprosto základní úkon, přiblížíme si použití této technologie trochu podrobněji.
Je třeba mít na paměti, že technologie je vystavěná prohlížeči Chromium, tedy funguje jen z něj odvozených browserech. (Pokud tedy preferujete použití programu Microsoft Edge, vězte, že technologii Web USB podporuje jen nová verze, která má jádro vystavěné právě na zmíněném prohlížeči a v současné době není standardní součástí Windows 10, ale je třeba provést ruční stažení aktualizace zde: https://www.microsoft.com/cs-cz/edge)
Všiměte si, že v zápatí máte nyní vedle tlačítka Download i tlačítko …, na které klikněte
Zvolte možnost Pair device
Vyskočí nabídka Pair device for one-click downloads, kde znovu zvolte Pair device.
Pokud je vše v pořádku, vyskočí nabídka s nalezeným zařízením. Vyberte ho ze seznamu a zvolte Připojit.
Pokud program žádné zařízení nenalezne, vyzve vás ke kontrole připojení – kromě očividných věcí, jako je kontrola, že používáte funkční datový kabel, je připojena i výzva ke kontrole verze firmwaru. Jak na to si probereme níže.
Po spárování se změní ikonka vedle nápisu na tlačítku Download.
Jak zkontrolovat verzi firmwaru desky micro:bit
Technologii Web USB podporuje firmware 0249 a vyšší, což v době psaní článku znamená, že se s velkou pravděpodobností setkáte s tím, že váš micro:bit bude mít starší verzi. To si ověříte jednoduše:
Připojte váš micro:bit k počítači, najeďte na disk MICROBIT.
Otevřete soubor Details.txt a zkontrolujte údaj v položce Interface version. Pokud je nižší než 0249, bude potřeba updatovat firmware.
Jak updatovat firmware
Nejprve je třeba micro:bit uvést do režimu údržby (MAINTENANCE Mode). Toho dosáhnete tak, že odpojíte micro:bit od PC, stisknete tlačítko RESET na zadní straně desky a aniž byste ho pustili, připojíte usb kabel. V tu chvíli můžete tlačítko pustit a měli byste vidět nově připojený disk MAINTENANCE.
V tuto chvíli stačí, abyste na disk nahráli .hex soubor s novou verzí firmwaru. (Pokud byste se potřebovali vrátit ke starší verzi firmwaru, nahrajete ji úplně stejně). Během nahrávání souboru bude blikat žlutá LEDka vedle tlačíta RESET. Jakmile se firmware nahraje, micro:bit se opět připojí jako disk MICROBIT.
2 Touto „nemocí z vlastního úspěchu“ občast trpí hardware od ELECFREAKS – například u LED matice 8×16 jsem se potýkal s příklady napsanými ve staré verzi rozšíření. Také mnohé startovací kity mají občas tištěný návod ve starší verzi prostředí. Nelze tvrdit, že jde o špatnou práci ze strany výrobce – manuály se kterými jsem se setkal byly velmi dobře zpracovány, právě naopak, potíž vychází z toho, že kvalitně sestavený starter kit se může prodávat i několik let.
3 Bloky událostí jsou ty, které se na nic nenapojují a na které zároveň nelze nic napojit, minule jsme si představili jejich zástupce <on start> a <forever>.
V minulém díle o programování mBota jsem nakousl problematiku „čárování“, tedy tvorbu programu pro pohyb mBota od firmy Makeblock po čáře. Programování pohybu se týkalo základního modulu pro čtení čar (ME Line Follower – snímač čáry), který je dodáván v základní verzi produktu mBot Explorer. Existují ale i sofistikovanější moduly pro snímač čáry, které můžete svému modrému kamarádovi pořídit a o těch bude toto volné pokračování předchozího dílu.
Sofistikovanější modul pro čtení čar, který vám umožní naučit vašeho mBota mnohem chytřejšímu řešení problémů ve světě čar, naleznete ve světě pod pojmem ME Line Follower Array (slovíčko Array nám signalizuje, že půjde o práci s daty, které jsou v poli) a v Čechách, například v e-shopu hwkitchen.cz jej naleznete pod názvem ME profi snímač čáry. Podle informací majitele e-shopu je výroba tohoto snímače ukončována a bude zřejmě postupně nahrazován podobným snímačem ME RGB profi snímač čáry. Tento snímač čáry jsem ještě neměl v ruce, ale snad se tak v dohledné době stane a budu vám moci dát pár tipů, jak jej využít při výuce, nebo při kutění s vašimi ratolestmi.
ME profi snímač čáry – popis
Svou konstrukcí vychází ME profi snímač čáry z konstrukce základního modelu snímače čáry, který se dodával ve starším kompletu mBota i v novějším mBotu Explorerovi. Tento snímač ale není součástí základního vybavení a pokud si s ním chcete pohrát je třeba jej za nevelký peníz přiobjednat.
Oba moduly používají pro čtení čáry IR senzory, kdy je každý senzor soustavou LED diody vysílající infračervené záření a fototranzistoru, který je schopen toto záření odražené od povrchu detekovat. Základním (a to dosti podstatným) rozdílem v kvalitě je počet senzorů, který každý z obou snímačů čar nabízí. Zatímco základní snímač čáry nabízí pouze dva senzory, jeho vylepšený bratránek vám nabídne senzorů rovnou šest.
S počtem senzorů zároveň ale narůstá i komplikovanost při vyhodnocování dat získaných ze senzorů modulu a větší náročnost při tvorbě programů, kdy je třeba třídit a vyhodnocovat větší množství stavů. Je to ovšem daň za kvalitu a s modulem ME profi snímače se dají dělat i mnohé poměrně komplikované kousky o kterých si se základním snímačem můžete nechat pouze zdát.
Oba moduly se instalují na mBota prakticky stejně, pokud byste si přeci jen nevěděli při montáži a demontáži rady, podívejte se na instruktážní video v úvodu článku. Oba moduly také komunikují stejným typem portu, takže je lze pohodlně přicvaknout na již přivedený kabel po předchozím modulu snímače čar.
Programování mBota s profi snímačem čáry
Odlišnosti se projeví až při tvorbě programu. Zatímco dvousenzorový základní snímač pro čtení čar je okamžitě použitelný, pro šestisenzorový ME profi snímač musíte doinstalovat do mBlocku 3 rozšíření pro ME Line Follower Array. Postup při instalaci rozšíření je opět zřejmý v doprovodném videu a není nijak náročný.
Nainstalované rozšíření vám poskytne možnost používat tři nové widgety, které vám umožní, vložíte-li je do podmínkových příkazů, reagovat na požadované stavy.
Z funkčního hlediska není rozdíl mezi těmito programovými bloky žádný. Jediným rozdílem je způsob zadávání detekovaného stavu snímače. Ve dvou případech zadáváme požadovaný stav v binární podobě, kdy znak 1 reprezentuje bílou barvu, kterou by měl senzor snímat a 0 barvu černou. V příkladu na obrázku (program č. 1) je nutné zadávat adresu v uvozovkách, v příkladu programu č. 3 je nutné před jedničky a nuly vložit znak B. Prostřední varianta programu č. 2 na obrázku pak rovnou uvádí číslo v decimální podobě.
Programy
Program „follower harfa“:
Na závěr článku naleznete tři příklady programů ke stažení a vyzkoušení. Asi nejjednodušší je program „follower-harfa“, který prostě jen demonstruje na sérii podmínkových příkazů, jak mBota pomocí profi snímače čar proměnit v jednoduchý hudební nástroj. Při vyluzování tónů si můžete navíc vyzkoušet jak rychle a přesně senzor reaguje, popřípadě zkusit si naprogramovat složitější variantu s větším počtem tónů.
Program „jezdec“:
Program jezdec předvádí řešení průchodu po čáře, která obsahuje ostrý úhel. Tento problém je možné jistě řešit více způsoby a určitě přijdete na něco chytřejšího. Pro inspiraci si ale zkuste mé řešení. Pro další povídání si prosím otevřete program „jizda“ na konci článku. Program je poněkud rozsáhlejší a nechci text zahltit grafikou.
Reakce mBota na stavy senzorů jsem rozdělil do čtyř skupin – na situaci,kdy je mBot správně na rovné čáře a může jet bez starostí kupředu (blok jizdaUvnitr), na dvě skupiny zahrnující korekce pohybu mBota pokud je mírně vychýlený doleva, nebo doprava (oba bloky jizdaVenku + prováděcí bloky pro jízdu) – tyto tři skupiny slouží pro standardní pohyb po trase a něco podobného v jednodušší podobě jsme již programovali v předchozím článku. Řešením pro pohyb po čáře, která obsahuje ostré úhly je blok „hrana“.
Blok „hrana“ (reakce na stav modulu čtení čáry č. 63 – kdy je mbot kompletně na bílé barvě) je ta speciální část tohoto programu, která mBotovi řeší problém s ostrým úhlem. Pokud totiž mBot dojede na ostrý úhel přejede černou čáru a ocitne se na bílé ploše. Na bílé ploše se ale ocitne pouze modul čidla, tělo mBota zůstává na černé čáře.
MBot se tedy zastaví a začne dělat to co každý turista, který se ztratí. Začne se rozhlížet a hledat správnou cestu. Rozhlížení vypadá tak, že se na místě otáčí kolem vlastní osy postupně doleva a doprava, přičemž tyto výkyvy zvětšuje, dokud nenarazí na čáru. Čára, která pokračuje dopředu je vždycky blíž, než čára po které mBot přijel, takže ji tímto způsobem nalezne jako první. Pokud by se ztracený mBot rozhlížel jedním směrem (otáčel se na místě jedním směrem) v řadě případů by nalezl jako první cestu zpátky a zase by se vrátil a to nechceme.
Program „Labyrint“
Abych ukázal další možnost, jak využít profi snímač čáry, vymyslel jsem mapu z čar, kterou musí mBot projít. V bludišti jsou ale rozmístěny překážky – miny – na některých možných průchodech. Celým labyrintem tak vede jenom jedna možná cesta a protože mBot není schopný svými senzory detekovat miny na trati, je úplně závislý na svém programátorovi, jak mu naprogramuje bezpečnou trasu po které by mohl projít.
Program, díky kterému se může mBot v bludišti zorientovat je tedy třeba sestavit tak, aby byl kombinací klasického automatického pohybu po čáře s tím, že se v určitých bodech dráhy – uzlech – se mBot bude rozhodovat a podle aktuální situace vybere jak se v daném uzlu bude rozhodovat. Program labyrint, jak jej na konci článku naleznete ke stažení, má nastavenu trasu k projetí mapy (viz. obrázek). Pokud si vytvoříte mapu vlastní s odlišnou trasu, budete si muset samozřejmě změnit i tu „rozhodovací“ část programu tak, aby mBot byl schopen projít vaším labyrintem.
V bloku „rozhodnuti“, ve kterém je uložena v podstatě databáze rozhodnutí, jimiž se mBot při pohybu bludištěm řídí, jsou odkazy na tři bloky. Bloky uzelDoleva a uzelDoprava otáčí mBotem o 90° doleva a doprava (jakmile by byly v bludišti jiné než pravé úhly program vám nebude fungovat). Blok uzel zase ošetřuje tu vlastnost mBota, kterou je, že na zachycený stav reaguje okamžitě. Vzhledem k tomu, že mBot má čidlo vepředu, začal by se otáčet ještě předtím, než by na uzel skutečně dojel. Blok uzel tedy udělá to, že mBota bez ohledu na zachycený stav „donutí“ dojet osou vozidla na uzel a tam pak pokračuje dle databáze rozhodnutí buď v otáčení, nebo v další jízdě dopředu.
Tip: Udělejte si své bludiště a zkuste mBota naprogramovat, aby jej projel stanovenou trasou.
Není daleko doba, kdy budou roboti rovnocennými partnery nás lidí. Budeme si moci u kávy poklábosit a něco nového se třeba od svého robotího parťáka i dozvědět. Při troše šikovnosti si ale s mBotem můžeme popovídat již dnes. Umožní nám to zvukový modul, který si můžete ke svému mBůtkovi pořídit – ME Audio Player zvukový modul.
Minule jsme tu měli mBota a čáry a dnes přidáme do naší mbotí série další článek právě o zvukovém modulu!
Modulem, kterým můžete to jak váš mBot funguje posunout téměř do říše sci-fi je modul, který naleznete v nabídce firmy makeblock pod názvem ME Audio Player. Jedná se o modul schopný z paměťové SD karty přehrávat zvukové soubory. S tímto modulem umí ale mBot zvuky nejen přehrávat, ale také i nahrávat (modul obsahuje i malý mikrofon).
ME Zvukový modul – popis
Podíváme-li se na modul z předního, tedy čelního pohledu, všimneme si nejprve reproduktorku ve středové části destičky modulu. Reproduktor má výkon pouze 1W, což není mnoho. Z praxe mám ověřeno, že v tiché místnosti s jedním dítětem je hlasitost použitelná, ovšem v klubovně s několika normálně hovořícími malými robotiky nemá modul šanci se prosadit.
Na pravé straně destičky (z čelního pohledu) nalezneme ještě dvě součástky, které si zaslouží naši pozornost. Kulatý kovový váleček je mikrofon, díky kterému je modul schopný nahrávat zvuky na kartu. Pokud si se součástkou o které je řeč nejste jistí, je to součástka pod kterou je na desce nápis MIC. Opět, stejně jako u reproduktoru, zde nehledejme profesionální kvalitu (celý modul je myšlen jako dětská edukační hračka). Citlivost mikrofonu je velice nízká, mluvenou řeč jakž-takž zachycuje do vzdálenosti půl metru, takže na špionážní hrátky si naštěstí moji svěřenci mohli nechat zajít chuť. Ovšem zkusit si naprogramovat mBota se zvukovým modulem jako poslíčka, je s mikrofonem na ME zvukovém modulu realizovatelná záležitost.
Velice šikovným udělátkem je modře svítící LED dioda umístěná přímo nad mikrofonem. Díky této LED snadno získáme zpětnou vazbu o tom, co že to náš zvukový modul zrovna provádí. Modul je schopný poslat celkem tři druhy signálu. Dvě krátké bliknutí se objeví, je-li modul připojen k desce, která byla zrovna spínačem aktivována. Krátké blikání po jedné sekundě znamená, že je modul právě v režimu nahrávání z mikrofonu a plné nepřerušované svícení znamená, že modul zrovna přehrává zvuk na reproduktorku. Někdy je záznam tak tichý, že při testování oceníte informaci, když vám modul z karty právě přehrává nahrávku obsahující „ticho“.
Tip: shlédněte doprovodné video, kde jsou všechny druhy signalizace modulu prakticky předvedeny.
Pohlédneme-li na zadní stranu modulu spatříme ve středu charakteristickou kostičku portu RJ-25 s nálepkou bílé barvy, kterou je možné modul připojit k řídící desce mBota (port na desce by měl mít také bílé označení). Bílé označení nám signalizuje, že je modul s deskou mBota propojen sběrnicí typu I2C (I2C – wiki).
Po pravé straně nalezneme slot pro vložení paměťové karty. Funguje to zcela jednoduše – kartu vložíme a stiskem domáčkneme. Chceme-li kartu vyjmout opakujeme postup pozpátku – kartu stiskneme, ta se trošku vysune a pak ji lze bez problémů vyjmout. Jako úložné médium je používána SDHC karta (paměťové karty – wiki) o velikosti mikro. Tyto karty jsou běžně k sehnání o různé úložné kapacitě. Modul využívá klasického systému souborů, jak jej známe z počítače. Bohužel však neumí pracovat se složkami, byť firma Makeblock deklaruje použití systému FAT32 pro práci se soubory. Modul tedy reálně je schopen využívat pouze soubory uložené přímo na kořeni karty. Modul umí pracovat se třemi nejčastějšími formáty zvuku – MP3, WMA a WAV.
Za zmínku stojí ještě USB port (USB – wiki), který je na levé straně při pohledu na modul zezadu. Tímto portem je možné přímo editovat obsah vložené karty z počítače, propojíme-li jej kabelem s modulem. Varianta portu, která je použitá pro modul je micro USB typu B (USB 2.0) (ve videu jsem chybně uvedl verzi A).
Programujeme s ME Audio Player
Chceme-li mBota používat spolu s připojeným ME zvukovým modulem je třeba do nástroje, kterým jej budeme programovat doinstalovat rozšíření, které nám to umožní. Já používám rozšíření od Makeblocku – MeAudioPlayer (psáno takto dohromady, rozšíření je verze 1.0).
Po nainstalování tohoto rozšíření dostaneme v sekci „Robot“ modré barvy k dispozici nové widgety. Popíši ty nejzásadnější
Pokud chcete v programu použít příkazy, které pracují s modulem audioplayeru je třeba na začátku programové sekvence vložit inicializační blok, kterým mBotovi dodáte patřičné obslužné programové vybavení. Inicializační blok stačí použít v programu jen jednou na začátku. Nevkládáme jej tudíž například do nekonečné smyčky, které nám může obhospodařovat zbytek programu.
play music by index – přehrání zvukového souboru dle indexu. Nenalezl jsem nikde přesně specifikováno o jaký konkrétní index se jedná. Výrobce doporučuje vkládat celé číslo. Pokusy jsem zjistil, že by se mohlo jednat o index pořadí souborů, které jsme aktivně mikrofonem nahráli na kartu. Nejnižší číslo 0 je pravděpodobně pořadí naposledy nahraného souboru.
play music by file name – přehrání souboru podle názvu souboru. Modul by měl podle dokumentace umět přehrávat soubory ve formátu mp3, vma a wmv. Funkčnost mám vyzkoušenu pouze se soubory typu mp3 a tam vše fungovalo dobře. Do pole název souboru nezadávejte i koncovku souboru (to pak nefunguje). Nefunguje ani zadávání cesty k souboru na kartě, fungovalo mi to pouze při přehrávání z kořenu karty. V případě souborů se stejným názvem, ale odlišným formátem zdá se modul upřednostňuje formát mp3.
set music play mode – nastavení režimu přehrávání – single – soubor se přehraje pouze jednou, single repeat – soubor se neustále přehrává kolem dokola, all repeat – mbot projede všechny soubory na sd kartě a postupně je přehraje (možná pak znovu vše bude opakovat, neměl jsem nervy na to to vyzkoušet) a konečně režim shuffle, který vám přehraje soubory z karty v náhodném pořadí. Blok funguje stejně, když jej umístíte před blokem s příkazem na přehrání souboru, ale i za ním.
play previous music – přehraje zvukový soubor dle indexu, který je na kartě před posledním přehraným souborem.
play next music – přehraje zvukový soubor dle indexu, který je na kartě za posledním přehraným souborem.
Tip: Dáte-li více příkazů play previous a play next music za sebou nepřehraje se řada zvukových souborů, ale pouze jeden výsledný soubor, který z této programové sekvence vzejde.
pause/play music – dvoutlačítková volba, která umí pausnout přehrávaný soubor a znovu ho spustit. V tomto případě je třeba aktivní vstup uživatele, takže tento příkaz je využitelný pouze s dálkovým ovládáním.
stop music – zastavení přehrávání souboru, opět vhodné použít jen s dálkovým ovládáním.
set volume to – příkaz pro nastavování úrovně hlasitosti. Bez nastavení mBot hraje na úrovni cca 50–70%. V praxi je univerzálně použitelná úroveň nastavení na 100 (a to ještě modul při trochu vyšší úrovni hluku je špatně slyšet). Příkaz je třeba vložit před inicializační blok (viz. příklad použití na grafice). Program pak zinicializuje zvuk s nastavením, které jsme zadali. Použitelná úroveň je v rozsahu 0-100%, při zadání vyšších hodnot je nadále počítáno s úrovní 100%. Pro případnou změnu hlasitosti je při použití příkazového bloku „set volume to“ vždy zapotřebí znovu inicializovat nastavení modulu, aby se změny projevily (viz. příklad na grafice).
volume up, volume down – příkazy využitelné při použití dálkového ovládání – snížení, nebo zvýšení hlasitosti.
ME Audio Player: start recording to file – tento příkaz zahájí aktivní nahrávání zvuku na kartu do souboru jehož název uvedete v poli (pokud v poli není uveden název souboru, příkaz se neprovede). Název uveďte bez mezer a diakritiky. Pozor, k tomuto bloku je vhodné uvést i následující příkazový blok, kterým ukončíte jeho činnost.
ME Audio Player: stop recording to file – konec nahrávání do souboru.
Programy
Předtím, než si vyzkoušíte programy, které jsem vám na konci článku přichystal, je ještě třeba provést jisté přípravy. Všechny zkušební programy totiž počítají s jistými mp3 soubory, které budou nahrány na vložené kartě. Tyto soubory naleznete hned v prvém zip souboru ke stažení v komprimované podobě. Tyto soubory prosím přesuňte na SD kartu vloženou ve zvukovém modulu.
Program Test of sound
Tímto programem můžete jednoduše vyzkoušet, jestli vám zvukový modul funguje. Po přetažení programu do mBota a aktivaci program svítí červenou LED a čeká na stisk hřbetního tlačítka. Ještě předtím ovšem inicializuje (softwarově zprovozní) zvukový modul.
Po stisku tlačítka (je třeba jen krátce stisknout) se rozsvítí LED zeleně a mBot přehraje zvukový soubor test.mp3. Pokud neprovedete nějaké změny na zvukových souborech v SD kartě, měl by vám zvukový modul přehrát slovo „test“. Tělo programu je vloženo do nekonečné smyčky, čili si výsledek tohoto demonstračního programu můžete klidně několikrát vyzkoušet.
Program Sound blocks 1 2 3
V tomto programu jsem vám chtěl ukázat další specifikum při práci se zvukovým modulem ME Audio Player. Při rozsáhlejších programech (o kterých bude řeč v dalším dílu) je běžné skládat k sobě více hlášek z různých souborů.
Program klasicky začíná inicializací zvukového modulu, načež se jeho činnost překlopí do nekonečné smyčky. Rozsvítí se červené světlo a po stisku hřbetního tlačítka (a rozsvícení zelené LED) se přehrají hlášky „jedna – dva – tři“, pak se opět rozsvítí červená LED. V podstatě je tento program rozvinutější verzí předchozího programu. Jediným rozdílem je, že tento program přehrává a spojuje zvukový výstup ze tří různých souborů.
Pro funkčnost tohoto programu jsou klíčové vložené časové intervaly (blok čekej). Pokud tam tyto časové intervaly nebudou, celá sekvence se vám přehraje s chybami, nebo vůbec. Blok play music totiž nijak nemá ošetřené zjištění délky potřebné pro přehrání zvukového souboru a nastavení tomu odpovídající časové prodlevy v chodu programu. Bez časových intervalů na činnost se vám přehraje první zvukový soubor, program mezitím plyne dál a než se soubor dohraje na konec stopy, plní již program jiné příkazy a nemůže přehrát zvukové soubory vložené do programu bezprostředně za prvním zvukovým souborem.
Tento problém lze vyřešit časovým intervalem zařazeným za každý přehrávaný zvukový soubor, který dokáže pozastavit chod programu, než se zvuk přehraje. Pochopitelně je třeba odladit a nastavit délky intervalů podle délky zvukové stopy na jednotlivých souborech.
Program Save in File
Ukázali jsme si jak přehrát zvukový soubor a nyní je na řadě předvést si i jak do souboru nějaký ten zvuk nahrát.
Po úvodní inicializaci dál tento program pokračuje třemi postupnými kroky, které jsou vždy odstartovány stiskem tlačítka na hřbetě mBota. Po prvém stisku se červená signalizační LED změní na zelenou (kontrolka na zvukovém modulu začne poblikávat) a modul zaznamenává do souboru zvuk přijímaný mikrofonem (je lepší mluvit hodně zblízka). Dalším stiskem ukončíte nahrávání. Třetím stiskem se nahraný soubor spustí a vy si můžete záznam pro kontrolu poslechnout.
Tento program můžete také využít podobně i jako já pro zaznamenání své vlastní kolekce hlášek. Změníte-li jméno souboru (na obou místech v programu) a nahrajete-li co potřebujete – program to uloží do nového souboru, i když na kartě soubor s tímto jménem nebyl. Modul prostě vytvoří nový soubor pod zadaným názvem.
Těším se na setkání s vámi v dalším díle, kde si zkusíme nějaké složitější prográmky ve spojení s modulem zvuku.
Pamatujete si na Tamagoči? V roce 1996 opanovala japonský trh a od roku 1997 se pustila tato digitální zvířátka do dobývání světových trhů. Koncept byl jednoduchý a přitom neuvěřitelně chytlavý: Staráte se o digitální zvířátko, které čas od času vyžaduje nějakou zvláštní péči, jako je pohlazení, nakrmení či hraní. Stačila tři tlačítka a mohli jste se vrhnout do zkoumání, jak moc špatnými jste opatrovníky domácích mazlíčků – protože, co si budeme nalhávat, většina digitálních zvířátek podlehla následkům zanedbání péče.
Proč o tom mluvím? Měl-li bych se držet tradice, začnu vám nyní nudně líčit tak zajímavé věci, jako jako je využití zabudovaných senzorů na desce micro:bitu. Upřímně mám ale pocit, že to je cesta, kterou se vydali už mnozí přede mnou a komu to vyhovuje, ten už si cestu k informacím našel. Já ale raději využiji možnosti předvést jednotlivé senzory na konkrétním použití. A taky jsem slíbil, že se podíváme, jak zabudovat micro:bit do stavebnice LEGO, a tohle je skvělá příležitost! Vzhůru do stavby mikrobití tamagoči ovečky!
Inventář čili Co budeme potřebovat
Ještě než se pustíme do samotného projektu, pojďme si říct, jaké vybavení budeme potřebovat:
držák pro dvě tužkové baterie AAA s kabelem pro micro:bit a vypínačem – sestavení ovečky je navrženo na míru průhlednému držáku z dílny ELECFREAKS, použitelné budou jistě i další, ale možná bude třeba mírně upravit konstrukci;
USB kabel s koncovkou micro-USB pro stažení programu;
kostky LEGO na stavbu ovečky, všechny potřebné je možné najít například v sadě LEGO Minecraft 21153;
magnet – měl by posloužit jakýkoli, kdo však chce být stylový, může použít žlutou magnetku z příslušenství LEGO 853915;
kapesní svítilna – použít můžete i chytrý telefon.
Samozřejmě nesmíme zapomenout na baterie! Počítač micro:bit má relativně nízkou spotřebu, takže klasické baterie vydrží poměrně dlouho, ale je možné použít i dobíjecí baterie. Já osobně preferuji ty dobíjecí, protože na rozdíl od klasických baterií se neroztékají, když je zapomenete v držáku – tzv. battery boxu – pár měsíců bez využití. Je však potřeba vás upozornit, že dobíjecí baterie poskytují o něco menší napětí, což se může projevit například o něco nižší intenzitou osvětlení rozsvícených LED nebo zhoršenou funkčností micro:bitu při využití zařízení s větším odběrem. Omezen může být také rádiový dosah.
Osobně se mi ještě nepovedlo ho do takové konfigurace dostat, nicméně je mou povinností zopakovat, že výrobce doporučuje využívat k napájení micro:bitu dvě tužkové baterie s napětím 1,5 V.
Budovatelské intermezzo aneb stavíme LEGO
Jestli jste jako já, tak se v tuto chvíli nemůžete dočkat, až rozbalíte kostičky LEGO a začnete skládat za doprovodu důvěrně známého cvakání! Mám pro vás dobrou zprávu: Teď je ten okamžik, kdy tamagočimu vtiskneme tvar ovečky – návod si můžete stáhnout přímo zde:
Nakonec už jen stačí vložit baterie do držáku, ten zasunout ovečce do bříška a připojit baterie do odpovídajícího konektoru – to byste měli vidět na úvodní stránce návodu.
Základní schéma chování aneb trocha nalejvárny
Kód programu je vlastně způsob, jak popsat stroji pro něj srozumitelným jazykem, co chceme, aby vykonával. Jde ho tedy přeložit do lidské řeči, ale i obráceně, čehož se pokusíme využít v tomto návodu. Nejdřív si pojďme ujasnit základní schéma chování našeho tamagočiho. K tomu nám pomůže následující diagram:
To ale nevypadá moc jako lidská řeč, že? Pojďme tedy diagram přeložit:
Na začátku je tamagoči ovečka spokojená.
Když je ovečka spokojená, po chvíli začne pociťovat náhodně zvolený nedostatek nějaké potřeby.
Ovečka dá najevo svou potřebu a chvíli čeká, jestli bude naplněna, či nikoli.
Pokud je potřeba naplněna, ovečka je spokojená. Dále postupuj podle „Když je ovečka spokojená, …“
Pokud potřeba není včas naplněna, ovečka umře. I digitální svět je někdy krutý.
Z těchto bodů už můžeme vyčíst, kromě toho, že naše ovečka je věčně nespokojená, že základ programu bude spočívat v přepínání mezi jednotlivými náladami. K formalizaci tohoto přepínání se vysloveně nabízí událost <forever>, která bude neustále monitorovat, v jaké náladě se tamagoči ovečka nachází a podle toho upravovat její chování. Zde je ideální příležitost prozkoumat záložku Logic!
záložka Logic
Jak si můžete všimnout, je rozdělena do několika sekcí. První jsou Conditionals čili podmínky. Zde se nacházejí dvě varianty velmi důležitého bloku, se kterým budeme pracovat vždy, když bude potřeba se rozhodnout mezi různými možnostmi pokračování.
Tento blok ověřuje, zda byla splněna podmínka, která je uvedena v šestiúhelníkovém poli za IF. Pokud je splněna, provede se kód, který je uveden v sekci THEN. Pokud splněna není, provede se kód, který je v sekci ELSE. Když však v případě nenaplnění podmínky nechceme provádět nic, můžeme vynechat celou sekci ELSE, což zobrazuje zjednodušená verze bloku nahoře.
Ale co když se, jako v našem případě, potřebujeme rozhodnout mezi více variantami? Můžete si všimnout, že na bloku je symbol plus v kroužku: Když na něj kliknete, přidá se další řádek. Pokud nebyla obsažena, přidá se nejprve sekce ELSE, potom se začnou pod sebe přidávat sekce ELSE IF obsahující další šestiúhelníkové políčko pro podmínku. Je však dobré mít na paměti, že podmínky se vyhodnocují v tom pořadí, v jakém jsou uvedeny shora dolů. Uvedené informace se nám rozhodně budou při stavbě tamagoči parťáka hodit.
Nejlepší bude uvést si příklad: Chceme určit, jestli se číslo x nachází v (uzavřeném) intervalu od -5 do 5. To můžeme provést například touto podmínkou:
V prvním kroku vyhodnotíme, jestli je číslo x větší než pět. Pokud ano, pak víme, že v intervalu není.
V druhém kroku vyhodnotíme, jestli číslo x menší než mínus pět. Opět, pokud je, pak víme, že v požadovaném intervalu není.
A protože k sekci else se dostaneme jen v případě, že obě předchozí podmínky nebyly splněny, víme, že číslo není ani větší než pět, ani menší než mínus pět, což znamená, že se musí nacházet v našem hledaném intervalu!
Náš příklad nám předvedl i další bloky. Podmínky byly určeny pomocí porovnání hodnot, tedy bloků ze sekce Comparison. Jak už jsme si řekli, podmínky se vkládají do šestiúhelníkových polí. Ta označují výrazy, které mohou nabývat jen hodnot „true“ nebo „false“, tedy „pravda“ nebo „nepravda“. Tomuto typu výrazů se říká boolean či booleovské výrazy[ 1 ].
Všimněte si zaoblených bloků, do kterých vkládáte porovnávané hodnoty – může se jednat o číselné hodnoty, případně řetězce znaků. Pokud chceme, aby se s hodnotou zacházelo jako s řetězcem znaků, je třeba ji vložit do uvozovek „“. To se hodí například v případě, kdy byste potřebovali z nějakého důvodu pracovat s čísly jako s textem. Čísla a řetězce znaků nelze navzájem porovnávat.
V sekci Boolean nalezneme logické operace prováděné s booleovskými výrazy pomocí logických spojek. V logice používáme slovo spojka trochu šíře než v přirozeném jazyce. Kromě nejběžnějších binárních spojek, které spojují dva výrazy, máme i spojky unární, tedy spojky, které nějak ovlivňují jen jeden výraz.[ 2 ]
Spojka AND je logická konjunkce, výrok je pravdivý pouze v případě, že levý i pravý výrok jsou také pravdivé.
Někoho však může může mírně zmást spojka OR, logická disjunkce. V přirozeném jazyce ji obvykle vyjadřujeme spojkou NEBO – ta se však v češtině dá interpretovat dvěma způsoby – jako vylučovací spojka, nebo jako slučovací spojka. A stejně tak logika rozlišuje exkluzivní disjunkci a inkluzivní disjunkci. Abych tu příliš nemachroval cizími slovíčky, zestručním výklad: tyto spojky se liší v tom, zda mohou nastat oba případy.
Ve větě „Mám Ti objednat šunkovou pizzu, nebo havaj?“ nepředpokládáme, že by si dotazovaný chtěl objednat oba druhy pizzy. Stejně tak v případě věty „Stavím se v úterý, nebo ve středu.“ nepředpokládáme, že by mluvčí dorazil/a v úterý i ve středu. To je vylučovací použití spojky nebo – všimněte si, že v psané podobě před spojkou nebo potom píšeme čárku. To je exkluzivní disjunkce a v informatice se pro nic vžilo označení XOR.
Pokud ale někde uvidíme ceduli hlásající „otevřeno jen o víkendech nebo o prázdninách“, jedná se o slučovací použití spojky nebo – poměrně dobře si můžeme představit, že nastane situace, kdy je víkend a zároveň prázdniny. V logice pak říkáme, že se jedná o inkluzivní disjunkci a považujeme ji za základní podobu disjunkce. Pokud tedy mluvíme jen o disjunkci, označovanou tradičně OR, jedná se o tuto, inkluzivní, variantu.
Spojka NOT nám vrátí opačnou hodnotu, než kterou má vložený booleovský výraz. Pokud tedy vložíme pravdivý výraz, dostaneme výraz s hodnotou FALSE a obráceně, pokud vložíme nepravdivý výraz, dostaneme výraz s hodnotou TRUE.
[ CVIČENÍ 1 ] Výrazy lze libovolně vnořovat do sebe. Uměli byste pomocí spojek AND, OR a NOT utvořit podmínku, která by vracela stejný výsledek jako spojka XOR? Napovím, že k řešení vás může dovést, když dobře popíšete, čím se spojka XOR liší od spojky OR.
TRUE a FALSE jsou logické konstanty. Pokud je vložíme do podmínky, říkáme, že daná podmínka je vždy pravdivá, případně není pravdivá nikdy.
záložka Variables
V našem příkladě, kde jsme zjišťovali, zda se číslo nachází v intervalu, jsme toto číslo označovali x. V matematice bychom ho někdy označili za neznámou, případně za proměnnou. Právě označení proměnná se používá i v programování. Jedná se o způsob, jak si pojmenovat prostor v paměti, kam si uložíme nějakou hodnotu. Jistě to znáte ze školy, kde vzorečky pracují neustále s proměnnými – třeba obsah obdélníka je určený vztahem S = a . b, kde S je označení pro plochu, v našem případě obsah obdélníku, a a a b jsou délky stran.
Při programování tamagoči ovečky bude využití proměnných důležité, proto se teď podíváme, jak se s nimi v prostředí MakeCode pracuje.
Když si v novém projektu otevřete záložku Variables, uvidíte jen prázdnou záložku s rámečkem Make a Variable… Když na tento rámeček kliknete, vyzve vás prostředí k pojmenování nové proměnné. Tím ji vytvoříte. Jakmile se tak stane, objeví se tato proměnná v nabídce záložky jako zaoblený blok. Dále se pod výčtem proměnných objeví další dva bloky, které můžete přidat do kódu.
Blok <set [variable] to [value]> přiřadí proměnné konkrétní hodnotu. Všimněte si, že hodnota je v zaobleném rámečku a můžete do ní vnořovat libovolné zaoblené bloky – pokud tedy chcete novou hodnotu vypočítat z jiných proměnných, můžete do tohoto rámečku vložit formuli pro výpočet:
Blok <change [variable] by [value]> je zkrácený zápis pro jednu z nejčastěji využívaných operací a tou je zvýšení hodnoty proměnné, nejčastěji o jedna. Pokud byste však potřebovali naopak odečítat, prostě zadejte do hodnoty záporné číslo.
Pokud jste si dobře prohlédli postup, kterým jsme zjišťovali, zda je číslo v požadovaném intervalu, jistě vás zarazilo, že jsme proměnné InInterval, jejíž hodnota má zaoblený rámeček, přiřadili booleovský výraz, který má šestiúhelníkový rámeček. Prostředí MakeCode vám povolí vložit šestiúhelníkové bloky do zaoblených rámečků, zároveň však kontroluje, zda to někde nevyvolá chybu.
Pokud chcete, aby proměnná nesla hodnotu typu boolean, musíte se k ní tak chovat v celém kódu. Můžete si vyzkoušet, že když se pokusíte přiřadit do stejné proměnné jednou hodnotu typu boolean a jindy číslo, objeví se vám u všech bloků, které s proměnnou pracují trojúhelník s vykřičníkem.
Stavíme tamagočimu kostru programu
Když za sebou máme další kolo povinné teorie, můžeme se vrhnout do budování kostry našeho programu. Proč říkám kostry? Ovečka ve stylu tamagoči už je poměrně rozsáhlý program a proto se vyplatí kód budovat po menších krocích. Ty pak vyzkoušet, že fungují přesně, jak mají, a teprve pak začít přidávat další části.
Začneme tím, že si vytvoříme nový projekt, který si pojmenujeme tak, abychom poznali, o jaký program jde – navrhuji jméno Ovecka.hex, abychom se vyhnuli případným potížím s diakritikou.
Když si vezmeme k ruce výše uvedený diagram, uvidíme, že srdce, které pohání celý náš program, je přepínání mezi jednotlivými náladami. Nabízí se nám řešení, když blok <forever> bude neustále ověřovat, jakou má ovečka zrovna náladu, a podle toho měnit její chování. Pro zjištění aktuálního stavu nálady využijeme proměnnou – pojmenujme si ji mood. Pro snadnější práci s touto proměnnou přiřaďme jednotlivým náladám číslo:
0
dead
1
happy
2
hungry
3
gloomy
4
scared
[ TIP ] Doporučuji si význam těchto čísel vložit do komentáře. To uděláte tak, že kliknete pravým tlačítkem na blok, ke kterému chcete přidat komentář a zvolíte Add Comment.
Rovnou můžeme zajistit, že jakmile ovečku zapneme, bude spokojená. To zajistíme tak, že v bloku <on start> nastavíme hodnotu proměnné mood na 1. Výsledek by pak měl vypadat nějak takto[ 3 ]:
Dobrá, program už ví, jakou náladu tamagoči ovečka má, ale pro nás je to stále záhada. Pro přímé zobrazení stavu můžeme využít LED matice – stačí, když si pro každou náladu zvolíme nějaký obrázek, který nám ji pomůže identifikovat. Já vybral následující označení: mrtvá ovečka – obrázek lebky, šťastná ovečka – obrázek srdíčka, hladová ovečka – obrázek otevřené pusy, zádumčivá ovečka – obrázek deštníku, vystrašená ovečka – obrázek ducha.
Přiřaďme každému stavu zobrazení odpovídajícího obrázku… A v tuto chvíli máme permanentně spokojenou ovečku, protože nemáme nic, co by změnilo její tamagoči náladu.
Podle diagramu šťastné ovečce vyvstane náhodně zvolená potřeba – jak to přeložit do kódu? Potřeba vlastně odpovídá konkrétní náladě. A v tuto chvíli se zdá, že jsme si docela šikovně zvolili reprezentaci nálad jako číselnou hodnotu. Takže pokud víme, že když je ovečka šťastná, má její nálada hodnotu 1, a nálady vyjadřující nějakou potřebu mají hodnoty 2, 3, nebo 4, pak nejjednodušší způsob reprezentace potřeby bude zvýšit hodnotu nálady o náhodně zvolené číslo od jedné do tří.
Pro vygenerování náhodného čísla slouží blok <pick random [number] to [number]>, který najdeme v záložce Math. Levé číslo určuje minimální zvolenou hodnotu, pravé číslo maximální možnou volbu. Pokud vložíme celá čísla, bude i náhodné číslo celé. Pokud tedy chceme zvýšit hodnotu proměnné náhodně o 1-3, poskládáme bloky takto: <Change [mood] by <pick random [1] to [3]>>. Výsledný blok vložíme do podmínky za obrázek srdíčka.
V tuhle chvíli nám ale ovečka s tamagoči povahou změní náladu ihned poté, co je spokojená, ale my bychom přeci jen rádi, aby nějakou chvíli spokojená vydržela. Toho docílíme tak, že mezi blok zobrazení obrázku a blok nastavující novou hodnotu vložíme blok <pause>. Ten najdeme v záložce Basic, jak jsme se dozvědeli v dřívějším článku. Krátká přestávka nám umožní trošku si odpočinout od neustálého napětí, co bude zase ovečka vyžadovat.
Abychom se však udrželi ve střehu, mohla by být i délka pauzy náhodná – řekněme mezi jednou a dvěma sekundami. Protože blok <pause> udává přestávku v milisekundách, bude výsledek vypadat takto: <pause <pick random [1000] to [2000]>>. Samozřejmě že pokud vám bude připadat přestávka příliš krátká, či naopak příliš dlouhá, můžete hodnoty upravit.
V současné chvíli máme ovečku, která se nám po spokojené chvilce přepne do stavu neustálé potřeby – do které, to je zvoleno náhodně. Bylo by tedy záhodno, aby se nám ovečka vracela do dobré nálady. Pojďme tedy sestavit podmínku, která řekne, že pokud je zmáčknuto tlačítko B, nastavíme náladu na happy, tedy na hodnotu 1, pokud ale bude potřeba, můžeme zmáčknout tlačítko A, čímž nastavíme hodnotu 0 a tamagoči ovečka se nám odebere na věčnost. Zda je zmáčknuté tlačítko zjistíme pomocí bloku <button [] is pressed>, který najdeme v záložce Input. Výsledná podmínka bude vypadat takto:
<if <button [B] is pressed> then <set [mood] to [1]> else if <button [A] is pressed> then <set [mood] to [0]> >
Nyní tuto podmínku vezměme a zduplikujme ji za obrázek v každém ze stavů 2, 3 a 4. Duplikování bloku, včetně bloků vnořených, provedeme tak, že klikneme pravým tlačítkem na blok a zvolíme možnost Duplicate. Zde si můžete prohlédnout, jak by měl vypadat náš aktuální kód pro tamagočiho:
Máme hotovou kostru programu, takže se můžeme kochat, jak se nám mění ikonky nálady našeho tamagočiho. V příštím díle našeho seriálu se naučíme vytvářet samostatné funkce, které nám kód rozdělí do ještě menších bloků a tím ho zpřehlední.
[ 1 ] Booleovské výrazy jsou pojmenovány po matematikovi Georgi Booleovi, anglickém matematikovi a logikovi (někdy se uvádí, že irském, což je způsobeno tím, že se narodil irským rodičům žijícím v anglickém Lincolnu). V současnosti si jeho jméno spojujeme nejčastěji s booleovskými algebrami, což jsou algebraické struktury, nejčastěji nad dvouprvkovou množinou. Tyto dva prvky můžeme identifikovat například se stavy zapnuto-vypnuto či pravda-nepravda.
Tato zdánlivě velmi abstraktní konstrukce sehrála obrovskou roli ve vývoji počítačů: Když začali inženýři někdy v první polovině 30. let 20. století zkoušet propojení mnoha relé do soustavy reléových počítačů, ještě si neuvědomovali souvislost právě s operacemi nad hodnotami zapnuto-vypnuto. A přestože výsledek občas vyhodil pojistky, někdy dokonce shořel obvod, díky zkušenostem inženýrů tyto počítače většinou fungovaly.
V roce 1936 však na místo asistenta na Massachusettském technologickém institutu (slavném MIT) nastoupil Claude Elwood Shannon, který hned v roce 1937 obhájil možná nejvlivnější magisterskou diplomovou práci v historii, kde ukázal využití booleovských algeber při návrhu reléových sítí. S nadhledem sobě vlastním pak údajně zdůvodňoval svůj úspěch tím, že shodou okolností byl jediný, kdo ovládal obojí tématiku – tedy jak reléové sítě, tak booleovské algebry. Mimo jiné tak jméno George Boolea nejspíš navždy vložil do slovní zásoby informatiky.
[ 2 ] Z čistě formálního hlediska můžeme mít i tzv. nulární spojky, častěji je však nazýváme logické konstanty, protože se nespojují s žádným výrazem. V našem případě se tak jedná o bloky TRUE a FALSE. Nahlížet na ně jako na spojky nám někdy může pomoct nahlédnout jejich využití ve složených výrazech – jedná se ale do značné míry o vysoce abstraktní záležitost a pokud z toho máte zamotanou hlavu, tak se tím v tuto chvíli netrapte a přijměte to prostě jako poznámku pod čarou.
[ 3 ] Měli byste se nyní podivovat, jak se mi podařilo vytvořit podmínku, která obsahuje několik sekcí ELSE IF, ale neobsahuje sekci ELSE. Toho docílíte tak, že jakmile vytvoříte všechny požadované sekce ELSE IF, kliknete na odebrání sekce ELSE. Samozřejmě, že ji můžete odebrat i dřív, ale jakmile přidáte další sekci, vždy se přidá nejprve ELSE a teprve potom se začnou vytvářet další podmínky.
Nejspíš vidíte, že kód nám začíná bobtnat a stává se nepřehledným. A navíc tu máme opakující se části kódu, které jsme vložili pokaždé znovu – nešlo by alespoň s těmi opakujícími se částmi kódu udělat něco, abychom je nemuseli neustále vypisovat znovu? Ale samozřejmě, že s tím něco jde udělat – a dokonce bych vám velmi doporučoval, abyste to udělali.
podprogramy a kde je najít
Nastal čas na trochu té teorie – poprosím vás však o trpělivost, tahle část je důležitá: Podprogramje označení pro znovupoužitelnou část programu, kterou můžeme volat z jiných částí kódu. Je možné ji doplnit i o různé parametry. (Pamatujete ještě, jak jsme minule nastavovali hodnotu proměnné S jako výpočet S = a . b? Mohli bychom se na tuto proměnnou koukat jako na podprogram výpočtu obsahu obdélníku a a a b by byly parametry.)
Nejběžnější způsob tvorby podprogramů je pomocí funkcí. Vytvořme proto pro opakující se část kódu samostatnou funkci, jíž zavoláme vždy, když bude třeba. Obrovskou výhodou je, že pokud bychom v budoucnu chtěli změnit průběh této funkce, pak ji máme definovanou na jednom místě a nemůže se nám stát, že některý její výskyt zapomeneme upravit! Stejně můžeme využívat proměnných (jak jsme si ukázali na příkladu výpočtu obsahu obdélníku) – tam ale voláme jen hodnotu, kdežto funkce volají spuštění určitého kódu.
záložka Functions
Abych vás ale neunudil, chápu, že se už chcete zase vrhnout do dalšího programování, pojďme se tedy podívat kde funkce najdeme a jak je vytvoříme:
Podobně jako u proměnných, i funkce je nejprve třeba vytvořit, než se nám nabídnou další bloky v záložce Functions. Když spustíme Make a Function…, spustí se okno editace funkce – do pole doSomething vepíšeme název funkce. Nahoře pak máme nabídku Add a parameter, kde si můžeme vybrat, jaký typ parametru vyžadujeme. Funkce nemusí mít žádný parametr, ale může jich mít libovolné množství. Obecně je ale velmi vzácná situace, kdy bychom potřebovali více jak dva parametry, navíc větší množství parametrů velmi znesnadňuje porozumění kódu.
Jakmile vytvoříme nějakou funkci, nalezneme v záložce Functions další bloky konkrétně bloky <call _jméno_funkce> a blok <return [value]>. První jmenovaný slouží k zavolání funkce v kódu a jeho využití je dost zřejmé. Blok <return> je zajímavější – pokud chceme, aby funkce sloužila k navrácení hodnoty, je třeba ukončit všechny větve jejího programu právě tímto blokem.[ 4 ]
[ CVIČENÍ 2 ] Zkusme nyní vzít podmínku z předchozího cvičení a přetvořit ji ve funkci XOR, která bude mít dva parametry typu Boolean a bude vracet hodnotu TRUE nebo FALSE.
Pojďme se podívat, jestli bychom nedokázali náš kód trochu zpřehlednit pomocí funkcí. Rozhodně bychom měli vytvořit funkci pro onen opakující se kus kódu. Jde vlastně o vyhodnocení spokojenosti, takže bychom ji mohli pojmenovat evaluation. A když už jsme v tom, možná by nám rozhodovací proces zpřehlednilo i to, že každé náladě vytvoříme vlastní funkci. Tak pojďme na to – až vše vytvoříme, měla vaše nabídka záložky Functions vypadat takto:
Můžeme si zvolat hurá, protože v tuto chvíli má náš program už funkční kostru! A snad mi uvěříte, že takto rozčleněný kód je o něco přehlednější, než předchozí podoba:
Obalujeme tamagočimu kostru programu masem
Výborně – to nejhorší máme snad už za sebou a nyní je potřeba postupně vyřešit jednotlivé stavy nespokojenosti ovečky tamagoči. V mnoha ohledech jsou si podobné – vždy půjde o zjišťování, jestli byla daná potřeba naplněna, či nikoli. A samozřejmě nemáme neomezený čas na to, abychom potřebu naplnili.
Dobře – možná jsem se mýlil a tohle bude ta nejnáročnější část na abstrakci. Musíme totiž sestavit takovou podmínku, která bude kontrolovat dvě věci zároveň – jednak jestli byla naplněna potřeba a ta druhá, jestli už neuběhlo příliš mnoho času. Tady bychom měli trošku vystoupit ze své ulity a podívat se na to, jak měřit čas – micro:bit sice umí měřit čas, ale zároveň nemá žádný přímočarý časovač, který by šlo jednoduše zkontrolovat. Tak si pojďme jeden takový vytvořit! Ale jak to udělat? Co se třeba ptát pořád dokola, jestli je potřeba naplněna a měřit při tom, kolikrát jsme se už zeptali? To by jako určité počítadlo času mohlo fungovat, ne?
Formalizovat to můžeme například pomocí cyklů ze záložky Loops a vybereme <while [boolean] do>. Tento cyklus funguje tak, že jakmile dojde kód k tomuto bloku, provede kontrolu zadané podmínky – pokud je pravdivá, provede se kód uzavřený v tomto bloku a vrátí se zpět k vyhodnocení této podmínky. To se bude dít tak dlouho, dokud bude zadaná podmínka pravdivá.[ 5 ]
Počet průchodů můžeme počítat například tak, že si zavedeme proměnnou „counter“, které před začátkem cyklu nastavíme hodnotu 0 a v každém průchodu cyklem ji zvýšíme o jedna. Teď ještě potřebujeme počet průchodů porovnat s hodnotou, která nám říká, kolik času máme. Vzhledem k tomu, že velikost této hodnoty určuje náročnost splnění úkolu, pojmenujme si tuto hodnotu jako proměnnou difficulty. A nezapomeňme ji rovnou nastavit v události <on start> – ze svých zkušeností mohu doporučit hodnotu 25. Pokud chcete obtížnější hru, zvolte nižší hodnotu, pokud naopak potřebujete lehčí obtížnost, hodnotu zvyšte.
A aby ke kontrole nedocházelo zbytečně často, dejme v každém průchodu pauzu 100 ms. Teoreticky by se nic nestalo, ale každá kontrola nám spotřebovává nějakou energii a celkově příliš častou kontrolou zahlcujeme výkonnou jednotku, je tedy dobré se naučit dát stoji chvilku oddechu. Výsledek by měl vypadat asi takto:
Jenže to je pouze jedna část podmínky – my potřebujeme, aby cyklus ukončilo i naplnění potřeby. Budeme tedy muset podmínku upravit na složený výraz – a to pomocí logické spojky AND. Osobně považuji za přehlednější zároveň použít spojku NOT, kde nám potom vznikne výraz < <NOT [boolean]> AND <counter < difficulty> >. Do chybějícího výrazu u spojky NOT později budeme vkládat výraz vyjadřující naplnění konkrétní potřeby.
Po této úpravě bychom měli získat následující kód, který vložíme do každé z funkcí hungry, gloomy a scared před blok <call evaluation>:[ 6 ]
funkce evaluation
Nyní nadešel čas zásadně přepsat funkci evaluation – doteď jsme pro naše potřeby určovali, zda došla ovečka spokojenosti, stisknutím tlačítka. Teď už jsme ale nechali proběhnout cyklus, který byl ukončen v jednom ze dvou případů – buď byla naplněna potřeba, nebo vypršel čas a hodnota proměnné counter dosáhla hodnoty proměnné difficulty. Už z tohoto slovního popisu je myslím celkem zřejmé, jak zjistíme, který případ nastal: Prostě porovnáme velikost zmíněných proměnných a pokud bude counter menší než difficulty musí být tamagoči spokojený! A co je skvělé, je skutečnost, že to platí pro všechny potřeby!
Nová evaluační funkce se tak bude skládat s poměrně jednoduché podmínky, která rozhodne, zda je ovečka tamagoči šťastná či mrtvá (jak velká odpovědnost je vložena do této pomocné funkce!):
[ TIP ] Předpokládám, že po rozdělení na jednotlivé funkce je i pro vás kód nyní přehlednější. Nevím o žádné obecně uznávané teoretické poučce, jež by říkala, v kterém okamžiku je třeba kód rozdělit na menší podčásti, mohu se však podělit o přístup mého vyučujícího ze střední školy: „Jedna část kódu (v našem případě funkce) by se měla vejít na obrazovku, abychom se v ní neztratili.“
Dnešní lekce na tomto místě končí – podařilo se nám kostru tamagočiho z minula obalit jednotlivými funkcemi, vytvořit jednotnou evaluaci a to, co našemu tamagočimu chybí k životu je schopnost vnímat okolí. Právě tu potřebujeme k tomu, abychom u funkcí jednotlivých nálad mohli vyplnit klíčovou podmínku a prošli evaluací pozitivně. Téma následující části našeho seriálu je tedy jasné: čtení dat ze senzorů.
[ 5 ] Všimněte si, že pokud jako podmínku zadáte logickou konstantu TRUE, bude cyklus vykonávat, dokud bude mít micro:bit přísun energie, nebo ho neresetujete. Pokud naopak nastavíte jako podmínku konstantu FALSE, celý cyklus se přeskočí.
[ 6 ] Já vím, já vím – zase se nám tu opakuje kus kódu. Problém v tomto okamžiku je v tom, že potřebujeme, aby se při každém průchodu znovu naměřila hodnota z odpovídajícího senzoru – mohli bychom sice vytvořit funkci, které bychom předali tuto hodnotu jako parametr, ale problém je přesně v tom, že od okamžiku, kdy se parametr předá, už to bude hodnota, nikoli příkaz k jejímu naměření. Pokud by však někdo přišel na elegantnější řešení, které by umožnilo v prostředí MakeCode neopakovat kód této podmínky, budu rád, když se o něj podělíte v komentářích!
V první části tohoto seriálu jsme se pustili do stavby tamagočiho v podobě ovečky ze stavebnice LEGO. Nakreslili jsme si základní schéma chování a sestavili rozhodovací kostru našeho programu. Druhá část nám ukázala, jak sestavit rozdělit kód do podprogramů – tzv. funkcí a tím ho zpřehlednit. Tentokrát si ukážeme, jak se může program rozhodovat na základě informací vyčtených ze senzorů.
Ovečka se učí čití
Také u vás ve škole při výuce základních psychologických pojmů lpěli na znalosti slova čití? Jedná se o velmi archaický výraz pro vnímání počitků vyvolaných působením podnětů na smyslové orgány. Ta definice asi není o moc lepší – v zásadě se jedná o schopnost vnímat informace ze smyslových orgánů, což v případě robotů znamená ze senzorů. A přesně to je to, co nám chybí k tomu, abychom našeho tamagočiho přivedli k životu: schopnost číst informace ze zabudovaných senzorů. Pro každou z potřeb pak stanovíme nějaká kritéria, jak změřit její naplnění.
Jak nakrmit ovečku magnetem
Začneme pěkně z ostra – copak asi jí robotická ovečka? No přece magnetické seno, to dá rozum! A je dokonce celkem nenáročná, stačí ji chvíli vystavit působení dostatečně silného magnetického pole a je spokojená – ovečka se najedla a magnet zůstal celý! (Což je jedině dobře, protože kdyby nám tamagoči magnety spotřebovával, asi by nám brzy zemřel hlady a my bychom si neměli čím připínat na lednici vzkazy, že už zase chybí mléko.)
Magnetické pole budeme zkoumat pomocí elektromagnetického kompasu – to je senzor, který dokáže určit nejen sílu magnetické indukce, ale také směr, odkud přichází a protože naše planeta je jeden velký magnet, dokáže senzor určit i polohu v prostoru, tím že detekuje magnetický pól Země.
Co nám ovšem v tuto chvíli nejspíš brání, abychom vyrazili vstříc lánům magnetického obilí je potřeba kalibrace kompasu. A to i v případě, že chceme měřit jen velikost magnetické indukce.[ 7 ]
Kalibrace magnetického kompasu
Před prvním použitím je třeba kompas zkalibrovat, zároveň je doporučeno učinit tak vždy, když změníme prostředí, ve kterém chceme senzor používat – docílíme tak větší přesnosti.
Jakmile nahrajete program do micro:bitu a pokusíte se číst data z kompasu, spustí se kalibrace, která se oznámí běžícím textem TILT TO FILL SCREEN, čili žádostí o natáčení micro:bitu do doby, než se rozsvítí všechny diody na LED matici.
[ TIP ] Kalibrace je puštěna už během zobrazení běžícího textu, pokud ji chcete urychlit, můžete začít s nakláněním desky ještě před doběhnutím textu.
Jak se měří hlad
Když už máme kompas zkalibrovaný, čekají nás ještě dvě kontrolní stanoviště, než dorazíme do cíle. To první vyžaduje změřit sílu magnetické indukce, to druhé je trochu záludnější: Musíme zjistit, jakou nastavit kontrolní hodnotu, abychom věděli jak stanovit podmínku. Začneme tou jednodušší částí – funkci pro změření magnetické indukce najdeme v záložce Input, kde otevřeme podzáložku … more a tam najdeme blok <magnetic force>.
Jistě jste si všimli, že se jedná o zaoblený blok – to proto, že tato funkce vrací číselnou hodnotu. Skvělé – teď už nám zbývá jenom určit, jak poznáme, že je magnet dostatečně blízko… A v tomto okamžiku doporučuji uložit náš program Ovecka.hex a vytvořit nový, pojmenujme ho například MereniSenzoru.hex.
Měření hodnot na samotném micro:bitu není úplně komfortní, protože jediný přímo vestavěný komunikační nástroj je nám již důvěrně známá LED matice – ale buďme rádi za ni, lze na ní zobrazit běžící text, což sice není nejpohodlnější na čtení, ale přeci jen nám to umožňuje měření hodnot v téměř reálném čase.
Kód našeho měřícího programu bude jednoduchý – do bloku <forever> vložíme ze záložky Basic blok <show number>do kterého uložíme hodnotu magnetické indukce. Pokud chceme, můžeme měření trochu zrychlit, když hodnotu ještě zaokrouhlíme pomocí bloku <round>, který najdeme v záložce Math. Zde je potom výsledek:
V mém případě se magnetická indukce drží pod hodnotou 40 μT, pokud je magnet daleko a dosahují výšin několika stovek, když se magnet přiblíží. Nutno podotknout, že magnet, který používám není nijak silný, takže pokud použijete třeba neodymové magnetky, je možné že dosáhnete mnohem vyšších hodnot.
V mém případě každopádně stačí, když přesáhnu hodnotu 200 μT – je velmi těžké jí dosáhnout toho jinak, než že vložím magnet ovečce pod hlavu, tam kde bychom očekávali ústa.
Nyní se můžeme vrátit do našeho hlavního programu Ovecka.hex a doplnit podmínku do funkce hungy:
[ CVIČENÍ 3 ] Zkuste nyní popřemýšlet, jak upravit náš kód, abyste si mohli vyzkoušet, že měření magnetické indukce funguje tak, jak potřebujeme. Napovím, že poměrně jednoduchá cesta by byla donutit ovečku, aby jako nespokojenost vždy projevila právě hlad.
Jak si posvítit na zádumčivost
Ovečka je nakrmená, mohlo by se zdát, že je vše v pořádku – ale ouha, útočí na ni chmury a upadá do deprese. A to je nebezpečná věc – rozhodně bychom měli zádumčivost rozehnat dříve, než si tamagoči začne do školy nosit benzín a zápalky, nejpozději v okamžiku, kdy začne nabádat Kuncovou, aby na druhý den nechodila do školy.[ 8 ]
A co je osvědčený lék na chmury? Přece dostatek sluníčka! To se nám ovšem replikuje poněkud nesnadno, tak si vystačíme s tím že ovečce pořádně posvítíme do očí, však ona už se dozná… tedy pardon, rozveselí!
Tentokrát nemusíme vůbec nic kalibrovat – stačí, když znovu naměříme hodnoty, tentokrát si však ze záložky Input vybereme <light level>. Při měření hodnot pamatujte, že je třeba mířit na LED matici, která měří intenzitu osvětlení.[ 9 ]
Protože tento návod sepisuji v relativním přítmí, ovečka mi za běžných okolností naměří intenzitu osvětlení 0 – ne že by tu byla tma nebo nebylo vidět, jen množství světla je mimo její rozeznávací schopnost. Když posvítím, jsou hodnoty velmi pohyblivé, ale téměř vždy překračují intenzitu 200 – protože mám rád pěná binární čísla, vyberu si jako mezní hodnotu 192.[ 10 ] Můžeme tedy doplnit podmínku i do funkce gloomy:
Kurz strkání hlavy do písku aneb Kdo se bojí musí pod stůl
Nevím čím to je, ale naše ovečka je občas docela úzkostná – rozhodně to však nemá nic společného s tím, že jí chmury rozháníme svícením do obličeje!
Nicméně se ukázalo, že alespoň v tamagočiho světě platí, že když strčíte hlavu do písku, všechny problémy zmizí! Možná, že předtím, než jsme z kostek postavili ovečku, byl to pštros…
Fajn – ale jak ovečka zjistí, že má hlavu v písku? No dobře, tak si pomůžeme trochou zjednodušení a bude nám stačit, když hlavu natočí směrem k zemi. To zjistí pomocí akcelerometru – to je senzor, který měří zrychlení, tedy akceleraci tělesa, na němž je namontovaný. A jak je dnes již poměrně běžné, dokáže tento senzor měřit zrychlení ve všech třech prostorových osách. To nám umožňuje měřit otřesy a do značné míry i náklon tělesa. Můžeme tak pomocí akcelerometru počítat například kolik jsme ušli kroků. V našem případě ho využijeme pro rozpoznávání gest – ta najdeme opět v záložce Input, konkrétně nás bude zajímat blok <is [] gesture>, který však narozdíl předchozích dvou případů vrací hodnotu typu Boolean.
Volba gest má celkem srozumitelná vyobrazení:
shake znamená zatřesení – dokáže zaznamenat otřesy, například při chůzi,
logo up, logo down, screen up, screen down, tilt left a tilt right měří natočení v některém směru,
free fall detekuje, že micro:bit padá,
3g, 6g a 8g označují velikost naměřeného přetížení, což zjednodušeně můžeme vnímat jako sílu nárazu. Jen pro představu – na největších horských drahách můžete zažít přetížení 4g, vyšší přetížení už necvičeného člověka způsobuje poruchy vidění, 8g je zhruba hranice toho, kdy je člověk schopen provádět koordinované pohyby (podepřenou) rukou bez speciálního obleku. Jedná se tedy o poměrně velká přetížení.
Jak je z obrázku patrné, nás zajímá detekce gesta screen down, které vykonáme tím, že natočíme ovečku obličejem k zemi.
Můžeme se radovat – právě jsme převedli náš úvodní diagram do funkčního kódu!Pro tentokrát se s tím spokojíme, příště se ale podíváme na to, jak bychom mohli kvantifikovat naši úspěšnost, abychom se mohli chlubit, kdo je horší pečovatel o robotická zvířátka!
[ 7 ]Jen pro úplnost – magnetickou indukci měříme v jednotkách zvaných tesla, značka T (pojmenováno po slavném elektrotechnikovi a vynálezci Nikolu Teslovi). A kdo chce oslňovat znalostmi, může si zapamatovat, že jednotka tesla je definována následovně: Homogenní magnetické pole má magnetickou indukci 1 T, působí-li na přímý vodič s aktivní délkou 1 m kolmý k indukčním čárám a protékaný stálým proudem 1 A silou 1 N.
[ 8 ]Kdo neví, odkud chmury vanou, nechť si vyhledá Vyšetřování ztráty třídní knihyz dílny Divadlo Járy Cimrmana. A pokud jste stejně líní číst jako jsem byl v rané pubertě já, existuje i záznam divadelního představení.
[ 9 ]Úroveň osvětlení neměří žádné exaktní jednotky svítivosti – měříme jen míru reakce LED matice na světlo. Ta je vyjádřena v hodnotách 0-255.
[ 10 ]V binární soustavě má tato hodnota zápis 1100 0000.