Jak připojit adresovatelný LED pásek WS2812B k Arduinu
Vývoj osvětlovací technologie založené na LED pokračuje rychlým tempem. Ještě včera se RGB pásky ovládané ovladačem, jejichž jas a barvu lze nastavit dálkovým ovládáním, zdály být zázrakem. Dnes jsou na trhu nová svítidla s ještě většími možnostmi.
LED pásek na bázi WS2812B
Rozdíly mezi adresovatelnými LED pásky a standardními LED pásky RGB je Jas a poměr barev každého prvku lze nastavit samostatně.. To umožňuje dosáhnout světelných efektů, které nejsou u jiných typů svítidel dostupné. Adresovatelný LED pásek je řízen známým způsobem - pomocí pulzně šířkové modulace. Zvláštností systému je, že každá LED je vybavena vlastním PWM regulátorem. Čip WS2812B je tříbarevná světelná dioda a řídicí obvod v jednom balení.
Prvky jsou připojeny paralelně k napájecímu zdroji a jsou řízeny prostřednictvím sériové sběrnice - výstup prvního prvku je připojen k řídicímu vstupu druhého prvku atd. Ve většině případů jsou sériové sběrnice postaveny na dvou linkách, z nichž jedna přenáší stroboskopy (hodinové impulsy) a druhá data.
Řídicí sběrnice WS2812B se skládá z jedné linky - slouží k přenosu dat. Data jsou kódována jako impulsy s konstantní frekvencí, ale s různými frekvencemi. Jeden impuls je jeden bit.. Doba trvání každého bitu je 1,25 µs, nulový bit se skládá z vysoké úrovně 0,4 µs a nízké úrovně 0,85 µs. Jednotka se zobrazí jako vysoká úroveň 0,8 µs a nízká úroveň 0,45 µs. Do každé LED je odeslána zásilka 24 bitů (3 bajty), po níž následuje pauza jako nízká úroveň po dobu 50 µs. To znamená, že data pro další LED budou přenesena jako další a tak dále pro všechny prvky v řetězci. Přenos dat je ukončen 100 µs pauzou. To znamená, že programovací cyklus pásky je dokončen a lze odeslat další sadu datových paketů.
Tento protokol umožňuje obejít se bez jediné linky pro přenos dat, ale vyžaduje přesné načasování. Je povolena odchylka maximálně 150 ns. Kromě toho je odolnost této sběrnice proti šumu velmi nízká. Jakékoli rušení s dostatečnou amplitudou může řídicí jednotka zachytit jako data. Tím jsou omezeny délky vodičů od řídicích obvodů. Na druhou stranu poskytuje možnost zkontrolovat správnou funkci řemene bez dalších zařízení. Pokud je svítidlo napájeno a prst se dotkne kontaktní oblasti řídicí sběrnice, mohou se některé LED diody náhodně rozsvítit a zhasnout.
Technické vlastnosti prvků WS2812B
Pro vytvoření osvětlovacích systémů s adresovatelnými páskami je třeba znát důležité parametry prvků vyzařujících světlo.
Rozměry LED | 5x5 mm |
Modulační frekvence PWM | 400 Hz |
Spotřeba proudu při maximálním jasu | 60 mA na prvek |
Napájecí napětí | 5 voltů |
Arduino a WS2812B
Celosvětově oblíbená platforma Arduino umožňuje vytvářet náčrty (programy) pro ovládání adresovatelných pásků. Možnosti systému jsou dostatečně široké, ale pokud na některé úrovni přestanou stačit, získané dovednosti postačí k bezproblémovému přechodu na C++ nebo dokonce na assembler. I když je snazší získat základní znalosti z Arduina.
Připojení pásky WS2812B k Arduinu Uno (Nano)
Zpočátku postačí jednoduchá deska Arduino Uno nebo Arduino Nano. Později lze složitější desky použít k sestavení složitějších systémů. Při fyzickém připojení adresovatelného LED pásku k desce Arduino je třeba zajistit splnění několika podmínek:
- Vzhledem k nízké odolnosti proti šumu by měly být vodiče pro připojení datového vedení co nejkratší (snažte se, aby byly do 10 cm);
- Připojte datovou linku k volnému digitálnímu výstupu desky Arduino - později bude určen softwarem;
- Vzhledem k vysoké spotřebě energie není nutné napájet lištu z desky - pro tento účel jsou k dispozici samostatné napájecí zdroje.
Mezi lištou a Arduinem musí být připojeno společné napájecí vedení.
Základy softwarového řízení WS2812B
Již bylo zmíněno, že pro ovládání čipu WS2812B je třeba generovat impulsy určité délky s vysokou přesností. V jazyce Arduino existují příkazy pro tvorbu krátkých impulzů. delayMicroseconds и micros. Problémem je, že rozlišení těchto příkazů je 4 mikrosekundy. To znamená, že není možné generovat časová zpoždění s danou přesností. Je nutné použít nástroje C++ nebo Assembler. Adresovatelný LED pásek je možné ovládat také prostřednictvím Arduina pomocí knihoven vytvořených speciálně pro tento účel. Úvod začíná programem Blink, který způsobuje blikání světelných prvků.
FastLed .
Tato knihovna je všestranná. Kromě adresovatelné pásky podporuje mnoho zařízení včetně pásky řízené SPI. Je velmi výkonný.
Nejprve je třeba připojit knihovnu. To se provádí před blokem nastavení a řetězec vypadá takto:
#include
Dalším krokem je vytvoření pole pro uložení barev jednotlivých světelných diod. Bude mít název strip a rozměr 15 - podle počtu prvků (je lepší tomuto parametru přiřadit konstantu).
CRGB strip[15]
V bloku nastavení je třeba zadat pásmo, se kterým bude skript pracovat:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
Parametr RGB nastavuje pořadí střídání barev, 15 znamená počet LED diod, 7 je číslo výstupu přiřazeného k ovládání (k poslednímu parametru je lepší přiřadit také konstantu).
Blok smyčky začíná smyčkou, která postupně zapisuje do jednotlivých sekcí pole Red (červená záře):
for (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Vytvořené pole se pak odešle do svítidla:
FastLED.show();
Zpoždění 1000 milisekund (jedna sekunda):
delay(1000);
Všechny prvky pak lze vypnout stejným způsobem, a to tak, že se do nich napíše černá barva.
for (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
delay(1000);
Po zkompilování a načtení náčrtu bude páska blikat po dobu 2 sekund. Pokud chcete ovládat každou barevnou složku zvlášť, pak místo řetězce {strip[g]=CRGB::Red;} je použito více řetězců:
{
strip[g].r=100;// nastavit úroveň luminiscence červeného prvku.
strip[g].g=11;// totéž pro zelenou barvu
strip[g].b=250;// totéž pro modrou barvu
}
NeoPixel
Tato knihovna pracuje pouze s kroužkovými LED diodami NeoPixel, ale je méně náročná na zdroje a obsahuje pouze to nejnutnější. V jazyce Arduino vypadá program takto:
#include
Stejně jako v předchozím případě je zahrnuta knihovna a deklarován objekt lenta:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Kde 15 je počet prvků a 6 je přiřazený výstup.
Lenta se inicializuje v bloku nastavení:
void setup() {
lenta.begin ()
}
V bloku smyčky se všechny prvky rozsvítí červeně, proměnná se předá pásce a vytvoří se zpoždění 1 sekunda:
for (int y=0; y<15;y++)// 15 - počet prvků v lentě
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
delay(1000);
Lenta přestane černě svítit:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
delay(1000);
Videolekce: Ukázky vizuálních efektů pomocí adresovatelných pásků.
Jakmile se naučíte blikat LED diodami, můžete pokračovat v učení se vytváření barevných efektů, včetně oblíbené duhy a polární záře s plynulými přechody. WS2812B a adresovatelné LED diody Arduino k tomu poskytují téměř neomezené možnosti.