Lekce 7
Interaktivní tekoucí LED světla

Úvod

V minulých lekcích jsme se naučili ovládat digitální výstupy. V následujících lekcích si ukážeme možnost načítání analogového vstupu – kupříkladu v této lekci využijeme potenciometr, kterým budeme měnit interval blikání LED.

Když už jsme se příliš nevytáhli v originalitě hardwarové části zapojení, zkusíme to dohnat v softwarové části. V obslužném programu využijeme nejen znalost proměnných, ale program si zpřehledníme pomocí techniky využití podprogramu. Tato lekce by nám tedy měla ukázat nejen možnost načítání analogového vstupu modulu Arduino, ale i možnost, jak vhodným způsobem výrazně zkrátit blokový program. I když se tento program bude chovat trochu jinak, než se choval program v lekci „LED tekoucí potok“, i zde se bude světlo pohybovat po LED tam a zpět. Rozdílem zde jen bude to, že vždy svítí jen jedna LED a světlo tedy bude po sloupci LED přebíhat nahoru a dolů, zatímco předtím se postupně rozsvěcela a zhasínala celá řada.

Kdybychom chtěli dosáhnout stejného efektu, jako byl v lekci LED tekoucí potok, bylo by to možné poměrně jednoduchou úpravou hlavního podprogramu. Takže bychom dokázali napsat předchozí program poměrně jednodušším způsobem. Následující program by tedy měl i ukázat, že tvorba jednoduchého a funkčního kódu není jen o znalosti daného programovacího jazyka, ale i na určitém citu pro tvorbu algoritmu.

Použité komponenty

  • modul Arduino
  • USB kabel
  • 8× LED
  • 8× rezistor (220 Ω)
  • potenciometer
  • nepájivé pole
  • vodiče pro nepájivé pole

Princip

Podobně jako v lekci „LED tekoucí potok“ použijeme osm LED, které budeme postupně rozsvěcet a zhasínat. Doplněním dříve použitého zapojení je použití potenciometru, který připojíme mezi napájecí napětí a jeho jezdec připojíme k analogovému pinu A0 modulu Arduino. Potenciometr pak slouží jako dělič napětí, napěťovou hodnotu načtenou analogovým vstupem využijeme pro určení rychlosti běhu programu. Ve výsledku tedy budeme pomocí natáčení potenciometru nastavovat celkovou rychlost světelného efektu.


Postup experimentu

Krok 1: Sestavíme si obvod podle následujícího obrázku nebo schématu. Potenciometr zapojíme krajními piny k napájecímu napětí +5 V a zemi GND. Prostřední pin (jezdec) připojíme k analogovému pinu A0. LED zapojíme katodou (kratší vývod) k zemi GND a anodou (delší vývod) přes rezistor 220 Ω k digitálním pinům 29 modulu Arduino.

Blokové schéma

Blokove schema

Elektronické schéma

Elektronicke schema

Krok 2: V prostředí mBlock sestavíme následující program. Pochopitelně nejdříve musíme definovat proceduru ChangeLED, která se stará o rozsvěcení připojených LED.

podprogram v prostredi mBlock

Následuje hlavní program:


ikona vysvetleni Vysvětlení kódu

Proměnné lowestPin a highestPin určují rozmezí čísel pinů s připojenými LED. Proměnná ledNum pak určuje celkový počet připojených LED. Proměnná direction určuje směr, ve kterém budeme LED rozsvěcet a zhasínat. Proměnné currentLED a thisPin určují číslo LED/pinu, kde bude LED aktuálně rozsvícena. Rychlost efektu bude nastavována pomocí proměnných changeTime a ledDelay.

Úvodní část programu nastavuje použité proměnné na výchozí hodnoty, také jsou zde nastavené jednotlivé digitální výstupy s LED pomocí triku se zápisem výstupní hodnoty (popsáno dříve). Za zmínku stojí použití časovače, jehož hodnotu (počet sekund od zapnutí modulu Arduino) uchováváme v proměnné changeTime.

V hlavní nekonečné smyčce načítáme do proměnné ledDelay hodnotu napětí na pinu A0 (rozsah 0–1023). Hodnotu využijeme v podmínce testu přírůstku časovače. Pokud je přírůstek časovače větší (rozdíl hodnoty časovače a proměnné changeTime je větší než ledDelay), provede se podprogram ChangeLED a nastaví se nová hodnota proměnné changeTime, aby mohl být opět testován přírůstek časovače.

V podprogramu ChangeLED jsou nejdříve nastavením digitálních pinů na nízkou hodnotu zhasnuty všechny LED. Aktuální LED pak bude rozsvícena pomocí proměnné currentLED, jejíž hodnota je pak buď zvýšena, nebo snížena o jedničku. Zda bude hodnota proměnné currentLED zvýšena, nebo snížena, rozhoduje proměnná direction, která má hodnotu buď +1, nebo –1. V podprogramu se podmínkami řeší testování krajních hodnot proměnné currentLED, pak je změněna hodnota proměnné direction.


Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem tlacitko nahrat.

Krok 4: Měli bychom vidět osm LED, které se postupně zleva doprava a zpět rozsvěcí. Nastavení potenciometru ovládá rychlost celého efektu.

Pohled na experiment