3. díl - Arduino - Hrajeme si s LEDkami

Hardware PC Arduino Arduino - Hrajeme si s LEDkami

Vítejte v dalším díle seriálu o Arduinu. Minule jsme si napsali první program. Dnes budete potřebovat kromě Arduina také nějaké ledky, potenciometr a doporučuji i odpory (u 5V LED ani nejsou třeba ).

Blikání

A rovnou k programu - standardně se bliká s LED diodou na Arduinu na pinu 13, ale na ITnetworku jsme víc než standard, takže si rozblikáme diod více. Vezmeme si naše nepájivé kontaktní pole, osadíme si ho pár diodami a zapojíme k Arduinu podle následujícího schéma:

Arduino schéma

A zdroják:

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);
}

Teď k vysvětlování :

Int led1 = 13;
Int led2 = 12;

Na začátku máme v prvních dvou řádcích uložené výstupy diod do proměnných. Není to nutností, ale pokud již bude kód rozsáhlejší a budeme potřebovat přepojit diodu z pinu 12 na pin 11, tak nebudeme muset v kódu hledat všechny 12 a přepisovat je, ale pouze změníme jedno číslo na začátku. I zde lze použít standardní komentáře přes //, nebo víceřádkové přes /* text */. Pod proměnnými je již setup. Ten se vykoná jen jednou a zde se standartdně určuje, co bude co.

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

My jsme Arduinu řekli, že bude používat jen piny 12 a 13 (v proměnných led1 a led2), které budou mít výstupní funkci - nic nebude číst a na naše pokyny do pinu pustí nebo vypne proud. pinMode také bere jako druhý parametr i INPUT, kdy pin čte, zda je na něm 1 nebo 0.

V loopu máme již samotné blikání

digitalWrite(led1, HIGH);

Funkce digitalWrite bere 2 argumenty - pin a co s ním. Kromě HIGH (na pinu bude 1) a LOW (na pinu bude 0) zvládá i pár dalších, o těch ale až jindy.

Delay(100);

Delay se stará o prodlevu. Na určitý počet milisekund (u nás 100) celý kód pozastaví. Bez prodlevy by docházelo k přepnutí tak rychle, že jej ani nespatříte pouhým okem a některé diody ani nebudou pořádně svítit.

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

Nyní vypneme led1 a zapneme led2.

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

Další prodleva a vypnutí led2. Program hned sám skočí na začátek loop, takže se zároveň zapne led1 a takto nám to bude stále dokola blikat a blikat.

Po ověření (Ctrl + R) se nám v černé okně (v případě správného kódu) napíše Binary sketch size: 1 658 bytes (of a 258 048 byte maximum). To znamená, že sketch zabírá 1 658 bitů a na tuto desku se jich vejde 258 048 bitů. Upload na desku se provádí buď přes tlačítko upload, nebo zkratkou Ctrl + U. Pokud jste zvyklí z jiných IDE na F5, tak to zde bohužel nefunguje, ale naštěstí nedělá vůbec nic, takže se nic nestane, pokud ho ze zvyku zmáčknete. Já osobně dávám rovnou upload bez ověření, protože ověření trvá poměrně dlouho a před uploadem se ověřuje, i když už ověřeno bylo. Pokud vše proběhne v pořádku, tak se vám zobrazí zas velikost sketche a nad tím Done uploading. Mezi nejčastější chyby patří Serial port not found. Pokud se vám zobrazí, tak zkontrolujte připojení Arduina. Pokud je vše v pořádku, tak odpojit, připojit a zkusit znovu.

Po dokončení uploadu se program okamžitě spustí. Nečekejte žádné aktivační tlačítko, jakmile má Arduino proud, tak hned začne pracovat. Pokud máte vše správně zapojené, tak by měly diody začít střídavě blikat. Pokud nezačnou, zkontrolujte zapojení a polaritu diod (kratší nožička na GND).

Blikající Arduino

Rozblikané Arduino

Arduino má kromě digitálních pinů také analogové vstupy, ale zvládá i analogový výstup. Ačkoliv se zdá, že analogový vstup a výstup jsou skoro to stejné, tak každé je v podstatě něco úplně jiného. Nejdřív ale rozdíl mezi analogem a digitálem. Předem se omlouvám těm, co tomu již rozumí, ty teď budu nudit. Takže digitální je dnes již častější a spočívá v tom, že na výstupu je buď 1 (proud jde) nebo 0 (proud nejde). Analog je pak schopný hodnot od 0 do 255 na výstupu (čímž můžeme třeba ovládat jas LEDky) a na vstupu je schopný číst od 0 do 1023. Analogový výstup navíc nefunguje tak, že by se vysílalo menší napětí. Z pinu pořád leze 5V, jen jsou použity impulsy (PWM). Proto tato funkce funguje jen na pinech s označením PWM. Na obrázku níže je znázorněno, jak dochází k vysílání impulsů. Jelikož se vše odehrává velmi rychle, tak se to jeví jako snížené napětí, ale ve skutečnosti to je stále 5 V.

PWM

PWM graf

Pro ukázku zas nebudu vymýšlet nic světoborného, ale necháme Arduino číst hodnotu potenciometru, tu zpracovat a podle ní rozzářit LEDku. Celé by to fungovalo i bez Arduina, ale cílem je naučit vás s Arduinem zacházet, takže se do toho dáme.

Budeme potřebovat potenciometr, LEDku (momentálně nemám na 5V, takže použiji na nižší napětí a přidám odpor), drátky, breadboard a Arduino. Zapojení lze i jinak než je na schématu, ale pro názornost jej zapojím takto.

Schéma

LEDka je normálně připojena na pin 12, potenciometr je připojen k +5V a k zemi, prostřední pak na A0. Otáčením dochází ke změně napětí, tudíž i analogové hodnoty, podle které se pak bude měnit výstup. Kód bude takový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čátku si vytvoříme 3 proměnné - led1, kde je LEDka, hodnota, kde je přečtená hodnota z analogového pinu a analogpin, kde je uložený pin s potenciometrem. V setupu máme již známý pinMode.

hodnota = analogRead(analogpin);

Arduino přečte hodnotu na analogovém pinu. Pokud bychom chtěli nastavit pin napevno bez proměnné, bylo by to analogRead(A0).

hodnota = hodnota / 4;

Zde potřebujeme hodnotu upravit, protože read nám vrací do 1023, zatímco write bere do 255.

analogWrite(led1, hodnota);

Nyní již jen zapíšeme hodnotu na pin s LEDkou. Po nahrání do Arduina a otáčením potenciometru se bude jas LEDky měnit. Pro lepší stabilitu bychom mohli použít delay(1);, ale zdá se že není potřeba.

Pokud potenciometrem otočíte, mělo by dojít ke změně jasu LEDky. Pokud ne, zkontrolujte zapojení a zkuste znovu.

Změna jasu LED diody na Arduino

A takto by to mělo vypadat

Příště bychom se zaměřili na čidlo teploty a vlhkosti dht11 (kolem 20 Kč), nebo na LCD display (kolem 50 Kč).


 

  Aktivity (1)

Článek pro vás napsal Adam Ježek
Avatar
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.

Jak se ti líbí článek?
Celkem (12 hlasů) :
4.416674.416674.416674.41667 4.41667


 


Miniatura
Předchozí článek
Arduino - Hello World
Miniatura
Všechny články v sekci
Arduino

 

 

Komentáře
Zobrazit starší komentáře (3)

Avatar
gvfs
Člen
Avatar
gvfs:

Na demonstraci příkladu je zapotřebí lineární průběh potenciometru a ne logaritmický.

 
Odpovědět 6.9.2014 11:59
Avatar
jol
Člen
Avatar
jol:

Pěkný článek. Možná bych dovysvětlil nejasnosti kolem potenciometrů. Začátečník je za takové info vděčný.
Tedy v podstatě existují dva základní druhy potenciometrů: s lineárním a s logaritmickým průběhem. Jinak řečeno u lineárního se mění odpor stejnoměrně podle natočení osy (poloha běžce). Otočíme-li o malý kousek, změní se odpor vždy o malý kousek. V polovině otočení (135 stupňů) je polovina odporu atd.
Tyto potenciometry jsou značené jako N (lineární), např. 1k/N, 10k/N apod. Takovýto (i hodnota) typ je vhodný.
Druhý typ je s logaritmickým průběhem odporu. Kdo si to nedovede představit, stačí, že když otočím o malý kousek, nemusí se odpor změnit vždy o malý kousek. Záleží na poloze osy. Pak se tento potenciometr jeví jakože stále nic a najednou velká změna, nebo naopak. Takovéto se vyskytují často jako náhr. díly, protože se používají k regulaci hlasitosti přijímačů, zesilovačů apod. Značí se G nebo log. Např. 1k/G. Použitím tahovéhoto potenciometru ale nic nezničíte, jenom nebude průběh rovnoměrný, jak píše parman.
Místo potenciometru lze použít i odporový trimr. Je to stejná součástka, jenom pro otáčení se používá šroubovák. Průběh je lineární.

Editováno 14.9.2014 12:39
 
Odpovědět  +1 14.9.2014 12:37
Avatar
youtubak777
Člen
Avatar
youtubak777:

Ahoj, můžu se zeptat kolika ómové (nevím jak se na PC ta značka píše) rezistory si mám do začátků koupit ?

 
Odpovědět 22.11.2014 15:28
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na youtubak777
Šimon Raichl:

piš Ω nebo ohm, óm opravdu ne

 
Odpovědět 22.11.2014 19:05
Avatar
youtubak777
Člen
Avatar
Odpovídá na Šimon Raichl
youtubak777:

A jakou klávesovou zkratkou se píše ta značka pro ohm ? :)

 
Odpovědět 22.11.2014 19:20
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na youtubak777
Šimon Raichl:

Mělo by alt + 8486, ale to nějak nefunguje, takže to najdeš v charmapu.

 
Odpovědět 22.11.2014 19:56
Avatar
jargry
Člen
Avatar
 
Odpovědět 22.11.2014 21:19
Avatar
jargry
Člen
Avatar
jargry:

Omlouvám se, ale funguje jen ve WORDU.

 
Odpovědět 22.11.2014 21:58
Avatar
heger.m
Člen
Avatar
heger.m:

Jaké napětí snesou vstupy?

 
Odpovědět 25. července 21:55
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na heger.m
Adam Ježek:

Má to 5V logiku, takže bych těch 5V moc nepřekračoval.

Odpovědět 25. července 22:32
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 13. Zobrazit vše