lamp.housecope.com
Înapoi

Cum se conectează banda LED adresabilă WS2812B la Arduino

Publicat: 02.08.2021
0
2578

Dezvoltarea tehnologiei de iluminat bazată pe LED-uri continuă rapid. Chiar ieri, panglicile RGB controlate de controler, a căror luminozitate și culoare pot fi reglate cu ajutorul unei telecomenzi, au părut un miracol. Astăzi au apărut pe piață lămpi cu și mai multe caracteristici.

Bandă LED bazată pe WS2812B

Diferența dintre banda LED adresabilă și cea standard RGB lucru este luminozitatea și raportul de culoare ale fiecărui element sunt ajustate separat. Acest lucru vă permite să obțineți efecte de iluminare care sunt fundamental inaccesibile altor tipuri de dispozitive de iluminat. Strălucirea benzii LED adresabile este controlată într-un mod cunoscut - folosind modularea lățimii impulsului. O caracteristică a sistemului este de a echipa fiecare LED cu propriul său controler PWM. Cipul WS2812B este o diodă emițătoare de lumină tricoloră și un circuit de control combinate într-un singur pachet.

Cum se conectează banda LED adresabilă WS2812B la Arduino
Apariția LED-ului cu șoferul.

Elementele sunt combinate într-o bandă de alimentare în paralel și sunt controlate printr-o magistrală serială - ieșirea primului element este conectată la intrarea de control a celui de-al doilea etc. În cele mai multe cazuri, magistralele seriale sunt construite pe două linii, dintre care una transmite stroboscop (impulsuri de ceas), iar cealaltă - date.

Aspectul benzii de adresă.
Aspectul benzii de adresă.

Autobuzul de control al chipului WS2812B este format dintr-o linie - datele sunt transmise prin aceasta. Datele sunt codificate ca impulsuri de frecvență constantă, dar cu cicluri de lucru diferite. Un puls - un bit. Durata fiecărui bit este de 1,25 µs, bitul zero constă dintr-un nivel înalt cu o durată de 0,4 µs și un nivel scăzut de 0,85 µs. Unitatea arată ca un nivel ridicat pentru 0,8 µs și un nivel scăzut pentru 0,45 µs. O rafală de 24 de biți (3 octeți) este trimisă la fiecare LED, urmată de o pauză de nivel scăzut de 50 µs. Aceasta înseamnă că datele vor fi transmise pentru următorul LED și așa mai departe pentru toate elementele lanțului. Transferul de date se încheie cu o pauză de 100 µs. Aceasta indică faptul că ciclul de programare a benzilor este complet și următorul set de pachete de date poate fi trimis.

Date pentru gestionarea casetei de adresă.
Date pentru gestionarea casetei de adresă.

Un astfel de protocol face posibil să se descurce cu o singură linie pentru transmiterea datelor, dar necesită precizie în menținerea intervalelor de timp. Discrepanța este permisă nu mai mult de 150 ns. În plus, imunitatea la zgomot a unui astfel de autobuz este foarte scăzută. Orice interferență de amplitudine suficientă poate fi percepută de controler ca date. Aceasta impune restricții asupra lungimii conductorilor din circuitul de comandă. Pe de altă parte, acest lucru face posibil verificarea stării panglicii fără dispozitive suplimentare.Dacă aplicați alimentarea lămpii și atingeți pad-ul de contact al magistralei de control cu ​​degetul, unele LED-uri se pot aprinde și se stinge aleatoriu.

Specificațiile elementelor WS2812B

Pentru a crea sisteme de iluminat bazate pe o bandă de adresă, trebuie să cunoașteți parametrii importanți ai elementelor emițătoare de lumină.

Dimensiuni LED5x5mm
Frecvența de modulație PWM400 Hz
Consum de curent la luminozitate maximă60 mA per celulă
Tensiunea de alimentare5 volți

Arduino și WS2812B

Platforma Arduino, populară în lume, vă permite să creați schițe (programe) pentru gestionarea benzilor de adresă. Capacitățile sistemului sunt suficient de largi, dar dacă nu mai sunt suficiente la un anumit nivel, abilitățile dobândite vor fi suficiente pentru a trece fără durere la C++ sau chiar la assembler. Deși cunoștințele inițiale sunt mai ușor de obținut pe Arduino.

Conectarea WS2812B Ribbon la Arduino Uno (Nano)

În prima etapă, plăcile simple Arduino Uno sau Arduino Nano sunt suficiente. În viitor, plăcile mai complexe pot fi folosite pentru a construi sisteme mai complexe. Când conectați fizic banda LED adresabilă la placa Arduino, trebuie respectate câteva condiții:

  • din cauza imunității scăzute la zgomot, conductoarele de conectare ale liniei de date ar trebui să fie cât mai scurte posibil (ar trebui să încercați să le faceți în termen de 10 cm);
  • trebuie să conectați conductorul de date la ieșirea digitală liberă a plăcii Arduino - acesta va fi apoi specificat programatic;
  • din cauza consumului mare de energie, nu este necesară alimentarea casetei de pe placă - în acest scop sunt prevăzute surse de alimentare separate.

Cablul de alimentare comun al lămpii și Arduino trebuie să fie conectate.

Schema electrică WS2812B.
Diagrama de conectare a benzii WS2812B.

Citeste si

Cum se conectează LED-ul la placa Arduino

 

WS2812B Noțiuni de bază pentru controlul programului

S-a menționat deja că pentru a controla microcircuitele WS2812B este necesară generarea de impulsuri cu o anumită lungime, menținând o precizie ridicată. Există comenzi în limbajul Arduino pentru formarea de impulsuri scurte delayMicrosecunde și micros. Problema este că rezoluția acestor comenzi este de 4 microsecunde. Adică, nu va funcționa pentru a forma întârzieri de timp cu o anumită precizie. Este necesar să treceți la instrumentele C++ sau Assembler. Și puteți organiza controlul benzii LED adresabile prin Arduino folosind biblioteci special create pentru asta. Puteți începe să vă cunoașteți programul Blink, care face ca elementele emițătoare de lumină să clipească.

condus rapid

Această bibliotecă este universală. Pe lângă banda de adresă, acceptă o varietate de dispozitive, inclusiv benzi controlate de interfața SPI. Are posibilități largi.

În primul rând, biblioteca trebuie inclusă. Acest lucru se face înainte de blocul de configurare, iar linia arată astfel:

#include <FastLED.h>

Următorul pas este de a crea o matrice pentru a stoca culorile fiecărei diode emițătoare de lumină. Va avea banda de nume și dimensiunea 15 - după numărul de elemente (este mai bine să atribuiți o constantă acestui parametru).

bandă CRGB[15]

În blocul de configurare, trebuie să specificați cu ce bandă va funcționa schița:

void setup() {

FastLED.addLeds<WS2812B, 7, RGB>(bandă, 15);

intg;

}

Parametrul RGB setează ordinea secvenței de culori, 15 înseamnă numărul de LED-uri, 7 este numărul de ieșire alocată pentru control (de asemenea, este mai bine să atribuiți o constantă ultimului parametru).

Blocul buclă începe cu o buclă care scrie secvenţial în fiecare secţiune a matricei Roşu (strălucire roşie):

pentru (g=0; g< 15; g++)

{fâșie[g]=CRGB::Roșu;}

Apoi, matricea formată este trimisă la lampă:

FastLED.show();

Întârziere 1000 milisecunde (secunde):

întârziere (1000);

Apoi puteți dezactiva toate elementele în același mod, scriind negru în ele.

pentru (int g=0; g< 15; g++)

{fâșie[g]=CRGB::Negru;}

FastLED.show();

întârziere (1000);

O schiță pentru o bandă intermitentă bazată pe FastLed.
O schiță pentru o bandă intermitentă bazată pe FastLed.

După compilarea și încărcarea schiței, banda va clipi cu o perioadă de 2 secunde. Dacă trebuie să gestionați fiecare componentă de culoare separat, atunci în loc de linie {fâșie[g]=CRGB::Roșu;} sunt folosite mai multe linii:

{

bandă[g].r=100;// setați nivelul de strălucire al elementului roșu

bandă[g].g=11;// acelasi lucru pentru verde

bandă[g].b=250;// la fel pentru albastru

}

NeoPixel

Această bibliotecă funcționează numai cu inele LED NeoPixel Ring, dar necesită mai puține resurse și conține doar elementele esențiale. În limbajul Arduino, programul arată astfel:

#include <Adafruit_NeoPixel.h>

Ca și în cazul precedent, biblioteca este conectată, iar obiectul lenta este declarat:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// unde 15 este numărul de elemente și 6 este ieșirea alocată

În blocul de configurare, banda este inițializată:

void setup() {

lenta.begin()

}

În blocul buclei, toate elementele sunt evidențiate cu roșu, variabila este transmisă în flux și se creează o întârziere de 1 secundă:

pentru (int y=0; y<15; y++)// 15 - numărul de elemente din lampă

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

tape.show();

întârziere (1000);

Strălucirea se oprește cu o înregistrare neagră:

pentru (int y=0; y< 15; y++)

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

tape.show();

întârziere (1000);

Schiță pentru programul Blink bazat pe NeoPixel.
Schiță pentru programul Blink bazat pe NeoPixel.

Tutorial video: Exemple de efecte vizuale folosind benzi de adresă.

Odată ce ați învățat cum să clipiți LED-urile, puteți continua să învățați cum să creați efecte de culoare, inclusiv popularele Rainbow și Aurora Borealis cu tranziții netede. LED-urile adresabile WS2812B și Arduino oferă posibilități aproape nelimitate în acest sens.

Comentarii:
Nu există încă comentarii. Fii primul!

Vă sfătuim să citiți

Cum să reparați singur lampa LED