Com connectar la tira LED adreçable WS2812B a Arduino
El desenvolupament de la tecnologia d'il·luminació basada en LED continua ràpidament. Ahir mateix, les cintes RGB controlades per controlador, la brillantor i el color de les quals es poden ajustar mitjançant un comandament a distància, semblaven un miracle. Avui dia han aparegut al mercat llums amb encara més característiques.
Tira LED basada en WS2812B
La diferència entre la tira LED adreçable i la estàndard RGB la cosa és la brillantor i la relació de color de cada element s'ajusten per separat. Això us permet obtenir efectes d'il·luminació que són fonamentalment inaccessibles per a altres tipus de dispositius d'il·luminació. La resplendor de la tira LED adreçable es controla d'una manera coneguda, mitjançant la modulació d'amplada de pols. Una característica del sistema és equipar cada LED amb el seu propi controlador PWM. El xip WS2812B és un díode emissor de llum tricolor i un circuit de control combinat en un sol paquet.

Els elements es combinen en una cinta d'alimentació en paral·lel i es controlen mitjançant un bus sèrie: la sortida del primer element està connectada a l'entrada de control del segon, etc. En la majoria dels casos, els busos sèrie es construeixen en dues línies, una de les quals transmet estrobosques (impulsos de rellotge) i l'altra - dades.

El bus de control del xip WS2812B consta d'una línia: les dades es transmeten a través d'ella. Les dades es codifiquen com a polsos de freqüència constant, però amb diferents cicles de treball. Un pols - un bit. La durada de cada bit és d'1,25 µs, el bit zero consta d'un nivell alt amb una durada de 0,4 µs i un nivell baix de 0,85 µs. La unitat sembla un nivell alt per a 0,8 µs i un nivell baix per a 0,45 µs. S'envia una ràfega de 24 bits (3 bytes) a cada LED, seguida d'una pausa de baix nivell durant 50 µs. Això significa que les dades es transmetran per al següent LED, i així successivament per a tots els elements de la cadena. La transferència de dades finalitza amb una pausa de 100 µs. Això indica que el cicle de programació de la cinta s'ha completat i que es pot enviar el següent conjunt de paquets de dades.

Aquest protocol permet fer-ho amb una línia per a la transmissió de dades, però requereix precisió en el manteniment dels intervals de temps. La discrepància no es permet més de 150 ns. A més, la immunitat al soroll d'aquest autobús és molt baixa. Qualsevol interferència d'amplitud suficient pot ser percebuda pel controlador com a dades. Això imposa restriccions a la longitud dels conductors del circuit de control. D'altra banda, això ho fa possible control de salut de la cinta sense dispositius addicionals.Si apliqueu energia al llum i toqueu el coixinet de contacte del bus de control amb el dit, alguns LED poden il·luminar-se i apagar-se aleatòriament.
Especificacions dels elements WS2812B
Per crear sistemes d'il·luminació basats en una cinta d'adreça, cal conèixer els paràmetres importants dels elements emissors de llum.
| Mides LED | 5x5mm |
| Freqüència de modulació PWM | 400 Hz |
| Consum de corrent a la màxima lluminositat | 60 mA per cèl·lula |
| Tensió d'alimentació | 5 volts |
Arduino i WS2812B
La plataforma Arduino, popular al món, permet crear esbossos (programes) per gestionar les cintes d'adreces. Les capacitats del sistema són prou àmplies, però si ja no són suficients en algun nivell, les habilitats adquirides seran suficients per canviar sense dolor a C ++ o fins i tot a assemblador. Encara que el coneixement inicial és més fàcil d'aconseguir a l'Arduino.
Connexió de la cinta WS2812B a Arduino Uno (Nano)
A la primera etapa, n'hi ha prou amb plaques simples Arduino Uno o Arduino Nano. En el futur, es poden utilitzar taules més complexes per construir sistemes més complexos. En connectar físicament la tira LED adreçable a la placa Arduino, s'han d'observar diverses condicions:
- a causa de la baixa immunitat al soroll, els conductors de connexió de la línia de dades han de ser tan curts com sigui possible (hauries d'intentar fer-los a 10 cm);
- heu de connectar el conductor de dades a la sortida digital gratuïta de la placa Arduino; llavors s'especificarà programadament;
- a causa de l'elevat consum d'energia, no és necessari alimentar la cinta des del tauler; es proporcionen fonts d'alimentació separades per a aquest propòsit.
S'ha de connectar el cable d'alimentació comú de la làmpada i Arduino.

WS2812B Conceptes bàsics de control de programes
Ja s'ha comentat que per controlar els microcircuits WS2812B, cal generar polsos amb una certa longitud, mantenint una alta precisió. Hi ha ordres en llenguatge Arduino per a la formació de polsos curts retardMicrosegons i micros. El problema és que la resolució d'aquestes ordres és de 4 microsegons. És a dir, no funcionarà formar retards de temps amb una precisió determinada. Cal canviar a les eines C++ o Assembler. I podeu organitzar el control de la tira LED adreçable mitjançant Arduino mitjançant biblioteques creades especialment per a això. Podeu començar a conèixer el programa Blink, que fa que parpellegen els elements emissors de llum.
led ràpid
Aquesta biblioteca és universal. A més de la cinta d'adreces, admet una varietat de dispositius, incloses les cintes controlades per la interfície SPI. Té àmplies possibilitats.
En primer lloc, cal incloure la biblioteca. Això es fa abans del bloc de configuració, i la línia té aquest aspecte:
#inclou <FastLED.h>
El següent pas és crear una matriu per emmagatzemar els colors de cada díode emissor de llum. Tindrà la banda de nom i la dimensió 15, pel nombre d'elements (és millor assignar una constant a aquest paràmetre).
Tira CRGB[15]
Al bloc de configuració, heu d'especificar amb quina cinta funcionarà l'esbós:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(tira, 15);
intg;
}
El paràmetre RGB estableix l'ordre de la seqüència de colors, 15 significa el nombre de LED, 7 és el nombre de la sortida assignada per al control (també és millor assignar una constant a l'últim paràmetre).
El bloc de bucle comença amb un bucle que escriu seqüencialment a cada secció de la matriu Vermell (brillant vermell):
per a (g=0; g<15; g++)
{tira[g]=CRGB::Vermell;}
A continuació, la matriu formada s'envia a la làmpada:
FastLED.show();
Retard 1000 mil·lisegons (segons):
retard (1000);
A continuació, podeu desactivar tots els elements de la mateixa manera escrivint-hi negre.
per a (int g=0; g<15; g++)
{tira[g]=CRGB::Negre;}
FastLED.show();
retard (1000);

Després de compilar i carregar l'esbós, la cinta parpellejarà amb un període de 2 segons. Si necessiteu gestionar cada component de color per separat, en lloc de la línia {tira[g]=CRGB::Vermell;} s'utilitzen diverses línies:
{
tira[g].r=100;// establiu el nivell de brillantor de l'element vermell
tira[g].g=11;// el mateix pel verd
tira[g].b=250;// el mateix pel blau
}
NeoPixel
Aquesta biblioteca només funciona amb anells LED NeoPixel Ring, però requereix menys recursos i només conté l'essencial. En llenguatge Arduino, el programa té aquest aspecte:
#include <Adafruit_NeoPixel.h>
Com en el cas anterior, la biblioteca està connectada i l'objecte lenta es declara:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// on 15 és el nombre d'elements i 6 és la sortida assignada
Al bloc de configuració, la cinta s'inicialitza:
void setup() {
lenta.begin()
}
Al bloc de bucle, tots els elements es ressalten en vermell, la variable es passa al feed i es crea un retard d'1 segon:
per a (int y=0; y<15; y++)// 15 - el nombre d'elements del llum
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
tape.show();
retard (1000);
La resplendor s'atura amb un registre negre:
per (int y=0; y < 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
tape.show();
retard (1000);

Vídeo tutorial: mostres d'efectes visuals amb cintes d'adreces.
Un cop hàgiu après a parpellejar els LED, podeu continuar aprenent a crear efectes de color, inclosos els populars Rainbow i Aurora Borealis amb transicions suaus. Els LED direccionables WS2812B i Arduino ofereixen possibilitats gairebé il·limitades per a això.
