Pojďme zkusit v této lekci opět něco trochu jednoduššího – postupně budeme měnit jas připojené LED. Vzhledem k tomu, že pulzující světlo vypadá trochu jako dýchání, můžeme výslednému zapojení dát kouzelné označení: „dýchající LEDka“. Požadovaného efektu dosáhneme pomocí pulzně šířkové modulace (PWM).
O pulzně šířkové modulaci neboli PWM (Pulse Width Modulation) jsme ni říkali v kapitole představující modul Arduino. V rychlosti si však základní informace zopakujeme. V případě PWM se jedná o přenášení signálu pomocí dvou hodnot napětí a to pomocí tzv. střídy. Střída je určena jako poměr mezi dobami stavů zapnuto/vypnuto. Přenosový signál, který nese informaci o přenášené hodnotě, může tedy nabývat hodnot zapnuto/vypnuto, což v našem případě odpovídá napěťovým hodnotám 5 V a 0 V. Omezením pro PWM je to, že přenos informace je vždy omezen na relativní vyjádření a to 0–100 %.
Tři základní parametry PWM:
Vzhledem ke svým vlastnostem je pulsně šířková modulace často využívána ve výkonové elektronice pro řízení velikosti napětí nebo výstupního výkonu. Na následujícím obrázku vidíme srovnání dvou signálů s různou střídou a výslednou hodnotou napětí, které takový signál odpovídá.
Je třeba ještě připomenou, že pokud nechceme vidět, jak LED díky zapínání/vypínání signálu bliká, musí mít PWM signál dostatečně velkou frekvenci. V případě modulu Arduino UNO je tato frekvence 490 Hz (na pinech 5
a 6
dokonce 980 Hz), což je hodnota pro náš experiment více jak dostačující.
Krok 1: Sestavíme si obvod podle následujícího obrázku nebo schématu. LED zapojíme katodou (kratší vývod) k zemi GND a anodou (delší vývod) přes rezistor 220 &Omega k digitálním pinům modulu Arduino.
Blokové schéma
Elektronické schéma
Krok 2: V prostředí mBlock sestavíme následující program.
Program lze stáhnout z:
http://mBlock.fyzika.net/
Hlavní nekonečná smyčka „opakuj stále“ obsahuje dva cykly s konečným počtem opakování. V prvním cyklu chceme připojenou LED postupně rozsvítit. Aby její svit postupně narůstal, využijeme výstupu PWM, na kterém budeme postupně zvyšovat výstupní hodnotu z počáteční 0 na maximálních 255. A to právě dělá první cyklus. Výstupní hodnota pro PWM výstup je uložena v proměnné a
, kterou zapíšeme na výstup a pak zvýšíme o jedničku. Aby se tato změna mohla projevit na svitu připojené LED, je v cyklu zařazen ještě blok čekání (8 ms). Druhý cyklus funguje přesně obráceně. Hodnota proměnné a
začíná na hodnotě 255 a následující cyklus s 255 opakováními ji postupně snižuje na nulu. I v tomto cyklu je hodnota proměnná a zapisována na PWM výstup a je zde i stejná čekací doba. Právě stejná hodnota čekání v obou cyklech zajistí stejnou dynamiku postupného rozsvěcení a zhasínání LED. Klidně si můžeme zkusit tyto čekací doby změnit (zvýšit, snížit, nastavit každou jinou…).
a
na počáteční hodnoty před jednotlivými cykly. Pokud bychom nastavili hodnotu proměnné a
na 0 ještě před nekonečnou hlavní smyčkou, pak by se hodnota na konci prvního cyklu měla rovna hodnotě 255. Stejně tak po druhém cyklu by se měla hodnota snížit na počáteční 0. A pak se vše bude postupně opakovat. To je pravda, na druhou stranu takto může každá smyčka pracovat se svým prvotním nastavením zcela samostatně a nemusí „spoléhat“ na to, jaká hodnota na ní „zbyde“ z předešlého cyklu. Z hlediska přehlednosti a spolehlivosti kódu je někdy jistější si potřebné hodnoty znova (i když někdy asi zbytečně) nastavit.Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem .
Krok 4: Po spuštění kódu bychom měli vidět, jak se LED postupně rozjasňuje a postupně zhasíná. To vše stále dokola. Zajímavé je experimentovat v programu s délkami čekacích intervalů ve smyčkách pro rozsvícení/zhasínání LED a sledovat vliv na výsledný světelný efekt.