Vybavení Arduina
Srdcem tohoto mikrokontroleru je procesor Atmega 328, který disponuje čtrnácti digitálními vstupními a výstupními piny (šest pinů nabízí funkci PWM), dále nabízí šest analogových vstupních pinů. Paměť pro program činí 32 kB, z čehož je zhruba 0,5 kB použito pro zavaděč.
Co je PWM?
Pulse Width Modulation lze do češtiny přeložit jako pulzně šířková modulace a u Arduina slouží pro odesílání analogových hodnot pomocí digitálních výstupů. Principem je rychlá změna hodnot na digitálním výstupním pinu. Při jeho použití naměříte na digitálním pinu mimo hodnot 5 V a 0 V i hodnoty jiné. Odeslaná hodnota se zapisuje pomocí čísla 0–255, pokud tedy napětí 5 V vydělíte číslem 255, zjistíte, že rozdělení napětí by mělo být přibližně po 0,02 V.
Programování Arduina
Pro programování Arduina používám Arduino IDE. Program obsahuje dvě hlavní smyčky void setup(). Kód zapsaný v této smyčce se po spuštění Arduina spustí a provede pouze jednou, kdežto u smyčky void loop() se kód po spuštění bude neustále opakovat (pokud kód neobsahuje zastavení programu).
Pro nahrání programu do Arduina je nutné zvolit správnou desku, to provedete pomocí Nástroje | Vývojová deska. Dále je nutno zvolit port, ke kterému je Arduino připojeno; to provedete pomocí nabídky Nástroje | Port. Program do Arduina odešlete buď pomocí tlačítka se symbolem šipky vpravo, pomocí klávesové zkratky [Ctrl+u], nebo přes nabídku Projekt | Nahrát.
Blikání LED diody
Stejně jako u článku s Raspberry Pi se nejprve pokusíme rozblikat LED diodu. Nejprve ve smyčce, která se spustí pouze jednou nastavíme pin, který bude použit jako výstupní, v našem případě se bude jednat o pin 0. Poté v neustále se opakující smyčce nastavíme logickou 1 (HIGH), program na nějaký čas pozastavíme, poté změníme logickou hodnotu na 0 (LOW) a opět program na nějaký čas pozastavíme.
Pro připojení LED diody je nutné použít odpor. Hodnotu odporu zjistíte snadným výpočtem:
-
Od hodnoty 5 V (výstup z Arduina) odečtěte úbytek napětí na LED diodě, pokud ubytek napětí neznáme, počítáme s 5 V.
-
Následně toto číslo vydělte požadovaným proudem, u LED diod se obvykle jedná o 0,015–0,02 A.
Uvedeme si zde jednoduchý příklad výpočtu hodnoty odporu pro LED diodu s úbytkem napětí 2 V a proudem 20 mA:
Dle výpočtu můžeme použít rezistor o minimální hodnotě odporu 150 Ω.
void setup() { pinMode(13, OUTPUT); // nastavení Pinu 0 jako výstup } void loop() { digitalWrite(13, HIGH); // nastavení hodnoty 1 na pinu 0 delay(100); // pozastavení programu na 1000 ms (1 s) digitalWrite(13, LOW); // nastavení hodnoty 0 na pinu 0 delay(100); // pozastavení programu na 1s }
Tlačítko s rezistorem
Úspěšně se vám podařilo LED diodu rozblikat, a tak se můžete vrhnout na další úkol, kterým bude ovládání výstupu na základě vstupu. Stejně jako u Raspberry je nutné použít pro načtení hodnoty tlačítka pull-up nebo pull-down rezistor. Pull-up rezistor je možné připojit i softwarově.
Nejprve si ukážeme zapojení tlačítka s použitím rezistoru. Rezistor musí mít hodnotu alespoň 10 kΩ. Kód pro obě zapojení je úplně stejný, rozdílem je pouze prohozený stav. V případě zapojení rezistoru jako pull-up bude načtena při rozpojeném tlačítku logická 1, pokud však rezistor zapojíte jako pull-down, bude při rozpojeném tlačítku načtena logická 0.
void setup() { pinMode(1, INPUT); // nastavení pinu 1 jako vstup pinMode(13, OUTPUT); // nastavení pinu 13 jako výstup } void loop() { int hodnota = digitalRead(1); // stav pinu 1 se načte jako hodnota if (hodnota == LOW) { // pokud bude hodnota „nízká“ (logická 0, proveď: digitalWrite(13, HIGH); // nastavení logické 1 na pinu 13 } else { // pokud není předchozí podmínka splněna, proveď: digitalWrite(13, LOW); // nastavení logické 0 na pinu 13 } }
Tento kód slouží pro pro ovládání vestavěné LEDky na základě stavu tlačítka. V případě, že bude tlačítko připojeno přes pull-up rezistor, LED dioda se rozsvítí při stisku tlačítka. Pokud však připojíte tlačítko přes pull-down rezistor, LEDka při stisknutí tlačítka zhasne.
Připojení rezistorů pro načtení stavu tlačítka (vpravo pull-up, vlevo pull-down)
Tlačítko s interním rezistorem
Pro načtení stavu tlačítka lze také využít integrované pull-up rezistory, ty lze jednoduše připojit přepsáním INPUT na INPUT_PULLUP při nastavování pinu jako vstupní. Tlačítko se poté připojí mezi pin, který jste zvolili pro načtení hodnoty a pin GND. V případě, kdy je tlačítko rozepnuto bude načtena logická jednička a LEDka se rozsvítí.
void setup() { pinMode(1, INPUT_PULLUP); // nastavení pinu 1 jako vstup s pull-up pinMode(13, OUTPUT); // nastavení pinu 13 jako výstup } void loop() { int hodnota = digitalRead(1); // stav pinu 1 se načte jako hodnota if (hodnoza == LOW) { // pokud bude hodnota „nízká“ (logická 0, proveď: digitalWrite(13, HIGH); // nastav na pinu 13 logickou 1 } else { // pokud není předchozí podmínka splněna, proveď: digitalWrite(13, LOW); // nastav na pinu 13 logickou 0 } }
V případě využití pull-up rezistoru (ať už fyzického, či „softwarového“) je nutno při psaní programu myslet na to, že při stisknutí tlačítka se na vstupu neobjeví logická 1, ale 0.
Závěr
Jistě jste si všimli, že programovací jazyk Arduina je v podstatě programovací jazyk C, doplněný o příkazy k ovládání pinů. Jelikož je Arduino velmi rozšířeným hardwarem, není problém najít znalce, kteří vám se začátky programování a s laděním programu pomohou.
V příštím díle se budu věnovat sběrnici I2C, zobrazování hodnot na displeji připojeném přes I2C a připojením Arduina do domácí sítě pomocí Ethernet shieldu.