Come collegare una striscia LED indirizzabile WS2812B a un Arduino
Lo sviluppo della tecnologia di illuminazione basata sui LED continua a ritmo sostenuto. Fino a ieri, i nastri RGB controllati da un controller, la cui luminosità e colore possono essere regolati da un telecomando, sembravano un miracolo. Oggi, ci sono nuovi apparecchi sul mercato con ancora più possibilità.
Striscia di LED basata su WS2812B
Le differenze tra le strisce LED indirizzabili e quelle standard RGB è il La luminosità e il rapporto di colore di ogni elemento sono regolabili separatamente. Questo permette di ottenere effetti di luce che non sono disponibili per altri tipi di apparecchi di illuminazione. La striscia LED indirizzabile è controllata in un modo ben noto - per mezzo della modulazione di larghezza d'impulso. Una caratteristica del sistema è che ogni LED è dotato di un proprio controller PWM. Il chip WS2812B è un diodo a emissione di luce a tre colori e un circuito di controllo, combinati in un unico pacchetto.
Gli elementi sono collegati in parallelo all'alimentazione e sono controllati tramite un bus seriale - l'uscita del primo elemento è collegata all'ingresso di controllo del secondo elemento, ecc. Nella maggior parte dei casi, i bus seriali sono costruiti su due linee, una delle quali trasmette strobo (impulsi di clock) e l'altra - dati.
Il bus di controllo del WS2812B consiste di una linea - è usato per trasferire dati. I dati sono codificati come impulsi con una frequenza costante ma con frequenze diverse. Un impulso è un bit.. La durata di ogni bit è di 1,25 µs, il bit zero consiste in un livello alto di 0,4 µs e un livello basso di 0,85 µs. L'unità appare come un livello alto di 0,8µs e un livello basso di 0,45µs. Un pacco di 24 bit (3 byte) viene inviato ad ogni LED, seguito da una pausa come livello basso per 50µs. Questo significa che i dati per il prossimo LED saranno trasmessi dopo, e così via per tutti gli elementi della catena. Il trasferimento dei dati termina con una pausa di 100 µs. Questo significa che il ciclo di programmazione del nastro è completo e il prossimo set di pacchetti di dati può essere inviato.
Questo protocollo permette di fare a meno di una sola linea per il trasferimento dei dati, ma richiede una tempistica accurata. È consentita una deviazione di max. 150 ns. Inoltre, l'immunità al rumore di questo bus è molto bassa. Qualsiasi interferenza di ampiezza sufficiente può essere captata dal controllore come dati. Questo impone delle limitazioni sulle lunghezze dei conduttori dal circuito di controllo. D'altra parte, fornisce la possibilità di per controllare il corretto funzionamento della cinghia senza dispositivi aggiuntivi. Se l'apparecchio è alimentato e un dito tocca l'area di contatto del bus di controllo, alcuni LED possono accendersi e spegnersi in modo casuale.
Caratteristiche tecniche degli elementi WS2812B
Per creare sistemi di illuminazione con nastri indirizzabili è necessario conoscere i parametri importanti degli elementi di emissione della luce.
Dimensioni dei LED | 5x5 mm |
Frequenza di modulazione PWM | 400 Hz |
Consumo di corrente alla massima luminosità | 60mA per elemento |
Tensione di alimentazione | 5 volt |
Arduino e WS2812B
La piattaforma Arduino, popolare in tutto il mondo, permette la creazione di sketch (programmi) per controllare i nastri indirizzabili. Le capacità del sistema sono abbastanza ampie, ma se ad un certo livello non sono più sufficienti, le competenze ottenute saranno sufficienti per passare senza problemi al C++ o anche all'assembler. Anche se è più facile ottenere le conoscenze di base da Arduino.
Collegare un nastro basato su WS2812B a un Arduino Uno (Nano)
All'inizio, una semplice scheda Arduino Uno o Arduino Nano è sufficiente. In seguito, schede più complesse possono essere utilizzate per costruire sistemi più complessi. Quando si collega fisicamente la striscia LED indirizzabile alla scheda Arduino, bisogna assicurarsi che siano soddisfatte alcune condizioni:
- A causa della bassa immunità al rumore, i conduttori di connessione della linea dati dovrebbero essere il più corti possibile (cercate di farli entro 10 cm);
- Collegare la linea dati a un'uscita digitale libera della scheda Arduino - sarà indicata in seguito dal software;
- A causa dell'alto consumo di energia, non è necessario alimentare la striscia dalla scheda - sono forniti alimentatori separati per questo scopo.
La linea di alimentazione comune tra la striscia e Arduino deve essere collegata.
Fondamenti del controllo software di WS2812B
Si è già detto che per controllare il chip WS2812B bisogna generare impulsi di una certa lunghezza con grande precisione. Nel linguaggio Arduino ci sono comandi per formare brevi impulsi delayMicroseconds и micros. Il problema è che la risoluzione di questi comandi è di 4 microsecondi. Ciò significa che non è possibile formare i ritardi temporali con una certa precisione. È necessario utilizzare strumenti C++ o Assembler. Oppure è possibile controllare la striscia di LED tramite Arduino con l'aiuto di librerie appositamente create per questo scopo. L'introduzione inizia con Blink, un programma che fa lampeggiare gli elementi che emettono luce.
FastLed
Questa libreria è versatile. Oltre al nastro indirizzabile, supporta molti dispositivi tra cui i nastri controllati da SPI. È molto potente.
Per prima cosa è necessario collegare la libreria. Questo viene fatto prima del blocco di setup, e la stringa appare così:
#include
Il passo successivo è quello di creare un array per memorizzare i colori di ogni diodo che emette luce. Avrà il nome strip e la dimensione 15 - per il numero di elementi (è meglio assegnare una costante a questo parametro).
Striscia CRGB[15]
Nel blocco di setup dovete specificare la banda con cui lo script lavorerà:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
Il parametro RGB imposta l'ordine di alternanza dei colori, 15 indica il numero di LED, 7 è il numero dell'uscita assegnata al controllo (è meglio assegnare una costante anche all'ultimo parametro).
Il blocco di loop inizia con un ciclo che scrive sequenzialmente in ogni sezione dell'array Red (red glow):
per (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Poi l'array generato viene inviato all'apparecchio di illuminazione:
FastLED.show();
Ritardo 1000 millisecondi (un secondo):
ritardo(1000);
Poi tutti gli elementi possono essere spenti allo stesso modo, scrivendo nero su di essi.
per (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
ritardo(1000);
Dopo aver compilato e caricato lo schizzo, il nastro lampeggerà con un periodo di 2 secondi. Se volete controllare ogni componente di colore separatamente, allora invece della stringa {strip[g]=CRGB::Red;} vengono utilizzate più stringhe:
{
strip[g].r=100;// imposta il livello di luminescenza dell'elemento rosso
strip[g].g=11;// lo stesso per il verde
strip[g].b=250;// lo stesso per il blu
}
NeoPixel
Questa libreria funziona solo con i LED NeoPixel Ring, ma è meno impegnativa in termini di risorse e contiene solo l'essenziale. In linguaggio Arduino il programma si presenta così:
#include
Come nel caso precedente, si include la libreria e si dichiara l'oggetto lenta:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Dove 15 è il numero di elementi e 6 è l'uscita assegnata
Il lenta è inizializzato nel blocco di setup:
void setup() {
lenta.begin ()
}
Nel blocco di loop tutti gli elementi sono illuminati di rosso, una variabile viene passata al nastro e viene creato un ritardo di 1 secondo:
for (int y=0; y<15;y++)// 15 - numero di elementi nella lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
ritardo(1000);
La lenta smette di brillare di nero:
per (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
ritardo(1000);
Lezione video: esempi di effetti visivi utilizzando nastri indirizzabili.
Una volta che hai imparato a far lampeggiare i LED, puoi continuare a imparare come creare effetti di colore, compresi i popolari Rainbow e Northern Lights con transizioni morbide. Il WS2812B e i LED indirizzabili di Arduino forniscono possibilità quasi illimitate per questo.