A5MPL – Programování mikropočítačů
15.9.2016
Cvičení 2 Digitální vstupy a výstupy - LED a tlačítka
Obsah a cíle cvičení Toto cvičení: 1. 2. 3. 4.
Vysvětlí, co jsou digitální vstupy a výstupy mikropočítače. Vysvětlí, jak k mikropočítači připojit LED a tlačítka Ukáže, jak ovládat digitální výstupy Arduina – rozsvítit LED. Ukáže, jak zjišťovat stav digitálních vstupů Arduina – zjistit stisk tlačítka.
Obsah Digitální výstupy a vstupy ........................................................................................................................ 2 Připojení LED k Arduinu ........................................................................................................................... 2 Co je to LED?........................................................................................................................................ 3 Výpočet hodnoty předřadného rezistoru pro LED .............................................................................. 3 Barevné značení rezistorů ................................................................................................................... 4 Připojení tlačítka k Arduinu ..................................................................................................................... 5 Psaní programů ....................................................................................................................................... 6 Vývojový diagram ................................................................................................................................ 6 Zápis ve zjednodušeném jazyce (pseudokódu): .................................................................................. 6 Doporučený postup práce na laboratorním cvičení ................................................................................ 7 Aktivitní úlohy.......................................................................................................................................... 7 Úloha 2.1 ............................................................................................................................................. 7 Úloha 2.2 ............................................................................................................................................. 8 Kontrolní otázky ...................................................................................................................................... 8 Co byste měli umět na konci cvičení ....................................................................................................... 8 Příprava na příští cvičení (domácí úkoly)................................................................................................. 9 Zdroje a doporučená literatura ............................................................................................................... 9
1
A5MPL – Programování mikropočítačů
15.9.2016
Digitální výstupy a vstupy Digitální (diskrétní, binární) vstupy a výstupy (zkratka V/V, anglicky I/O – Input/Output) jsou to vstupy a výstupy, které mohou být jen ve dvou stavech: logická 1 a logická 0. Stavu logické 1 odpovídá napájecí napětí na pinu mikropočítače (5V u Arduino Uno). Stavu log. 0 odpovídá napětí blízkému 0 V (zem, GND). Snad nejčastěji používaným typem digitálního výstupu jsou LED (svítivé diody). Příkladem digitálního vstupu jsou tlačítka.
Připojení LED k Arduinu Vysvětlení k LED najdete v článku Blikáme LEDkou na http://robotika.vosrk.cz/guide/arduino/lesson02/cs. Schéma zapojení z [1]:
Skutečné provedení s nebájivým kontaktním polem [1]:
Na obrázku je LED připojena na pin 2 Arduina. Pro první pokusy je vhodné připojit ji místo pinu 2 na vývod 5 V, takže bude trvale svítit při zapojení Arduina na napájení (do USB konektoru počítače). 2
A5MPL – Programování mikropočítačů
15.9.2016
Co je to LED? LED je polovodičový zdroj světla. Při zapojení je důležité dodržet polaritu! Také je důležité do obvodu s LED zařadit rezistor, který omezí proud tekoucí LED, jinak hrozí poškození samotné LED nebo zdroje proudu!
Výpočet hodnoty předřadného rezistoru pro LED Označení veličin: • • • •
Proud – I Napájecí napětí – U Úbytek napětí na LED – ULED Odpor rezistoru – R
Proud LED bude: I = (U – ULED) / R Proud LED je udáván výrobcem, obvykle je to kolem 20 mA pro běžné LED a 2 mA pro tzv. nízkospotřebové LED. Potřebnou hodnotu odporu tedy vypočteme:
R = (U – ULED) / I Příklad: Máme LED, pro kterou požadujeme proud I = 2 mA = 0,002 A. Napájecí napětí (napětí na pinu Arduina) je U = 5 V. Úbytek napětí na LED je ULED = 2 V R = ( 5 – 2 ) / 0,002 = 3 / 0,002 = 1500 Ohmů. Je možné, že nebudeme mít k dispozici rezistor s vypočtenou hodnotou. V tom případě použijeme nejbližší vyšší hodnotu. Vyšší proto, že pak bude proud LED nižší a nehrozí tak její poškození. 3
A5MPL – Programování mikropočítačů
15.9.2016
Barevné značení rezistorů Hodnotu rezistoru můžeme určit pomocí barevných proužků, viz následující obrázek.
Na obrázku jsou vidět také příklady hodnot. Např. horní rezistor má 4 proužky: žlutý, fialový, červený a stříbrný. • • • •
Žlutý: 4 Fialový: 7 Červený: 2 Stříbrný: tolerance 10%
Hodnota je tedy 47 * 100 = 4700 Ohmů = 4,7 kOhmů Pokud máme k dispozici digitální multimetr, může být jednodušší hodnotu rezistoru změřit.
4
A5MPL – Programování mikropočítačů
15.9.2016
Připojení tlačítka k Arduinu Připojení tlačítka k Arduinu najdete v článku Tlačítko na: http://robotika.vosrk.cz/guide/arduino/lesson03/cs. Schéma zapojení tlačítka s pull-down rezistorem z [1]:
Skutečné zapojení LED a tlačítka [1]:
LED je zapojena na pinu 2, stejně jako v příkladu se samotnou LED. Tlačítko je zapojeno na pinu 5 (šedý drát), druhý vývod tlačítka je připojen na vývod 5 V Arduina (červený drát). Při stisknutém tlačítku je na pinu logická 1 (digitalRead vrací hodnotu HIGH).
5
A5MPL – Programování mikropočítačů
15.9.2016
Psaní programů Předtím, než začnete psát kód programu ve vývojovém prostředí (IDE), je vhodné promyslet si, jak má fungovat. Tyto myšlenky pak „zhmotnit“ na papíře pomocí vývojového diagramu nebo zapsání ve zjednodušeném jazyce (pseudokód). Zde je příklad pro program, který rozsvítí LED, pokud je stisknuto tlačítko a zhasne ji pokud není tlačítko stisknuto.
Vývojový diagram
Začátek
Je stisknuto tlačítko?
Rozsviť LED
Zhasni LED
Konec
Zápis ve zjednodušeném jazyce (pseudokódu): Poznámka: tlačítko je připojeno na pinu 5, LED na pinu 2 Přečti stav pinu 5 Jestliže je stav HIGH, zapiš na pin 2 hodnotu HIGH, jinak zapiš na pin 2 hodnotu LOW (0).
6
A5MPL – Programování mikropočítačů
15.9.2016
Doporučený postup práce na laboratorním cvičení 1. Prostudujte si tento návod ke cvičení a odkazované zdroje. 2. Vypracujte test Elektronika. 3. Vypočtěte velikost předřadného rezistoru pro zelenou LED. Na LED je úbytek napětí 2,2 V. Napětí na výstupním pinu Arduina je 5 V. Proud LED by měl být 2 mA. 4. Vytvořte testovací obvod se zelenou LED. LED bude zapojena mezi vývod 5V a GND Arduina (v sérii s rezistorem!). LED by tedy měla trvale svítit, pokud je Arduino připojeno na napájení. 5. Připojte zelenou LED k Arduinu na zvolený pin. Nezapomeňte na předřadný rezistor! Vytvořte program, který bude touto LED blikat. 6. Připojte ještě červenou LED a vytvořte program, který bude blikat střídavě oběma LED s periodou 1 s jako železničním přejezdu. 7. Upravte 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. 8. Napište program, kde jedna LED bude blikat s periodou 1 s (0,5 s svítí a 0,5 s nesvítí) a druhá LED s periodou 0,5 s (0,25 s svítí a 0,25 s nesvítí). 9. Připojte k Arduinu tlačítko na zvolený pin. Vytvořte program, který při stisku tlačítka rozsvítí LED a při uvolnění tlačítka LED zhasne. Tedy LED svítí, pokud je stisknuto tlačítko. Před psaním kódu si zapište algoritmus v pseudokódu nebo jako vývojový diagram. 10. Upravte program tak, aby LED blikala s periodou 1s pokud je tlačítko stisknuté. Pokud tlačítko není stisknuté, je LED zhasnutá. Před psaním kódu si zapište algoritmus v pseudokódu nebo jako vývojový diagram. 11. Zodpovězte si kontrolní otázky uvedené na konci tohoto dokumentu. Pokud si s některou otázkou nevíte rady, zeptejte se.
Aktivitní úlohy Zde je zadání aktivitních úloh, které můžete předvést na příštím cvičení. Součástí řešení musí být také vývojový diagram nebo zápis v pseudokódu na papíře. Pokud použijete cizí kód (např. z internetu) musí být toto uvedeno v komentáři na začátku zdrojového kódu a musí být popsány změny, které jste v kódu provedli, např. „Vytvořeno na základě kódu z http://robotika.vosrk.cz/guide/arduino/lesson04/cs, upraven počet LED a délka zpoždění“
Úloha 2.1 Vytvořte program, který bude vysílat SOS v Morseově abecedě blikáním LED. Tečka bude krátké bliknutí, např. 300 ms a čárka dlouhé bliknutí, např. 1 s. Využijte cyklů (for nebo while) pro vyslání tří teček a čárek, aby program nebyl příliš dlouhý. Můžete také vytvořit a použít vlastní funkci pro vyslání tečky a vlastní funkci pro vyslání čárky.
7
A5MPL – Programování mikropočítačů
15.9.2016
Úloha 2.2 Vytvořte program, který bude počítat, kolikrát uživatel stiskl tlačítko. Počet stisků tlačítka bude zobrazovat pomocí 3 LED v binárním kódu. Příklad zobrazení několika hodnot je v tabulce. Po dosažení maximálního zobrazitelného počtu (7) se počitadlo vynuluje a program bude počítat znovu od 0. Počet stisknutí 0 1 2 3
Stav LED (x znamená svítí, - znamená nesvítí) ----x -x-xx
Kontrolní otázky 1. 2. 3. 4. 5. 6. 7.
K čemu slouží příkaz #define? Vysvětlete na příkladu #define LED 2 K čemu slouží funkce pinMode? K čemu slouží funkce digitalWrite? Jaké jsou vstupní parametry funkce digitalWrite? K čemu slouží funkce delay? Co se stane, pokud v programu zapíšeme příkaz delay(1000)? Jak se bude chovat LED na pinu 13, pokud spustíme následující program? Nakreslete stav LED do diagramu, kde na vodorovné ose bude čas a na svislé ose stav LED: 0 (LOW) a 1 (HIGH).
void loop() { digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(900); } 8. 9. 10. 11. 12. 13.
Co je to větvení program? Jak v program zajistíme, aby se některý příkaz vykonal jen pokud je splněna určitá podmínka? Proč je potřeba připojit LED k mikropočítači přes předřadný resistor? K čemu slouží pull-up nebo pull-down rezistory při připojování tlačítek k mikropočítači? Zapište příkaz, který pozastaví provádění program na 0.5 s. Zapište příkaz, který rozsvítí LED na pinu 3. Uvažujte LED zapojenou tak, že svítí, pokud je na pinu log. 1. 14. Zapište podmínku, která bude splněna, pokud je stisknuto tlačítko na pinu 5. Uvažujte tlačítko zapojené tak, že při stisknutí je na pinu log. 1.
Co byste měli umět na konci cvičení • • • • •
Vypočítat předřadný rezistor pro LED Připojit LED a tlačítko k Arduinu Použít funkce digitalRead() a digitalWrite() Použít funkci delay() Použít v programu podmínku if. 8
A5MPL – Programování mikropočítačů
15.9.2016
Příprava na příští cvičení (domácí úkoly) 1. Přečtěte si návod na příští cvičení a případné související dokumenty.
Zdroje a doporučená literatura [1] Članky o Arduinu na http://robotika.vosrk.cz/guide/arduino/cs.
9