Prvý program Arduino blikanie LED

Prvý program: Arduino blikanie LED

V tomto článku ti ukážem praktickú ukážku, ako zapojiť a naprogramovať Arduino. Ide o také to programátorské “Hello World” s Arduinom. V našom prípade to je “Arduino blikanie LED”.

Blikanie LED diódou možno bez ďalších súčiastok realizovať s akoukoľvek vývojovou doskou Arduino. V tomto príklade to bude Arduino UNO. Bude to to najjednoduchšie, čo môžeš so svojím Arduinom urobiť. Takže poďme na to.

Čo budem potrebovať na Arduino blikanie LED?

Na blikanie LED diódou budeš potrebovať vývojovú dosku napr. Arduino UNO, prepojovací USB kábel a počítač so stiahnutým programom Arduino IDE (klikni na odkaz, tam som ti napísal návod na inštaláciu). Na stránkach arduino.cc sa dá stiahnuť vždy aktuálna verzia. No a samozrejme trochu času a trpezlivosti.

Taktiež bude vhodné vyskúšať si blikanie nielen s integrovanou LED diódou, ale aj s externou LEDkou. K tomu bude potreba aspoň jedna farebná LED a rezistor o hodnote 220Ω a nejaký ten breadboard - to je napájivé kontaktné pole.

A ako to zapojím?

K tomuto účelu máme schému zapojenia. Každá súčiastka má svoju elektrotechnickú značku, kde sú označené jej vývody, prípadne hodnoty. Taká schéma vyzerá napr. takto:

Zapojenie Arduino LED schéma

Toto je typické zapojenie integrovanej LED priamo na bežných Arduino doskách. Pozor, ale sú i niektoré dosky, ktoré to môžu mať aj na inom pine (MKR1000) alebo ju dokonca vôbec nemajú (Arduino DUE).

Na schéme vidíš veľký obdĺžnik Arduino s popismi pinov a do série je zapojená LED s rezistorom 220Ω medzi pin D13 a GND (GND je zem alebo mínusový pól). LED dióda je elektronický prvok - spotrebič (rovnako ako žiarovka, elektromotor, …). Odborne sú tieto prvky nazývané ako akčné členy a ovládacím obvodom (Arduinom) do nich riadime prívod prúdu a tým ovplyvňujeme ich stav. V najjednoduchšom prípade len prúd pustíme alebo vypneme - akčný člen je v aktívnom stave alebo v pokoji (svieti / nesvieti, …).

Externú LED pripojíš spolu s rezistorom podľa nasledovného obrázka. Všimni si, že je teraz pripojená na pin D9. Prečo zrovna na pin D9? No lebo som sa tak rozhodol, že ju chcem mať na tomto pine. Ono ten pin vie i niečo navyše. Naznačiť by ti to mohli tie drobné písmenká PWM. Čo znamenajú sa dozvieš neskôr. Teraz to len takto zapoj.

Breadboard zapojenie Arduino LED

Musí byť rezistor presne 220Ω?

To je správna otázka. Hlavne keď rezistor s takou hodnotou nemáš, ale máš s nejakou podobnou. Arduino, ku ktorému budeš chcieť LED pripojiť, má obmedzený maximálny prúd, ktorý je schopný na výstupe dodať. Maximálny prúd jedným pinom (nožičkou) je 40mA. Doporučuje sa zaťažovať pin do 20mA. Preto LED môžeš priamo pripojiť na výstup Arduina, ale napr. žiarovku alebo elektromotor nie, tie majú zvyčajne oveľa väčšiu prúdovú spotrebu.

Na obmedzenie pretekajúceho prúdu sa používa rezistor. Čím vyššiu hodnotu odporu má rezistor, tým menší prúd potečie diódou a dióda bude o to slabšie svietiť. Takže pri hodnote rezistoru 220Ω potečie prúd dajme tomu cca 11mA (záleží na farbe diódy), pri hodnote rezistoru 1kΩ to už je cca 3mA. I pri takto malom prúde bude LED dióda jemne svietiť (ale máme zas minimálnu spotrebu energie). No a ak tam dáš rezistor s hodnotou 150Ω, tak prúd potečie cca 20mA, LEDka bude svietiť jasnejšie.

No a nech ťa ani nenapadne pripájať LED k Arduinu bez rezistoru. Prečo? No preto! Lebo preťažíš pin Arduina prúdom väčším ako 40mA a uvoľní nenávratne zo seba skrytý dym a LEDka zase svoje posledné blik

Ale pozor, je obmedzený aj maximálny prúd pre celé Arduino - všetky piny dohromady max 200mA. Môžeš teda pripojiť maximálne 10 súčasne svietiacich LED s prúdom 20mA alebo použiješ nižší prúd vďaka rezistoru s vyššou hodnotou odporu a tým zvýšiš počet LED, ktoré môžu súčasne svietiť. Pre prúd 10mA ich môžeš pripojiť 20. V jednom článku som pripravil aj výpočet rezistoru pre LED pre konkrétny prúd. Samozrejme toto platí nielen pre Arduino, ale aj iné integrované obvody, kde ich maximálne výstupné prúdy nájdeš v datasheete.

Mám zapojiť rezistor pred LED alebo za LED?

No čo myslíš? Je to jedno alebo nie? Keďže sú zapojené do série, tečie oboma súčiastkami rovnaký prúd, takže im je to jedno v akom poradí budú zapojené.

Takže ano, je to jedno či je rezistor pred alebo za LED. Pri návrhu umiestnenia súčiastok na plošnom spoji toho môžeš využiť.

No a ako mám otočiť LED?

Na rozdiel od žiaroviek, u ktorých nezáleží na polarite napájacieho napätia a sú schopné teda pracovať na striedavé napätie, LED zapojené nesprávnym spôsobom nepracujú, nesvietia. Pre určenie správnej polarity diódy je najistejšie pozrieť sa do jej katalógového listu (tzn. do datasheetu), ktorý je akýmsi rodným listom každej súčiastky. Ale najrýchlejším spôsobom je to vyskúšať najlepšie multimetrom.

Ďalšie spôsoby určenia uvádza tabuľka s obrázokom:

zapojenie LED
znamienko: + -
polarita: kladná záporná
výstup: anóda (A) katóda (K)
vývod: dlhý krátky
púzdro z vonka: zagulatené ploché
vo vnútry púzdra: menšie vetšie

Naskôr pripoj tú dlhšiu „nohu“ LED (pozitívna anóda) na rezistor. No a teraz obdobne a logicky pripoj jej krátku nohu (negatívna katóda) k zemi (GND - ground).

A čo ten kód programu?

Netreba niečo pracne opisovať alebo hľadať a sťahovať z internetu? Odpoveď je NIE. Stačí v Arduino IDE kliknúť v menu na položku „Súbor“ a medzi príkladmi „Basic“ nájsť „Blink“. Hotovo, program sa ti otvorí a uvidíš niečo takéto:

Arduino IDE - Blink

Nezabudni si po pripojení dosky skontrolovať číslo COM portu a nastavenie správnej vývojovej dosky. No a teraz klikni na druhú ikonu (šípka v pravo) alebo stlač „CTRL+U“ a tento program sa nahrá do Arduina a bude ti blikať LEDka. Lenže ktorá LEDka bude blikať? Tá integrovaná na doske alebo tá externá na breadborde? Nahraj kód a uvidíš.

Ako Arduino vie, kde mám pripojenú LED?

No on to nevie, musíš mu to nejak povedať. Povedať mu to vieš programom. Ako si už asi zistil pri nahraní programu z príkladu, tak bliká integrovaná LED zhruba v sekundových intervaloch.

Teraz si tento program rozpitváme a skúsime nejaké úpravy. Veď chceme aby blikala tá externá LED.

Čo teda tie farebné slová znamenajú?

Celý program pre Arduino sa skladá z dvoch častí - funkcií. Vo funkcii void setup sú príkazy, ktoré sa vykonajú len raz po zapnutí (alebo po resete). Potom Arduino začne stále dookola vykonávať príkazy uvedené vo funkcii void loop. Prvé príkazy, ktoré sa teda naučíme budú pre ovládanie jednotlivých pinov (nožičiek) Arduina. Pre začiatok nám budú stačiť len dva stavy (vypnuté alebo zapnuté), teda digitálne ovládanie. Prvé čo musíme urobiť, je nastaviť či daný pin bude vstupný (signál bude do Arduina privádzaný zvonka) alebo výstupný (Arduino bude niečo riadiť). K tomu slúži funkcia (príkaz) pinMode(pin, mode).

pinMode(pin, mode)

  pin   ... určuje, ktorý pin (D0-D13) sa má nastaviť
  mode  ... určuje, či to bude vstup alebo výstup (INPUT, INPUT_PULLUP, OUTPUT)

Táto funkcia pinMode je vo funkcii setup, pretože nám ju stačí vykonať len raz pri spustení programu. Týmto LED ešte nerozsvietime, len povieme Arduinu, že tento pin chceme, aby bol výstupný. Zápis môže vyzerať napríklad takto:

pinMode (13, OUTPUT); // Nastavenie pinu 13 na výstup 
pinMode (12, INPUT);  // a pinu 12 na vstup

No hej, ale ja v príklade vidím LED_BUILTIN a nie číslo pinu, čo to je?

To je prosím pekne taká zadefinovaná konštanta, ktorá je nastavená tak, že podľa zvolenej dosky v Arduino IDE ti automaticky priradí číslo pinu (v tomto prípade 13), ku ktorej je na doske pripojená interná LED. Určite si spomínaš, ako som hore písal, že niektoré dosky majú túto LED pripojenú na iných pinoch. A vzhľadom k tomu, že je snaha písať programy univerzálne na rôzne typy dosiek a ty ako programátor vývojár nevieš akú dosku si užívateľ pripojí, tak sa použije takáto konštanta a tá sa o to za teba postará a priradí správne číslo pinu k internej LED.

Aha, takže keď všade slovo LED_BUILTIN prepíšem na 9, bude mi blikať už tá externá LED?

Presne tak. Celý program bude vyzerať takto:

void setup() {  
  pinMode(9, OUTPUT);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(1000);
}

Toto je celý program? A kde ti zmizli tie ostatné anglicky písané riadky?

To boli poznámky programátora. To ako sa správne používajú píšem v tomto článku.

No poďme ďalej. Druhú z funkcií, ktorú budeme potrebovať je nastavenie hodnoty na výstupnom pine a k tomu nám poslúži ďalší príkaz digitalWrite(pin, value).

digitalWrite(pin, value)

  pin   ... určuje, ktorý pin (D0-D13) sa má nastaviť
  value ... určuje hodnotu výstupu 0/1 LOW/HIGH 0V/5V

Tento príkaz sa už nachádza vo funkcii loop. To už je časť programu, ktorý sa nám bude neustále opakovať. Zápis tohto príkazu vyzerá takto:

digitalWrite (9, HIGH); // na výstup 9 nastaviť 1 (5V) LED svieti 
digitalWrite (9, LOW);  // na výstup 9 nastaviť 0 (0V) LED nesvieti

No a ostal tam ešte jeden príkaz delay(1000). K čomu to slúži?

Toto hovorí Arduinu, aby sa zastavil na určitý čas. Ten určitý čas je 1000. Táto hodnota sa udáva v milisekundách. Tento príkaz delay(1000) ti zastaví vykonávanie tvojho programu na 1000 milisekúnd, čo je jedna sekunda. Preto vidíš že LED preblikáva v sekundových intervaloch, lebo je medzi dvomi príkazmi digitalWrite.

delay(time)

  time  ... čas čakania v milisekundách

Ak by si tento príkaz vynechal, tak by si videl LEDku svietiť menším jasom. Veď si to vyskúšaj. Taktiež vyskúšaj túto hodnotu zmeniť napr. na 500. Pohraj sa s tými hodnotami, veď k tomu to Arduino máš.

Takže ako to celé funguje?

Keď celý program zhrniem do našej reči, tak to vyzerá nasledovne. Nastavím najskôr pin 9 na výstup. Ďalej v slučke loop nastavím tento pin na HIGH, čím LED rozsvietim, potom čakám 1s, následne diódu zhasnem a čakám znova jednu sekundu. Potom program začína znova slučkou loop od príkazu na nastavenie pinu na HIGH a tak ďalej stále dookola.

A keď chem mať LED na inom pine?

To musím pracne poprepisovať všetky čísla 9? Nedalo by sa to na jednom mieste raz zmeniť? Nuž predstav si, že by sa to dalo a celkom jednoducho.

Pri prepisovaní čísla 9 na iné číslo pinu ti nastáva potenciálne nebezpečenstvo, že to niekde zabudneš. Hlavne pri dlhších programoch. Preto je vhodnejšie zaviesť si takzvané symbolické pomenovanie namiesto konkrétneho čísla pinu a potom ho používať takto v programe. To realizujeme tzv. direktívou preprocesora. Ako? Podobne ako je to s tou konštantou LED_BUILTIN.

#define LED 10

  LED ... symbolické meno
  10  ... hodnota, ktorou sa symbolické meno v programe nahradí

Takéto pomenovanie si teraz vytvoríme a rovno dve rôzne. Veď potrebujeme meniť aj čas.

#define LED   10
#define TIME  500

void setup()
{   
  pinMode(LED, OUTPUT);   // nastavenie pinu LED ako výstup
}

void loop()
{
  digitalWrite(LED, HIGH);  // rozsvietime LEDku
  delay(TIME);              // čakanie TIME milisekúnd
  digitalWrite(LED, LOW);   // zhasneme LEDku
  delay(TIME);              // čakanie TIME milisekúnd
}

Teraz fyzicky pripoj LED na pin 10, nahraj program a LED bude teraz blikať na pine 10 a rýchlejšie. Hodnotu 500 zmeň na nižšiu a trocha potrénuj LEDku, nech bliká svižnejšie. Vyskúšaj si zadefinovať dva rôzne časy - jeden na dĺžku svietenia a druhý na dĺžku nesvietenia. Napr. 2 sekundy LED svieti a polsekundy nesvieti.

Dá sa LED pripojiť aj inak?

zapojenie LED diody s rezistorom k Arduinu

Ano, dá. Vypni si Arduino od napájania. Najskôr pripoj tentokrát tú kratšiu “nohu” LED (pozitívna katóda) na rezistor pripojený na pin 10 (jednoducho otoč fyzicky LEDku v breadboarde). No a teraz obdobne pripoj jej dlhšiu nohu (negatívna anóda) teraz ale k +5V. V skratke povedané, LED je teraz pripojená na +5V a nie ku GND. Tu je na obrázku nakreslený rozdiel zapojenia.

Zapni Arduino a ak tam máš nahratý program, kde LED mala svietiť 2 sekundy a polsekundy nesvietiť, tak zistíš že to teraz funguje presne naopak. To znamená, že teraz príkazom digitalWrite hodnotou HIGH LEDku nerozsvietiš ale zhasneš (obdobne opačne je to aj pri LOW).

A prečo je to tak? Lebo prúd tečie od kladného pólu +5V k zápornému pólu GND. Dívaj sa teraz pozorne na obrázok.

V prvom prípade na pin D9 hodnotou HIGH privedieme +5V a prúd tečie cez rezistor a LED smerom dolu k zemi GND a LED svieti. Pri hodnote LOW je na pine D9 0V (GND), prúd nemá kade tiecť (z GND do GND to nepotečie).

V druhom prípade na pin D9 hodnotou HIGH privedieme +5V a LEDka je pripojená tiež k +5V, tak prúd tiež nepotečie (z +5V do +5V). Ale ak na ten pin D9 dáme hodnotu LOW (GND), tak sa LED rozsvieti. Je to aspoň trochu jasné?

Čo by som mal ešte vedieť?

Určite aspoň to, ako pri zapájaní nezničiť Arduino. Tomuto sa venujem v samostatnom článku “Ako (ne)zničiť Arduino“. Doporučujem ti sa na to pozrieť, aby si sa chybám mohol vyhnúť, lebo nesprávnym zapojením môžeš potenciálne zničiť dosku Arduino.

A čo bude ďalej?

No čo, bolo to tažké zapojiť a naprogramovať Arduino? Hádam ani nie. Čo ťa ďalej čaká? Upraviť tento program tak, aby sa funkcia delay v programe nevyskytovala vôbec. Ono pravdupovediac, tomuto príkazu sa treba vyhýbať a používať ho čo najmenej, aby ti program zbytočne nečinne nestál na jednom mieste, ale aby vykonával i niečo iné užitočné.

Najbližším príkladom bude blikanie s viacerými LEDkami s rôznymi časmi blikania. Alebo čo tak jas LEDky plynulo rozsvecovať ako u stmievača? To bude to spomínané PWM. Ako sa to dá zrealizovať Arduinom? O tom bude reč v ďalšom článku.

Výber na čítanie...

Eagle
Eagle

Editor plošných spojov EAGLE je užívateľsky prívetivý a výkonný nástroj pre návrh dosiek plošných spojov (DPS, PCB). Je široko používaný v priemysle a vývoji elektroniky...

Čítať viac...

Arduino Knižnice návod na inštaláciu
Knižnice – návod na inštaláciu

Knižnice určené pre Arduino sú priečinky (adresáre), ktoré združujú viac súborov so zdrojovými kódmi. Vďaka týmto zdrojovým kódom máme potom jednoduchší a prehľadnejší vlastný program, keď chceme pripojiť nejaký zložitejší modul, senzor, displej a podobne. Napríklad pri stiahnutí programovacieho ...

Čítať viac...

ako na ošetrenie spínacích kontaktov - debouncing
Ako na ošetrenie spínacích kontaktov – debouncing

Všeobecne najčastejším spôsobom ovládania aplikácií Arduinom s okolitým svetom sú tlačítka, klávesnice (membránové, kapacitné alebo s mikrospínačmi), rotačné enkódery (rotation encoders, inkrementálne otočné ovládače) a rad ďalších spínačov, pracujúcich na...

Čítať viac...

Obľúbené produkty...

TTP229L Touch Key USB Shield

9.19 EUR

9.19 EUR

Keyestudio JoyStick Shield PS2 nRF24L01

8.90 EUR

8.90 EUR

Vyhľadať články
Programovanie...
  • Logické operátory

    Logické operátory sú && || ! (and or a not). Vykonávajú výpočet logických výrazov tvorených ich o...

  • Konverzie

    Možno ste sa už pri programovaní dostali do situácie, kedy si program robil s číslami a dátovými ...

  • Zložené operátory

    Použitie zložených priraďovacích operátorov zjednodušuje a sprehľadňuje zdrojový kód, no použitie...

  • Aritmetické operátory

    Aritmetické operátory vykonávajú matematické operácie dvoch výrazov jednej alebo viacerých typov ...

  • Dátové typy

    Celočíselné dátové typy môžu obsahovať modifikátory unsigned respektíve signed, čím môžeme požado...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur