Abychom dostáli svým slibům, konec povídání. Řekli jsme si, že naše Arduino (tedy mikrokontroléry obecně) je možné programovat - to je ostatně jejich smysl. Protože však nepoužijeme samostatný mikrokontrolér ATmega328P, ale prototypovací desku "Arduino", budeme mít práci přibližně o jeden světelný rok jednodušší!

Abyste totiž mikrokontrolér (MCU) vůbec spustili, byly by potřeba další součástky a k jeho naprogramování by to chtělo již mnohem větší znalosti elektrotechniky, hardwarové architektury konkrétního MCU a také jazyka C++ či dokonce Assembleru. To vše třeba pro rozblikání byť jedné jediné LEDky. Když si navíc představíte, že byste ji chtěli ovládat přes internet, zdá se úkol již nesplnitelný.

Právě to je důvod, proč skutečnou revoluci do amatérské elektrotechniky vnesl až koncept Arduina - většinu věcí, které potřebujete k realizaci svého záměru, již někdo kvalifikovanější (tedy obvykle) připravil a poskytl na stříbrném či zlatém podnose jako open source. Výsledkem je, že k rozblikání první LEDky vlastně potřebujete jen Arduino, své PC a ideálně internet pro stahování softwaru, knihoven a čtení návodů.

Programujeme mikrokontrolér

Takže do práce! Ke zprovoznění desky potřebujeme jen USB kabel, který si je možno i vypůjčit od libovolné tiskárny (jedná se o typ A-B) a oficiální aplikaci Arduino IDE.

USB kabel typu A-B

USB kabel typu A-B

Součástí její instalace je i ovladač pro Windows, takže by se deska (Arduino) po připojení měla objevit ve správci zařízení jako sériová linka COM.

Pakliže jste objednali kompatibilní klon např. z eBay, nejspíš bude místo dražšího čipu ATmega16U2 použit nějaký levnější čínský (typicky CH340G). Deska Arduino má totiž dva čipy - jeden "pouze" obstarává USB komunikaci s počítačem po virtuální sériové lince a druhý je již nám známý mikrokontrolér ATmega328P. Právě ATmega328P ale budeme programovat a je tak srdcem Arduina.

Co z toho vyplývá prakticky: aktálně by Windows 10 již měly obsahovat ovladač i pro CH340G - po připojení desky zkuste pár minut počkat, případně zkusit vyhledat dostupné aktualizace přes Windows Update. V případě neúspěchu by mělo jít ovladač (Win10 až XP) stáhnout z originálního čínského zdroje (bez záruky).

V Arduino IDE se poté píše zdrojový kód a program nahrává do mikrokontroléru (umístěného na desce Arduino). Dohromady nejde o žádnou vědu a vše se odehraje stiskem jednoho tlačítka.

Stažení a instalace Arduino IDE

 

Webová adresa arduino.cc patří oficiálním stránkám, kde je možné stáhnout právě vývojové IDE, ale také některou z desek (ano, je jich více) za nemalý peníz objednat. My jsme pro začátek zvolili Arduino Uno, protože jde o vůbec první vydanou desku, je nejvíce rozšířena, existuje k ní asi nejvíce neoriginálních kopií a hlavně - pro začátečníka je dostatečně přehledná a pohodlná. Poznámka: název Genuino je jen jiná ochranná známka, nově používaná mimo USA. Deska je zcela stejná.

 

 

Výše umístěná videa vám pomohou nainstalovat zmíněné Arduino IDE, vše nastavit a do Arduina dokonce nahrát i prázdný zdrojový kód - sice nebude dělat vůbec nic, ale zjistíte, zda je deska správně připojena a Arduino IDE s ní dokáže komunikovat.

Blikáme LEDkou (Light-Emitting diodou)

Tímto asi díl uzavřeme. Jedná se o typický příklad pro začátečníky a v případě Arduina je úkol opravdu poměrně snadný. Chceme rozblikat LEDku (pro méně zasvěcené - součástku, která funguje podobně jako žárovička a dnes se používá prakticky všude, kde "něco malého" svítí).

Schéma LED

Schéma LED

Abychom měli práci ještě lehčí, jedna miniaturní LED, kterou můžeme ovládat vlastním programem, je připájena přímo na desce Arduina - nemusíme tedy vůbec nic zapojovat! Schválně, jestli se nachází tam, kde myslíte :).

Zdrojový kód

Tak opět jenom stručně. Máme nainstalované Arduino IDE a máme desku Arduino připojenou USB kabelem k počítači. Když Arduino IDE zapneme, v nabídce Nástroje -> Vývojová deska bychom měli zvolit Arduino/Genuino Uno. Hned o řádek níže je výběr portu (buď jej zjistíte ve Správci zařízení, jak ilustruje video, nebo budete experimentovat).

Po připojení se Arduino objeví ve Správci zařízení

Po připojení se Arduino objeví ve Správci zařízení

Nyní by mělo vše fungovat, což ověříme v levém horním rohu, kde jsou dvě tlačítka - první "Ověřit" jen tzv. zkompiluje/přeloží kód (který je aktuálně prázdný) - to by mělo fungovat zcela určitě. Druhé "Nahrát" poté provede to samé, co předchozí, ale program ještě nahraje do Arduina. Právě toto zkuste stisknout - pakliže dole v černém okénku bude uvedeno, že se vše zdařilo, jste za vodou. V opačném případě zkuste zvolit jiný port.

Co je to kompilace?

Náš mikrokontrolér obsahuje procesor, který má svoji specifickou instrukční sadu (žádná x86 ani ARM :). Když píšeme zdrojový kód našeho programu, používáme programovací jazyk Wiring (což je jakási nadstavba/framework pro C++) - tzv. vyšší programovací jazyk vypadá tak, aby mu rozuměl hlavně člověk. Je to tedy pouze text.

Kompilátor daného jazyka je vlastně překladatel, který zdrojový kód (to, co píšeme) přeloží do číselných instrukcí pro daný typ procesoru (architekturu) - zde jde o mikrokontrolér ATmega328P od firmy Atmel Corporation. Je 8-bitový (což byly i v Česku dostupné počítače na samém začátku 90. let minulého století) a taktovaný na 16 MHz. Procesor ve vašem počítači zase vyrobila firma Intel nebo AMD a bude mít např. čtyři jádra, z nichž každé poběží minimálně na 2800 MHz (také potřebuje zásuvku a ne baterii z hodinek ;).

Právě jsme do Arduina úspěšně nahráli kód, který nic nedělá (možná jen "papá" trochu elektřiny). Do relativně prázdného editoru zdrojového kódu tedy zkopírujeme toto (vymažeme, co už tam je):

 

// Níže jsou tzv. konstanty - ve zdrojovém kódu budeme používat název "PIN_LED".
// Kdybychom později připojili LEDku k jinému pinu, nemusíme v kódu měnit
// všechna místa, ale změníme jen číslo přiřazené konstantě.

#define PIN_LED 13 // místo pinu 13 můžeme napsat i LED_BUILTIN
// deska by pak měla vybrat správný pin sama

#define PAUZA 1000

 

void setup() {
// následující kód se vykoná jen jednou po zapnutí:

pinMode(PIN_LED, OUTPUT); // Nastavíme pin LEDky jako výstupní (Arduino
// nebude číst hodnoty na pinu, ale jen do něj
// "pouštět proud").
digitalWrite(PIN_LED, LOW); // Pro začátek pin vypneme (kdyby nebyl).
}

void loop() {
// následující kód je smyčka, která se opakuje donekonečna:


digitalWrite(PIN_LED, HIGH); // do PIN_LED pustíme 5 voltů
delay(PAUZA); // počkáme (zde 1000 milisekund, tedy 1 sekundu - viz konstanta)
digitalWrite(PIN_LED, LOW); // vypneme PIN_LED
delay(PAUZA/2); // opět počkáme, ale o polovinu kratší dobu

// zde již nic není, a tak se začne opakovat funkce loop() od začátku :)
// tzn. digitalWrite(PIN_LED, HIGH);
// delay(PAUZA);
// ...
}

 

Vůbec ničeho se neděste! Jestli vidíte zdrojový kód poprvé v životě, nejspíš bude působit velmi nepřehledně. Tento kurz ale určitě není od toho, aby z někoho udělal profesionálního programátora. Vše, co je v kódu za dvojitým lomítkem "//" je pouze komentář pro lepší pochopení (kompilátor/překladač tento text zcela ignoruje).

Takto by měl kód vypadat v Arduino IDE

Takto by měl kód vypadat v Arduino IDE

Nám bude stačit, když si kód zkopírujete a zkusíte nahrát do vlastního Arduina. Všechny zdrojové kódy, které se v kurzu objeví, si také můžete stáhnout z tohoto odkazu a soubory si jednoduše v Arduino IDE nebo libovolném textovém editoru (koncovka .ino je zaměnitalná za .txt) přímo otevřít.

Dnešní výsledek by tedy měl být takový, že někde na desce vašeho vlastního Arduina bliká LEDka libovolné barvy a velikosti :). Povedlo se? Případné dotazy můžete psát do komentářů ke článku. Těšíme se na viděnou v příštím díle, kde si k Arduinu určitě připojíme i nějaké součástky. Začneme např. externí LEDkou, s níž ovšem budeme provádět doslova divy a nejen blikat.