Led RGB NeoPixel programmati con Arduino

Impariamo a programmare i led RGB NeoPixel con la scheda Arduino.

I led RGB NeoPixel sono particolari led a colori che devono essere programmati con un microprocessore. In questo articolo uso la scheda Arduino, che programmata opportunamente, permette di generare colori RGB con i led NeoPixel.

led RGB NeoPixel - ingrandimento
led RGB NeoPixel – ingrandimento

Gli utilizzi di questo led sono i più disparati: fra tutti creare effetti luminosi dinamici come riprodurre un video o un’immagine.

Essendo un led RGB, NeoPixel ti permette di creare teoricamente 16’777’215 possibili sfumature di colore.

NeoPixel è un led programmabile con 8 bit di risoluzione per ogni colore primario: Rosso, Verde e Blu.

Questo significa che per ogni colore posso variare l’intensità di luce da led spento a led acceso con 255 intensità intermedie.

Nell’articolo come usare i led RGB NeoPixel ho fatto una descrizione delle basi minime per usare questi led. Ora affronto in dettaglio il protocollo di comunicazione dei dati per capire a che velocità massima si possono usare questi led.

La velocità massima di scansione o refresh video è definita da un numero seguito da “fps”. Se trovate 30 fps significa: trenta immagini al secondo. Cioè ogni secondo vengono cambiate 30 immagini. Questo significa che ogni 33 mS vengono cambiati i colori di tutti i led che formano il video.

La velocità massima di trasmissione dei dati di programmazione dei led NeoPixel è di 800 kHz. Il led deve essere programmato inviando i bit che definiscono il colore. Per ogni colore ci servono 8 bit. Per i tre colori RGB ci servono 24 bit. Il tempo necessario a trasmette un bit, l’unità di informazione usata nei microprocessori, è di 1,25 uS. Questo significa che per trasmettere il colore che vogliamo far apparire su un led ci servono 24 bit x 1,25 uS = 30 uS.

Se vogliamo fare un refresh del video ogni 33 mS il massimo numero di led utilizzabili è 1’100.

Nell’ambiente di sviluppo di Arduino (l’IDE dove scrivete gli sketch/programmi) dovreste trovare la libreria “File -> Esempi -> NeoPixel”. Qui sono già pronti tre esempi interessanti:

– simple (accende tutti i led di un solo colore)

– buttoncycler (ogni volta che premete il pulsante i led formano dei giochi di colore diversi)

– strandtest (esegue gli stessi giochi di colori del programma buttoncycler ripetuti ciclicamente)

“Guardando” il file Adafruit_NeoPixel.cpp, che compone la libreria, scopriamo che le linee di programma sono state scritte direttamente in codice assembler. Tutti gli interrupt vengono disabilitati finchè non finisce la trasmissione dei dati.

Le porte del microprocessore utilizzabili sono la PortB e la PortD, per intenderci i pin che sulla scheda Arduino sono chiamati DIGITAL. Per cui con questa libreria non si possono utilizzare i pin ANALOG.

Le routine di scrittura dei dati sono “tarate” per i quarzi da 8MHz, 12MHz e 16MHz. La libreria funziona anche con Arduino DUE.


Le FASI di programmazione per usare i led sono:

il programma descritto è “file -> esempi -> NeoPixel -> simple”

– includere la libreria all’inizio del programma: “#include <Adafruit_NeoPixel.h>”

– scegliere il pin utilizzato per trasmettere i dati, nell’esempio il pin DIGITAL 2: “#define BUTTON_PIN   2”

– dichiarare quanti led NeoPixel si stanno utilizzando, nell’esempio sono sedici: “#define NUMPIXELS      16”

– creare l’istanza “pixels”, cioè attivare le funzioni di libreria: “Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);”

– nella funzione “setup” avviare la trasmissione dei dati: “pixels.begin();”

– nella funzione “loop” definire per ogni led, chiamato pixels, il colore che si vuole avere. Trovate come creare i colori qui tabella colori RGB.

– funzione che imposta il colore del led corrispondente al numero progressivo zero a partire dal primo led collegato al pin della scheda Arduino. In altre parole il led che è collegato al pin ha l’indirizzo 0: “pixels.setPixelColor(i, pixels.Color(0,150,0));” i = indirizzo del led,  Color(0, 255,0) colore verde come da tabella colori RGB.

– funzione che trasmette i dati e cambia i colori di tutti i led: “pixels.show();”


Esempio di tabella corrispondenza numeri RGB a colori 

led RGB NeoPixel - tabella colore
led RGB NeoPixel – tabella colore

Pubblicità

Autore dell'articolo: Lucio Sciamanna