lamp.housecope.com
Atgal

Kaip prijungti adresuojamą LED juostelę WS2812B prie Arduino

Paskelbta: 2021-08-02
0
2578

Šviesos diodais pagrįstos apšvietimo technologijos vystymasis sparčiai tęsiasi. Dar vakar kaip stebuklas atrodė valdikliu valdomos RGB juostelės, kurių ryškumą ir spalvą galima reguliuoti pulteliu. Šiandien rinkoje pasirodė lempos su dar daugiau funkcijų.

LED juostelė WS2812B pagrindu

Skirtumas tarp adresuojamos LED juostos ir standartinės RGB dalykas yra kiekvieno elemento ryškumas ir spalvų santykis reguliuojamas atskirai. Tai leidžia gauti apšvietimo efektus, kurie iš esmės neprieinami kitų tipų apšvietimo įrenginiams. Adresinės LED juostos švytėjimas valdomas žinomu būdu – naudojant impulso pločio moduliaciją. Sistemos ypatybė yra tai, kad kiekvienas šviesos diodas turi savo PWM valdiklį. WS2812B lustas yra trijų spalvų šviesos diodas ir valdymo grandinė, sujungta į vieną paketą.

Kaip prijungti adresuojamą LED juostelę WS2812B prie Arduino
LED išvaizda su tvarkykle.

Elementai lygiagrečiai sujungti į maitinimo juostą, valdomi per nuosekliąją magistralę – pirmojo elemento išėjimas jungiamas prie antrojo valdymo įvesties ir pan. Dažniausiai nuosekliosios magistralės statomos ant dviejų linijų, iš kurių viena perduoda strobinius (laikrodžio impulsus), o kita – duomenis.

Adreso juostelės išvaizda.
Adreso juostelės išvaizda.

WS2812B lusto valdymo magistralė susideda iš vienos linijos – per ją perduodami duomenys. Duomenys užkoduojami kaip pastovaus dažnio impulsai, tačiau su skirtingais darbo ciklais. Vienas impulsas – vienas bitas. Kiekvieno bito trukmė yra 1,25 µs, nulinį bitą sudaro aukštas lygis, kurio trukmė yra 0,4 µs, ir žemas lygis – 0,85 µs. Įrenginys atrodo kaip aukštas lygis 0,8 µs ir žemas lygis 0,45 µs. Į kiekvieną šviesos diodą siunčiama 24 bitų (3 baitų) serija, po kurios daroma žemo lygio pauzė 50 µs. Tai reiškia, kad duomenys bus perduoti kitam šviesos diodui ir t. t. apie visus grandinės elementus. Duomenų perdavimas baigiamas 100 µs pauze. Tai rodo, kad juostos programavimo ciklas baigtas ir galima išsiųsti kitą duomenų paketų rinkinį.

Duomenys adresų juostai valdyti.
Duomenys adresų juostai valdyti.

Toks protokolas leidžia išsiversti su viena duomenų perdavimo eilute, tačiau reikalauja tikslumo išlaikant laiko intervalus. Leidžiamas neatitikimas ne didesnis kaip 150 ns. Be to, tokio autobuso atsparumas triukšmui yra labai žemas. Bet kokius pakankamos amplitudės trukdžius valdiklis gali suvokti kaip duomenis. Tai nustato valdymo grandinės laidų ilgio apribojimus. Kita vertus, tai leidžia juostelės sveikatos patikrinimas be papildomų įrenginių.Jei įjungsite lempos maitinimą ir pirštu paliesite valdymo magistralės kontaktinį kilimėlį, kai kurie šviesos diodai gali atsitiktinai užsidegti ir užgesti.

WS2812B elementų specifikacijos

Norėdami sukurti apšvietimo sistemas pagal adresų juostą, turite žinoti svarbius šviesą skleidžiančių elementų parametrus.

LED matmenys5x5 mm
PWM moduliacijos dažnis400 Hz
Dabartinis suvartojimas esant maksimaliam ryškumui60 mA vienai ląstelei
Maitinimo įtampa5 voltai

Arduino ir WS2812B

Pasaulyje populiari Arduino platforma leidžia kurti eskizus (programas) adresų juostoms tvarkyti. Sistemos galimybės yra pakankamai plačios, tačiau jei tam tikru lygiu jų nebeužtenka, užteks įgytų įgūdžių neskausmingai pereiti prie C++ ar net į assemblerį. Nors pradines žinias lengviau įgyti naudojant „Arduino“.

WS2812B juostelės prijungimas prie „Arduino Uno“ („Nano“)

Pirmajame etape pakanka paprastų Arduino Uno arba Arduino Nano plokščių. Ateityje sudėtingesnės plokštės gali būti naudojamos sudėtingesnėms sistemoms kurti. Fiziškai jungiant adresuojamą LED juostelę prie Arduino plokštės, reikia laikytis kelių sąlygų:

  • dėl mažo atsparumo triukšmui duomenų linijos jungiamieji laidininkai turi būti kuo trumpesni (reikia stengtis juos padaryti 10 cm atstumu);
  • reikia prijungti duomenų laidininką prie laisvos skaitmeninės Arduino plokštės išvesties – tada jis bus nurodytas programiškai;
  • dėl didelio energijos suvartojimo nereikia maitinti juostos iš plokštės - tam yra numatyti atskiri maitinimo šaltiniai.

Turi būti prijungtas bendras lempos ir Arduino maitinimo laidas.

Sujungimo schema WS2812B.
WS2812B juostos prijungimo schema.

Taip pat skaitykite

Kaip prijungti LED prie Arduino plokštės

 

WS2812B programos valdymo pagrindai

Jau minėta, kad norint valdyti WS2812B mikroschemas, reikia generuoti tam tikro ilgio impulsus, išlaikant aukštą tikslumą. Arduino kalba yra komandos trumpiems impulsams formuoti delsimas Mikrosekundės ir mikros. Problema ta, kad šių komandų skiriamoji geba yra 4 mikrosekundės. Tai reiškia, kad tam tikru tikslumu sudaryti laiko vėlavimus nepavyks. Būtina pereiti prie C ++ arba Assembler įrankių. Adresinės LED juostos valdymą galite organizuoti naudodami „Arduino“, naudodami specialiai tam sukurtas bibliotekas. Pažintį galite pradėti su Blink programa, kuri priverčia mirksėti šviesą skleidžiančius elementus.

greitai led

Ši biblioteka yra universali. Be adresų juostos, ji palaiko įvairius įrenginius, įskaitant juostas, valdomas SPI sąsaja. Jis turi plačias galimybes.

Pirma, biblioteka turi būti įtraukta. Tai daroma prieš sąrankos bloką, o eilutė atrodo taip:

#include <FastLED.h>

Kitas žingsnis – sukurti masyvą, kuriame būtų saugomos kiekvieno šviesos diodo spalvos. Jis turės pavadinimo juostelę ir matmenį 15 - pagal elementų skaičių (šiam parametrui geriau priskirti konstantą).

CRGB juosta[15]

Sąrankos bloke turite nurodyti, su kuria juosta veiks eskizas:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(juostelė, 15);

intg;

}

RGB parametras nustato spalvų sekos tvarką, 15 reiškia šviesos diodų skaičių, 7 yra valdymui priskirto išėjimo numeris (paskutiniam parametrui taip pat geriau priskirti konstantą).

Ciklo blokas prasideda kilpa, kuri nuosekliai rašo į kiekvieną masyvo skyrių Raudona (raudona švytėjimas):

už (g=0; g<15; g++)

{strip[g]=CRGB::raudona;}

Tada suformuotas masyvas siunčiamas į lempą:

FastLED.show();

Vėlavimas 1000 milisekundžių (sekundės):

delsimas (1000);

Tada visus elementus galite išjungti taip pat, rašydami juos juodai.

už (int g=0; g< 15; g++)

{strip[g]=CRGB::Juoda;}

FastLED.show();

delsimas (1000);

Mirksinčios juostos eskizas, pagrįstas FastLed.
Mirksinčios juostos eskizas, pagrįstas FastLed.

Sudarius ir įkėlus eskizą, juosta mirksės 2 sekundes. Jei reikia tvarkyti kiekvieną spalvos komponentą atskirai, tada vietoj linijos {strip[g]=CRGB::raudona;} naudojamos kelios eilutės:

{

juosta[g].r=100;// nustatykite raudono elemento švytėjimo lygį

juostelė[g].g=11;// tas pats ir žaliai

juosta[g].b=250;// tas pats mėlynai

}

NeoPixel

Ši biblioteka veikia tik su NeoPixel Ring LED žiedais, tačiau joje yra mažiau išteklių ir joje yra tik būtiniausi dalykai. Arduino kalba programa atrodo taip:

#include <Adafruit_NeoPixel.h>

Kaip ir ankstesniu atveju, biblioteka prijungiama, o lenta objektas deklaruojamas:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// kur 15 yra elementų skaičius, o 6 yra priskirta išvestis

Sąrankos bloke juosta inicijuojama:

void setup() {

lenta.begin()

}

Ciklo bloke visi elementai paryškinami raudonai, kintamasis perduodamas tiekimui ir sukuriama 1 sekundės delsa:

už (int y=0; y<15; y++)// 15 - elementų skaičius lempoje

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

juosta.show();

delsimas (1000);

Švytėjimas sustoja juodu įrašu:

už (int y=0; y< 15; y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

juosta.show();

delsimas (1000);

„NeoPixel“ pagrindu sukurtos „Blink“ programos eskizas.
„NeoPixel“ pagrindu sukurtos „Blink“ programos eskizas.

Vaizdo įrašų pamoka: vaizdinių efektų pavyzdžiai naudojant adresų juostas.

Išmokę mirksėti šviesos diodais, galėsite toliau mokytis, kaip kurti spalvų efektus, įskaitant populiariuosius Rainbow ir Aurora Borealis su sklandžiais perėjimais. Adresuojami šviesos diodai WS2812B ir Arduino tam suteikia beveik neribotas galimybes.

Komentarai:
Komentarų dar nėra. Būk pirmas!

Patariame perskaityti

Kaip patiems taisyti LED lempą