Lekce 12
Řízení LED pomocí PWM

Úvod

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).

Použité komponenty

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

Princip

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:

  1. Střída (duty cycle) – poměr mezi stavy zapnuto/vypnuto.
  2. Perioda – součet jedné doby zapnuto a vypnuto.
  3. Amplituda – rozsah napětí (zde 0 V–5 V).

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á.

signal PWM

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í.


Postup experimentu

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

Blokove schema

Elektronické schéma

Elektronicke schema

Krok 2: V prostředí mBlock sestavíme následující program.


ikona vysvetleni Vysvětlení kódu

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…).

Poznámka:
Při pohledu na kód by si někdo mohl říci, že jsou tam zbytečné bloky, které nastavují hodnotu proměnné 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 tlacitko nahrat.

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.

Pohled na experiment