Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3. diel - Arduino - Hráme sa s LEDkami

Vitajte v ďalšom dieli seriálu o Arduino. Minule sme si napísali prvý program. Dnes budete potrebovať okrem Arduino tiež nejaké ledky, potenciometer a odporúčam aj odpory (u 5V LED ani nie sú potrebné).

Blikanie

A rovno k programu - štandardne sa bliká s LED diódou na Arduino na pinu 13, ale na ITnetworku sme viac než štandard, takže si rozblikajú diód viac. Vezmeme si naše nepájivé kontaktné pole, osadíme si ho pár diódami a zapojíme k Arduino podľa nasledujúceho schéma:

Arduino schéma - Arduino

A zobraz zdroj:

int led1 = 13;  //první dioda
int led2 = 12; //druhá dioda

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop()
{
  digitalWrite(led1, HIGH);
  delay(100);
  digitalWrite(led2, HIGH);
  digitalWrite(led1, LOW);
  delay(100);
  digitalWrite(led2, LOW);
}

Teraz k vysvetľovanie:

Int led1 = 13;
Int led2 = 12;

Na začiatku máme v prvých dvoch riadkoch uložené výstupy diód do premenných. Nie je to nutnosťou, ale ak už bude kód rozsiahlejšie a budeme potrebovať prepojiť diódu z pinu 12 na pin 11, tak nebudeme musieť v kóde hľadať všetky 12 a prepisovať ich, ale iba zmeníme jedno číslo na začiatku. Aj tu možno použiť štandardné komentáre cez //, alebo viacriadkové cez / * text * /. Pod premennými je už setup. Ten sa vykoná len raz a tu sa standartdně určuje, čo bude čo.

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);

My sme Arduino povedali, že bude používať len piny 12 a 13 (v premenných LED1 a LED2), ktoré budú mať výstupné funkciu - nič nebude čítať a na naše pokyny do pinu pustí alebo vypne prúd. pinMode tiež berie ako druhý parameter aj INPUT, kedy pin číta, či je na ňom 1 alebo 0.

V Loop máme už samotné blikanie

digitalWrite(led1, HIGH);

Funkcia digitalWrite berie 2 argumenty - pin a čo s ním. Okrem HIGH (na pinu bude 1) a LOW (na pinu bude 0) zvláda aj pár ďalších, o tých ale až inokedy.

Delay(100);

Delay sa stará o oneskorenie. Na určitý počet milisekúnd (u nás 100) celý kód pozastaví. Bez oneskorenia by dochádzalo k prepnutiu tak rýchlo, že ho ani neuvidíte voľným okom a niektoré diódy ani nebudú poriadne svietiť.

digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);

Teraz vypneme LED1 a zapneme LED2.

delay(100);
digitalWrite(led2, LOW);

Ďalšie oneskorenie a vypnutie LED2. Program hneď sám skočí na začiatok loop, takže sa zároveň zapne LED1 a takto nám to bude stále dokola blikať a blikať.

Po overení (Ctrl + R) sa nám v čiernej okne (v prípade správneho kódu) napíše Binary sketch size: 1 658 bytes (of a 258 048 byte maximum). To znamená, že sketch zaberá 1 658 bitov a na túto dosku sa ich zmestí 258 048 bitov. Upload na dosku sa vykonáva buď cez tlačidlo upload, alebo skratkou Ctrl + U. Ak ste zvyknutí z iných IDE na F5, tak to tu bohužiaľ nefunguje, ale našťastie nerobí vôbec nič, takže sa nič nestane, ak ho zo zvyku stlačíte. Ja osobne dávam rovno upload bez overenia, pretože overenie trvá pomerne dlho a pred upload sa overuje, aj keď už overené bolo. Ak všetko prebehne v poriadku, tak sa vám zobrazí zas veľkosť Sketche a nad tým Done uploading. Medzi najčastejšie chyby patrí Serial port not found. Ak sa vám zobrazí, tak skontrolujte pripojenie Arduino. Ak je všetko v poriadku, tak odpojiť, pripojiť a skúsiť znova.

Po dokončení pridania sa program okamžite spustí. Nečakajte žiadne aktivačné tlačidlo, akonáhle má Arduino prúd, tak hneď začne pracovať. Ak máte všetko správne zapojené, tak by mali diódy začať striedavo blikať. Pokiaľ nezačnú, skontrolujte zapojenie a polaritu diód (kratšie nožička na GND).

blikajúce Arduino - Arduino

rozblikaniu Arduino

Arduino má okrem digitálnych pinov tiež analógové vstupy, ale zvláda aj analógový výstup. Hoci sa zdá, že analógový vstup a výstup sú skoro to isté, tak každé je v podstate niečo úplne iné. Najskôr ale rozdiel medzi analógom a digitálom. Vopred sa ospravedlňujem tým, čo tomu už rozumie, ty teraz budem nudiť. Takže digitálne je dnes už častejšie a spočíva v tom, že na výstupe je buď 1 (prúd ide) alebo 0 (prúd nejde). Analóg je potom schopný hodnôt od 0 do 255 na výstupe (čím môžeme napríklad ovládať jas LEDky) a na vstupe je schopný čítať od 0 do 1023. Analógový výstup navyše nefunguje tak, že by sa vysielalo menšie napätie. Z pinu stále lezie 5V, len sú použité impulzy (PWM). Preto táto funkcia funguje len na pinoch s označením PWM. Na obrázku nižšie je znázornené, ako dochádza k vysielaniu impulzov. Keďže sa všetko odohráva veľmi rýchlo, tak sa to javí ako znížené napätie, ale v skutočnosti to je stále 5 V.

PWM - Arduino

PWM graf

Pre ukážku zas nebudem vymýšľať nič svetoborné, ale necháme Arduino čítať hodnotu potenciometra, tú spracovať a podľa nej rozžiariť LEDky. Celé by to fungovalo aj bez Arduino, ale cieľom je naučiť vás s Arduino zaobchádzať, takže sa do toho dáme.

Budeme potrebovať potenciometer, LEDky (momentálne nemám na 5V, takže použijem na nižšie napätie a pridám odpor), drôtiky, breadboard a Arduino. Zapojenie možno aj inak ako je na schéme, ale pre názornosť ho zapojím takto.

schéma - Arduino
LEDka je normálne pripojená na pin 12, potenciometer je pripojený k + 5V ak zemi, prostredná potom na A0. Otáčaním dochádza k zmene napätia, teda aj analógové hodnoty, podľa ktorej sa potom bude meniť výstup. Kód bude takýto:
int led1 = 12;
int hodnota = 0;
int analogpin = 0;
void setup()
{
  pinMode(led1, OUTPUT);
}

void loop()
{
  hodnota = analogRead(analogpin);
  hodnota = hodnota / 4;
  analogWrite(led1, hodnota);
}

Na začiatku si vytvoríme 3 premenné - LED1, kde je LEDka, hodnota, kde je prečítané hodnota z analógového pinu a analogpin, kde je uložený pin s potenciometrom. V setupu máme už známy pinMode.

hodnota = analogRead(analogpin);

Arduino prečíta hodnotu na analógovom pinu. Ak by sme chceli nastaviť pin napevno bez premenné, bolo by to analogRead (A0).

hodnota = hodnota / 4;

Tu potrebujeme hodnotu upraviť, pretože read nám vracia do 1023, zatiaľ čo write berie do 255.

analogWrite(led1, hodnota);

Teraz už len zapíšeme hodnotu na pin s LEDkou. Po nahratí do Arduino a otáčaním potenciometra sa bude jas LEDky meniť. Pre lepšiu stabilitu by sme mohli použiť delay(1);, Ale zdá sa že nie je potreba.

Ak potenciometrom otočíte, malo by dôjsť k zmene jasu LEDky. Ak nie, skontrolujte zapojenie a skúste znova.

Zmena jasu LED diódy na Arduino - Arduino

A takto by to malo vyzerať

Nabudúce by sme sa zamerali na snímač teploty a vlhkosti dht11 (okolo 20 Sk), alebo na LCD display (okolo 50 Sk).


 

Predchádzajúci článok
Arduino - Hello World
Všetky články v sekcii
Arduino
Preskočiť článok
(neodporúčame)
Arduino - Senzor DHT11 a konštrukcie jazyka
Článok pre vás napísal Adam Ježek
Avatar
Užívateľské hodnotenie:
3 hlasov
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.
Aktivity