Lekce 4 - Arduino - Projekty s LED diodami a tlačítkem
V předchozí lekci, Arduino - Polovodičové elektronické součástky, jsem si popsali LED diody a základní druhy tranzistorů.
Doposud jsme se zabývali hlavně teorií a popisem jednotlivých součástek, které budeme používat u Arduino projektů, protože jsou s ním kompatibilní. Dnešní lekce Arduino HW tutoriálu bude více praktická. Ukážeme si, jak zapojit dva jednoduché obvody s LED diodami. Součástí příkladů bude samozřejmě také programování. Ukážeme si kód pro obsluhu obvodů a vysvětlíme si jeho jednotlivé části.
Blikání LED diod
Začneme s poměrně jednoduchou polovodičovou součástkou, která je u Arduino mikrokontroleru četně používána. Ano, správně, jedná se o LED. V příkladu si vytvoříme obvod s dvěma diodami, které poté naprogramujeme tak, aby střídavě jedna z LED blikala.
Než se pustíme do rozboru samotného programu a vysvětlení jeho funkcionality, je potřeba si říct, co všechno k úspěšnému zhotovení tohoto mini-projektu potřebujeme.
Úlohu si ukážeme v prostředí Tinkercad, ale je pouze na vás, jestli budete chtít úlohu reálně zapojit či pouze nasimulovat.
Seznam součástek
Na sestavení obvodu budeme potřebovat tyto součástky:
- 2x LED diody - v našem projektu je použita červená a zelená, na barvách však nezáleží,
- 2x Rezistor 1 [kΩ],
- libovolné Arduino - v našem případě Arduino Uno,
- nepájivé pole a
- propojovací kabely.
Máme-li součástky připraveny, můžeme se pustit do zapojení, které také detailně rozebereme.
Příprava obvodu
Jako první si připravíme Arduino s nepájivým polem. GND pin Arduina
propojíme černým drátem s mínusový sloupcem nepájivého pole, odtud poté
rozvedeme rezistory do mínusu LED . Z plusového sloupce povede červený drát
do 5V napájení. Nyní můžeme přidat oba rezistory. K rezistorů připojíme
katody LED. Připomeňme, že katoda je -
a na diodě má kratší
nožičku. Do anody nakonec přivedeme libovolný digitální pin z Arduina.
V našem projektu jsme použili digitální piny 2 a 3 a oranžové dráty. Kterýkoliv jiný digitální pin bude fungovat také, v programu však musíme dát pozor, abychom definovali piny, jež máme zapojené.
Naše zapojení vypadá takto:
Program obsluhy
Zapojení je hotové, můžeme se tedy pustit do programování. Kdo děla projekt virtuálně, bude v Tinkercad i programovat. Ti, kteří ho dělali v reálné podobě, napíší svůj program v Arduino IDE.
Definování konstanty
Nejprve, nad funkcí setup()
, definujeme naše digitální piny
příkazem #define
. Definování je podobné deklaraci proměnné,
avšak s jednou změnou - proměnná se stává konstantou, tudíž ji později
v programu nelze měnit. Naše piny nebudeme měnit za běhu programu, proto je
vhodnější definovat je jako konstanty. Tím se pojistíme, proti případným
nepříjemnostem:
#define LED_CERVENA 3 #define LED_ZELENA 2
Pokud LED zapojíte do jiných digitálních pinů, musíte upravit i kód, jinak se program nezkompiluje.
Inicializace komponent
Přesuňme se do funkce setup()
, ve které inicializujeme
komponenty. Jak víme, její kód se spustí jen jednou, a to na začátku
programu. Diody inicializujeme příkazem pinMode()
, který
přijímá dva parametry. Prvním je název konstanty či proměnné, která je
spojena s číslem pinu. Ve druhém parametru určujeme, zda bude daná
komponenta nastavena na vstup (INPUT
) či výstup
(OUTPUT
):
void setup()
{
pinMode(LED_CERVENA, OUTPUT);
pinMode(LED_ZELENA, OUTPUT);
}
Hlavní smyčka
Zbývá nám doplnit funkci loop()
, do které přidáme pouze
dva druhy příkazů - digitalWrite()
a delay()
.
Příkazem, digitalWrite()
, určíme pro danou LED, co má dělat,
přesněji kdy má svítit a kdy ne. V prvním argumentu zvolíme, jakou LED
nastavujeme, poté určíme, její stav. Stav diody se značí pomocí
klíčových slov LOW
a HIGH
, pro vypnutí a
zapnutí.
Pomocí delay()
uspíme proces na zadaný počet milisekund.
Červené LED jsme nastavili prodlevu 1000 ms (1s), zelená LED má nastavenou
prodlevu 2000 ms (2s).
Kombinací těchto dvou příkazu zajistíme, aby LED blikaly jedna po druhé:
void loop() { digitalWrite(LED_CERVENA, HIGH); delay(1000); digitalWrite(LED_CERVENA, LOW); delay(1000); digitalWrite(LED_ZELENA, HIGH); delay(2000); digitalWrite(LED_ZELENA, LOW); delay(2000); }
Pro jistotu si ukážeme celý kód:
#define LED_CERVENA 3 #define LED_ZELENA 2 void setup() { pinMode(LED_CERVENA, OUTPUT); pinMode(LED_ZELENA, OUTPUT); } void loop() { digitalWrite(LED_CERVENA, HIGH); delay(1000); digitalWrite(LED_CERVENA, LOW); delay(1000); digitalWrite(LED_ZELENA, HIGH); delay(2000); digitalWrite(LED_ZELENA, LOW); delay(2000); }
Když program nyní spustíme, rozsvítí se nejprve červená dioda, která po chvíli zhasne. Poté se rozsvítí a zhasne zelená dioda a smyčka se opakuje, dokud program neukončíme.
Propojení LED a tlačítka
První projekt byl poměrně jednoduchý. Zkusme něco o trochu složitějšího. V dalším projektu k LED zapojíme tlačítko a uděláme z něj vypínač. Když vypínač zmáčkneme, LED bude svítit, když ho zmáčkneme znovu, LED zhasne.
Seznam součástek
Na sestavení obvodu budeme potřebovat tyto součástky:
- 1x LED diodu,
- Arduino,
- nepájivé pole,
- 1x tlačítko,
- 1x rezistor 150 [Ω] označený zeleným proužkem,
- 1x rezistor 1 [kΩ] s červeným proužkem a
- propojovací kabely.
Zapojení obvodu
Součástky si nyní zapojíme, tentokrát začneme z druhé strany. Z pinu 4 povedeme oranžový drátek k zelenému rezistoru. K němu přidáme anodu LED diody a z katody povedeme černý drát do druhé části nepájivého pole, kam umístíme druhý rezistor. Další černý drát bude pokračovat od stejného pólu k uzemnění Arduina. Nad druhou stranu rezistoru umístíme tlačítko a dolní část propojíme zeleným drátem k pinu 2. Už nám zbývá jen přidat červený drát, kterým spojíme napětí 5 V s druhou stranou tlačítka:
Program příkladu
Máme-li hotové zapojení, můžeme se opět přesunout k našemu programu. Začneme konstantami a proměnnými:
#define LED 4 #define TLACITKO 2 bool tlacitko_zmacknuto = false; bool dioda_sviti = false;
LED a tlačítko jsme definovali jako konstanty s odpovídajícím číslem
pinu. K tomu jsme si navíc deklarovali ještě dvě další pomocné proměnné
typu bool
, které nabývat hodnoty true
a
false
. První proměnná bude signalizovat stav tlačítka, bude
hlídat jeho stisknutí. Druhá proměnná nám pomůže zjistit, zda LED
svítí nebo je zhasnutá.
Obou proměnným jsme pro názornost nastavili hodnotu na
false
, která je však u bool
proměnných výchozí.
Kód by tedy fungoval úplně stejně, i kdybychom proměnné pouze
deklarovali.
Funkce setup()
Ve funkci setup()
již známým způsobem inicializujeme naší
LED a tlačítko. Tlačítko ovšem nastavíme na INPUT
mód:
void setup()
{
pinMode(LED, OUTPUT);
pinMode(TLACITKO, INPUT);
}
Funkce loop()
Můžeme se přesunout do hlavní smyčky, kde už to bude o něco zajímavější.
Ukažme si její kód, který si vzápětí projdeme:
void loop() { tlacitko_zmacknuto = digitalRead(TLACITKO); if (tlacitko_zmacknuto) { dioda_sviti = !dioda_sviti; if (dioda_sviti) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(500); } }
Jako první načteme do naší proměnné, která hlídá stav tlačítka,
jeho aktuální hodnotu. Jakmile tlačítko zmáčkneme, získáme hodnotu
HIGH
, tedy ekvivalent true
.
Pomocí první podmínky nejprve testujeme hodnotu naší proměnné. Pokud bylo tlačítko zmáčknuto, podmínka bude splněna, přepneme tedy stav druhé proměnné a přistoupíme k další vnořené podmínce.
Přepnutí proměnné dioda_sviti
zařídíme
jednoduše tak, že jí přiřadíme stávající hodnotu, kterou pomocí
!
negujeme.
Další podmínkou testujeme, zda dioda doposud svítila nebo byla zhasnuta.
Pokud byla zhasnuta, řekli jsem předchozím řádkem, že ji chceme
rozsvítit. Učiníme tak tedy v první (if
) části podmínky. V
opačném případě diodu v druhé (else
) části podmínky
zhasneme.
Na konec nastavíme drobnou prodlevu, aby se cyklus neopakoval moc rychle.
Pokud jste postupovali podle návodu máte funkční už o něco složitější projekt.
V další lekci, Arduino - Projekty s LED diodami a potenciometrem, na nás čekají dva nové příklady s LED diodami. V pokročilém příkladu si ukážeme, jak je můžeme ovládat pomocí potenciometru.