NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 4 - Arduino - Projekty s LED diodami a tlačítkem

V předchozí lekci, Arduino - Polovodičové elektronické součástky, jsem si popsali LED diody a základní druhy tranzistorů.

Doposud jsme se zabývali hlavně teorií a popisem jednotlivých součástek, které budeme používat u Arduino projektů, protože jsou s ním kompatibilní. Dnešní lekce Arduino HW tutoriálu bude více praktická. Ukážeme si, jak zapojit dva jednoduché obvody s LED diodami. Součástí příkladů bude samozřejmě také programování. Ukážeme si kód pro obsluhu obvodů a vysvětlíme si jeho jednotlivé části.

Blikání LED diod

Začneme s poměrně jednoduchou polovodičovou součástkou, která je u Arduino mikrokontroleru četně používána. Ano, správně, jedná se o LED. V příkladu si vytvoříme obvod s dvěma diodami, které poté naprogramujeme tak, aby střídavě jedna z LED blikala.

Než se pustíme do rozboru samotného programu a vysvětlení jeho funkcionality, je potřeba si říct, co všechno k úspěšnému zhotovení tohoto mini-projektu potřebujeme.

Úlohu si ukážeme v prostředí Tinkercad, ale je pouze na vás, jestli budete chtít úlohu reálně zapojit či pouze nasimulovat.

Seznam součástek

Na sestavení obvodu budeme potřebovat tyto součástky:

  • 2x LED diody - v našem projektu je použita červená a zelená, na barvách však nezáleží,
  • 2x Rezistor 1 [kΩ],
  • libovolné Arduino - v našem případě Arduino Uno,
  • nepájivé pole a
  • propojovací kabely.

Máme-li součástky připraveny, můžeme se pustit do zapojení, které také detailně rozebereme.

Příprava obvodu

Jako první si připravíme Arduino s nepájivým polem. GND pin Arduina propojíme černým drátem s mínusový sloupcem nepájivého pole, odtud poté rozvedeme rezistory do mínusu LED . Z plusového sloupce povede červený drát do 5V napájení. Nyní můžeme přidat oba rezistory. K rezistorů připojíme katody LED. Připomeňme, že katoda je - a na diodě má kratší nožičku. Do anody nakonec přivedeme libovolný digitální pin z Arduina.

V našem projektu jsme použili digitální piny 2 a 3 a oranžové dráty. Kterýkoliv jiný digitální pin bude fungovat také, v programu však musíme dát pozor, abychom definovali piny, jež máme zapojené.

Naše zapojení vypadá takto:

LED_ULOHA1 - Arduino - Hardware

Program obsluhy

Zapojení je hotové, můžeme se tedy pustit do programování. Kdo děla projekt virtuálně, bude v Tinkercad i programovat. Ti, kteří ho dělali v reálné podobě, napíší svůj program v Arduino IDE.

Definování konstanty

Nejprve, nad funkcí setup(), definujeme naše digitální piny příkazem #define. Definování je podobné deklaraci proměnné, avšak s jednou změnou - proměnná se stává konstantou, tudíž ji později v programu nelze měnit. Naše piny nebudeme měnit za běhu programu, proto je vhodnější definovat je jako konstanty. Tím se pojistíme, proti případným nepříjemnostem:

#define LED_CERVENA 3
#define LED_ZELENA 2

Pokud LED zapojíte do jiných digitálních pinů, musíte upravit i kód, jinak se program nezkompiluje.

Inicializace komponent

Přesuňme se do funkce setup(), ve které inicializujeme komponenty. Jak víme, její kód se spustí jen jednou, a to na začátku programu. Diody inicializujeme příkazem pinMode(), který přijímá dva parametry. Prvním je název konstanty či proměnné, která je spojena s číslem pinu. Ve druhém parametru určujeme, zda bude daná komponenta nastavena na vstup (INPUT) či výstup (OUTPUT):

void setup()
{
  pinMode(LED_CERVENA, OUTPUT);
  pinMode(LED_ZELENA, OUTPUT);
}

Hlavní smyčka

Zbývá nám doplnit funkci loop(), do které přidáme pouze dva druhy příkazů - digitalWrite() a delay(). Příkazem, digitalWrite(), určíme pro danou LED, co má dělat, přesněji kdy má svítit a kdy ne. V prvním argumentu zvolíme, jakou LED nastavujeme, poté určíme, její stav. Stav diody se značí pomocí klíčových slov LOW a HIGH, pro vypnutí a zapnutí.

Pomocí delay() uspíme proces na zadaný počet milisekund. Červené LED jsme nastavili prodlevu 1000 ms (1s), zelená LED má nastavenou prodlevu 2000 ms (2s).

Kombinací těchto dvou příkazu zajistíme, aby LED blikaly jedna po druhé:

void loop()
{
  digitalWrite(LED_CERVENA, HIGH);
  delay(1000);
  digitalWrite(LED_CERVENA, LOW);
  delay(1000);
  digitalWrite(LED_ZELENA, HIGH);
  delay(2000);
  digitalWrite(LED_ZELENA, LOW);
  delay(2000);
}

Pro jistotu si ukážeme celý kód:

#define LED_CERVENA 3
#define LED_ZELENA 2


void setup()
{
  pinMode(LED_CERVENA, OUTPUT);
  pinMode(LED_ZELENA, OUTPUT);
}

void loop()
{
  digitalWrite(LED_CERVENA, HIGH);
  delay(1000);
  digitalWrite(LED_CERVENA, LOW);
  delay(1000);
  digitalWrite(LED_ZELENA, HIGH);
  delay(2000);
  digitalWrite(LED_ZELENA, LOW);
  delay(2000);
}

Když program nyní spustíme, rozsvítí se nejprve červená dioda, která po chvíli zhasne. Poté se rozsvítí a zhasne zelená dioda a smyčka se opakuje, dokud program neukončíme.

Propojení LED a tlačítka

První projekt byl poměrně jednoduchý. Zkusme něco o trochu složitějšího. V dalším projektu k LED zapojíme tlačítko a uděláme z něj vypínač. Když vypínač zmáčkneme, LED bude svítit, když ho zmáčkneme znovu, LED zhasne.

Seznam součástek

Na sestavení obvodu budeme potřebovat tyto součástky:

  • 1x LED diodu,
  • Arduino,
  • nepájivé pole,
  • 1x tlačítko,
  • 1x rezistor 150 [Ω] označený zeleným proužkem,
  • 1x rezistor 1 [kΩ] s červeným proužkem a
  • propojovací kabely.

Zapojení obvodu

Součástky si nyní zapojíme, tentokrát začneme z druhé strany. Z pinu 4 povedeme oranžový drátek k zelenému rezistoru. K němu přidáme anodu LED diody a z katody povedeme černý drát do druhé části nepájivého pole, kam umístíme druhý rezistor. Další černý drát bude pokračovat od stejného pólu k uzemnění Arduina. Nad druhou stranu rezistoru umístíme tlačítko a dolní část propojíme zeleným drátem k pinu 2. Už nám zbývá jen přidat červený drát, kterým spojíme napětí 5 V s druhou stranou tlačítka:

LED_ULOHA2 - Arduino - Hardware

Program příkladu

Máme-li hotové zapojení, můžeme se opět přesunout k našemu programu. Začneme konstantami a proměnnými:

#define LED 4
#define TLACITKO 2
bool tlacitko_zmacknuto = false;
bool dioda_sviti = false;

LED a tlačítko jsme definovali jako konstanty s odpovídajícím číslem pinu. K tomu jsme si navíc deklarovali ještě dvě další pomocné proměnné typu bool, které nabývat hodnoty true a false. První proměnná bude signalizovat stav tlačítka, bude hlídat jeho stisknutí. Druhá proměnná nám pomůže zjistit, zda LED svítí nebo je zhasnutá.

Obou proměnným jsme pro názornost nastavili hodnotu na false, která je však u bool proměnných výchozí. Kód by tedy fungoval úplně stejně, i kdybychom proměnné pouze deklarovali.

Funkce setup()

Ve funkci setup() již známým způsobem inicializujeme naší LED a tlačítko. Tlačítko ovšem nastavíme na INPUT mód:

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(TLACITKO, INPUT);
}

Funkce loop()

Můžeme se přesunout do hlavní smyčky, kde už to bude o něco zajímavější.

Ukažme si její kód, který si vzápětí projdeme:

void loop()
{
  tlacitko_zmacknuto = digitalRead(TLACITKO);

  if (tlacitko_zmacknuto)
  {
    dioda_sviti = !dioda_sviti;
    if (dioda_sviti)
    {
      digitalWrite(LED, HIGH);
    }
    else
    {
      digitalWrite(LED, LOW);
    }
    delay(500);
  }
}

Jako první načteme do naší proměnné, která hlídá stav tlačítka, jeho aktuální hodnotu. Jakmile tlačítko zmáčkneme, získáme hodnotu HIGH, tedy ekvivalent true.

Pomocí první podmínky nejprve testujeme hodnotu naší proměnné. Pokud bylo tlačítko zmáčknuto, podmínka bude splněna, přepneme tedy stav druhé proměnné a přistoupíme k další vnořené podmínce.

Přepnutí proměnné dioda_sviti zařídíme jednoduše tak, že jí přiřadíme stávající hodnotu, kterou pomocí ! negujeme.

Další podmínkou testujeme, zda dioda doposud svítila nebo byla zhasnuta. Pokud byla zhasnuta, řekli jsem předchozím řádkem, že ji chceme rozsvítit. Učiníme tak tedy v první (if) části podmínky. V opačném případě diodu v druhé (else) části podmínky zhasneme.

Na konec nastavíme drobnou prodlevu, aby se cyklus neopakoval moc rychle.

Pokud jste postupovali podle návodu máte funkční už o něco složitější projekt.

V další lekci, Arduino - Projekty s LED diodami a potenciometrem, na nás čekají dva nové příklady s LED diodami. V pokročilém příkladu si ukážeme, jak je můžeme ovládat pomocí potenciometru.


 

Předchozí článek
Arduino - Polovodičové elektronické součástky
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Projekty s LED diodami a potenciometrem
Článek pro vás napsal Adam Ježek
Avatar
Uživatelské hodnocení:
115 hlasů
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