Kako povezati naslovni LED trak WS2812B na Arduino
Razvoj tehnologije razsvetljave na osnovi LED se nadaljuje. Včeraj se je zdelo kot čudež, da RGB trakove krmili krmilnik, katerega svetlost in barvo je mogoče nastaviti z daljinskim upravljalnikom. Danes je na trgu še več možnosti.
LED trak na osnovi WS2812B
Razlike naslovnega LED traku od standardnega RGB je to Razmerje svetlosti in barv vsakega elementa je nastavljivo posebej. To vam omogoča, da dobite svetlobne učinke, ki niso na voljo za druge vrste svetlobnih naprav. LED trak je krmiljen na dobro znan način - s širinsko modulacijo impulzov. Posebnost sistema je, da ima vsaka LED dioda svoj krmilnik PWM. Čip WS2812B je tribarvna svetleča dioda in krmilno vezje, združena v enem paketu.

Elementi so združeni v trak na napajalniku vzporedno, krmiljeni pa so preko serijskega vodila - izhod prvega elementa je povezan s krmilnim vhodom drugega itd. V večini primerov so serijska vodila zgrajena na dveh linijah, od katerih ena prenaša stroboskope (sinhrone impulze), druga pa podatke.

Krmilno vodilo čipa WS2812B je sestavljeno iz ene vrstice - prenaša podatke.Podatki so kodirani kot impulzi s konstantno frekvenco, vendar z različnimi frekvencami. En impulz je en bit. Trajanje vsakega bita je 1,25 µs, ničelni bit je sestavljen iz visoke ravni 0,4 µs in nizke ravni 0,85 µs. Enota je videti kot visoka 0,8 µs in nizka 0,45 µs. Paket 24 bitov (3 bajtov) se pošlje vsaki LED, čemur sledi premor v obliki nizke ravni za 50 µs. To pomeni, da bodo naslednji poslani podatki za naslednjo LED in tako naprej za vse elemente verige. Prenos podatkov se konča s 100 µs premorom. To pomeni, da je cikel programiranja traku končan in se lahko pošlje naslednji niz podatkovnih paketov.

Ta protokol omogoča eno linijo za prenos podatkov, vendar zahteva natančen čas. Razlika ni večja od 150 ns. Poleg tega je odpornost tega avtobusa na hrup zelo nizka. Vsako motnjo zadostne amplitude lahko krmilnik zazna kot podatek. To nalaga omejitve glede dolžine žic iz krmilnega vezja. Po drugi strani pa daje možnost, da da preverite, ali je trak brez dodatnih naprav. Če napajate svetilko in se s prstom dotaknete kontaktne ploščice krmilnega vodila, se lahko nekatere diode LED nenormalno prižigajo in ugašajo.
Tehnične značilnosti elementov WS2812B
Za izdelavo sistemov razsvetljave, ki temeljijo na naslovljivem traku, je potrebno poznati pomembne parametre svetlobnih elementov.
| LED dimenzije | 5x5 mm |
| Frekvenca modulacije PWM | 400 Hz |
| Poraba toka pri največji svetlosti | 60 mA na element |
| Napajalna napetost | 5 voltov |
Arduino in WS2812B
Na svetu priljubljena platforma Arduino omogoča ustvarjanje skic (programov) za nadzor naslovljivih trakov. Zmogljivosti sistema so dovolj široke, a če na neki ravni ne bodo več dovolj, bodo pridobljene veščine dovolj za nemoten prehod na C++ ali celo asembler. Čeprav je lažje pridobiti osnovno znanje o Arduinu.
Priključitev traku na osnovi WS2812B na Arduino Uno (Nano)
Na prvi stopnji je dovolj preprosta plošča Arduino Uno ali Arduino Nano. Kasneje lahko bolj zapletene plošče uporabimo za izdelavo bolj zapletenih sistemov. Pri fizičnem priklopu naslovnega LED traku na ploščo Arduino se morate prepričati, da je izpolnjenih nekaj pogojev:
- zaradi nizke odpornosti proti hrupu morajo biti vodniki za povezavo podatkovne linije čim krajši (poskusite jih narediti znotraj 10 cm);
- Podatkovno žico povežite s prostim digitalnim izhodom plošče Arduino - to bo kasneje prikazano s programsko opremo;
- Zaradi velike porabe energije traku ni treba napajati iz plošče - za to so predvideni ločeni napajalniki.
Potrebno je povezati skupno napajalno žico svetilke in Arduino.

Osnove krmiljenja programske opreme WS2812B
Omenjeno je bilo že, da morate za krmiljenje čipov WS2812B oblikovati impulze določene dolžine, ki vzdržijo visoko natančnost. V jeziku Arduino obstajajo ukazi za oblikovanje kratkih impulzov zamuda mikrosekund и mikros. Težava je v tem, da je ločljivost teh ukazov 4 mikrosekunde. To pomeni, da ni mogoče oblikovati časovnih zamikov z določeno natančnostjo. Potrebno je iti na orodja C++ ali Assembler. Naslovljivi LED trak je možno krmiliti prek Arduina s pomočjo posebej za ta namen ustvarjenih knjižnic. Začnete lahko s programom Blink, ki poskrbi, da svetleči elementi utripajo.
FastLed
Ta knjižnica je univerzalna. Poleg naslovljivega traku podpira številne naprave, vključno s trakovi, ki jih nadzoruje SPI. Ima široko paleto funkcij.
Najprej morate povezati knjižnico. To se naredi pred nastavitvenim blokom, niz pa je videti takole:
#vključi
Naslednji korak je ustvariti polje za shranjevanje barv vsake svetleče diode. Imel bo imenski trak in dimenzijo 15 elementov.
CRGB trak [15]
V nastavitvenem bloku morate določiti trak, s katerim bo skript deloval:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(trak, 15);
int g;
}
Parameter RGB določa zaporedje barv, 15 pomeni število LED, 7 je številka izhoda, ki je dodeljen krmiljenju (bolje je, da tudi zadnjemu parametru dodelite konstanto).
Blok zanke se začne z zanko, ki zaporedno piše v vsak odsek rdečega (rdečega sijaja) niza:
za (g=0; g< 15;g++)
{strip[g]=CRGB::rdeča;}
Nato se ustvarjena matrika pošlje v osvetljevalec:
FastLED.show();
Zakasnitev 1000 milisekund (sekund):
zamuda (1000);
Nato lahko na enak način izklopite vse elemente in vanje napišete črno.
za (int g=0; g< 15;g++)
{strip[g]=CRGB::Črna;}
FastLED.show();
zamuda (1000);

Po prevajanju in nalaganju skice bo trak utripal 2 sekundi. Če želite nadzorovati vsako barvno komponento posebej, potem namesto niza {strip[g]=CRGB::rdeča;} uporablja se več nizov:
{
trak[g].r=100;// nastavite stopnjo luminiscence rdečega elementa
strip[g].g=11;// enako za zeleno
strip[g].b=250;// enako za modro
}
NeoPixel
Ta knjižnica deluje samo z LED diodami NeoPixel Ring, vendar zahteva manj virov in vsebuje le bistvene. V Arduinu program izgleda takole:
#vključi
Kot v prejšnjem primeru je knjižnica priključena in objekt lenta je deklariran:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Kjer je 15 število elementov, 6 pa dodeljeni izhod
Lenta se inicializira v nastavitvenem bloku:
void setup() {
lenta.begin ()
}
V bloku zanke so vsi elementi osvetljeni rdeče, spremenljivka se prenese na trak in ustvari se 1-sekundna zakasnitev:
za (int y=0; y<15;y++)// 15 - število elementov v svetilki
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
lenta.show();
zamuda (1000);
Lenta neha svetiti s črnim zapisom:
za (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
zamuda (1000);

Video lekcija: Vzorci vizualnih učinkov z naslovljivimi trakovi.
Ko se naučite utripati LED diode, lahko nadaljujete z lekcijo in se naučite ustvarjati barvne učinke, vključno s priljubljeno "mavrico" in "severnim sijem" z gladkimi prehodi. Naslovljive LED diode WS2812B in Arduino vam za to nudijo skoraj neomejene možnosti.
