Arduino: come usare led RGB NeoPixel

Impariamo ad usare i led RGB NeoPixel programmando Arduino.

In questo articolo trovi: cosa sono i led RGB NeoPixel, il programma software ed i collegamenti con Arduino.

Il mio caro amico Aldo sta costruendo una grotta, al cui interno metterà la natività. Vuole illuminare la scena con diversi colori ed ha comprato i led RGB NeoPixel pensando di poterli utilizzare come i normali led. Purtroppo per Aldo i led Neopixel sono particolari led RGB che vanno programmati con Arduino (o con un microprocessore a vostra scelta).


Come sono fatti i led RGB NeoPixel? 

NeoPixel e Arduino - vista ingrandita
NeoPixel e Arduino – vista ingrandita

Sono led RGB che al loro interno hanno un elettronica che permette di programmare i colori tramite un protocollo ad 1 bit. Usano 4 pin, due per l’alimentazione e due per la programmazione.

La loro particolarità è che con soli 4 pin possiamo accendere, con differenti colori uno per ogni led NeoPixel, più di 500 led contemporaneamente (frequenza di trasmissione dei dati 400kHz). L’unico limite sono le resistenze dei fili che portano l’alimentazione e la velocità con cui vogliamo cambiare i colori dei led.

Il produttore di questi led RGB è WorldSemi. Il modello di cui sto parlando è il WS2812B. Trovate il datasheet qui datasheet WS2812 . Sono led con corpo smd 5050, ed al loro interno hanno un regolatore di luminosità a corrente costante. Questo assicura un colore costante anche con differenti tensioni di alimentazione. Potreste trovare delle versioni precedenti che hanno 6 pin, ma il loro funzionamento di base non cambia.

Trovate qui una guida completa su led RGB Neopixel (inglese). Trovate un articolo che accenna progetti interessanti da realizzare sul sito italiano di Mauro Alfieri.


Come i led NeoPixel si utilizzano con Arduino? 

NeoPixel e Arduino - vista connessioni elettriche retro
NeoPixel e Arduino – vista connessioni elettriche retro

I NeoPixel hanno bisogno di essere programmati con una sequenza software, chiamata protocollo di trasmissione dei dati. E’ disponibile una libreria gratuita per Arduino chiamata “NeoPixel” che trovate nell’IDE di Arduino nel menu: FILE -> Esempi -> NeoPixel.  Se non la trovi devi scaricarla da qui scarica libreria NeoPixel e installarla nella directory/cartella “libraries” dove sono i file di Arduino (solitamente in documenti->Arduino->libraries).

Ora descrivo il caso specifico di un anello RGB con 24 led NeoPixel (NeoPixel Ring x24). L’anello ha dei fori con le scritte “GND”, “PWR +5V”, “Data Input” e “Data Output”. Un qualsiasi pin della scheda Arduino (DIGITAL PIN da 2 a 12) va collegato al foro chiamato “Data Input”. Tra il pin di Arduino e il foro “Data Input” il produttore consiglia di interporre una resistenza da 470 Ohm. Il filo che esce dal pin di Arduino va saldato nel foro.

Il negativo della batteria va collegato al pin GND di Arduino ed al foro sull’anello NeoPixel chiamato GND.

Il foro “PWR +5V” va collegato ad una alimentazione positiva che può andare da 3,5 a 5,3 Volt. Puoi utilizzare una batteria LiPo da 3,7 Volt (una sola cella); 3 batterie alcaline (quelle che non si ricaricano) per un totale di 4,5 Volt; 4 batterie NiMh ricaricabili; un alimentatore da presa. Il costruttore sconsiglia l’utilizzo di un alimentatore da laboratorio. E’ consigliato collegare tra il foro “GND” e il foro “PWR +5V” un condensatore elettrolitico da 1000 uF con tensione di lavoro minima di 6,3 Volt.


Quanto consumano i led RGB NeoPixel?

Un led NeoPixel ha al suo interno 3 led di colore Rosso, Verde e Blu. Questi led consumano ognuno 20 mA che moltiplicato per 3 fa 60 mA. Nel caso dovete alimentare 24 led NeoPixel, come nel mio caso, la corrente massima assorbita è di 24 per 60 mA che corrispondono a 1,44 Ampére. La scheda Arduino UNO può fornire un massimo di 0,5 Ampére di corrente per cui non è adatta per alimentare in modo diretto l’anello di led NeoPixel. Puoi alimentarne un massimo di 6/7 led NeoPixel.

Ipotizzando di alimentarli a 5 Volt la potenza dissipata è di 7,2 Watt.


Programma Arduino per il controllo dei led RGB NeoPixel 

Questo che metto qui è un semplice programma che ti serve per verificare che tutto funzioni a dovere. Il programma accende in sequenza i led del modulo NeoPixel dal primo all’ultimo  ogni mezzo secondo. Il primo colore generato è il rosso. Uno ad uno tutti i led si accenderanno di rosso. Poi di verde ed infine di blu in un ciclo senza fine.

/* 
 Programma per utilizzare un anello di 24 led RGB NeoPixel
 
 Puoi utilizzare un quasiasi pin di Arduino per la trasmissione dei dati
 di programmazione. E' consigliato interporre tra il pin di Arduino ed il
 "Data Input" del led una resistenza da 470 Ohm.
 */

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h>

// Quale pin di Arduino hai collegato al NeoPixels?
#define PIN            6

// Quanti led NeoPixel sono collegati ad Arduino?
#define NUMPIXELS      24

// NUMPIXELS è il numero di led che contiene il NeoPixel
// PIN è il pin di Arduino collegato al modulo NeoPixel
// NEO_GRB adotta la sequenza Verde -> Red -> Blu nella trasmissione dei dati
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // ritardo di mezzo secondo

void setup() {
  pixels.begin(); // Avvia il funzionamento del modulo NeoPixel.
}

void loop() {
  // il primo led del modulo NeoPixel più vicino al pin di Arduino è chiamato 0
  for(int i=0;i<NUMPIXELS;i++){
    // accende tutti i led di Rosso
    pixels.setPixelColor(i, pixels.Color(255,0,0)); // imposta il colore per ogni led.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
  for(int i=0;i<NUMPIXELS;i++){
    // accende tutti i led di Verde
    pixels.setPixelColor(i, pixels.Color(0,255,0)); //  imposta il colore per ogni led.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
 for(int i=0;i<NUMPIXELS;i++){
    // accende tutti i led di Blu
    pixels.setPixelColor(i, pixels.Color(0,0,255)); //  imposta il colore per ogni led.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(delayval); // Delay for a period of time (in milliseconds).
  }
}


Pubblicità

Autore dell'articolo: Lucio Sciamanna

Lascia un commento