Prvý program: Arduino blikanie LED

Arduino blikanie LEDV 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šievetš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 -

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?

LED_zapojenie_VCC_GNDAno, 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.

Produkty


Dióda

DiódaDióda je elektrotechnická súčiastka s dvoma elektródami, označovanými ako anóda a katóda, ktorá sa vyznačuje veľmi odlišným tvarom Volt-Ampérovej charakteristiky v závislosti na polarite priloženého napätia. Po pripojení anódy na kladnejšie napätie ako je na katóde, kladie dióda len malý odpor priechodu elektrickému prúdu, zatiaľ čo pri opačnom zapojení je dióda takmer nevodivá. Pozrime sa …

Arduino IDE – návod na inštaláciu

Arduino IDE návod na inštaláciuÚspech Arduina a jeho veľké rozšírenie nie je len vďaka zaujímavému hardvéru, ale predovšetkým jednoduchému vývojovému prostrediu (skrátene IDE, čo doslova znamená Integrated Development Environment). Arduino IDE je aplikácia, ktorá nám umožní jednoducho s doskou Arduino pracovať. Arduino IDE obsahuje okrem iného textový editor a niekoľko tlačidiel, ktoré slúžia na preklad a následnému nahraniu kódu …

Tranzistor

TranzistorTranzistor je základným stavebným prvkom skoro každého dnešného elektronického zariadenia. Základom tranzistora je kryštál polovodiča s dvoma priechodmi PN. Polovodičové priechody tranzistora vytvárajú štruktúru zodpovedajúcej spojenie dvoch polovodičových diód v jednej súčiastke. Avšak väčšinu vlastností tranzistorov sa nedá nahradiť touto dvojicou diód. Pri zhotovovaní tranzistorov sa používajú rôzne technológie. Ich cieľom je utvoriť v kremíku, …

2 komentáre-ov k “Prvý program: Arduino blikanie LED

  • Tuliman píše:

    Viem, že to bude znieť divne, ale predávajú sa aj LED, kde je vnútro LEDky opačne. Musel som sa orientovať podľa púzdra z vonka. Nekupoval som to priamo z Číny, ale zo špecializovaného elektro obchodu.

    Odpovedať

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Môžeš použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>