Quantcast
Channel: Tutoriály – Bastlírna HWKITCHEN
Viewing all 133 articles
Browse latest View live

Soutěž Arduino robotů Student4Automotive

$
0
0

Dne 27.3.2018 proběhla na půdě Fakulty elektrotechniky a informatiky Vysoké školy báňské Ostrava soutěž pro střední školy s názvem Student4Automotive – Soutěž o nejlepší vozítko postavené na platformě Arduino.

Hlavní myšlenkou soutěže bylo zvýšit zájem studentů o tvoření a bastlení orientované do oblasti automotive. Jednalo se o druhý ročník soutěže. V dnešní době hotových výrobků bylo podstatou soutěže jít ke kořenům a vytvořit vlastní produkt od začátku. Jako základní stavební kámen robotů bylo zvoleno jak jinak než Arduino – konkrétně MEGA 2560. Platforma Arduino se hodí právě na realizaci takových projektů díky své univerzálnosti a jednoduchosti použití.

Soutěž byla cílena hlavně na studenty středních škol druhých a třetích ročníků maturitních oborů. S vlastní konstrukcí Arduino vozítka se na start dostavilo celkem 13 týmů. Týmy byly složeny ze tří studentů, jednoho učitele pro koordinaci a zúčastnily se i holky! Školy byly z celého Moravskoslezského kraje (SPŠE Havířov, SPŠOAFM Frýdek-Místek, GaSPŠEI Frenštát pod Radhoštěm, WG Ostrava-Poruba, SSIT Frýdek-Místek, Mendelovo gymnázium Opava, Gymnázium, Ostrava-Hrabůvka, SŠTD Ostrava-Vítkovice, Třinecká obchodní akademie, SŠT Ostrava-Poruba, WG Ostrava-Poruba, Gymnázium OH Ostrava-Poruba, VSG Bruntál).

V čem Arduino roboti soutěžili?

Soutěžilo se ve třech klasických disciplínách: průjezd bludištěm, sledování čáry a sledování čáry s překážkou. Zde jsou oficiální Pravidla soutěže Arduino robotů Student4Automotive a níže už začínají obrázky toho, co si pořadatelé na účastníky nachystali…

Bludiště na soutěži Arduino robotů Student4Automotive

Bludiště na soutěži Arduino robotů Student4Automotive

Čára na soutěži Arduino robotů Student4Automotive

Čára na soutěži Arduino robotů

Přehlídka Arduino projektů a prezentace

Mezi hodnocené disciplíny nepatřily jen dovednosti vozítek na dráze nebo v bludišti. Hodnotily se také technické řešení projektu a prezentace projektu vozítka přímo před hodnotící porotou a všemi návštěvníky soutěže. Níže je pár fotek z těchto prezentací. Nechybělo ani využití PID regulátoru pro řízení pohybu robota.

Rainbow crusher - prezentace Arduino robota

Rainbow crusher – prezentace Arduino robota

Ukázka projektu Arduino vozítka i s kapotou

Ukázka projektu Arduino vozítka i s kapotou

Prezentace projektů řešení Arduino vozítek

Prezentace projektů řešení Arduino vozítek

Prezentace projektů řešení - soutěžily i holky!

Prezentace projektů řešení Arduino vozítek – soutěžily i holky!

Pro soutěžící byly připravené hodnotné ceny ve spolupráci s firmou HELLA AUTOTECHNIK NOVA s.r.o., Allgeier Engineering Czech s.r.o. a samozřejmě e-shopem HWKitchen.cz. Soutěž probíhala pod záštitou projektu ZplesiSiTechniku.cz.

Konstrukce Arduino robotů

Než se podíváme na to, jak to vypadalo v samotné soutěži, tak si projdeme z čeho kromě Arduina byly soutěžní vozítka vyrobeny. Uvidíte sami, že se nejedná o nic složitého a každá část má své definované využití. Nutno ještě podotknout, že i když na začátku dostali soutěžící všechny součásti stejné, jejich výsledky a řešení se v závěru dost lišily. Bylo vidět, že při konstrukci využili své nápaditosti a také se nebáli improvizovat a využít Arduino součástky po svém.

Přehlídka Arduino robotů na soutěži Student4Automotive - detail

Přehlídka Arduino robotů na soutěži Student4Automotive – detail

Ukázka Arduino robotů - vlevo i s kapotou!

Ukázka Arduino robotů – vlevo i s kapotou!

Přehlídka Arduino robotů na soutěži Student4Automotive

Přehlídka Arduino robotů

Seznam součástek pro Arduino vozítko

1 x Arduino MEGA 2560 (originál) – pro řízení celého Arduino robota
1 x Motor driver Shield L293D – pro řízení motorů podvozku vozítka
1 x Robotický podvozek – 4WD Kit (QUAD) – podvozek obsahuje 4 motory
1 x Ultrazvukový měřič vzdálenosti HC-SR04 – snímač vzdálenosti pro detekci překážek
1 x Infra snímač čáry TCRT5000 – Senzor pro detekci čáry
1 x 3osý akcelerometr a gyroskop GY-521 MPU-6050 I2C – pro měření polohy vozítka nebo detekci kolize s překážkou
1 x 4kanálový senzor překážek YL-70 – pro detekci překážek
2 x Propojovací vodiče M/M, 70 ks
2 x Propojovací vodiče M/F, 10 cm, 40 ks
2 x Propojovací vodiče F/F, 50 ks

Průběh soutěže Arduino robotů

Po prvotních neúspěšných pokusech většiny soutěžních týmů, přistoupili pořadatelé k úpravě pravidel. Soutěžícím bylo dáno k dobru 60 minut pro softwarové i hardwarové úpravy robotů a poté se konalo druhé kolo. Úpravy byly potřeba hlavně z důvodu přizpůsobení robotů na závodní bludiště, dráhu a také okolní osvětlení. A nakonec, znáte to sami. Když člověk chce předvést, jak něco krásně funguje, tak to zrovna vůbec nejede :).

Soutěžní týmy získávaly body za čas průjezdu po čáře nebo bludištěm, body za hodnocení řešení vozítka a prezentace, jak tým postupoval při sestavování a programování.

Soutěžící studenti projevili velkou dávku schopnosti pracovat pod bastlířským tlakem s minimem času, protože se úspěšnost projetí soutěžních drah ve druhém kole rapidně zvýšila! Následující fotky a video jsou již ze samotného průběhu ježdění na čáře a v bludišti.

Arduino robot je připraven!

Arduino robot je připraven!

Tunění robota na soutěži Arduino robotů Student4Automotive

Tunění robota na soutěži Arduino robotů Student4Automotive

Arduino robot na startu - Student4Automotive

Arduino robot na startu – Student4Automotive

Tréning na čáře v soutěži Arduino robotů

Tréning na čáře v soutěži Arduino robotů

Tréning na čáře s překážkou

Tréning na čáře s překážkou

Průjezd cílovou čárou na soutěži Arduino robotů

Průjezd cílovou čárou

Bludiště v akci na soutěži Arduino robotů Student4Automotive

Bludiště v akci

Sláva vítězům, čest poraženým

Soutěžící na prvních pěti místech si rozdělili ceny: telefony iPhone 6S, tablety Acer Iconia 10, vývojové kity TinyLab, Arduino MEGA2560 a Arduino Uno.

1. Střední škola informačních techmologií Frýdek-Místek

2. Střední průmyslová škola elektrotechnická Havířov

3. Wichterlovo gymnázium Ostrava

4. Gymnázium a Střední průmyslová škola elektrotechniky a informatiky Frenštát pod Radhoštěm

5. Gymnázium Olgy Havlové Ostrava.

Výherci soutěže Student4Automotive

Výherci soutěže Student4Automotive

Vítězům gratulujeme a těm co se neumístili na hodnocených pozicích stejně významně blahopřejeme k tomu, že si vyzkoušeli zabojovat v zajímavé soutěži a nebáli se jít „s kůží na trh“ a představit vlastní řešení projektu. Jistě se všichni účastníci naučili při přípravě na soutěž hodně nových věcí a získali i cenné zkušenosti, které se hodí v dalším studiu nebo při praktickém využití získaných znalostí.


Robotické sudoku s Arduinem

$
0
0

Ing. Miroslav Tesař nám poslal popis projektu, který se svými studenty uskutečnil na SPŠ Poprad. Děkujeme


Tím:

  • Anton Kornaj – strojár, mechanik pohonov, riadenie krokových motorov 
  • Adrián Hradický – supervízor, kabeláž, výroba DPS, dizajn
  • Lukáš Házy    – efektor, čítanie RFID, IR riadenie
  • Maroš Zvara – riešenie sudoku podľa pravidiel, TFT displej
  • Daniel Smižanský – riešenie sudoku heuristikou
  • Ing. Miroslav Tesař – koordinátor, SPŠ Poprad, Mnoheľova 828, 05846 Poprad

Robotické sudoku rozpozná zadanie herného plánu, nájde riešenie a výsledné riešenie uloží prostredníctvom lineárneho polohovacieho systému zo zásobníku do herného poľa.

Úvod

Robotické sudoku je pôvodné riešenie projektu a podľa dostupných informácií v takejto forme nie je nikde riešené. 

Projekt Robotické sudoku sledoval niekoľko cieľov:

  1. Realizácia náročného projektu tímovou spoluprácou.
  2. Nájdenie programového riešenia hry sudoku akejkoľvek náročnosti pomocou platformy Arduino Mega 2560. 
  3. Vytvorenie základovej dosky pre umiestnenie technológie a ukladanie číselných kameňov do zásobníka a hráčskeho poľa. 
  4. Vyvinutie bezkontaktných číselných kameňov a bezkontaktný systém skenovania týchto kameňov pomocou RFID zabudovaného do efektoru.
  5. Vyvinutie magnetického efektoru pre uchopenie číselných kameňov a ich fyzického ukladania pomocou lineárneho polohovacieho systému.
  6. Ovládanie Robotického sudoku pomocou IR diaľkového ovládača.

Riešenie Robotického sudoku v takej forme podľa našich dostupných informácií nebolo realizované. Jedná sa teda o pôvodné riešenie bez plagiátorstva akejkoľvek jeho časti. Na internetových stránkach sme našli robotické vozidlo, ktoré postupne maľovalo číslice na papier, avšak nemáme žiadne bližšie informácie o tomto projekte. Takisto sa na internetových stránkach nachádza on-line aplikácia na riešenie sudoku.

Projekt Robotické sudoku predstavuje široké spektrum odbornej problematiky od pochopenia hráčskej stratégie, jeho programového spracovania, ovládania a skĺbenia s mechanikou uchopenia a polohovania. Dáva dobré predpoklady k vedeniu študentov k tímovej práci a k pochopeniu väzby človek-problém-program-stroj.

Technické prevedenie

Hardvérové riešenie

Hardvérové riešenie pozostáva z niekoľkých častí:

  • Riadiaca jednotka
    • Riadiacou jednotkou je Arduino Mega 2560, ktoré svojou konfiguráciou predstavuje dostatočnú platformu pre program ako z hľadiska rýchlosti, dostupnej programovej a dátovej pamäti vrátane EEPROM a dostatočným počtom V/V pinov.
Arduino sudoku robot - Riadiaca jednotka

Riadiaca jednotka

  • Herná doska
    • Herná doska predstavuje základnú mechanickú platformu projektu. Je vytvorená z bukového dreva dĺžky 100cm, šírky 64cm a hrúbky 4cm. Na doske sa nachádza herné pole a zásobník. V týchto oblastiach sa nachádzajú vyfrézované otvory priemeru 23mm a hĺbky 6mm v matici 9×9 pre číselné kamene. Dôvodom tohto riešenia bolo presné polohovanie číselných kameňov a ich stabilita v priestore. Ďalej sa na doske nachádza lineárny polohovací systém v X/Y súradniciach na ktorom je magnetický efektor a snímač RFID kódu. Riadiaca jednotka Arduino Mega2560 sa spolu s periférnymi obvodmi nachádza takisto na základovej doske. Tým herná doska vytvára kompaktný prenositeľný systém a predstavuje dobrú orientáciu v hráčskom priestore.
Arduino sudoku robot - Frézovanie otvorov v základovej doske

Frézovanie otvorov v základovej doske

Arduino sudoku robot - Založenie kameňov do zásobníku

Založenie kameňov do zásobníku

  • Lineárny polohovací systém a krokové motory
    • Lineárny polohovací systém je postavený na produktoch firmy Hennlich, ktorý je aj sponzorom tohto projektu. Súčasťou lineárneho polohovacieho systému je stanovenie „nulového“ bodu pomocou optoelektronického systému založenom na obvodoch TCST 1103.
Arduino sudoku robot - Osadenie lineárneho vedenia

Osadenie lineárneho vedenia

  • Číselné kamene
    • Číselné kamene sú vytvorené sústružením dubovej násady na hrable. Vonkajším rozmerom číselných kameňov je priemer 21mm a hrúbkou 4mm. V tomto základe je otvor priemeru 18mm v  hĺbke 2mm a otvor 5mm do hĺbky 1mm. V otvore je uložený neodymový magnet priemeru 5mm a hrúbkou 1mm. Nad ním sa nachádza 18mm RFID 125kHz samolepiaca minca. Tento základ je prekrytý dyhou 3mm, v ktorej je vygravírované číslo v rozsahu 1 až 9.
Arduino sudoku robot - Kameň v rozloženom stave

Kameň v rozloženom stave

  • Efektor
    • Efektor sa skladá z čítacej jednotky 125kHz RFID modulu RDM6300, anténou vlastnej výroby priemeru 20mm, neodymového magnetu priemeru 5mm a dĺžkou 5mm, a dvoch micro serv SG90 9G.
    • Princípom efektoru je bezpečne rozpoznať prítomnosť číselného kameňa pomocou bezkontaktného snímania, jeho uchopenie pomocou neodymového magnetu a odloženie na novú pozíciu.
    • Pre bezpečné snímanie a uchopenie bol vytvorený systém vystavenia antény či neodymového magnetu v ose Z smerom ku hráčskemu kameňu.
Arduino sudoku robot - Efektor - uchopenie kameňa

Efektor – uchopenie kameňa

Arduino sudoku robot - Efektor

Efektor

  • Zobrazovacia jednotka
    • Zobrazovacia jednotka je tvorená 3,2 inch TFT LCD displejom. Slúži na zobrazenie hráčskeho poľa a rôznych správ od programového podsystému.
  • Budiče krokových motorov
    • V projekte sú použité budiče krokových motorov typu Microcon SD 20x. Tie obsahujú 8-násobný DIP prepínač pre nastavenie konfigurácie, vstupy Step, Dir a Enable a výstupy A a B. [7]
    • Prepínače 8-6 nastavujú mikrokrokovanie. Bola nastavená konfigurácia Off On On pre delenie kroku 16-timi. Tento variant je zvolený pre zvýšenie plynulosti chodu krokových motorov.
    • Prepínač 5 je rezervovaný a nemá žiadnu funkciu.
    • Prepínače 4-1 nastavujú prúd do krokového motoru. Bola nastavená konfigurácia On Off Off Off pre amplitúdu prúdu 2A.
    • Budič obsahuje dve svorkovnice:
      • vstupná svorkovnica, do ktorej sa privádza signál Step+, Step-, Dir+, Dir-, Enable+, Enable-. Ide o galvanicky oddelené vstupy optočlenmi. Štandardná napäťová úroveň vstupov je 0-24V, preto pre ovládania pomocou Arduina bolo nutné vnútorné odpory LED diód 3K3 nahradiť odpormi 560 Ohm. Vstupy STEP slúžia na krokovanie, DIR na ovládanie chodu vpred/vzad a ENABLE na zapnutie koncového stupňa.
      • výstupná svorkovnica slúži na budenie cievok krokového motora A, /A, B, /B. Ďalej obsahuje prívod vstupného napájania krokových motorov. [7]
  • Krokové motory
    • V projekte boli použité krokové motory Microcon SX23-1414 v bipolárnom paralelnom zapojení. [4][8]
  • Diaľkové ovládanie
    • Diaľkové ovládanie je tvorené IR receiver shield a 38kHz MCU diaľkovým ovládačom. [5]
  • Optické závory
    • Optické závory sú tvorené obvodmi TCST 1103, pomocou ktorých sa stanovuje východzia (reštartovacia) poloha lineárneho polohovacieho systému. [9]
  • Zdroj napájania
    • Zdrojom napájania je 24V 5A adaptér pre polohovací systém a zdroj 5V pre riadiacu jednotku.

Softvérové riešenie

Softvérové riešenie je realizované na platforme Arduino Mega 2560 pomocou C++ knižnice Wiring.

Dátový základ hracieho poľa sa skladá zo štruktúrovaného dátového typu, ktorého obsahom je 4bit dátová premenná  pre uloženie čísla (dosadí sa pomocou herného plánu alebo vypočíta v priebehu hľadania riešenia) a príznakov možných kandidátov v danej bunke (9x1bit). Tento štruktúrovaný typ je uložený v dvojrozmernom poli 9×9.

Dátový základ zásobníka sa skladá zo štruktúrovaného dátového typu, ktorého obsahom je 4bit premenná  pre uloženie čísla kameňa, 4bit číslo riadku a 4bit číslo stĺpca. Tento štruktúrovaný typ je uložený v dvojrozmernom poli 9×9.

Aby bol pri súčasnom pohybe motorov v ose X a Y zachovaný rovnomerný pohyb, bol využitý pre chod motorov preemptívny multitasking s časovým rozložením. Rýchlosť pohybu motorov je programovo riadený.

Programový systém sa skladá z niekoľkých častí (Popis ďalších režimov bude odvodený od funkcií tlačidiel na IR ovládači):

  • Reštart technológie – postavenie lineárnych jednotiek do základnej polohy, od ktorej sa budú odčítať koordináty polohy efektora.
  • Režim C – pri prvom spustení technológie, či pri výmene alebo doplnení chýbajúcich číselných kameňov za nové je nutné skenovať všetky kamene a priradiť k prečítanému kódu RFID vygravírované číslo kameňa. Postup realizácie je taký, že sa číselné kamene uložia do zásobníka – kameň s číslom 1 bude uložený v prvom stĺpci, s číslom 2 v druhom stĺpci,… Následne dôjde k skenovaniu zásobníka, pri ktorom  sa údaje uložia do EEPROM Arduina.
  • Režim Test – skenovanie všetkých číselných kameňov, vypočítanie celkového počtu kameňov a celkového počtu kameňov jednotlivých čísiel. Ak by údaje neboli správne, systém ohlási chybu. Súčasťou testu je aj uloženie čísiel do dátovej štruktúry hráčskeho poľa a zásobníka. V ďalších krokoch už nebude potrebné skenovať prítomnosť / neprítomnosť číselných kameňov na pozícii a skenovať ich hodnotu.
  • Režim Play – hľadanie riešenia sudoku. Výpočet je založený na dvoch základných stratégiách:
    1. Výpočet sudoku pomocou známych pravidiel hry. V prvom rade ide o nájdenie pozícií, kde boli čísla dosadené podľa herného plánu. U týchto čísiel budú vylúčení všetci kandidáti. Následne sa postupne prechádzajú riadky a budú sa vylučovať kandidáti, ktorí sa v daných bunkách nemôžu nachádzať, lebo dané číslo sa v riadku už nachádza. Po vylúčení kandidátov sa otestuje, či v nejakej bunke neostal iba jeden kandidát, alebo ako jediný možný (systém reaguje chybovým hlásením aj na možnosť, kedy v bunke nie je žiadne možné riešenie). Ak ostal jediný možný kandidát, dosadí sa do dátovej štruktúry ako nájdené číslo a uskutoční sa fyzické uloženie kameňa na pozíciu. Táto operácia vylučovania kandidátov sa bude realizovať aj pre stĺpce a bloky. Celý systém vylučovania v riadku/stĺpci/bloku sa bude cyklicky opakovať, pokým sa nedosiahne stav úplného vyriešenia úlohy alebo až do stavu, kedy táto metóda nebude schopná vylúčiť všetkých kandidátov. V takom prípade sa prechádza na druhú stratégiu – výpočet pomocou heuristiky.
    2. Heuristika. Princíp je založený na orientovanom číselnom strome, kde sa v prvom kroku nájde v hernom poli prvá bunka s najmenším počtom kandidátov. Dátové pole sa zazálohuje, dosadí sa prvý kandidát ako „víťaz“ a prevedie sa výpočet podľa pravidiel hry. Ak dôjde ku kolízii, ktorá bráni vyriešeniu úlohy, obnoví sa záloha, kandidát sa vylúči a dosadí sa ďalší kandidát ako „víťaz“. Heuristika reaguje aj na prípad, kedy výber jedného „víťaza“ nevedie na vyriešenie úlohy, lebo niektoré iné bunky môžu mať na výber viac kandidátov. V takom prípade sa bude heuristika vnárať do orientovaného číselného stromu a dosadzovať ďalších „víťazov“. Systém vnorenia je nastavený až do úrovne deväť, čo sa neprekročí ani pri extrémne obťažnom sudoku. Ak je zadanie herného plánu riešiteľné, heuristika ho s istotou nájde. Po vyriešení pomocou heuristiky sa uskutoční fyzické dosadenie zvyšných číselných kameňov zo zásobníka na pozície hernej plochy. 
    3. Režim Späť – tento režim je určený na fyzické odpratanie číselných kameňov z hernej plochy do zásobníka.

Technická realizácia a experimentálne overenie činnosti

Technická realizácia spočívala v prvej fáze na analýze projektu a jeho dekompozícii. Následne sa etapa projektu rozdelila na softvérové a hardvérové riešenie.  Po testovaní jednotlivých častí, softvérových aj hardvérových, prešiel projekt k finalizácii – kompletizácii jednotlivých komponentov a testovanie ich funkčnosti ako celku.

Boli uskutočnené testy zadania sudoku od ľahkých až po extrémne obťažných. V každom prípade softvér bezpečne našiel riešenie, ak existovalo.

Bol uskutočnený test IR ovládača a ten pracuje bezchybne.

Bol uskutočnený test snímania RFID a ten pracuje bezchybne.

Bol uskutočnený test lineárneho polohovacieho systému k overeniu presnosti polohovania efektora. Test preukázal dostatočnú presnosť polohovania. Presnosť lineárneho polohovacieho systému je 0,02mm/mikrokrok pri stanovenom mikrokrokovaní 1/16 pomocou DIP prepínača.

Bol urobený test efektora na bezpečné uchopenie a uloženie číselného kameňa. Test preukázal bezpečné uchopenie a uloženie kameňa.

Záverečné zhodnotenie a sumarizácia výsledkov

Jednotlivé časti robotického sudoku pracujú bezchybne a splnili všetky zadané požiadavky. Softvérový výpočet veľmi obťažného sudoku trvá programu menej ako 2 sekundy. 

Projekt preukázal, že študenti sú schopní pracovať v tíme, nadchnúť sa pre riešenie konkrétneho projektu a podieľať sa na riešení zložitých celkov.

Zariadenie bude slúžiť na propagáciu školy pri rôznych príležitostiach a pre firmu Hennlich na propagáciu lineárnych jednotiek na predvádzacích akciách a na veľtrhoch.

Zoznam použitej literatúry

  1. Zbyšek Voda & tým HW Kitchen, “Průvodce světem Arduina“, Ebook.pdf, 2015
  2. https://playground.arduino.cc/Main/GeneralCodeLibrary
  3. www.microcon.cz
  4. http://www.microcon.cz/zapojenivinuti2012web/zapojenivinutipdf2012/SX23-1414.pdf
  5. http://www.datasheetcafe.com/rdm630-datasheet-pdf/
  6. http://pdf.datasheetcatalog.com/datasheets/90/377379_DS.pdf
  7. 08-10.pdf výkonový stupeň SD20x
  8. NEMA23.pdf krokový motor
  9. dsh.523-275.1.pdf optická závora

Prezentácia: Robotické sudoku


Děkujeme za sdílení velice povedeného projetku. Máte i vy projekt, se kterým se chcete pochlubit? Přečtěte si tento článek.

Tinylab: Tlačítka

$
0
0

V minulém dílu seriálu článků o kitu TinyLab jsme si ukázali, jak se dá měřit teplota pomocí teploměru, který najdeme na desce. Dnes se budeme věnovat součástkám o poznání jednodušším – podíváme se, jak číst vstup z tlačítek.

Dobrá zpráva na začátek

Ve článku Tinylab: Nezbytný základ jsem psal, že knihovny, které jsou k desce Tinylab dostupné, nejsou kompatibilní s nejnovějším Arduino IDE a musíte proto využít starší verzi prostředí. Tento problém se nám podařilo s výrobcem vyřešit a nyní už je tedy možné využívat nejnovější Arduino IDE!

Tlačítka

Tlačítko je velice jednoduchá mechanická součástka. Funguje úplně stejně, jako kdybychom měli dva dráty a ty k sobě připojovali a odpojovali. V tlačítku skutečně dochází ke spojování a rozpojování dvou vodičů, jen je to o poznání pohodlnější. Tento princip je patrný i ze schématické značky pro tlačítko, kterou vidíte vpravo na obrázku níže.

Tlačítko a schématická značka

Tlačítko a jeho schématická značka

To, že je tlačítko jednoduchá mechanická součástka s sebou nese i jedno nebezpečí – když ho zmáčkneme, může dojít k zákmitu. Tedy k tomu, že se obvod spojí, na chvilku rozpojí a zase spojí. Nejjednodušším způsobem, jak se takovému zákmitu bránit, je po zjištění stlačení/uvolnění tlačítka chvilku počkat, než provedeme další měření stavu tlačítka (asi 0,1s, tedy 100ms).

Na desce Tinylab máme tlačítka připojená následujícím způsobem:

S1 9
S2 8
S3 A5 – LOW
S4 A5 – HIGH

Jak vidíme, tlačítka S1 a S2 jsou připojená na digitálních pinech 9 a 8. Tlačítka S3 a S4 jsou obě připojená na analogovém pinu A5. Obsluhu obou typů pinů si dále popíšeme.

Tlačítka na digitálních pinech

Abychom mohli měřit stav na digitálním pinu, musíme ho nejdříve nastavit jako vstup. To provedeme pomocí funkce pinMode, kterou už známe z používání LED, kde jsme podobně pin nastavovali jako výstup.

pinMode(pin, INPUT);

Nyní už můžeme číst logickou úroveň na pinu, což provedeme pomocí funkce digitalRead.

digitalRead(pin);

Tato funkce nám vrátí buďto logickou 0 (LOW), nebo 1 (HIGH).

Zkusme si nyní rozsvěcovat a zhasínat LEDku podle zmáčknutí tlačítka. Využijeme tlačítko S1 (pin 9) a LED L1 (pin 13). Nezapomeňme na přepnutí přepínačů u těchto pinů do pozice ON. Tlačítka na desce Tinylab jsou zapojená tak, že při nestisknutém stavu na jejich pinu naměříme logickou 1, při stisku logickou 0, takže ještě budeme muset otočit logickou hodnotu, což zajistíme logickým operátorem vykřičník (!).

byte led = 13;
byte tlacitko = 9;

void setup() {
  pinMode(led, OUTPUT);
  pinMode(tlacitko, INPUT);
}

void loop() {
  byte stav = digitalRead(tlacitko);
  digitalWrite(led, !stav);
}

Tento příklad je poměrně jednoduchý. Co takhle mít tlačítko, které jedním stiskem LED zapne a druhým vypne? K tomu si vytvoříme dvě pomocné proměnné. V jedné si budeme pamatovat, jestli bylo tlačítko stisknuté nebo uvolněné v předchozím průchodu. V druhé budeme mít stav LED (svítí / nesvítí). V tomto případě přidáme už i čekání na odeznění zákmitů.

byte led = 13;
byte tlacitko = 9;

// proměnná pro uložení předchozího stavu tlačítka
// budeme zkoumat, jestli se stav nezměnil
byte posledniStav = LOW;

// led svítí / je zhasnutá
byte stavLed = HIGH; 

void setup() {
  pinMode(led, OUTPUT);
  pinMode(tlacitko, INPUT);
}

void loop() {
  byte stav = digitalRead(tlacitko);
  delay(100); // počkáme na odeznění zákmitů

  if(stav != posledniStav) { // pokud se stav změnil
    if(stav == LOW) { // tlačítko je stisknuté
      stavLed = !stavLed; // změníme stav led zhasnuto -> rozsvíceno a naopak
    }

    digitalWrite(led, stavLed);
    
    posledniStav = stav;
  }
}

Dokážete vymyslet další použití tlačítek? Třeba přepínat postupně mezi jednotlivými LED pomocí jednoho tlačítka?

Tlačítka na analogových pinech

Tlačítka S3 a S4 jsou na desce Tinylab připojená k analogovému pinu A5. Stiskem tlačítek můžeme sledovat změnu měřené analogové hodnoty na pinu A5. Následujícím programem můžeme prozkoumat, jak se tato hodnota při stisku mění. Opět nezapomeneme zapnout spínač u pinu A5.

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(A5));
  delay(500);
}

V mém případě mi monitor sériové linky vypisuje bez stisku tlačítka hodnotu 0, při stisku S3 hodnotu 205, při stisku S4 hodnotu 510 a při stisku obou současně hodnotu 568. Tyto hodnoty se mohou mírně lišit a jsou závislé například na použitých součástkách. S tím musíme v programu počítat a pracovat s určitou tolerancí (při stisku S3 nemusí být přesně 205, ale třeba 200-210). Vytvořme si program, který nám po sériové lince pošle informace o tom, jaká tlačítka jsou stisknutá. Měření analogové hodnoty na pinu A5 provedeme pomocí funkce analogRead , kterou známe ze článku o potenciometru.

void setup() {
  Serial.begin(9600);
}

void loop() {
  int hodnota = analogRead(A5);

  if(hodnota >= 0 && hodnota <= 10) {
    // hodnota je mezi 0 a 10
    Serial.println("Zadne tlacitko");  
  }
  else if (hodnota >= 200 && hodnota <= 210){
    Serial.println("S3 stisknuto");
  }
  else if (hodnota >= 505 && hodnota <= 515){
    Serial.println("S4 stisknuto");
  }
  else if (hodnota >= 563 && hodnota <= 573) {
    Serial.println("S3 i S4 stisknuta");  
  }

  delay(1000);
}

Vymyslíte i další využití tlačítek, které jsme si dnes představili? Třeba ovládání výšky tónu bzučáku pomocí dvou tlačítek? Nebo ovládání různých sekvencí blikání LED?

Robot inspirovaný pohyby hada

$
0
0

V přírodě se dá nalézt spousta inspirace. Může jí být i například způsob, kterým se pohybují hadi. Will Donaldson sestrojil robota, který se, právě jako hadi, pohybuje.

O pohyb robota se stará deset servo motorů, které umožňují vlnění těla robota. Aby pohybu bránilo menší tření, je robot na spodní straně vybaven malými kolečky, které nahrazují hadí šupiny s malým třením. O řízení se stará deska Arduino Nano, napájení zajišťuje zdroj z PC.

Robot inspirovaný pohyby hada

Z videa níže vyplývá, že autor experimentoval s různými konstrukcemi hada a způsoby pohybu. Byl to například způsob, kterým se pohybuje píďalka, kdy je část robota vyzdvižena nad podložku. Autor také testoval hybridní způsob pohybu, při kterém se může robot pohybovat jak dopředu a dozadu, tak do boků.

Návod na stavbu a řídicí kód najdete na serveru Instructables. Další informace naleznete ve videu níže.

Přeloženo z https://blog.arduino.cc/2018/06/11/this-arduino-controlled-robot-slithers-like-a-snake/ a upraveno.

TinyLab: Bezdrátový modul XBee

$
0
0

V dnešním dílu seriálu článků o desce TinyLab se podíváme, jak konfigurovat a používat bezdrátové moduly XBee. I když je seriál věnovaný desce TinyLab, je popsaný postup použitelný i bez této desky.


Co je to XBee?

XBee je rodina různých bezdrátových zařízení, které poznáme podle typického tvaru desky. Jednotlivé modely se od sebe liší komunikační frekvencí, dosahem i podporovanými protokoly. Spojuje je ale snaha o jednoduchou bezdrátovou komunikaci zařízení s malým výkonem. TinyLab ve verzi Exclusive obsahuje dva XBee moduly S2C, takže je s jejich pomocí možné zprovoznit si například most mezi dvěma zařízeními. V našem případě si propojíme počítač a TinyLab.

Modul XBee v setu TinyLab

Modul XBee v setu TinyLab

Moduly XBee S2C používají komunikační protokol ZigBee (to pro nás není podstatné, ale hodí se vědět pro případný další průzkum). Díky tomu jsou moduly schopné vytvářet i poměrně rozsáhlé sítě propojených zařízení při zachování snadné konfigurace. Díky tomu je možná i komunikace mezi zařízeními, které na sebe přímo nevidí, ale leží mezi nimi prostředník, který může komunikaci zprostředkovat.

Poznámka: Dále si představíme konfiguraci, která se sice jeví jako dvoubodová, ale ve skutečnosti není problém připojit další zařízení. Postup přidání dalších zařízení bude použitelný téměř beze změn.

Mody zařízení

Zařízení XBee mohou vystupovat ve třech různých modech, které se liší v tom, jakou činnost zařízení při komunikaci v rámci sítě vykonává.

Možné topologie zařízení používající protokol ZigBee

Možné topologie sítě ZigBee
(zdroj: https://courses.p2pu.org/en/courses/831/content/1739/)

Koordinátor (Coordinator)

Zařízení v modu Koordinátor (na obrázku bíle) může být v síti pouze jedno. Koordinátor zajišťuje inicializaci sítě, vybírá zvolený komunikační kanál a ID sítě. Také se stará o adresování v síti a umožňuje ostatním zařízením připojit se do sítě. Obsahuje také buffer, ve kterém jsou uloženy zprávy pro spící zařízení v síti. Toto zařízení musí být spuštěné neustále a není možné jej uspat.

Router

Zařízení typu Router (zeleně) už může být v síti neomezeně (ale také žádné). Může se připojit do existujících sítí a také vystupovat jako prostředník při komunikaci ostatních zařízení s Koordinátorem (podporuje příjem a zasílání směrovacích zpráv). I router umí uchovávat zprávy pro případná spící koncová zařízení a musí být neustále spuštěný (nemůže přejít do režimu spánku).

Koncové zařízení (End-device)

Koncová zařízení slouží k příjmu a odesílání zpráv v síti. Nemohou vystupovat jako prostředník a mohou vstupovat do režimu spánku. Musí být vždy připojeny k routeru, nebo koordinátoru.

Konfigurace zařízení

Aby spolu moduly XBee mohly komunikovat, musíme nejdříve vše správně nastavit. Toto nastavení je sice možné provést přes sériovou linku pomocí AT příkazů, ale snadnější bude využít program XCTU od výrobce modulů. Po instalaci program spustíme. V kitu TinyLab najdeme sériový převodník pro XBee a modul do něj zasuneme (zkontrolujte orientaci modulu podle obrázku níže). Poté převodník přes USB připojíme k PC.

Sériový převodník pro XBee

Sériový převodník pro XBee

Vyhledání zařízení

XCTU

XCTU

Po spuštění programu XCTU klikneme na ikonu s lupou v levém horním rohu. Zobrazí se nabídka, ve které vyberte sériový port s připojeným převodníkem. Je to ten port, který v nabídce mizí a objevuje se společně s odpojováním a připojováním převodníku k USB (je nutné znovu kliknout na ikonu s lupou, aby se nabídka aktualizovala).

Výběr sériové linky

Výběr sériové linky

Nyní musíme nastavit, jakým způsobem se má na zvolené sériové lince prohledávat – jakou rychlostí s modulem komunikujeme apod. Nastavení zvolte podle obrázku níže.

Výběr parametrů sériové komunikace

Výběr parametrů sériové komunikace

Po stisknutí tlačítka „Finish“ je zahájeno prohledávání, které by mělo skončit nalezením připojeného modulu.

Vyhledávání modulu

Vyhledávání modulu

Nalezený modul XBee

Nalezený modul XBee

Vybrané zařízení by se nyní mělo objevit v levém sloupci hlavní obrazovky XCTU.

Přidaný modul XBee bez firmware

Přidaný modul XBee bez firmware

Moduly od výrobce nemají nahraný firmware. Proto se v poli Function zobrazuje „Not found in XCTU“. Nyní musíme do modulu nahrát firmware.

Nahrání firmware do XBee

Začneme tím, že klikneme na modul v levém sloupci programu. Zobrazí se hláška, jestli chceme stáhnout firmware z internetu.

V dalším kroku vybereme možnost „Install legacy firmware package“.

Po odsouhlasení se spustí stahování, které může trvat i několik minut.

Stahování firmware XBee

Stahování firmware

Po stažení se zobrazí seznam staženého firmware. Okno zavřeme kliknutím na „OK“.

Firmware pro různé moduly XBee

Firmware pro různé moduly

Když nyní v levém sloupci vybereme připojený modul, po krátkém načítacím dialogu se zobrazí jeho aktuální nastavení. Zmáčkneme tlačítko pro upgrade firmware.

Upgrade firmware XBee

Upgrade firmware

V nabídce vybereme firmware dle obrázku níže (popřípadě novější, pokud je dostupný).

Výběr firmware pro upgrade XBee

Výběr firmware pro upgrade

Po odsouhlasení by se měla objevit hláška o úspěšném nahrání software.

Úspěšně nahraný firmware

Úspěšně nahraný firmware

Nastavení modulů

Postup popsaný výše musíme provést pro oba moduly. Dále musíme jeden modul nakonfigurovat jako Konfigurátor a druhý jako Router. Po výběru modulu se v pravém sloupci zobrazí formulář, ve kterém musíme vyplnit správné hodnoty. Ty vyplňte podle následujících obrázků a poté pomocí ikony tužky s nápisem „write“ zapište změny do modulu.

Nastavení Koordinátoru XBee ZigBee

Nastavení Koordinátoru

Nastavení Routeru XBee ZigBee

Nastavení Routeru

Význam důležitých položek

  • PAN ID = adresa sítě
    • může být v rozsahu HEX: 0-FFFF
    • všechna zařízení v síti zde mají stejnou hodnotu
  • coordinator enable
    • uvádí zařízení do modu Coordinator
  • destination address low = cílová adresa
    • pokud je modul v modu koordinátor, nastavíme její hodnotu na FFFF = režim broadcast
    • pro router ji nastavíme na 0, což je výchozí adresa koordinátoru

Poznámka: V síťových technologiích je často nejvyšší adresa z rozsahu adres vyhrazena pro tzv. broadcast. Pokud odešleme data na broadcastovou adresu, jsou tato data odeslána do všech zařízení, která jsou připojena v síti. Přesně to v případě koordinátoru potřebujeme.

Po uložení nastavení už jsou oba moduly připravené pro vzájemnou komunikaci. Jeden z modulů zasuneme do slotu na desce TinyLab (vpravo uprostřed – viz úvodní fotka) a druhý necháme připojený k PC pomocí USB převodníku.

Ovládání Arduina na dálku

Nyní si napíšeme jednoduchý program, který bude vypínat a zapínat LED podle toho, co mu pošleme po sériové lince – když dostane znak ‚h‘, tak ji rozsvítí, pro ‚l‘ ji zhasne. Začneme tím, že přepneme přepínače na TinyLab do správné polohy. Přepínače u pinů 0 a 1 propojí sériovou linku Arduina s modulem XBee. Přepínač u pinu 13 zase připojí nejlevější LED k pinu 13. Pokud si chcete připomenout jak pracovat s LED, pojednává o tom tento článek.

TinyLab: Nastavení přepínačů pro používání LED a XBee

Nastavení přepínačů pro používání LED a XBee

Do Arduina nahrajeme následující program:

byte led = 13;

void setup() {
  Serial1.begin(9600);
  Serial.begin(9600);

  pinMode(led, OUTPUT);
}

void loop() {
  if(Serial1.available()){
    char c = Serial1.read();

    if(c == 'H' || c == 'h') digitalWrite(led, HIGH);
    else if(c == 'L' || c == 'l') digitalWrite(led, LOW);

    Serial.println(c);
  }
}

Arduino Leonardo, které tvoří jádro desky TinyLab, má dvě sériové linky. Ta označená Serial slouží ke komunikaci s PC, Serial1 je fyzicky vyvedená na piny 0 a 1 a je k ní připojen modul TinyLab.

Program dělá to, že pokud je dostupný nějaký znak po sériové lince, tak ho načte a podle jeho hodnoty rozsvěcuje či zhasíná LED na pinu 13. Navíc přijatý znak pošle do PC, takže si v sériovém monitoru můžeme zkontrolovat, jestli nám z XBee chodí nějaké znaky.

Nyní v programu XCTU klikneme na připojený modul a v pravém horním rohu na ikonu Konzole. Do levého bílého pole pak můžeme psát zprávy, které jsou okamžitě přenášeny do druhého modulu.

XCTU sériová konzole

XCTU sériová konzole

Na straně počítače nemusí být jen „hloupá“ textová konzole, ale třeba nějaká aplikace s grafickým rozhraním a tlačítkem pro ovládání LED. Taková se dá napsat třeba v prostředí Processing.


A to je pro dnešek vše. Napadne vás ještě nějaký projekt, který by se dal s moduly XBee postavit? Třeba bezdrátový teploměr, ovládání brány, …

Zdroj: https://alselectro.wordpress.com/2017/01/23/zigbee-xbee-s2c-how-to-configure-as-coordinator-router-end-device/

Programujte Arduino přes příkazovou řádku

$
0
0

Arduino IDE je super prostředí, pokud s Arduinem začínáte. Jeho rozhraní je velice jednoduché a vše většinou funguje na první pokus. Toto prostředí ale postupem času přestane většině bastlířů stačit a hledají tak možnosti, jak Arduino programovat přes nějaký „dospělejší“ editor.

Pro zkušenější programátory je většinou příkazová řádka (terminál) denním chlebem. Existuje několik možností, jak Arduino projekty kompilovat a nahrávat přes terminál. Cesta pro pokročilé je využívat přímo nástroje, které „pod pokličkou“ využívá i Arduino IDE pro kompilaci, správu a nahrávání projektů. Ideální ale je, když všechny potřebné úkony při tvorbě Arduino projektů zvládne jeden program. Jedním takovým je například PlatformIO. Nedávno byla představena i oficiální cesta, která toto umožňuje. Je jí program arduino-cli (arduino command-line interface, arduino rozhraní pro příkazovou řádku). Díky tomu je možné jednoduše zakomponovat potřebné příkazy do oblíbeného vývojového prostředí, popřípadě nad tímto programem přímo vystavět prostředí nové. Samozřejmostí je také užití programu v Makefilech. Program podporuje také výstup ve formátu JSON, který je možné dále zpracovávat v případných obslužných programech.

arduino-cli

Dále si projdeme základní úkony, které arduino-cli umí. Ty jsou také popsané na GitHubu projektu. Arduino-cli je zatím v alfa verzi a tvůrci prosí o případnou zpětnou vazbu.

Prostředí je dostupné pro nejčastější operační systémy – Linux, Windows i MacOS – a je tak možné ho rozběhnout třeba i na Raspberry PI. Začneme tím, že si z GitHub stáhneme verzi pro náš operační systém. Stažený archiv obsahuje přímo spustitelný program. Ten si po rozbalení přejmenujeme na arduino-cli. Spustíme si terminál a přepneme se do složky se staženým programem. Když nyní příkazem ./arduino-cli (MacOS, Linux), start arduino-cli.exe (Windows) program spustíme, zobrazí se nám výpis s nápovědou (dále jsou uvedené příkazy, které jsem vyzkoušel na MacOS, pro Linux a Windows jsou ale obdobné).

Výpis programu arduino-cli

Výpis programu arduino-cli

Příprava Arduino projektu

Nejdříve si příkazem ./arduino-cli sketch new novyProjekt vytvoříme nový projekt s názvem novyProjekt. Program vypíše, kam vytvořený projekt uložil. V mém případě to je složka /Users/zbysek/Documents/Arduino/novyProjekt.

Arduino-cli Vytvoření nového projektu

Vytvoření nového projektu

Když si nyní vytvořený program otevřeme, obsahuje nám známé funkce setuploop. Otevřít ho můžeme buďto v nějakém oblíbeném textovém editoru, nebo i přímo přes příkazovou řádku (editory vim, nano, emacs, …). Program si přepíšeme tak, aby blikal LEDkou na pinu 13.

Program pro blikání LED

Program pro blikání LED

Připojení Arduino desky

V ukázkách použiji desku Arduino Leonardo, kterou obsahuje TinyLab. Ten mám aktuálně připojený k počítači.

Začneme tím, že si aktualizujeme seznam desek v arduino-cli pomocí příkazu ./arduino-cli core update-index. Program by měl vypsat „package_index.json downloaded“. Příkazem ./arduino-cli board list vypíšeme desky, které program vidí.

Arduino CLI Vyhledání desek

Vyhledání desek

Program nyní desku vidí, ale ještě nemá stažené jádro, aby ji mohl obsluhovat. Příkazem ./arduino-cli core search arduino vyhledáme dostupná jádra.

Arduino CLI Vyhledání dostupných jader

Vyhledání dostupných jader

Pokud nevíte, které jádro pro vaši desku vybrat, můžete hledání upřesnit přímo pro konkrétní desku.

Arduino CLI Vyhledání jádra pro konkrétní desku

Vyhledání jádra pro konkrétní desku

Nyní vybrané jádro nainstalujeme.

Arduino CLI Instalace jádra

Instalace jádra

Opětovným spuštěním příkazu ./arduino-cli board list bychom měli vidět, že už program desku rozpozná.

Arduino CLI Připojená deska Arduino Leonardo

Připojená deska Arduino Leonardo

Kompilace a nahrání programu

Nyní už můžeme program zkompilovat příkazem ./arduino-cli compile –fqbn arduino:avr:leonardo /Users/zbysek/Documents/Arduino/novyProjekt, ve kterém arduino:avr:leonardo nahradíme hodnotou FQBN sloupce z předchozího příkazu a /Users/zbysek/Documents/Arduino/novyProjekt cestou k projektu.

Arduino CLI Kompilace projektu

Kompilace projektu

Nahrajeme program do desky příkazem ./arduino-cli upload -p /dev/tty.usbmodem1431 –fqbn arduino:avr:leonardo /Users/zbysek/Documents/Arduino/novyProjekt, kde nahradíme stejné řetězce, jako předtím a ještě navíc /dev/tty.usbmodem1431 správnou cestou k portu ze sloupce Port ve výpisu desek.

Nyní by po chvíli nahrávání měla LED na pinu 13 začít blikat.

Přidání knihoven

Ukázali jsme si velice jednoduchý příklad, který nepoužíval žádnou knihovnu. Pokud bychom nějakou chtěli použít, obsahuje arduino-cli nástroj pro správu knihoven, přes který musíme požadované knihovny stáhnout. K vyhledávání slouží příkaz ./arduino-cli lib search wifi101, který vypíše všechny knihovny odpovídající hledanému řetězci. Pomocí příkazu ./arduino-cli lib install „WiFi101“ potom vybranou knihovnu nainstalujeme.

To by bylo k představení arduino-cli vše. Vývoj můžete sledovat na serveru GitHub, kde je dostupný repozitář s projektem.

Zdroje:

TinyLab: LCD displej

$
0
0

V seriálu článků o Arduino kitu TinyLab se tu postupně věnujeme jednotlivým periferiím, které jsou na desce dostupné. V dnešním dílu si ukážeme, jak se dá pracovat s LCD displejem na desce.


Znakové vs. grafické LCD displeje

LCD displeje dělíme podle různých kritérií. Jedním z dělení je rozdělení na znakové displeje a grafické displeje. První uvedené jsou schopné zobrazit pouze znaky. Jejich hlavním parametrem je to, kolik se na displej vejde znaků. To je většinou udáváno ve tvaru MxN, kdy M značí počet znaků na řádku a N počet řádků. Na TinyLab nalezneme displej 16×2. U grafických displejů je možné ovládat každý pixel displeje jednotlivě a je na nich tak možné kreslit různé obrazce, zobrazovat grafy i psát text. Více o LCD displejích se můžete dočíst ve článku Arduino a displeje II.

Připojení displejů

Druhou vlastností, která nás při tvorbě projektů zajímá, je způsob, kterým displej s Arduinem komunikuje. Pokud nevyužijeme převodník, je možné většinu znakových displejů řídit pomocí osmi datových a třech řídicích pinů. To nám ale, u desek jako Arduino UNO, už moc volných pinů nezbude. Z toho důvodu se vyrábějí různé převodníky, které je možné k displeji připojit, popřípadě je displej obsahuje, a díky nim je možné ho ovládat pomocí menšího počtu pinů. Většinou se jedná o převodníky, které komunikují po I2C, SPI, nebo sériové lince. Když se podíváme do blokového schématu TinyLab, zjistíme, že na desce najdeme displej s I2C rozhraním (to je více popsané zde). Také se dozvíme, že toto rozhraní využívá piny D2 a D3. Proto přepneme spínače u těchto pinů do polohy ON.

Jednoduchý program

Knihovnu pro ovládání displeje jsme stáhli ve článku TinyLab:Nezbytný základ. Pojďme se podívat na jednoduchý program, který slouží k ovládání displeje.

#include <Wire.h> // knihovna pro I2C komunikaci
#include <LiquidTWI2.h> // knihovna pro ovládání displeje

LiquidTWI2 lcd(0x20); // vytvoření objektu pro práci s displejem

void setup() {
  lcd.setMCPType(LTI_TYPE_MCP23008); // nastavení typu řídicí jednotky displeje
  lcd.begin(16, 2); // displej má dva řádky po 16 znacích
  lcd.setBacklight(HIGH); // zapneme podsvícení

  lcd.setCursor(0, 0); // nastavení kurzoru na první znak prvního řádku
  lcd.print("TinyLab navod");
  lcd.setCursor(0, 1); // nastavení kurzoru na první znak druhého řádku
  lcd.print("od Arduino.cz");
} 

void loop() {}

Nejdříve vložíme potřebné knihovny a vytvoříme objekt pro ovládání displeje. V blokovém schématu je napsáno, že displej má adresu 0x20. Na sběrnici I2C totiž může být připojeno více zařízení najednou (na TinyLab to je displej, modul hodin reálného času a paměť EEPROM). A aby bylo vždy jasné, se kterým zařízením komunikujeme, používá se adresování. Pokud si říkáte, proč je před dvacítkou ještě 0x, jedná se o zápis čísla v šestnáctkové soustavě (více viz zde).

Dále zvolíme typ převodníku – to aby Arduino posílalo správné příkazy. Dále sdělíme, že pracujeme s displejem 16×2 a zapneme podsvícení. Nakonec vypíšeme text na displej. Funkce lcd.setCursor slouží k nastavení pozice kurzoru, tedy místa, kam se začne vypisovat text.

V Arduino IDE v menu Nástroje/Vývojová deska zvolíme Arduino Leonardo a v menu Port zvolíme port, kde je deska připojená. Po nahrání programu by se měl rozsvítit displej a na něm zobrazit vypsaný text. Pokud se na displeji nic nezobrazuje, nebo se zobrazují tmavé obdélníky, je možná špatně nastavený kontrast. Ten je možné upravit pomocí malého potenciometru, který je umístěný u levého spodního rohu displeje. Pomocí malého křížového šroubováku tímto displejem opatrně otáčejte, dokud se na displeji nezobrazí text.

Arduino kit TinyLab - LCD: Výsledný text

Výsledný text

Výpis hodnoty na displej

Nyní si ukážeme, jak se dá na displej vypsat hodnota, například z potenciometru. Ten je připojen k pinu A0, takže nesmíme zapomenout zapnout spínač u tohoto pinu. Čtení hodnot z potenciometru jsme se věnovali v tomto článku.

#include <Wire.h>
#include <LiquidTWI2.h>

LiquidTWI2 lcd(0x20);

void setup() {
  lcd.setMCPType(LTI_TYPE_MCP23008);
  lcd.begin(16, 2);
  lcd.setBacklight(HIGH);

  lcd.setCursor(0, 0);
  lcd.print("Mereni:");
} 

void loop() {
  int hodnota = analogRead(A0);

  lcd.setCursor(0, 1);
  lcd.print(hodnota);

  delay(200);
}

Všimněte si zajímavé věci. Natočte potenciometr tak, aby se na displeji zobrazila hodnota 1023 a poté otočte potenciometr úplně na druhou stranu. Asi byste čekali, že se a displeji objeví nula, ale místo toho na něm stále zůstávají čtyři číslice. Napadá vás, čím to je a jak to napravit?

Problém je v tom, že si displej pamatuje poslední hodnotu každé pozice pro znak. A protože například hodnoty do 999 využívají jen maximálně tři číslice, zůstane čtvrtá číslice nepřepsaná. Můžeme to vyřešit snadno tak, že na druhý řádek před zapsáním hodnot vypíšeme čtyři mezery. Tím se pozice pro znaky smažou a my na ně potom můžeme zapsat nové hodnoty. Výsledný kód tedy bude vypadat takto:

#include <Wire.h>
#include <LiquidTWI2.h>

LiquidTWI2 lcd(0x20);

void setup() {
  lcd.setMCPType(LTI_TYPE_MCP23008);
  lcd.begin(16, 2);
  lcd.setBacklight(HIGH);

  lcd.setCursor(0, 0);
  lcd.print("Mereni:");
} 

void loop() {
  int hodnota = analogRead(A0);

  lcd.setCursor(0, 1);
  lcd.print("    ");
  lcd.setCursor(0, 1);
  lcd.print(hodnota);

  delay(200);
}

Co dál?

V tomto návodu jsme si představili vše potřené pro ovládání LCD displeje na desce TinyLab. Co by se dalo dělat dál? Tak třeba vypisovat hodnoty přijaté z XBee, zobrazovat počet stisků nějakého tlačítka, nebo třeba naprogramovat jednoduché menu, ve kterém se bude možné pohybovat pomocí tlačítek, nastavovat v něm hodnoty apod.

TinyLab: Rotační enkodér

$
0
0

V seriálu článků o desce TinyLab si postupně představujeme jednotlivé komponenty, které na desce nalezneme. V dnešním článku si představíme rotační enkodér.

Rotační enkodér

Rotační enkodér najdeme na TinyLab uprostřed na spodní straně desky. Na první pohled vypadá trochu jako potenciometr, ale jeho pricip je jiný. Na rozdíl od potenciometru, který má pevně daný rozsah, ve kterém ho můžeme otáčet, má enkodér rozsah neomezený. Jak je to možné? Podívejte se na obrázek níže.

Schéma rotačního enkodéru (https://www.best-microcontroller-projects.com/rotary-encoder.html)
Schéma rotačního enkodéru (https://www.best-microcontroller-projects.com/rotary-encoder.html)

Na osu enkodéru je připevněno „ozubené kolo“. Toto kolo je neustále připojeno na pin enkodéru, který je označený 1. Obvod mezi pinem 1 a 2 a mezi 1 a 3 se uzavírá a otevírá podle toho, jak osou enkodéru otáčíme. Všimněme se navíc, že pacičky pinů 2 a 3 mají různou délku a tedy k jejich doteku s ozubeným kolem dochází v různý čas. Pokud enkodérem otáčíme po směru hodinových ručiček, dotkne se pacička 2 kola dříve, než pacička pinu 3. Pokud budeme otáčet proti směru hodin, bude pořadí opačné. Díky pulzům na pinech 2 a 3, vzniklých v důsledku spojování a rozpojování obvodu, jsme schopni určit směr a rychlost otáčení. Pokud bychom si výstup enkodéru při otáčení jeho osy vynesli na graf, dostali bychom přibližně následující průběh.

Výstup rotačního enkodéru (http://www.learningaboutelectronics.com/Articles/Rotary-encoder-circuit.php)

Výstup rotačního enkodéru (http://www.learningaboutelectronics.com/Articles/Rotary-encoder-circuit.php)

Řízení enkodéru

Úplně nejjednodušším způsobem, jak z enkodéru získat nějaká data, je přistupovat k jeho pinům jako k tlačítku. Na desce TinyLab je enkodér připojen na piny 6 a 7. (Po řadě odpovídají pinům 2 a 3 na obrázku výše). Kromě toho enkodér na desce obsahuje ještě tlačítko, které stiskneme stlačením osy enkodéru dolů. Toto tlačítko je připojeno na pin A5. Dnes ho používat nebudeme, ale pokud vás zajímá, jak ho použít, podívejte se na článek o tlačítkách. Začneme tedy tím, že budeme zkoumat stav pinů 6 a 7 a budeme si ho vypisovat na sériovou linku. Nesmíme zapomenout na přepnutí přepínačů u pinů 6 a 7 do správné polohy.

byte enc2 = 6;
byte enc3 = 7;

void setup() {
  pinMode(enc2, INPUT_PULLUP);
  pinMode(enc3, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  byte s2 = digitalRead(enc2);
  byte s3 = digitalRead(enc3);

  Serial.print(s2);
  Serial.print(' ');
  Serial.println(s3);

  delay(50);
}

Když si nyní v Arduino IDE spustíme sériový plotter, získáme podobný graf:

Arduino a enkodér: Výstup sériového plotteru
Výstup sériového plotteru

Nejdříve jsem enkodérem otáčel po směru hodinových ručiček, poté proti směru. Je vidět, že při otáčení po směru hodinových ručiček předbíhá hodnota na jednom pinu, poté na druhém. Co s tím? Zkusíme detekovat změnu.

Počítání otočení enkodéru

Při zkoumání otočení nám stačí sledovat, když se hodnota jednoho pinu změní z 0 na 1 (sledujeme tedy tzv. náběžnou hranu). Když tuto náběžnou hranu detekujeme, zjistíme hodnotu na druhém pinu a podle toho zjistíme, jakým směrem se zrovna enkodér otáčí.

byte enc2 = 6;
byte enc3 = 7;

byte lastState3;

long counter = 0;

void setup() {
  pinMode(enc2, INPUT_PULLUP);
  pinMode(enc3, INPUT_PULLUP);

  lastState3 = digitalRead(enc3);

  Serial.begin(9600);
}

void loop() {
  byte state3 = digitalRead(enc3);

  if(state3 != lastState3) {
    byte state2 = digitalRead(enc2);
    lastState3 = state3;

    if(state3 == HIGH) {
      if(state2 == LOW) {
        counter--;
      }
      else {
        counter++;  
      }
  
      Serial.println(counter);
    }
  }
}

Kód výše nám po sériové lince vypíše aktuální hodnotu čítače, který používáme k určování pootočení enkodéru od počátečního stavu.

Kód výše má ale jednu chybu. Přijdete na to jakou?

Co když bude zrovna Arduino zaměstnané nějakým složitým výpočtem a nevšimne si, že došlo ke změně hodnoty na pinu?

Jak se s tím vypořádat? Pomůže přerušení.

Přerušení

Přerušení je způsob, kterým můžeme procesor, na kterém běží náš program, na chvilku vyrušit (jak název napovídá) a donutit ho dělat něco jiného. Procesor si tedy počítá hlavní program, když v tom najednou přijde přerušení, on si na chvíli odskočí, vykoná určenou funkci, a poté zase pokračuje ve vykonávání programu.

Zdroje přerušení můžou být různé. Mohou být vyvolaná například dokončením měření analogové hodnoty, nebo také změnou na pinu. Dopodrobna se přerušením nebudeme zabývat, ale ukážeme si, jak ho využít při zjišťování změny stavu tlačítka. Důležité je si uvědomit, že ne všechny piny mohou přerušení při změně hodnoty vyvolat. Když se podíváme do dokumentace, zjistíme, že Arduino Leonardo, na kterém je TinyLab založen, umožňuje vyvolat přerušení změnou na pinech 0, 1, 2, 3, 7. Nás tedy pro naše účely bude zajímat pin 7. Program se stejnou funkčností, jako výše, ale s využitím přerušení, může vypadat následovně.

byte enc2 = 6;
byte enc3 = 7;

volatile long counter = 0;
volatile bool changed = false;

void setup() {
  pinMode(enc2, INPUT_PULLUP);
  pinMode(enc3, INPUT_PULLUP);

  Serial.begin(9600);

  attachInterrupt(digitalPinToInterrupt(enc3), encoderChange, RISING);
}

void loop() {
  if(changed) {
    Serial.println(counter);  
    changed = false;
  }
}

void encoderChange() {
  detachInterrupt(digitalPinToInterrupt(enc3));
  byte state2 = digitalRead(enc2);

  if(state2 == LOW) {
    counter--;
  }
  else {
    counter++;  
  }

  changed = true;
  attachInterrupt(digitalPinToInterrupt(enc3), encoderChange, RISING);
}

Rozeberme si představený kód. Proměnné counter a changed slouží k počítání pozice enkodéru a k informování hlavního programu, že došlo ke změne. Všimněte si klíčového slova volatile před deklarací proměnných. To musíme přidat u všech proměnných, které chceme ve funkci obsluhující přerušení měnit.

Ve funkci setup nejdříve nastavíme piny 6 a 7 jako vstupní, inicializujeme sériovou linku a následně nastavíme obsluhu přerušení. Funkce attachInterrupt jako první parametr bere číslo přerušení. Pokud chceme zjistit číslo přerušení, které náleží zvolenému pinu, použijeme k tomu funkci digitalPinToInterrupt. Druhým parametrem je funkce, která se stará o obsluhu přerušení a třetím je informace o tom, na jakou změnu čekáme. U nás je to náběžná hrana (rising edge). Existují i další možnosti – viz dokumentace.

Ve funkci loop sledujeme proměnnou change a pokud je nastavena na true, vypíšeme hodnotu počitadla na sériovou linku a proměnnou změníme na false, aby při dalším volání funkce loop nedošlo k vypsání.

Poslední funkcí je encoderChange, která slouží k obsluze přerušení. V ní nejdříve zrušíme přerušení deaktivujeme (aby se obsluha přerušení nepřerušila v půlce dalším přerušením), poté zjistíme stav druhého pinu a podle toho aktualizujeme počitadlo. Nakonec obsluhu přerušení opět aktivujeme.


K enkodéru by se toho dalo napsat ještě více (například něco o ošetření zákmitů), stejně tak o přerušení. To si ale nechejme zase na jindy.



Klání Arduino robotů na VŠB Ostrava 2019

$
0
0

30. dubna se na Fakultě elektrotechniky a informatiky VŠB Ostrava konal další ročník soutěže Students4Automotive. Celkem 14 týmů si vyzkoušelo vlastní konstrukci a programování robotického vozítka s Arduinem a změřilo své síly v různých robotických disciplínách.

O robotické soutěži Students4Automotive (S4A) jsme na Arduino.cz již psali. Na článek a podrobnosti o součástkách vozítek se můžete podívat ZDE.

Předešlý ročník všem ukázal, jak zajímavé výsledky se dají dosáhnout, když se podaří vytvořit úrodnou půdu pro rozvoj nápadů, kreativity a soutěžení. Soutěžící se při akci naučili spoustu nových věcí a vyzkoušeli si je rovnou v praxi. Ono, když si člověk může tak trochu pohrát, to se pak dějí věci! A s letošním ročníkem to nebylo jinak!

Jak soutěž probíhala a jak to celé dopadlo, to se dozvíte v článku.

Co měli roboti dělat?

Zatímco minulý rok se jezdilo po čáře a projíždělo se bludiště, tak letos to měli soutěžící zajímavější. Pořadatelé přidali na čáru překážku a také změnili disciplínu bludiště.

Překážku muselo vozítko samozřejmě objet a pak pokračovat po čáře až do cíle. Pro bludiště museli soutěžící vytvořit mobilní aplikaci na ovládání robota bezdrátově přes WiFi modul NodeMcu a projet bludiště s využitím svého chytrého zařízení. Tyto změny pravidel nejsou na první pohled úplně klíčové, ale průchodnost soutěží zásadně ovlivnily. Největší „vyřazovák“ byla samozřejmě překážka.

Průběh soutěže S4A

Hned z rána si soutěžící mohli otestovat své roboty na všech soutěžních dráhách. Z minula dobře věděli, že nové podmínky (dráhy, osvětlení, když to má fungovat – nefunguje to) mohou chování robota hodně ovlivnit. Někteří studenti upravovali snímače čáry, jiní ladili program, nastavovali snímač překážky, vybíjeli baterie nebo je naopak nabíjeli. Prostě takový šrumec před bouří, kde si člověk vyzkouší improvizovat a pracovat malinko pod tlakem, a to se do praxe taky hodí. Potom následoval oficiální úvod a rozdělení týmů do dvou skupin. První skupina šla jezdit a druhá prezentovat své výtvory. Pak se to celé vyměnilo a soutěž pokračovala. Pořadatelé průběžné zaznamenávali data, hodnotili a aktualizovali výsledkovou listinu, která se promítala na zeď přímo v prostorách soutěže. Byly to nervy.

Prezentace Arduino robotů

Dobrá prezentace je základ, ale k vítězství nestačí. To bylo hned jasné všem týmům, které si vyzkoušely chování svého vozítka na trati. Prezentace byly omezeny z časových důvodů na 7 minut a tak se kvalitní příprava vyplatila. Prezentace byly různorodé a bylo vidět, že vytvořit takové robotické vozítko může otevřít dost široké téma. Kromě všech povinných a očekávaných pasáží leckde nechyběly ani vlastní náměty na zajímavá vylepšení, příklady mobilních aplikací pro Android i iPhone, návrhy kapotáže auta pro 3D tisk, různé postřehy z práce na projektu … někdy i vtipné. Prezentace stály určitě za to a člověk cítil minimálně 14 týmových duchů, kteří se vznášeli aktivně v prostoru. Soutěžní prezentace jsou k dispozici ke stažení ZDE a rozhodně stojí za inspirativní shlédnutí, i když to není naživo.

Jak roboti jezdili a jak to dopadlo?

Zatímco ježdění po čáře většina týmů zvládla, tak na překážce si naopak většina z nich vylámala své elektronické obvody nebo programové smyčky. Zdolat překážku zvládly nakonec jen 3 týmy, které se také umístily na prvních třech místech. Ale mohlo to být i všechno jinak, pokud by překážka vyšla také Základní škole Slavkov! Ale bojovalo se do posledního připojeného drátu, vyměněné baterie nebo přidaného řádku kódu.

I když vítězné týmy jsou jen 3, tak velké uznání patří všem, kteří se zvládli se svým řešením postavit na start a bojovat! Detailní výsledková listina je na konci článku.

Na vítěze čekaly zajímavé ceny od sponzorů a partnerů soutěže – firmy HELLA AUTOTECHNIK NOVA s.r.o., Allgeier Engineering Czech s.r.o. a samozřejmě náš e-shop HW Kitchen.

Fotodokumentace ze soutěže

Co všechno umí takový Arduino robot?
Co všechno umí takový Arduino robot?
Z čeho se skládá Arduino vozítko?
Z čeho se skládá Arduino vozítko?
Elektronický modul pro snímač čáry nebo překážek
Elektronický modul pro snímač čáry nebo překážek
Příklad ovládací aplikace pro Android
Příklad ovládací aplikace pro Android
Některé týmy měly dobré technické zázemí...
Některé týmy měly dobré technické zázemí…
Porota hodnotí provedení Arduino robota
Porota hodnotí provedení Arduino robota
Čára a bludiště pro soutěž robotů
Čára a bludiště pro soutěž robotů
Příprava na jízdu bludištěm
Příprava na jízdu bludištěm
Testování na čáře
Testování na čáře
Lazení programu robota přímo na čáře
Lazení programu robota přímo na čáře
Arduino robot na startu
Arduino robot na startu
Robot se blíží k překážce
Robot se blíží k překážce
Příprava na start jízdy bludištěm
Příprava na start jízdy bludištěm
Arduino vozítko s připojením do ladícího střediska
Arduino vozítko s připojením do ladícího střediska
Robot při vjezdu do bludiště
Robot při vjezdu do bludiště
Testování na čáře
Testování na čáře
Robot se vrací na start
Robot se vrací na start
Hlavní je se v bludišti neztratit
Hlavní je se v bludišti neztratit
Průjezd bludištěm
Průjezd bludištěm
"V cílí se budu smát ještě o něco víc"
„V cílí se budu smát ještě o něco víc“
Robot v servisu
Robot v servisu
Foto s vítězi soutěže Students4Automotive!
Foto s vítězi soutěže Students4Automotive!
Výsledky soutěže S4A
Výsledky soutěže Students4Automotive

Operátory v C/C++

$
0
0

Abychom mohli v programovacím jazyku vůbec něco naprogramovat, obsahuje jazyk dle typu různé skupiny použitelných konstrukcí. Jsou to podmíněné bloky (if…else), cykly (while, for, …) a další. Samostatnou skupinou jsou operátory, které slouží jednoduše k tomu, abychom z nějaké hodnoty udělali hodnotu jinou. S operátory jste se už určitě setkali. Může to být třeba znaménko + tak, jak jej známe z matematiky.

V tomto a následujících článcích si představíme výběr nejpodstatnějších operátorů z C/C++. Ucelený přehled naleznete například na Wikipedii.

Dělení operátorů

Operátory lze dělit podle několika kritérií. První z dělení je podle tzv. arity, druhé dělení podle toho, jak operátory přistupují k hodnotám, které jim „poskytneme“.

Dělení dle arity

Arita nám říká, kolik hodnot musíme operátoru „předložit“, aby byl schopný vypočítat novou hodnotu. Těmto hodnotám budeme dále říkat operandy. V C/C++ nalezneme operátory s aritou 1, 2 a 3. Říkáme jim také unární, binární a ternární operátory. Dále si představíme pouze příklady operátorů v jednotlivých skupinách dle arity a podrobněji si je popíšeme ve druhém způsobu dělení.

Unární operátory

Této skupině operátorů stačí k získání hodnoty pouze jeden operand. Patří mezi ně například unární -x (minus), nebo *x (získání hodnoty ukazatele – viz článek o ukazatelích).

Binární operátory

Operátory z této skupiny jsou jistě všem důvěrně známé, protože jsme je používali už na základní škole. Jsou to například x+y, nebo x<y.

Ternární operátor

Ternární operátor nalezneme v C/C++ pouze jeden. Je jím operátor c ? x : y. Jeho zápis může vypadat trochu podivně. Nejdříve se program podívá na operátor c a pokud je jeho hodnota vyhodnocena jako pravda, má výraz hodnotu x, jinak má hodnotu y. Tento operátor si ukážeme na příkladu.

int maximum = (x > y) ? x : y;
// pro x = 10, y = 20 -> maximum = 20
// pro x = 30, y = 20 -> maximum = 30

Dělení dle přístupu k operandům

Druhou možností dělení je podle toho, jakým způsobem operátory přistupují k operandům. Jsou to operátory:

  • aritmetické
  • relační
  • logické
  • bitové
  • operátory přiřazení
  • operátory přetypování
  • pomocné operátory

Aritmetické operátory

Tyto operátory jsou nejintuitivnější a většinu znáte ze školy. K operandům přistupují jako k číselným hodnotám (tj. 4 + 7 je 11 apod.). Musíme si u nich dát pozor na to, aby se výsledek vešel do proměnné, do které ho ukládáme.

Operátor plus

Operátor plus se vyskytuje v binární i unární podobě. V unární podobě je zde spíše jako doplnění unárního operátoru minus. Lze jej ale využít v pár speciálních případech.

// binární plus
a + b  
1 + 2

// unární plus
+a
+4

Operátor minus

Take se vyskytuje v unární i binární podobě. V unární podobě obrací znaménko čísla.

// binární minus
a - b  
1 - 2

// unární minus
-a
-4

// použití unárního + a - (+ není nutné uvádět, ale může sjednotit zápis)
int x[] = {+1, -1, +2, -2, ...}

Operátory násobení, dělení a modulo

Mají pouze binární variantu.

a * b   // násobení
a / b   // dělení
a % b   // modulo (zbytek po dělení)

Za komentář stojí operátor modulo, který vrací zbytek po dělení. Tedy:

0 % 4 = 0 // zbytek po dělení 0/4 je 0
1 % 4 = 1 // zbytek po dělení 1/4 je 1
2 % 4 = 2 // zbytek po dělení 2/4 je 2
3 % 4 = 3
4 % 4 = 0
5 % 4 = 1
...

Pro chování modula se zápornými operandy viz tato diskuse.

Operátory inkrementace a dekrementace

I s těmito operátory jste se pravděpodobně setkali – například v cyklu for. Jsou to unární operátory, přičemž operátor ++ inkrementuje hodnotu o 1 (tj. zvyšuje o 1), operátor – – ji dekrementuje (snižuje). Tyto dva operátory navíc mají tzv. prefixovou a postfixovou variantu, které se od sebe mírně liší chováním.

a++ // postfixové ++
++a // prefixové  ++
a-- // postfixové --
--a // prefixové  --

Serial.begin(9600);

int a, b;

// následující dva příklady se funkčně neliší
a = 10;
a++;                // zvýší hodnotu a o 1
Serial.println(a);  // vypíše 11

a = 10;
++a;                // zvýší hodnotu a o 1
Serial.println(a);  // vypíše 11

// následující dva už ano
a = 10;
b = a++;            // načte se hodnota a, ta se uloží do b a poté se hodnota a zvýší o 1 => a = 11, b = 10
Serial.print(a);    // vypíše 11
Serial.print(' ');
Serial.println(b);  // vypíše 10
                    
a = 10;
b = ++a;            // hodnota a je zvýšena o 1, tato nová hodnota je uložena do b
Serial.print(a);    // vypíše 11
Serial.print(' ');
Serial.println(b);  // vypíše 11

Poznámka: Pro binární operátory se v C/C++ používá tzv. infixová notace, např. (a + b). Matematika ale připouští pro binární operátory i prefixovou, či postfixovou notaci (obecně i pro n-ární operátory). Pro plus by prefixová notace vypadala (+ a b), postfixová (a b +). Pokud jste někdy používali jazyk LISP, tak tento jazyk využívá právě prefixové notace.

O dalších skupinách operátorů si povíme zase příště.

Operátory v C/C++ – 2. díl

$
0
0

V minulém článku jsme si vysvětlili, jak je možné operátory v C/C++ rozdělit a také jsme si ukázali skupinu matematických operátorů. Dnes budeme v zavedeném systému pokračovat.

Relační operátory

Relační operátory slouží k porovnávání dvou hodnot – nejčastěji se jedná o číselné hodnoty. Relace v matematice popisují vztah mezi hodnotami. V C/C++ jsou relační operátory vždy binární. Jejich výsledkem je pravdivostní hodnota, která značí, jestli mezi operandy platí, nebo neplatí zvolená relace. I s těmito operátory jste se už určitě někde setkali.

a == b  // a je rovno b
a != b  // a je různé od b
a < b   // a je menší než b
a > b   // a je větší než b
a >= b  // a je větší nebo rovno b
a <= b  // a je menší nebo rovno b

Jejich typické použití je v podmínce u příkazu if.

if(a < b) {
  Serial.println("a je mensi nez b");  
}

Poznámka: Pozor na porovnávání řetězců. Překladač sice většinou zápis typu „aaa“ < „aab“ zvládne bez problémů, ale výsledek nebude takový, jaký čekáte. Pokud chcete porovnat dva řetězce, použijte například funkci strcmp. Také pozor na to, že tato funkce nevrací pravdivostní hodnotu, ale -1, 0, nebo 1 podle výsledku porovnání.

Logické operátory

Logické operátory pracují s operandy jako s logickými, tedy pravdivostními hodnotami true (pravda) a false (nepravda).

Malé historické okénko: Jazyk C původně pro pravdivostní hodnoty vlastní datový typ neměl a jako hodnota false byla brána číselná hodnota 0. Číselné hodnoty různé od 0 byly brány jako true (tedy i záporné hodnoty). Časem vznikla jednoduchá knihovna stdbool, která do C přinesla možnost používat typ bool a konstanty true, false. Byly to ale pouze makra. Skutečný datový typ bool přišel až s C++. Proměnné tohoto typu mohou nabývat dvou hodnot – true a false. Přístup k pravdivostním hodnotám, který byl použitý v C, ale zůstal i v C++, takže typ bool ani nemusíme využívat.

V C/C++ nalezneme tři logické operátory – AND, OR a negace.

Logické AND

Logické AND (česky spojka A) je binární operátor, jehož výsledek je true, pokud jsou oba operandy true. Tento operátor v kódu zapisujeme pomocí znaků &&.

aba && b
falsefalsefalse
falsetruefalse
truefalsefalse
truetruetrue

Logické OR

Výsledkem operátoru OR (česky NEBO) je true, pokud je alespoň jeden z operandů true. OR zapisujeme pomocí znaků ||.

aba || b
falsefalsefalse
falsetruetrue
truefalsetrue
truetruetrue

Logická negace

Logická negace (anglicky NOT) je unární operátor, který obrací pravdivostní hodnotu.

a!a
falsetrue
truefalse

Bitové operátory

Bitové operátory jsou v mnohém podobné těm logickým. Rozdíl je ale v tom, že pracují na úrovni jednotlivých bitů. Kromě bitových AND, OR a negace existuje ještě bitové XOR a poté posuvy doleva a doprava.

Bitové AND, OR a XOR

Jsou operátory AND, OR a XOR zapisované popořadě &, | a ^. Tyto operátory postupují v čísle bit po bitu. Výsledek je popsán v následující tabulce (AND a OR je obdobné, jako u logických operátorů, XOR je 1, pokud právě jeden bit na dané pozici má hodnotu 1).

aba & ba | ba ^ b
00000
01011
10011
11110
Binární bitové operátory

Bitová negace

Bitová negace (zapisovaná ~) jednoduše otočí všechny bity. Tedy:

(11001010)BIN = ~(00110101)BIN

Bitové posuvy

Velice zajímavými operátory jsou dva binární operátory << a >>, tedy bitové posuvy doleva a doprava. Oba se na číslo podívají jako na posloupnost nul a jedniček, kterou posunou o jeden bit doprava/doleva. Z jedné strany nula či jednička „vypadne“ a na druhou je potřeba ji vhodně doplnit.

Jejich zápis je: hodnota >> posuv, kde posuv značí, o kolik bitů se má hodnota posunout (v tomto případě doprava). Bitový posuv doleva (<<) je jednodušší. Vlevo jeden bit ubereme a vpravo přidáme bit s hodnotou 0.

U posuvu doprava (>>) je situace trochu komplikovanější, protože doplňujeme bit, který má stejnou hodnotu, jako znaménkový. Kdybychom totiž vždy doplnili 0, udělali bychom z bezznaménkového čísla ihned číslo znaménkové (o reprezentaci čísel jsme psali zde, o datových typech tady).

Bitové posuvy

Na zbylé bitové operátory se podíváme zase příště.

C++ operátory – 3. díl

$
0
0

V posledních dvou dílech (1, 2) jsme si představili nejdůležitější operátory, které můžeme v C/C++ využít. Dnes si jejich výčet dokončíme.

Operátory přiřazení

Operátor přiřazení zapisujeme „=“. Nalevo musí být místo v paměti (třeba proměnná), kam zapisujeme hodnotu napravo. Je to tedy například:

  a = b;

Tento operátor jistě znáte. Je dobré si uvědomit, že přiřazení je v C/C++ (stejně jako ostatní operátory) výraz – tedy produkuje hodnotu. Proto je možná následující konstrukce:

int a, b;
a = b = 10;

Nejdříve je do b přiřazena hodnota deset. Přiřazení nabývá hodnoty 10, která je dále uložena do proměnné a. Ze stejného důvodu jde použít i následující (a podobné):

char c;
while((c = Serial.read()) != 0) { ... }

Je také zajímavé, že lze tento operátor kombinovat i s některými dalšími binárními operátory a dosáhnout tak kratšího zápisu. Například:

  a = a + b;

lze psát zkráceně jako:

  a += b;

Kromě operátoru pro sčítání lze použít následující:

OperátorPopisPoužitíVýznam
+=Plusa += ba = a + b
-=Minusa -= ba = a – b
*=Kráta *= ba = a * b
/=Dělenoa /= ba = a / b
%=Moduloa %= ba = a % b
<<=Bitový posuv vlevoa <<= ba = a << b
>>=Bitový posuv vpravoa >>= ba = a >> b
&=Bitové ANDa &= ba = a & b
^=Bitové XORa ^= ba = a ^ b
|=Bitové ORa |= ba = a | b

Další operátory

Do této skupiny patří operátory, které moc nelze zařadit do jiných skupin.

Operátor čárka

Prvním z nich je operátor čárka. Podívejte se na následující výstřižek kódu. Jaká bude hodnota proměnné c?

int a = 10;
int b = 20;
int c;

c = (a, b);

Serial.println(c);

Pokud si program spustíte, vypíše se na sériovou linku hodnota 20. Je tomu tak proto, protože operátor čárka vyhodnocuje své operandy zleva doprava a „vrátí“ hodnotu pravého. Použití tohoto operátoru je poměrně omezené a také zhoršuje čitelnost kódu, takže bych ho nedoporučoval. Využijeme ho ale například v případě, že chceme procházet 2D pole po diagonále.

int a[3][3] = { 
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

for(int i = 0, j = 0; i < 3; i++, j++) {
  Serial.println(a[j][i]);
}

U tohoto operátoru je potřeba si dávat pozor na precedneci (viz závěr článku). Následující dva řádky mají totiž rozdílné chování:

c = (a, b);
c = a, b;

První řádek má chování jesné. Nejdříve se vyhodnotí závorka a z ní se vezme hodnota b, která se přiřadí do proměnné c.

Ve druhém řádku je nejdříve vyhodnoceno přiřazení (tedy hodnota a se přiřadí do c) a až poté je vyhodnocen operátor čárka a celý řádek má hodnotu b.

Operátory přetypování

Slouží k převodům mezi datovými typy. Jejich použití dává smysl hlavně u číselných datových typů a u ukazatelů. Některé převody probíhají automaticky – takzvaně implicitně. Je tomu tak například, když provádíme operace s dvěma čísly různého datového typu (int + long, int + double, …). V některých případech je nutné uvést typ ručně, tedy explicitně. Jsou to často různé operace s ukazateli.

Přetypování je unární prefixový operátor, který zapisujeme pomocí kulatých závorek, do kterých uvedeme typ, na který chceme přetypovávat.

int i = 257;      // hodnota typu int
int* ip = &i;     // ukazatel na hodnotu typu int
byte* bp = (byte *) ip; // ukazatel na hodnotu typu byte

// ip a bp ukazují na stejnou adresu, ale chování se liší
Serial.println(*ip);  // -> 257
Serial.println(*bp);  // -> 1

Výše je jeden z možných příkladů použití operátoru přetypování. Ukazatel na int přetypujeme na ukazatel na byte. Poté si hodnoty těchto dvou ukazatelů vypíšeme. Pro ukazatel na int má hodnota 2 byte. Dojde tedy k jejich načtení z paměti a výpisu hodnoty. V případu s ukazatelem na byte je ale přečten z paměti jen jeden byte.

Operátor sizeof

I když by se mohlo zdát, že se jedná spíše o funkci, není tomu tak. Jedná se o unární operátor, který se podívá na datový typ svého operandu a vrátí jeho velikost v bytech. Sizeof jsme hojně používali ve článku o celočíselných datových typech. Setkáme se se dvěma způsoby zápisu:

int a;
  
sizeof a;   // =2
sizeof(a);  // =2

Závorky kolem operandu zde nemusejí být, protože se nejedná o volání funkce. Je to podobná situace, jako u a+b vs. (a)+(b).

Přístup k prvku pole

Pro přístup k prvku pole používáme následující zápis:

int pole[] = {1, 2, 3}; // vytvoření pole

pole[2] = 100; // přepsání hodnoty třetího prvku
Serial.println(pole[1]); // přístup ke druhému prvku: 2

Indexování v poli probíhá od 0 (tedy první prvek pole má index 0).

Poznámka: Pole se do jisté míry chovají jako ukazatele. Adresa pole je totožná s adresou prvního prvku pole. Při indexaci tedy program zjistí adresu prvního prvku pole a velikost datového typu prvků pole a na základě těchto hodnot vypočte adresu požadovaného prvku.

Přístup k prvku struktury

Zapisujeme znakem „.“ (tečka). Pokud struktury neznáte, můžete si o nich přečíst například zde. V rychlosti struktury slouží ke sdružování dat, které patří k sobě. Například bod ve 3D prostoru by mohl být popsán následovně:

struct Bod3D {
  int x;
  int y;
  int z;
};

Vytvoření proměnné datového typu struct Bod3D, nastavení jejích hodnot a přístup k hodnotám pomocí operátoru tečka vypadá takto:

struct Bod3D A;
A.x = 10;
A.y = 20;
A.z = 30;

Serial.println(A.x); // 10

Operátory pro práci s ukazateli

Ukazatelům byl věnován samostatný článek, takže jenom ve stručnosti:

Adresa proměnné

Pro zjištění adresy proměnné se používá operátor „&“ (ampersand). Je možné si ho zapamatovat pomocí mnemotechnické pomůcky „ampersand – adresa“. Tomuto operátoru se také říká reference.

Hodnota proměnné

Opačnou operací k referenci je dereference, tedy zjištění hodnoty proměnné. V C/C++ se používá k jeho zápisu symbol „*“.

Přístup k prvku struktury

Pokud máme ukazatel na strukturu, je možné k jejím položkám přistupovat následovně:

// vytvoření struktury a nastavení hodnot jejích položek
struct Bod3D A;
A.x = 10;
A.y = 20;
A.z = 30;

// vytvoření ukazatele na strukturu
struct Bod3D *p = &A;

// práce s hodnotami
(*p).y = 200;

Zápis (*p).y = 200; říká, že nejdříve přistoupíme k hodnotě ukazatele p a poté nastavíme její položku y na hodnotu 200. To může vypadat kostrbatě, proto byl zaveden i operátor „->“ pro přístup k prvku struktury, na kterou máme ukazatel. Následující dva zápisy jsou ekvivalentní:

p->x = 100;
(*p).x = 100;

Precedence operátorů

Precedence operátorů slouží k určení pořadí vyhodnocování složitějších výrazů. Z matematiky například víme, že výraz 10+20*30 je vyhodnocen tak, že je nejdříve vypočten součin 20*30 a k výsledku je přičtena hodnota 10. Abychom byli schopni takto vyhodnotit i další operátory, mají operátory přiřazeny precedenci, tedy pořadí v jakém jsou vyhodnocovány. Ta je daná následující tabulkou (převzato z https://cs.cppreference.com/w/cpp/language/operator_precedence).

Precedence Operátor Popis Asociativita
1 :: scope resolution zleva
2 ++ -- postfixové operátory inkrementace a dekrementace
() operátor volání funkce
[] operátor přístupu k prvku pole
. výběr členu přes referenci
-> výběr členu přes ukazatel
3 ++ -- prefixové operátory inkrementace a dekrementace zprava
+ unární plus a mínus
! ~ logická a bitová negace
(type) operátor přetypování
* operátor dereference
& získání adresy prvku
sizeof velikost prvku
new, new[] dynamická alokace paměti
delete, delete[] dynamicka dealokace paměti
4 .* ->* ukazatel na člen zleva
5 * / % operátory násobení, dělení a zbytek po dělení
6 + operátory součtu a rozdílu
7 << >> bitový posun doleva a doprava
8 < <= Relační operátory < a ≤
> >= Relační operátory > a ≥
9 == != Relační operátory = a ≠
10 & bitové AND
11 ^ bitové XOR (výlučný součet)
12 | bitové OR
13 && logické AND
14 || logické OR
15 ?: ternární operátor[1] zprava
= přímé přiřazení
+= −= přiřazení přičtením a odečtením
*= /= %= Přiřazení násobením, podílem a zbytkem
<<= >>= přiřazení bitovým posunem doleva a doprava
&= ^= |= přiřazení bitovou operací AND, XOR a OR
16 throw operátor throw (pro výjimky)
17 , operátor čárka zleva

Čím nižší je číslo precedence, tím dříve je operátor vyhodnocován (tj. má vyšší prioritu). Některé operátory v tabulce jsme ve článcích neprobrali, ale při programování Arduina se s nimi moc často nesetkáte.

DIY multimetr

$
0
0

Pokud jste si někdy říkali, jak se dá postavit digitální multimetr, podívejte se na projekt od Youtubera s přezdívkou Elektronoobs. Ten si jeden takový postavil na základě desky Arduino Nano.

Kromě Arduina projekt obsahuje mimo jiné ještě OLED displej (128×64 pixelů), na kterém je zobrazen stav baterie a měřená hodnota a 16-bit analogově-digitální převodník pro přesná měření. Napájení zajišťuje malá LiPo baterie včetně nabíjecího modulu. Všechny komponenty jsou umístěné do krabičky vytištěné na 3D tiskárně.

Arduino multimetr - měření induktance
Arduino multimetr – měření induktance

Zařízení umí kromě napětí, odporu a proudu měřit také indukčnost a kapacitu (tedy vlastnosti typické pro cívky a kondenzátory). Tyto dvě veličiny často neumí měřit ani dražší profi multimetry.

Pokud byste si takový multimetr chtěli postavit sami, schéma, kód, seznam součástek a další informace naleznete na stránkách Electronoobs. Zařízení v akci můžete vidět ve videu níže.

Přeloženo z https://blog.arduino.cc/2019/02/12/versatile-multimeter-made-with-arduino-nano/ a upraveno.

Arduino NFC vrátný

$
0
0

Dnes se podíváme podrobněji na praktický Arduino projekt NFC vrátný bastlíře Petra Němce, který řeší pohodlné otvírání klasických garážových vrat! Nějaké informace o projektu jsme již zveřejnili na Facebooku Arduino.cz a projekt vás zaujal, tak jsem se rozhodl připravit o projektu zvláštní článek, ať si přijdou na své i bastlíři, co nevyužívají Facebook a vůbec všichni, co si chtějí něco takového zbastlit.

Petr za projekt dostává slevu 30% na zakoupení věciček na našem eshopu HW Kitchen. Tato možnost je tady samozřejmě i pro další bastlíře, ale o tom jsme psali v jiném článku.

A teď už dávám slovo Petrovi! 😊

V rámci totální rekonstrukce domu svépomocí jsme potřebovali automatizovat otevírání starších vrat pro nově přistavěnou garáž. Jsou to dvoukřídlá dřevěná vrata, jen dočasná a původně, i z důvodu zabezpečení, byla koncipovaná jako otvíratelná pouze zevnitř. Jejich dočasnost se prodloužila a jak jsme se nastěhovali a narodil se prcek, bylo potřeba vraty garáže procházet čím dál častěji zejména kvůli kočárku… Obíhat celý barák bylo hodně nepraktické. Nechtěl jsem ale dělat nějaký z venku přístupný zámek. Až najednou přišla myšlenka, nechat systém západek, a pomoci jim servem, Arduinem NANO a NFC modulem pro identifikaci. Na stole jsem to ubastlil už v roce 2018, pak jsem měl jiné priority, až jsem se dokopal to dorazit v červnu 2019. Od té doby to šlape perfektně.
Kód není žádná hitparáda, menu mám ještě přes delay, ale je potřeba jen při mazání/přidávání NFC tagů. V EEPROMce je naprogramovaná celá rodina + 3 rezervní pozice a každé jméno může mít až 3 tagy (klíče). K přidávání a odebírání tagů, tedy pro vstup do menu, je potřeba Master karta, to je jeden určený NFC tag.
Normální provoz vypadá tak, že přiložíte ke čtečce tag, když není rozpoznán (není v EEPROM), LED dioda červeně zabliká. Když je rozpoznán, 20kg servo zatáhne za lanka, lanka za západky, a garáž se otevře. Pak začne odpočet, led zeleně bliká a až dobliká, servo povolí lanka a pružiny na západkách zajistí vrata garáže.
Po zkušenostech jsem na krabici přidal i mini usb konektor, kdyby bylo potřeba přehrát sw, např. opravit chyby. Montoval jsem ho poprvé, takže jsem netušil, že se montuje zespodu a ne ze shora. Nu vot. Garáži je to jedno. :-)

Arduino NFC vrátný v akci
Arduino NFC vrátný v krabici

Návod a rady rovnou od Petra

  • PCB -ať už univerzální, nebo na míru- si nechte vyrobit v Číně na JLCPCB. PCB v příloze je dělané tak, že je podélně „rozpůlené“ a doleva a doprava jsou propojené prokovené díry. Takže je to takový breadboard.
  • V EEPROM je zavedeno 10 jmen uživatelů a každý uživatel může mít až 3 tokeny. V programu Inicializace EEPROM jsou vzorová jména, přepište si svými.
  • Do Arduina (Nano V3) je třeba nahrát nejprve soubor inicializující EEPROM. Tenhle program napálí do EEPROMky jména držitelů NFC tokenů a výchozí hodnoty 255 255 255… Jména držitelů si v tom souboru přepište, ale pozor: se zapnutým Insertem-přepisem znaků, aby byla dodržena délka znaků ve jméně, jinak to nebude fungovat!
  • Jakýkoliv jeden NFC token použijte jako MASTER KARTU. Zjistěte -například v NFC mobilu- sériové číslo tokenu a to zadejte do hlavního programu. V hlavním programu se zadávají dekadické hodnoty, nikoliv hexadecimální. Převod zvládne i Windows kalkulačka ve vědeckém módu.
  • 4tlačítková klávesnice: při pohledu na box (viz foto) z čelní strany je vývod kabelu doleva. Tlačítka mají být označena shora dolů: šipka nahoru, šipka dolů, symbol „enter“ a křížek.
  • Použitá čtečka reaguje pouze na tokeny na frekvenci 13,56 Hz. Existují i tokeny a čtečky na frekvenci 125 kHz a tyto tokeny s touto čtečkou pochopitelně nefungují. Existují tokeny i ve formě malých kulatých samolepek (průměr cca 2cm). Chtěl jsem tyto nalepit na zadní stranu telefonu (který dnes máme pořád u sebe), ovšem to nefunguje. Blízkost telefonu je velkou překážkou a čtečka token nalepený na mobilu nepřečte ani na těsnou vzdálenost.
Elektronika a víko krabice pro NFC vrátný
Elektronika a víko krabice pro NFC vrátný
Pohled na elektroniku uvnitř krabice
Pohled na elektroniku uvnitř krabice
Detail západky na vratech
Detail západky na vratech

Funkce programu

  • Po startu programu servo zavře vrata
  • Poté čeká na přiložení NFC tokenu nebo stisku tlačítka pro otevření zevnitř. V programu je nějaká chyba (resp. programoval jsem to už nějaký čas zpátky a s tlačítkem jsem původně nepočítal), takže tlačítko je třeba stisknout déle, aby program zareagoval. Přiložením NFC čipu se vrata otevřou rychleji.
  • LED dioda: při čekání na klíč svítí červeně. Při přiložení neznámého tokenu červeně zabliká. Při přiložení známého tokenu po dobu otevírání vrat (pohyb serva) svítí žlutě, poté zeleně. Přibližně za 7 sekund od otevření (už nevím přesně) se vrata znova zavřou. Pár sekund před zavřením začne dioda blikat zeleně, pak servo zavře vrata a dioda opět svítí červeně.
  • OLED display: standardně nesvítí nic. Při přiložení známého tokenu se rozsvítí „OTEVÍRÁM“ a pod tím jméno držitele tokenu. Po otevření svítí „OTEVŘENO“. A nakonec „ZAMKNUTI ZA:“ a odpočet času.¨
  • MASTER KARTA: po přiložení se rozsvítí nápis „MASTER KARTA“ a po chvíli dojde k zobrazení prvního jména z EEPROM. Klávesami nahoru a dolů jde listovat mezi jmény. Dole na displeji nabízí akci „ENTR=SMAŽ KLÍČE“ (ve slově enter se na displej nevešlo druhé E). Po stisku klávesy ENTER se smažou všechny klíče-tokeny u daného uživatele a program vyzve k postupnému přiložení klíčů 1-3 k danému uživateli. Chcete-li zaregistrovat jen dva klíče, přiložte první, pak druhý a stiskněte klávesu KONEC (křížek). Tím se dostanete zpět na přehled uživatelů a klíčů. Opakovaný stisk klávesy KONEC vyskočí do pohotovostního režimu a displej zhasne. Klávesu KONEC je potřeba někdy podržet o chvíli déle.
  • Když něco nevyjde, zespoda je na boxu tlačítko RESET. Program ale u nás běží už měsíc nonstop a bez závad.
  • Do sériového portu program vypisuje debug data. V programu je nastavena rychlost 9600 bps.
Arduino NFC vrátný - schéma projektu
Arduino NFC vrátný – schéma projektu

Projekt je pěknou ukázkou toho, že bastlení s Arduinem může pomoci i se zdánlivě těžko řešitelným požadavkem a že pokud se chce, tak může takový projekt zvládnout i začátečník. V projektu jsou navíc zajímavě řešeny některé funkční detaily bez přílišného důrazu na méně podstatné věci. Za to rozhodně palec nahoru! Nakonec koupit a nainstalovat úplně nová vrata by bylo asi finančně náročnější :).

Všechny data k projektu, jako program pro Arduino, 3D model krabičky pro NFC modul, podklady pro PCB nebo rozpis materiálu, najdete zde.

Bastlení ZDAR!

TinyLab: EEPROM paměť

$
0
0

Paměti slouží k uchovávání dat. Typů pamětí existuje velké množství a ne všechny se hodí ke všem účelům. Kupříkladu magnetické pevné disky se hodí na dlouhodobé uchovávání velkých objemů dat, protože jejich cena za gigabite je poměrně nízká. Jejich nevýhoda je ale pomalá rychlost čtení a zápisu.

Oproti tomu různé SRAM a DRAM paměti jsou daleko rychlejší, ale zase jsou o poznání dražší. Většinou tedy hledáme nějaký kompromis, co se poměru cena/výkon týče. V počítačích i mikroprocesorech tak můžeme najít celou řadu pamětí různých typů, velikostí a rychlostí.

Na čipech v deskách Arduino najdeme paměti SRAM, Flash a EEPROM. SRAM se používá například pro uložení obsahu proměnných při běhu programu. Ve Flash paměti je uložený program a EEPROM je plně pod kontrolou programátora. Její obsah narozdíl od SRAM zůstává i po restartu desky (či odpojení napájení) a může tak být poměrně užitečná, například pro uchovávání nastavení, nebo různých hodnot z měření. Musíme si jen dát pozor na to, že má omezenou životnost, co se počtu přepisů týče, takže není vhodné do ní zapisovat moc často. Dokumentace uvádí, že paměť vydrží asi 100 000 přepisů. Pokud byste se chtěli o pamětech v Arduino dozvědět více, přečtěte si článek o funkci mikrokontroléru.

Vestavěná EEPROM

Čipy na Arduino deskách obsahují vestavěnou paměť EEPROM. Její velikost se liší podle typu desky a například u čipu ATmega328P (Arduino UNO, …) je to 1024 bytů. Paměť můžeme číst, nebo do ní zapisovat po jednom, ale i více bytech.

Pro čtení a zápis jednoho bytu slouží funkce read, write a update. Read přečte hodnotu na zadané adrese a write ji přepíše. Pozor na to, že hodnota je v rozmezí 0 až 255, protože pracujeme s jedním bytem (8 bitů, tedy 28 = 256 hodnot). Funkce update hodnotu přepíše pouze v případě, že se liší od hodnoty uložené v paměti. To šetří počet zápisů do paměti a tedy prodlužuje životnost paměti.

Program níže nám po spuštění vypíše, po kolikáté byl spuštěn.

#include <EEPROM.h>

#define ADDR 100

void setup() {
  Serial.begin(9600);
  while(!Serial);

  // po odkomentování vynuluje paměť na adrese 100
  // EEPROM.write(ADDR, 0);

  byte hodnota = EEPROM.read(ADDR); // přečte byte z adresy 100
  byte novaHodnota = hodnota + 1;
  Serial.print("Program spusten po: ");
  Serial.println(novaHodnota);

  // zapíše novaHodnota na adresu 100  
  EEPROM.write(ADDR, novaHodnota);
}

void loop() {}

Nejdříve odkomentujte řádek 10: EEPROM.write(ADDR, 0); Ten způsobí vynulování bytu na adrese ADDR (tedy adresa 100). Spusťte sériový monitor a nahrajte program do desky. Nyní řádek zakomentujte a znovu nahrajte program. Nyní se s každým novým restartem desky, popřípadě znovunáhráním tohoto programu vypíše po sériové lince o jedno větší číslo. Program má malou nevýhodu, a to, že začne po dosažení hodnoty 255 počítat znovu od 0. Pokud bychom potřebovali větší periodu, můžeme pro ukládání hodnoty využít více bytů. Pokud použijeme například datový typ long, budeme mít hodnot dostatečně (pro praktické účely až zbytečně moc, ale pro ukázku ho můžeme použít). Tento typ zabere v paměti 4 byty.

Pokud bychom chtěli do EEPROM zapsat hodnotu proměnné, jejíž datový typ má velikost větší, než jeden byte, mohli bychom ji ukládat po bytech, nebo můžeme použít funkce určené pro čtení a zápis více bytů. Jsou to funkce get a put. Ty mají vždy dva parametry. První je adresa a druhý proměnná, jejíž hodnotu ukládáme, nebo do ní zapisujeme. Stejný program, jako výše, ale s většími hodnotami si nyní ukážeme.

#include <EEPROM.h>

#define ADDR 100

void setup() {
  Serial.begin(9600);
  while(!Serial);

  // po odkomentování vynuluje paměť na adrese 100
  // EEPROM.put(ADDR, 0ul);

  unsigned long hodnota;
  EEPROM.get(ADDR, hodnota);
  unsigned long novaHodnota = hodnota + 1;
  Serial.print("Program spusten po: ");
  Serial.println(novaHodnota);

  // zapíše novaHodnota na adresu 100  
  EEPROM.put(ADDR, novaHodnota);
}

void loop() {}

Při ukládání vícebytových hodnot do EEPROM paměti musíme myslet na to, že nezabírají pouze jedno adresovatelné místo, ale více. Například typ long použitý výše má čtyři byty a protože v našem příkladu ukládáme naši hodnotu na adresu 100, zabere ještě buňky s adresou 101, 102 a 103. Pokud bychom omylem zapsali na adresu 102 jeden byte, mohli bychom při čtení získat nesmyslné hodnoty.

K Arduinu je možné připojit i externí EEPROM paměť, například po sběrnici I2C. TinyLab takovou paměť má a my se ji v příštím článku naučíme používat.


DIY 3D skener s Arduinem

$
0
0

Různé 3D tiskárny se v poslední době staly standardní výbavou kutilských dílen. K dosažení dobrého výsledku ale kromě kvalitní tiskárny potřebujete i pořádný model. Pokud navíc chcete na tiskárně replikovat objekty z reálného světa, může být vytvoření modelů pro tisk poměrně obtížné.

Jednou z cest, jak modely reálných objektů vytvořit, je využití 3D skeneru. Takový skener ale může vyjít pěkně draho. Naštěstí existují projekty, jak si obstojný skener postavit.

Projekt OpenScan, který si dnes představíme, využívá toho, že je možné vytvořit 3D model z fotografií objektu z různých úhlů (tím se zabývá fotogrammetrie). Na základě fotografií a znalosti úhlů, ze kterých byly pořízeny, je možné poměrně přesně zjistit, jak skenovaný objekt vypadá ve 3D. O fotogrammetrii najdete také více na stránkách josefprusa.cz.

Arduino 3D skener

Součástí OpenScan, který vidíte na obrázku výše, je platforma, na kterou upevníte skenovaný objekt a dva krokové motory se postarají o jeho otáčení. Po každém otočení objekt vyfotíte (nebo je také možné fotografie snímat automaticky) a ze vzniklých fotografií je nakonec sestaven 3D model.

Arduino 3D scanner - nákres zapojení
Arduino 3D scanner – nákres zapojení

Zde je seznam hlavních komponent, ze kterých se systém skládá.

Na webu projektu pak naleznete .stl podklady pro tisk, potřebné programy i detaily o všech součástech Arduino projektu a nákres jejich zapojení.

Detektor kovů s Arduinem

$
0
0

Evan Kale je kutil a Youtuber, který na svém kanálu představuje různá vylepšení a hacky. V jednom ze svých videí představil návod na výrobu detektoru kovů. Budete se divit, jak jednoduché to je.

Jako základ pro detektor použil dětskou hračku ve tvaru křovinořezu, jejíž elektroniku nahradil vlastním systémem. Na spodní část připojil vlastnoručně navinutou cívku, díky které je možné detekovat kovové předměty v její blízkosti. Induktance této cívky se totiž mění v závislosti na permeabilitě okolního prostředí a tu zase ovlivňují právě kovové předměty.

Cívka je dále připojená k Colpittsovu oscilátoru, který mění frekvenci oscilace v závislosti na induktanci cívky. Použité zapojení má rezonanční frekvenci v řádu stovek kiloherců, takže je potřeba signál ještě nějak upravit, aby ho byl člověk schopen vnímat. K tomuto účelu bylo použito právě Arduino UNO. To měří frekvenci oscilátoru a v závislosti na ní generuje slyšitelný tón. Aby zařízení nepískalo neustále, je nutné pro detekci zmáčknout tlačítko na rukojeti detektoru. Tam také nalezneme potenciometr pro nastavení citlivosti.

Ve videu níže se můžete podívat, jak autor zařízení představuje a také se v něm dozvíte něco o procesu stavby. Schéma zapojení naleznete na serveru Imgur a zdrojový kód na GitHubu.

Přeloženo z https://blog.arduino.cc/2016/09/06/convert-a-weed-wacker-toy-into-a-metal-detector/ a upraveno.

Dárek od firmy Makeblock

$
0
0

Ještě než se pustíte do čtení, dovolte mi krátce uvést a představit novou sérii článků o robotech a platformě Makeblock a hlavně člověka, který za těmi věcmi stojí. Jeho jméno je Ondřej Merta a pracuje jako pedagog volného času ve Středisku volného času Domeček v Chomutově. Ondřej vede kroužky robotiky a tak má bohaté zkušenosti nejen s různými roboty a bastlením, ale také hraním s dětmi, tvořením a výukou. Ať jsou tyto články potřebným vodítkem k vašemu vstupu do úžasného světa robotiky a poslouží také k hravému získání a prohloubení znalostí v této oblasti. A jak s oblibou říkám: „Žádný člověk se profíkem v oboru nenarodil, ale musel nejdříve nějak začít!“ A teď už dávám slovo Ondřejovi. Bastlení ZDAR! Oldřich

Je štědrý večer a vašemu synovi, nebo dceři, přistála pod stromečkem modrá krabice od firmy Makeblock. Po bližším ohledání zjišťujete, že obsahem krabice by měl být údajně robot. Místo robota však balíček obsahuje hromadu součástek a návod k sestavení. Vaše dítko na vás mezitím upírá pohled raněné laně a vám je jasné, kdo bude mBota (neboť tak se ten údajný robůtek nazývá) sestavovat.

Které dítě by nechtělo takový dárek?
Které dítě by nechtělo k Vánocům mBota?

Poznámka: O tu radost, moci se pokusit o sestavení mBota pro vaše ratolesti se vám postarala čínská firma Makeblock, sídlící v provincii Shenzen. Robot mBot není jediná edukační hračka (nebo spíše výuková pomůcka), kterou má tato firma na triku. Nejbližšími bratránky mBota jsou robůtci z řady Ranger a Starter robot kit. Makeblock nabízí i další řadu zajímavých kreativních hraček, které vřele doporučuji vyhledat na internetu.

Modrá krabička od Makeblocku

Ale zpátky k mBotovi a naší záhadné modré krabičce. Předpokládám, že máte onu modrou krabici, o které jsem psal na začátku článku před sebou. Ještě než ji otevřete, doporučuji prohlédnout si informace, které jsou na ní vytištěné. Zajímavý je jednak soupis, co krabice obsahuje, ale také odkaz, kde můžeme stáhnout aplikaci, ze které budeme moci mBota programovat.

Otevřená krabice – první pohled

Při prvním otevření balíčku zjistíte, že je vše čistě a precizně uspořádáno. Krabice je z pevného kartonu s magnetickým zavíráním, což lze po sestavení mBota využít buď ke skladování doplňkového materiálu, nebo přímo jako garáž pro robůtka (pokud si ho tedy vaše ratolesti někde nevystaví).

Otevřená krabice – první patro

Součástky pro robůtka jsou uspořádány ve dvou patrech. V prvém jsou dvě největší části mBota. Větší díl je kovové tělo/šasi robota vyrobené z hliníku. V Čechách jsou k mání dvě barvy – modrá a růžová. Menší díl je „mozek“ mBota – programovatelná elektronická destička na bázi mikrokontroléru Arduino, která je překryta poloprůhledným plastem s otvory pro konektory, kterými se připojují jednotlivé moduly (ale o tom až příště v další kapitole).

Otevřená krabice – plánek a motorky pro mBota

Vyjmeme-li vrchní díl vnitřního balení s tělem robůtka a hřbetní plastovou částí mBota, probojujeme se do dalšího patra balení, které skrývá zbytek součástek pro mBota. Dvěma velmi zásadními součástkami jsou plán pro sestavování mBota a dva motorky určené pro pohyb robůtka.

Plán je na veliké papírové plachtě a je velmi dobře zpracován (a co je zejména dobré pro jedince, kteří jaksi nesestavují denně podobné konstrukce, celý postup je popsán graficky, takže stačí sledovat obrázky).

Motorky jsou dva, protože pohyb mBota je podobný, jako pohyb tanku (pravý a levý pás). Motorky obsahují i převodovku, která upravuje rychlost otáček i směr hřídele.

Otevřená krabice – všechny součástky vybalené

Zbylé součásti balení (levá strana od středu obrázku) obsahují šroubovák pro montáž robůtka, modul pro sledování čáry (součástka umožňující robůtkovi sledovat černou čáru na bílém podkladu – tzv. line follower), ultrazvukový modul (tzv. ultrasonic – součástka, která vypadá, jako oči robota – umí detekovat překážky před robůtkem), IR ovladač (určený pro dálkové ovládání robůtka). Na pravé straně od středu obrázku nalezneme kolečka s pneumatikami, propojovací kablíky, sáček s drobnými součástkami (šrouby, montážní sloupky atd.) a plastový díl určený pro vkládání baterií. Úplně novou součástkou, která je částí stavebnice mBot – explorer kit, je LED matrix – součástka, která umožňuje mBotovi vrhat ksichtíky a vůbec projevovat všelijak náladu, či posílat na displej jednoduché informace.

Nu stavebnici mBota máme rozbalenou a příště si milého robůtka sestavíme…

MBot se staví na vlastní kola

$
0
0

V minulém díle jsme otevřeli modrou krabici, kterou jsme nalezli (nebo ještě nalezneme?) pod vánočním stromkem. V krabici jsme objevili robůtka mBot rozloženého na množství součástek a záhadných modulů. Nejsme však žádná ořezávátka a proto se hned pouštíme do stavby!

Tip: Nebojte se do stavby zaangažovat děti, popřípadě jim celou stavbu rovnou svěřit a pouze kontrolovat průběh a eventuálně dotaženost šroubů. Budete překvapeni, co jsou vaše dítka schopná zvládnout a navíc celá stavebnice je určena především na to, aby se na ní něco děcka naučila.

Seznam součástek v balení mBot – čísla součástí zmiňuji v dalším textu.
Jediný nástroj, který použijete – šroubovák (9.).

A začneme pěkně zostra, představením jediného nástroje, který budete pro celou práci potřebovat – šroubováku (9.). Skládá se ze dvou částí – rukojeti a kovové osy se dvěma pracovními konci. V průběhu montáže narazíte totiž na dva typy hlav šroubů, které bude třeba zašroubovat. Jedna má tvar kříže, druhá šestihranu (tzv. inbus). Prosím přehazujte si hrot šroubováku dle potřeby.

První a druhý krok montáže na šasi mBot.

Postupujeme-li podle plánu montáže, který nalezneme v krabici (což vřele doporučuji) bude třeba v prvním a druhém kroku přišroubovat levý a pravý motorek (5.) na šasi mBota (1.). Motorek je třeba prostrčit hřídelí (to je ta tyčka se závitem na straně motorku) bokem šasi a sešroubovat každý motorek dvěma dlouhými šrouby M3 (13.) s matkami. Na každý motorek jsou dvě matky a dva šrouby.

Tip: Všechny matky u motorků pečlivě utáhněte. Při větším provozu mají snahu se časem vyviklat a uvolnit, pokud nejsou pořádně utažené. U nás v chomutovském Domečku jsou mBoti pod pořádnou zátěží, takže jsme tyto matky nahradili matkami se samosvornou gumovou manžetkou, které se neuvolňují.

Třetí krok montáže – sestavení kol robota.

V dalším kroku, podle plánu třetím v pořadí, sestavíme a zkompletujeme kola. Na navléknutí pneumatiky (3.) na disky kol (3.) není potřeba žádné zvláštní síly, takže by ani děti neměly mít problém tento krok uskutečnit. Kola opatřená pneumatikami nasadíme na osy motorků (vzhledem k výřezu osy to lze provést pouze jedním správným způsobem) a přišroubujeme vruty (15.). Opět – je to namáhaná část konstrukce, vruty je třeba pečlivě utáhnout.

Takto by měl nyní rozestavěný mBot vypadat – na obrázku je navíc protažen kablík otvorem v šasi, udělejte to také.
Čtvrtý krok montáže – kompletace modulu čtení čar a rejdovacího kolečka.

Čtvrtým krokem montáže je kompletace modulu čtení čar (8.) a rejdovacího kolečka (16.). Pro upevnění budeme potřebovat dva šrouby (14.). Upevnění je poměrně prosté. Je třeba sestavit modul i rejdovací kolečko tak, aby šroub byl schopen projít oběma díly zároveň. Pokud jste dokázali sestavit oba díly, tak, jak bylo popsáno, stačí je přišroubovat k šasi v přední části mBota. Není třeba žádných matek, v šasi je již vyfrézovaný závit. Na závěr zacvakneme do konektoru modulu kablík (17.) a protáhneme ho otvorem ve středu šasi, stejně, jako kablíky od motorků.

Tip: Buďte opatrní v utahování těchto šroubů. Nezdá se to, ale hliníkové šasi je měkké a nasadíte-li při utahování šroub nakřivo, snadno strhnete závit.

Detail upevněného modulu čtení čar a rejdovacího kolečka. Přesně takto by to mělo vypadat.
Pátý krok montáže – upevnění sloupků.

Pátým krokem montáže bude přišroubování čtyř sloupků (12.) do šasi mBota (1.). Opět nebudete potřebovat žádné matky, protože jsou v šasi závity již přímo vyfrézované.

Šestý krok montáže – příprava pro upevnění zásobníku baterií.

Mbota je třeba opatřit bateriovým systémem. Makeblock zde nabízí dvě varianty. První je zásobníkové pouzdro (4.), do kterého bude třeba nakoupit dobíjecí tužkové baterie a které se k mBotovi připevňuje pomocí suchých zipů (11.). Tento krok je na plánu popsán, jako kroky 7. a 8.

Druhou variantou je akumulátor LiPol, který se připevňuje prostým přicvaknutím na spodek hřbetní části mBota. V prvém i druhém případě je později potřebné připojit konektory bateriového komponentu do hřbetní desky mBota.

Sedmý krok montáže – připevnění hřbetní části.

Montáž mBota se nám chýlí ke konci. Připevníme veledůležitou hřbetní část mBota (2.) na sloupky (12.) čtyřmi šrouby (14.) a můžeme přikročit k následujícímu kroku.

Osmý krok montáže – kompletace ultrazvukového modulu.

Předposlední fází montáže je zkompletování ultrazvukového modulu (7.). K tomuto kroku budeme potřebovat ultrazvukový modul (7.), propojovací kablík (17.) a dva šrouby (14.). Tento krok není v plánu popsán, protože na dané místo Makeblock v modelu mBot Explorer preferuje montáž následujícího dílu LED Matrix. Vzhledem k tomu, že mBot je stavebnice a můžete si jej smontovat k obrazu svému a také, že je k dispozici i řada doplňků, která tuto různorodost umožňuje, vám doporučuji využít čelo mBota k připevnění ultrazvukového modulu (překážky potřebujete detekovat před mBotem) a modul matrixu připevnit tak, jak je popsáno v následujícím kroku.

Devátý krok montáže – kompletace modulu LED Matrix.

V devátém, posledním kroku montáže sestavíme modul LED Matrix (20.). Tento modul umožňuje promítat mBotovi na ploše maticového displeje emoce a další jednoduché symboly. Displej se sestavuje spojením čelní masky a dílu se světelnými LED diodami pomocí čtyř kolíků. Firma Makeblock nabízí na plánu tři různé varianty umístění tohoto displeje. Na čelní ploše (pak ale ztratíte místo pro umístění ultrazvukového modulu) a dvě varianty, kdy je displej umístěn v zadní části mBota. Na následujícím obrázku naleznete variantu, která se nám nejlépe osvědčila a kterou vám pro začátek doporučuji.

Konec montáže – umístění LED Matrix na zadní část mBota.

Ehm, tak úplně to ještě není konec montáže :-).

Zbývá propojit kablíky do konektorů ve hřbetní části mbota. Makeblock pro toto propojení zvolil kablíky s konektory typu RJ – 25 (to jsou ty kostičky na konci plochých kablíků). Konektory RJ – 25 jsou rozebiratelné, mají ale pojistku ve tvaru páčky. Tudíž velmi doporučuji nervat je ze zdířek na sílu, ale inteligentně páčku stisknout a jemně je vyjmout. Asi by byla v tomto směru dobrá i instruktáž vašich malých robotiků. Dětem stačí podle mých zkušeností jednou ukázat. Na horní desce mBota jsou čtyři zdířky do kterých je možno připojovat moduly. Makebloci pro orientaci zvolili ďábelsky jednoduchou metodu. Barevný kód na zdířce konektoru je možné zapojit na desce pouze do konektoru, který obsahuje stejnou barvu. Příklad – žlutý konektor od ultrazvukového modulu je možné zapojit do hřbetního konektoru jehož kód obsahuje žlutou barvu (což jsou v tomto případě všechny čtyři konektory).

Samostatnou částí je připojení motorků. Zdířky pro jejich konektory naleznete na boku hřbetní části. V případě, že později zjistíte, že mBot místo levého motorku spouští pravý a naopak, stačí oba konektory navzájem prohodit.

No a to už je k montáži opravdu všechno a v příští kapitole si povíme, jak mBota programovat!

Jak se programuje mBot

$
0
0

Pokud nevíte jak mBota naprogramovat a vaše ratolesti vám už podupkávají za zády a dožadují se, kdy už si budou moci s robůtkem začít hrát, nezoufejte. Hodní pánové z firmy Makeblock totiž dali do krabičky mBota již naprogramovaného na defaultní program!

Tento program má tři módy (A, B, C) a dají se spustit buď IR ovladačem (nezapomeňte vložit baterku), nebo přepínat tlačítkem na hřbetě mBota. Mód A je signalizován bílým světlem, mód B světlem zeleným a mód C světlem modrým. Aby to vše fungovalo je třeba také správně připojit moduly – ultrazvukový modul (port 3), modul čtení čáry (port 2).

Jednotlivé módy fungují takto:

mód A – dálkové řízení pomocí dálkového IR ovladače – bílá barva – šipkami řídíte pohyb mBota. Čísly můžete nastavit rychlost robota.

mód B – vyhýbání se překážkám – zelená barva – mBot se před překážkou otočí a jede zpět.

mód C – jízda po čáře – modrá barva – mBot sleduje černou čáru, v případě, že ji nenalezne začne kroužit na místě.

Tip: Pokud programujete mBota způsobíte, že přijdete o nastavený defaultní program. Pokud jej chcete vrátit zpět do tohoto nastavení, dá se to udělat přes program mblock 3. Je třeba připojit mBota a nastavit správně všechny parametry potřebné pro spojení mBota a programu mblock3 ve vašem počítači (Připojení-Sériový port, Desky-mBot (mCore)). V programu pak spusťte funkci Připojení-Reset výchozího programu-mBot. Program zavede do vašeho mBota defaultní program.

Pokud byste ovšem nechali robůtka pouze s přednastaveným programem a používali jej, jako lepší autíčko na ovládání, velmi byste se ošidili. Ta největší legrace totiž spočívá v tom, že mBota budete programovat a přetvářet k obrazu svému.

Jak na to vám v rychlosti napoví následující video…

To co jsme viděli ve videu bych nyní rád probral podrobněji.

Program mBlock naleznete na webu firmy Makeblock ( https://www.mblock.cc/en-us/download ).

Program pro programování mBota

Na tomto umístění můžete nalézt dvě verze tohoto programu:

mblock5 – pouze v angličtině, určený pro větší počet produktů firmy makeblock.

mblock3 – ve více jazykových mutacích, včetně češtiny. Určený pro mBoty, Rangery a roboty typu Ultimate.

Měl jsem možnost porovnat obě verze programů a obě je vyzkoušet na dětech. Jednoznačně se jim lépe pracovalo se starší verzí mblock3. Jedním z důvodů byla asi česká lokalizace programu, ale druhou příčinou byla zřejmě i jistá jednoduchost staršího programu. Dále budu tedy vše vysvětlovat na verzi programu mblock3.

Připojení mBota

Prvým kamenem úrazu při programování mBota se může pro nezkušeného programátora stát právě připojení mBota k programu. Je třeba nejen správně připojit mBota kabelem, ale zároveň také správně nastavit program mblock3.

Připojení USB kabelu k motovi

Připojení kabelem: Vhodný kabel je součástí dodané krabice. MBota připojujeme ke klasickému USB výstupu z počítače a hranatý konektor na druhém konci kablíku (USB typu B) patří do konektoru na pravé straně vrchní plastové desky mBota. Zde bych doporučoval dávat pozor, protože se děti často pokouší dávat kabel do konektorů určených pro moduly (vzdáleně se tvarem podobají). Jednoduchou pomůckou může být, že zdířky pro moduly jsou černé barvy a zdířka pro datový kabel je barvy bílé.

Nastavení programu: V případě, že programujete mBota a ne jiný produkt firmy Makeblock, nastavte položku hlavního menu „Desky“ na parametr „mBot (mCore)“. Zbývá ještě nastavit v položce „Připojení“ parametr „Sériový port“. Hodnota sériového portu se detekuje automaticky, pokud je vše kabelové připojeno správně a pokud je mBot zapnutý. Děti, které s mBotem teprve začínají, zapomínají mBota zapnout. Vypnutého mBota nelze programovat a program ho ani nevidí.

Tip: Při programování doporučuji mBota připojeného kabelem raději obracet na hřbet, jako želvu. MBoti mají totiž svojí hlavu a při spuštění se může aktivovat program, který do mBota vložil někdo jiný. Robůtek pak páchá ve stylu kamikaze skoky ze stolu.

Posíláme program do mBota

Máme hotový prvý zkušební program, popřípadě jsme prvý zkušební program stáhli a chceme ho odeslat do mBota. MBot je v pořádku připojený, zapnutý a program mblock3 je nastavený. Chybí ale možnost odeslání programu.

Prvý pohled na otevřený program pro mBota v prostředí mblock3

Program mblock3 byl vyvinut na základě vizuálního programovacího jazyka Scratch určeného pro účely výuky. Jazyk je grafický a funguje na základě přetahování grafických bloků/widgetů na pracovní plochu. Scratch byl vyvíjen i k programování jednoduchých her, důsledkem čehož je i programovatelný obrázek pandy v levé části a část widgetů, které při programování mBota nijak nevyužijeme a tudíž si jich dál nebudeme všímat.

Do režimu ve kterém můžeme z editoru mblock3 programovat mBota se můžeme dostat dvěma způsoby. Buď si nastavíme v základním menu v položce „Editace“ hodnotu „Režim arduino“, nebo klikneme pravým tlačítkem menu na hlavičku programu – rozevře se nám menu, ve kterém stačí vybrat položku „Nahraj do Arduina“.

Prostředí mblock3 přepnuté do režimu odesílání programu do mBota

Pro odeslání programu do mBota stačí jen kliknout na tlačítko „Poslat do Arduino“ v části Arduino IDE. Komunikace s deskou arduina v mBotovi se pak vypisuje pod boxem s kódem. Na stejném místě se vypisuje i průběh přenosu kódu do mBota, chybové hlášky a další informace. Netrpělivým mladým programátorům doporučuji nechat přenos programu do mBota doběhnout až do konce a nepřerušovat jej v půli.

Programové bloky – Widgety

Jak jsem již naznačil v předchozím textu program pro mBota skládáme z programovatelných bloků/widgetů (dále již budu používat pouze tento termín). Widgety z jednotlivých skupin odpovídají vždy barvou dané skupině, snadno je tak můžete nalézt. Přepnete-li editor do režimu Arduino zůstanou vám aktivní pouze skupiny bloků Roboti, Ovládání, Operátory a Data a Bloky které jsou využitelné při programování mBota.

Příklad skládání programu mBota z jednotlivých skupin widgetů

Widgety, které můžete použít jsou pouze základní nabídkou. Mblock3 totiž po doinstalování rozšíření umí vygenerovat i další widgety, třeba pro nový modul, který si k mBotovi dokoupíte. Nabídka je opravdu široká a při počtu widgetů, které vám program mblock3 nabízí již v základní podobě je jasné, že kdybych tu popisoval všechny widgety asi by tento článek byl rozsáhlým manuálem. Zmíním se tedy pouze obecně o principech a popíši skupiny widgetů.

Skupina widgetů „Roboti“ – zelenomodrá barva

Widgety ve skupině „Roboti“ slouží k programování přímé činnosti mBota. Naleznete zde jak úvodní hlavičku programu, tak základní bloky (poznáte je podle zoubečku, kterým je možné je spojit do programového stromu). U těchto bloků často najdete bílé prvky umožňující přesněji nastavit daný příkaz (obecně tuto možnost najdete ve všech příkazech tohoto programovacího prostředí). Sledujte levou a pravou stranu widgetů. Widgety s trojúhelníkovitými a oblými boky bez „zoubku“ jsou určeny pro vkládání do dalších příkazů.

Skupina widgetů „Ovládání“ – oranžová barva

Widgety ze skupiny „Ovládání“ ovlivňují tok programu. V této skupině naleznete podmínkové příkazy, smyčky a možnost zadání časového intervalu. Některé tyto příkazy samy o sobě nefungují a je třeba je doplnit příkazy z ostatních skupin, aby mohly fungovat.

Skupina widgetů „Operátory“ – zelená barva

Ve skupině widgetů „Operátory“, která je zelené barvy, můžeme stanovovat vztahy mezi proměnnými a definovat podmínkové příkazy. Zajímavým příkazem je i generátor pseudonáhodných čísel – později jej použijeme.

Velmi zajímavou skupinou je poslední skupina widgetů „Data a Bloky“ (oranžová barva), která nám umožňuje tvorbu vlastních proměnných a vlastních příkazových bloků – což je to pravé kreativní programování, které pokud vydržíte, si hodně užijete – ale to už budete pokročilými programátory. :-)

Programy ke stažení

testovací program

Viewing all 133 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>