2. Blikáme LEDkou
aneb jak to funguje
V minulém díle jsme si rozchodili vývojové prostředí. Přeložili a rozběhli první program. Dnes se na blikátko podíváme trochu podrobněji, vysvětlíme si jak připojit LED k mikrokontroleru a co ten program vlastně dělá.
Bližší záběr na LED diodu, jsou zde vidět vnitřní struktury. |
Co to ta LEDka vlastně je?
LED je polovodičová dioda, tzn. elektronický prvek, který zjednodušeně v jednom
směru proud vede a v druhém ne (tedy stejně jako zpětný ventil v pneumatických
systémech) a navíc od ostatních diod svítí. Ve skutečnosti to je trošku složitější,
a proto se podíváme na základní parametry LED.
Vetšinu lidí hlavně zajímá jakou barvou svítí a jak hodně (to je sice zajímavé,
ale nás to v tuto chvíli moc zajímat nebude). Tři nejdůležitější parametry jsou
úbytek napětí v propustném směru, maximální proud v propustném směru a maximální
napětí v závěrném směru.
Na rozdíl od žárovek, u kterých nezáleží na polaritě napájecího napětí a jsou
schopny tedy pracovat na střídavé napětí, LED zapojené nesprávným způsobem nepracují.
Když je napětí na P-N přechodu diody zapojené správně, říkáme že je zapojena
v propustném směru a v tomto stavu skrz ni prochází proud.
Pro určení správné
polarity diody je nejjistější podívat se do jejího katalogového listu (tzn. datasheetu),
který je jakýmsi rodným listem každé součástky. Ale nejrychlejším způsobem
je to vyzkoušet, nejlépe multimetrem. Další způsoby určení uvádí tabulka:
znaménko: | + | − |
polarita: | kladná | záporná |
výstup: | anoda (A) | katoda (K) |
vývod: | dlouhý | krátký |
pouzdro z vnějšku: | zakulacené | ploché |
uvnitř pouzdra: | menší | větší |
Anoda a katoda na LED |
Dalším zásadním rozdílem oproti žárovce je, že to, jak hodně svítí neovlivníme
napětím připojeným na diodu, ale velikostí proudu, který jí prochází (u žárovky
také záleží na proudu, ale protože se žárovka chová jako odporová zátěž, tak je
proud úměrný velikosti napětí na žárovce).
Při průchodu proudu diodou na ní dochází k úbytku napětí (to záleží na typu diody - barvě).
Proto zdroj, ze kterého diodu napájíme musí mít větší napětí než je úbytek na diodě.
Ale pozor, diodu na zdroj nesmíme připojít přímo, téměř jistě bychom ji zničili,
protože by jí protékal větší proud než je přípustný.
Barva | Úbytek napětí |
---|---|
Infračervená | 1,6 V |
Červená | 1,8 V až 2,1 V |
Oranžová | 2,2 V |
Žlutá | 2,4 V |
Zelená | 2,6 V |
Modrá | 3,0 V až 3,5 V |
Bílá | 3,0 V až 3,5 V |
Ultrafialová | 3,5 V |
Proud v propustném směru u
nízkopříkonových LED se pohybuje od 1-2 mA, u standardních LED 10~25 mA až po
proudy nad 1 A u speciálních LED používaných v osvětlovací technice. Proto musíme
pře diodu zařadit rezistor, kterým proud omezíme. Pro určení jeho velikosti využijeme
ohmova zákona.
Zapojení LED |
Příklad:
červená LED:
- úbytek napětí v propustném směru 2V
- maximální proud 20mA
Aby na diodě bylo napětí 2V při proudu 20mA, musí na rezistoru vzniknout
úbytek napětí 3V (5 V - 2V). Z ohmova zákona vychází R = U/I = 3/0,02 = 150 ohmů.
To je minimální hodnota předřadného rezistoru, pokud nepožadujeme maximální
svit, běžně volíme menší proud a tomu odpovídající hodnotu rezistoru. Obvyklá
hodnota je 330 ohmů (tj. proud diodou cca 10mA).
Modrá, zelená a červená LED v 5mm difuzním pouzdru |
Když je zapojená opačně než má být, říkáme že je zapojená v závěrném směru
a neprochází skrz ni téměř žádný proud a ani nevyzařuje žádné světlo. Ale
maximální hodnota napětí, které můžeme na diodu zapojenou v závěrném směru
přivést je dalším důležitým parametrem.
Pokud připojíme napětí vyšší dojde
k proražení diody. Běžné LED mají závěrné napětí kolem 5V, proto pokud
používáme zdroj o tomto napětí a zapojíme LED opačně, nic se jí nestane (jen
nebude svítit).
Nyní už umíme LED zapojit, tak aby svítila.
Připojení LED k mikrokontroleru
LED je elektronický prvek - spotřebič (stejně jako žárovka, rezistor, elektromotor, ...).
Odborně jsou tyto prvky nazývány akční členy (aktuátory) a ovládacím obvodem
do nich řídíme přívod proudu a tím ovlivňujeme jejich stav. V nejjednoduším
případě jen proud pustíme nebo vypneme - akční člen je v aktivním stavu nebo v
klidu (svítí/nesvítí, ...).
Mikrokontroler, ke kterému budeme chtít LED připojit má však omezený maximální
proud, který je schopen na výstupu dodat. (maximální proud jedním pinem - nožičkou
mikrokontroleru AVR je 40mA). Proto LED můžeme přímo připojit na výstup mikrokontroleru
(ale např. žárovku nebo elektromotor ne, ty mají obvykle mnohem větší proudovou spotřebu).
Ale pozor, je omezen i maximální proud pro celý obvod (200mA). Můžeme tedy
připojit maximálně 10 současně svítících LED s proudem 20mA, nebo použijeme
nižší proud a tím zvýšíme počet LED, kterém mohou současně svítit (pro proud 10mA jich
můžeme připojit 20).
Zapojení LED ovládané mikrokontrolerem je tedy jednoduché, pouze nahradíme zdroj 5V
výstupem mikrokontroleru (např. pin označený D2). Celé zapojení na kontaktním poli
je na obrázku. Výstup Arduina D2 je připojem na rezistor, ten na anodu LED a katoda
LED na zem (GND).
Zapojení LED |
Zapojení LED na kontaktním poli |
A nyní program
Jak už víme z minula, celý program pro Arduino se sestává ze dvou částí - funkcí.
Ve funkci setup jsou příkazy, které se provedou pouze jednou po zapnutí (resetu).
Poté Arduino začne stále dokola provádět příkazy uvedené ve funkci loop.
První příkazy, které se tedy naučíme budou pro ovládání jednotlivých pinů (nožiček)
mikrokontroleru. Pro začátek nám budou stačit jen dva stavy (vypnuto x zapnuto), tedy
digitální ovládání.
První co musíme udělat, je nastavit jestli daný pin (nožička) bude vstupní (signál bude
do mikrokontroleru přiváděn zvenší) nebo výstupní (mikrokontroler bude něco řídit).
K tomu slouží funkce
pinMode(pin, mode)
pin ... určuje, který nožička se má nastavit (0-13)
mode ... určuje, zda bude vstup nebo výstup (INPUT, INPUT_PULLUP, OUTPUT)
pin ... určuje, který nožička se má nastavit (0-13)
mode ... určuje, zda bude vstup nebo výstup (INPUT, INPUT_PULLUP, OUTPUT)
druhou funkcí, kterou budeme potřebovat je nastavení hodnoty na výstupní pin
digitalWrite(pin, value)
pin ... určuje, který nožička se má nastavit (0-13)
value ... určuje hodnotu výstupu 0/1 (LOW/HIGH)
pin ... určuje, který nožička se má nastavit (0-13)
value ... určuje hodnotu výstupu 0/1 (LOW/HIGH)
A teď celý program:
void setup()
{
pinMode(2, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(2, 1); // na vystup 2 nastavit 1 (5V)
digitalWrite(2, 0); // na vystup 2 nastavit 0 (0V)
}
{
pinMode(2, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(2, 1); // na vystup 2 nastavit 1 (5V)
digitalWrite(2, 0); // na vystup 2 nastavit 0 (0V)
}
Tento program funguje, ale po spuštění máme pocit, že LED svítí stále, je to tím,
že přepínání zapnuto/vypnuto probíhá velice rychle (cca 100 000x za sekundu). Proto
mezi zapnutí a vypnutí LED zařadíme časovou prodlevu. Tu realizuje funkce
delay(time)
time ... čas čekání v ms
time ... čas čekání v ms
Upravený program:
void setup()
{
pinMode(2, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(2, 1); // zapnout led, na vystup 2 nastavit 1 (5V)
delay(500);
digitalWrite(2, 0); // vypnout led, na vystup 2 nastavit 0 (0V)
delay(500);
}
{
pinMode(2, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(2, 1); // zapnout led, na vystup 2 nastavit 1 (5V)
delay(500);
digitalWrite(2, 0); // vypnout led, na vystup 2 nastavit 0 (0V)
delay(500);
}
Nyní LED bliká s periodou 1s (0,5s svítí, 0,5s nesvítí).
Ještě uděláme jednu úpravu. Pokud bychom teď chtěli LEd zapojit na jiný pin než 2,
tak musíme na 3 místech v programu toto upravit. Zde nastává potenciální
nebezpečí, že to někde zapomeneme. Proto je vhodnější zavést symbolické
pojmenování místo konkrétního čísla pinu a pak jej používat. To realizujeme tzv.
direktivou preprocesoru:
#define LED 2
LED ... symbolické jméno
2 ... hodnota (kterou se symbolické jméno v programu nahradí)
LED ... symbolické jméno
2 ... hodnota (kterou se symbolické jméno v programu nahradí)
Stejně tak, můžeme nahradit konkrétní hodnotu čekání a pro nastavení výstupu
použijeme předefinované konstanty HIGH a LOW.
Finální podoba programu pro blikání LED:
#define LED 2
#define TIME 500
void setup()
{
pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(LED, HIGH); // zapnout led, na vystup 2 nastavit 1 (5V)
delay(TIME);
digitalWrite(LED, LOW); // vypnout led, na vystup 2 nastavit 0 (0V)
delay(TIME);
}
#define TIME 500
void setup()
{
pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(LED, HIGH); // zapnout led, na vystup 2 nastavit 1 (5V)
delay(TIME);
digitalWrite(LED, LOW); // vypnout led, na vystup 2 nastavit 0 (0V)
delay(TIME);
}
Jde to i jinak
LED lze k výstupu Arduina zapojit i jinak. V původním zapojení necháme připojení
na kladný pól zdroje a místo připojení na zem zapojíme výstup mikrokontroleru.
V případě, že výstup bude v 0 (0V), tak bude led svítit, pokud bude výstup v 1 (5V),
nebude led svítit.
Zapojení LED |
Zapojení LED na kontaktním poli |
Zapojení funguje tedy přesně opačně než to původní, v programu tedy stačí zaměnit
nastavení výstupu.
#define LED 2
#define TIME 500
void setup()
{
pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(LED, LOW); // zapnout led, na vystup 2 nastavit 0 (0V)
delay(TIME);
digitalWrite(LED, HIGH); // vypnout led, na vystup 2 nastavit 1 (5V)
delay(TIME);
}
#define TIME 500
void setup()
{
pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
}
void loop()
{
digitalWrite(LED, LOW); // zapnout led, na vystup 2 nastavit 0 (0V)
delay(TIME);
digitalWrite(LED, HIGH); // vypnout led, na vystup 2 nastavit 1 (5V)
delay(TIME);
}
Úkoly na samostatnou práci
1. Připojit ještě druhou LED, např. na výstup 3
2. Sestavte program pro střídavé blikání obou led (jako na železničním přejezdu) s periodou 1s
3. Upravit program tak, aby diody blikaly postupně: rozsvítí se první, po 0,25s se
rozsvítí druhá, v čase 0,5s zhasne první a v čase 0,75s zhasne druhá. V čase 1s se opět
rozsvítí první a stále dokola.
4. Napište program, tak aby jedna led blikala s periodou 1s (0,5s svítí, 0,5s nesvítí) a druhá
led blikala s periodou 0,5s (0,25s svítí, 0,25s nesvítí).
Zdroje
[1] LED na wikipedii