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 si ří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í 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–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 Ω 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