Kuinka kytkeä osoitteellinen LED-nauha WS2812B Arduinoon
LEDeihin perustuvan valaistustekniikan kehitys jatkuu nopeasti. Vielä eilen ohjaimella ohjatut RGB-nauhat, joiden kirkkautta ja väriä voi säätää kaukosäätimellä, tuntuivat ihmeeltä. Nykyään markkinoille on ilmestynyt lamppuja, joissa on entistä enemmän ominaisuuksia.
WS2812B-pohjainen LED-nauha
Ero osoitettavan LED-nauhan ja tavallisen välillä RGB asia on kunkin elementin kirkkaus ja värisuhde säädetään erikseen. Tämän avulla voit saada valaistustehosteita, jotka ovat pohjimmiltaan saavuttamattomissa muun tyyppisillä valaistuslaitteilla. Osoitettavan LED-nauhan hehkua ohjataan tunnetulla tavalla - pulssinleveysmodulaatiolla. Järjestelmän ominaisuus on varustaa jokainen LED omalla PWM-ohjaimella. WS2812B-siru on kolmivärinen valodiodi ja ohjauspiiri yhdistettynä yhteen pakkaukseen.

Elementit yhdistetään tehonauhaksi rinnakkain, ja niitä ohjataan sarjaväylän kautta - ensimmäisen elementin lähtö on kytketty toisen ohjaustuloon jne. Useimmissa tapauksissa sarjaväylät on rakennettu kahdelle linjalle, joista toinen lähettää välähdyksiä (kellopulsseja) ja toinen - tietoja.

WS2812B-sirun ohjausväylä koostuu yhdestä linjasta - sen kautta siirretään dataa. Tiedot koodataan pulsseina, joilla on vakiotaajuus, mutta eri toimintajaksoilla. Yksi pulssi - yksi bitti. Kunkin bitin kesto on 1,25 µs, nollabitti koostuu korkeasta tasosta, jonka kesto on 0,4 µs, ja matalasta tasosta 0,85 µs. Yksikkö näyttää korkealta tasolta 0,8 µs ja matalalta tasolta 0,45 µs. Jokaiseen LEDiin lähetetään 24-bittinen (3-tavuinen) purske, jota seuraa 50 µs:n matala tauko. Tämä tarkoittaa, että tiedot lähetetään seuraavaa LEDiä varten ja niin edelleen kaikille ketjun elementeille. Tiedonsiirto päättyy 100 µs:n taukoon. Tämä osoittaa, että nauhan ohjelmointijakso on valmis ja seuraavat datapaketit voidaan lähettää.

Tällainen protokolla mahdollistaa tiedonsiirron yhdellä rivillä, mutta vaatii tarkkuutta aikavälien ylläpidossa. Ero on sallittu enintään 150 ns. Lisäksi tällaisen väylän melunsieto on erittäin alhainen. Ohjain voi havaita kaikki riittävän amplitudiset häiriöt datana. Tämä asettaa rajoituksia ohjauspiirin johtimien pituudelle. Toisaalta tämä mahdollistaa sen nauhan kuntotarkastus ilman lisälaitteita.Jos kytket lampun virran ja kosketat ohjausväylän kosketuslevyä sormella, jotkin LEDit voivat syttyä satunnaisesti ja sammua.
WS2812B-elementtien tekniset tiedot
Osoitenauhaan perustuvien valaistusjärjestelmien luomiseksi sinun on tiedettävä valoa emittoivien elementtien tärkeät parametrit.
| LEDin mitat | 5x5mm |
| PWM-modulaatiotaajuus | 400 Hz |
| Nykyinen kulutus suurimmalla kirkkaudella | 60 mA per kenno |
| Syöttöjännite | 5 volttia |
Arduino ja WS2812B
Maailmassa suositulla Arduino-alustalla voit luoda luonnoksia (ohjelmia) osoitenauhojen hallintaan. Järjestelmän ominaisuudet ovat riittävän laajat, mutta jos ne eivät enää jollain tasolla riitä, niin hankitut taidot riittävät kivuttomasti siirtymään C++:aan tai jopa assembleriin. Vaikka alkutieto on helpompi saada Arduinolla.
WS2812B-nauhan yhdistäminen Arduino Unoon (Nano)
Ensimmäisessä vaiheessa yksinkertaiset Arduino Uno- tai Arduino Nano -levyt riittävät. Jatkossa monimutkaisempia levyjä voidaan käyttää monimutkaisempien järjestelmien rakentamiseen. Kun osoitteellinen LED-nauha liitetään fyysisesti Arduino-korttiin, on huomioitava useita ehtoja:
- alhaisen melunsietokyvyn vuoksi datalinjan liitäntäjohtimien tulee olla mahdollisimman lyhyitä (ne tulisi yrittää tehdä 10 cm:n etäisyydelle);
- sinun on kytkettävä datajohdin Arduino-levyn vapaaseen digitaaliseen lähtöön - se määritetään sitten ohjelmallisesti;
- suuren virrankulutuksen vuoksi nauhalle ei tarvitse syöttää virtaa levyltä - tätä tarkoitusta varten on erilliset virtalähteet.
Lampun ja Arduinon yhteinen virtajohto on kytkettävä.

WS2812B-ohjelman hallinnan perusteet
On jo mainittu, että WS2812B-mikropiirien ohjaamiseksi on tarpeen generoida tietyn pituisia pulsseja säilyttäen korkean tarkkuuden. Arduino-kielellä on komentoja lyhyiden pulssien muodostamiseen viive mikrosekuntia ja mikros. Ongelmana on, että näiden komentojen resoluutio on 4 mikrosekuntia. Eli aikaviiveiden muodostaminen tietyllä tarkkuudella ei toimi. On tarpeen vaihtaa C++- tai Assembler-työkaluihin. Ja voit järjestää osoitteellisen LED-nauhan ohjauksen Arduinon kautta käyttämällä erityisesti tätä varten luotuja kirjastoja. Voit aloittaa tutustumisen Blink-ohjelmaan, joka saa valoa lähettävät elementit vilkkumaan.
nopea led
Tämä kirjasto on universaali. Osoitenauhan lisäksi se tukee useita laitteita, mukaan lukien SPI-liitännän ohjaamat nauhat. Sillä on laajat mahdollisuudet.
Ensinnäkin kirjasto on sisällytettävä. Tämä tehdään ennen asetuslohkoa, ja rivi näyttää tältä:
#include <FastLED.h>
Seuraava vaihe on luoda matriisi kunkin valodiodin värien tallentamiseksi. Sillä on niminauha ja mitta 15 - elementtien lukumäärän mukaan (tälle parametrille on parempi määrittää vakio).
CRGB-nauha[15]
Asennuslohkossa sinun on määritettävä, minkä nauhan kanssa luonnos toimii:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(nauha, 15);
intg;
}
RGB-parametri asettaa värijärjestyksen, 15 tarkoittaa LEDien lukumäärää, 7 on ohjaukseen osoitetun lähdön numero (on myös parempi määrittää vakio viimeiselle parametrille).
Silmukkalohko alkaa silmukalla, joka kirjoittaa peräkkäin taulukon jokaiseen osaan Punainen (punainen hehku):
kohteelle (g=0; g< 15; g++)
{strip[g]=CRGB::Punainen;}
Seuraavaksi muodostettu ryhmä lähetetään lamppuun:
FastLED.show();
Viive 1000 millisekuntia (sekunti):
viive (1000);
Sitten voit sammuttaa kaikki elementit samalla tavalla kirjoittamalla niihin mustaa.
for (int g=0; g< 15; g++)
{strip[g]=CRGB::Musta;}
FastLED.show();
viive (1000);

Kun luonnos on laadittu ja ladattu, nauha vilkkuu 2 sekunnin ajan. Jos haluat hallita jokaista värikomponenttia erikseen, niin viivan sijaan {strip[g]=CRGB::Punainen;} käytetään useita rivejä:
{
strip[g].r=100;// aseta punaisen elementin hehkutaso
nauha[g].g=11;// sama vihreälle
nauha[g].b=250;// sama siniselle
}
NeoPixel
Tämä kirjasto toimii vain NeoPixel Ring -LED-renkaiden kanssa, mutta se on vähemmän resurssiintensiivinen ja sisältää vain olennaisen. Arduinon kielellä ohjelma näyttää tältä:
#include <Adafruit_NeoPixel.h>
Kuten edellisessä tapauksessa, kirjasto yhdistetään ja lenta-objekti ilmoitetaan:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// jossa 15 on elementtien lukumäärä ja 6 on määritetty lähtö
Asennuslohkossa nauha alustetaan:
void setup() {
lenta.begin()
}
Silmukkalohkossa kaikki elementit korostetaan punaisella, muuttuja välitetään syötteeseen ja luodaan 1 sekunnin viive:
for (int y=0; y<15; y++)// 15 - lampun elementtien lukumäärä
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
tape.show();
viive (1000);
Hehku lakkaa mustalla levyllä:
for (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
tape.show();
viive (1000);

Opetusvideo: Esimerkkejä visuaalisista tehosteista osoitenauhalla.
Kun olet oppinut vilkkumaan LEDejä, voit jatkaa oppimista luomaan väritehosteita, mukaan lukien suositut Rainbow ja Aurora Borealis sulavilla siirtymillä. Osoitettavat LEDit WS2812B ja Arduino tarjoavat tähän lähes rajattomat mahdollisuudet.
