Kuidas ühendada WS2812B adresseeritav LED-riba Arduinoga
LED-põhise valgustustehnoloogia areng jätkub hoogsalt. Eile tundus imena, et puldiga juhitavad RGB lindid, mille heledust ja värvi saab puldiga reguleerida. Tänapäeval on turul veelgi rohkem võimalusi.
LED-riba WS2812B baasil
Adresseeritava LED-riba erinevused standardsest RGB on see Iga elemendi heledus ja värvisuhe on reguleeritavad eraldi. See võimaldab teil saada valgusefekte, mis pole muud tüüpi valgustusseadmete jaoks saadaval. LED-riba juhitakse tuntud viisil - impulsi laiuse modulatsiooniga. Süsteemi eripära on see, et igal LED-il on oma PWM-kontroller. WS2812B kiip on kolmevärviline valgusdiood ja juhtahel, mis on ühendatud ühes pakendis.
Elemendid ühendatakse paralleelselt toiteplokil lindiks ja neid juhitakse jadasiini kaudu - esimese elemendi väljund on ühendatud teise juhtsisendiga jne. Enamasti on jadasiinid ehitatud kahele liinile, millest üks edastab strobe (sünkroonseid impulsse) ja teine andmeid.
WS2812B kiibi juhtsiin koosneb ühest reast – see edastab andmeid.Andmed kodeeritakse konstantse sagedusega, kuid erineva sagedusega impulssidena. Üks impulss on üks bitt. Iga biti kestus on 1,25 µs, nullbitt koosneb kõrgest tasemest 0,4 µs ja madalast tasemest 0,85 µs. Seadme maksimum on 0,8 µs ja madalaim 0,45 µs. Igale LED-ile saadetakse 24-bitine (3 baiti) pakett, millele järgneb paus madala taseme kujul 50 µs. See tähendab, et järgmisena edastatakse andmed järgmise LED-i ja nii edasi kõigi ahela elementide kohta. Andmeedastus lõpeb 100 µs pausiga. See tähendab, et lindi programmeerimise tsükkel on lõppenud ja järgmise andmepakettide komplekti saab saata.
See protokoll võimaldab andmeedastuseks kasutada ühte rida, kuid nõuab täpset ajastust. Erinevus ei ole suurem kui 150 ns. Lisaks on selle bussi mürakindlus väga madal. Kontroller võib tajuda andmetena kõiki piisava amplituudiga häireid. See seab piirangud juhtahelast väljuvate juhtmete pikkusele. Teisest küljest annab see võimaluse et kontrollida, kas lint ilma lisaseadmeteta. Kui lülitate valgusti voolu sisse ja puudutate sõrmega juhtsiini kontakti, võivad mõned LED-id kaootiliselt sisse ja välja lülituda.
WS2812B elementide tehnilised omadused
Adresseeritava lindi baasil valgustussüsteemide loomiseks on vaja teada valgust kiirgavate elementide olulisi parameetreid.
LED mõõtmed | 5x5 mm |
PWM modulatsiooni sagedus | 400 Hz |
Praegune tarbimine maksimaalse heledusega | 60 mA elemendi kohta |
Toitepinge | 5 volti |
Arduino ja WS2812B
Maailmas populaarne Arduino platvorm võimaldab luua visandeid (programme) adresseeritavate lintide juhtimiseks. Süsteemi võimalused on piisavalt laiad, aga kui neist mingil tasemel enam ei piisa, siis piisab omandatud oskustest, et sujuvalt C++ või isegi assembleri peale üle minna. Arduino põhiteadmisi on siiski lihtsam omandada.
WS2812B-põhise lindi ühendamine Arduino Unoga (Nano)
Esimesel etapil piisab lihtsast Arduino Uno või Arduino Nano plaadist. Hiljem saab keerukamaid tahvleid kasutada keerukamate süsteemide ehitamiseks. Kui ühendate adresseeritava LED-riba füüsiliselt Arduino plaadiga, peate veenduma, et on täidetud mõned tingimused:
- madala mürakindluse tõttu peaksid andmeliinide ühendusjuhtmed olema võimalikult lühikesed (proovige teha 10 cm piires);
- Ühendage andmejuhe Arduino plaadi vaba digitaalse väljundiga – hiljem annab tarkvara sellest märku;
- Suure voolutarbimise tõttu ei ole vaja riba plaadilt toita - selleks on ette nähtud eraldi toiteallikad.
Vaja on ühendada valgusti ja Arduino ühine toitejuhe.
WS2812B tarkvara juhtimise põhialused
Juba mainitud, et WS2812B kiipide juhtimiseks peate moodustama teatud pikkusega impulsse, mis peavad vastu suurele täpsusele. Arduino keeles on käsud lühikeste impulsside moodustamiseks viivitusMikrosekundid и mikros. Probleem on selles, et nende käskude eraldusvõime on 4 mikrosekundit. See tähendab, et ajaviiteid ei ole võimalik etteantud täpsusega moodustada. Vaja on minna C++ või Assembleri tööriistadesse. Adresseeritavat LED-riba on võimalik juhtida Arduino kaudu spetsiaalselt selleks loodud raamatukogude abil. Alustada võib programmiga Blink, mis paneb valgust kiirgavad elemendid vilkuma.
FastLed
See raamatukogu on universaalne. Lisaks adresseeritavale lindile toetab see paljusid seadmeid, sealhulgas SPI-ga juhitavaid linte. Sellel on lai valik funktsioone.
Kõigepealt peate raamatukogu ühendama. Seda tehakse enne häälestusplokki ja string näeb välja järgmine:
#kaasa
Järgmine samm on luua massiiv iga valgusdioodi värvide salvestamiseks. Selle nimeriba ja mõõtmed on 15 elementi.
CRGB riba[15]
Seadistusplokis peate määrama lindi, millega skript töötab:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(riba, 15);
int g;
}
RGB parameeter määrab värvide jada, 15 tähendab LED-ide arvu, 7 on juhtimiseks määratud väljundi number (parem on määrata konstant ka viimasele parameetrile).
Silmusplokk algab tsükliga, mis kirjutab järjestikku punase (punase kuma) massiivi igasse sektsiooni:
jaoks (g=0; g<15;g++)
{strip[g]=CRGB::Punane;}
Seejärel saadetakse genereeritud massiiv illuminaatorisse:
FastLED.show();
Viivitus 1000 millisekundit (sekundites):
viivitus(1000);
Seejärel saate kõik elemendid samamoodi välja lülitada, kirjutades neisse musta värvi.
jaoks (int g=0; g< 15;g++)
{strip[g]=CRGB::Must;}
FastLED.show();
viivitus(1000);
Pärast visandi koostamist ja laadimist vilgub lint 2 sekundit. Kui soovite iga värvikomponenti eraldi juhtida, siis stringi asemel {strip[g]=CRGB::Punane;} kasutatakse mitut stringi:
{
riba[g].r=100;// määrata punase elemendi luminestsentsi tase
riba[g].g=11;// sama ka rohelisega
riba[g].b=250;// sama ka sinisega
}
NeoPixel
See teek töötab ainult NeoPixel Ring LED-idega, kuid see on vähem ressursimahukas ja sisaldab ainult hädavajalikku. Arduinos näeb programm välja selline:
#kaasa
Nagu eelmisel juhul, on teek ühendatud ja lenta objekt deklareeritakse:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Kus 15 on elementide arv ja 6 on määratud väljund
Lenta lähtestatakse häälestusplokis:
void setup() {
lenta.begin ()
}
Silmusplokis põlevad kõik elemendid punaselt, muutuja edastatakse lindile ja luuakse 1-sekundiline viivitus:
jaoks (int y=0; y<15;y++)// 15 - elementide arv valgustis
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
lenta.show();
viivitus(1000);
Lenta lõpetab hõõgumise, kirjutades mustaks:
jaoks (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
viivitus(1000);
Videotund: visuaalsete efektide näidised adresseeritavate paelte abil.
Pärast LED-lampide vilkumise õppimist saate jätkata õppetundi ja õppida, kuidas luua värviefekte, sealhulgas populaarseid sujuvate üleminekutega "Vikerkaar" ja "virmalised". WS2812B ja Arduino adresseeritavad LED-id annavad teile selleks peaaegu piiramatud võimalused.