Libreria NeoPixel? un valido aiuto per Arduino e le strisce di led RGB

Tempo di lettura: 6 minuti

Benvenuti su 9minuti, oggi vediamo come utilizzare la libreria NeoPixel di Adafruit in accoppiata con uno stick da otto led RGB.

Per installare una libreria ci sono tre modi, se non l’hai mai fatto ti consiglio una lettura.

Questi stick, come anche gli anelli RGB, da nuovi non hanno nessun cavetto collegato, quindi dovrà essere vostra premura saldarci sopra alcuni cavetti.

Arduino e lo stick a otto led RGB in funzione con la libreria NeoPixel

Arduino e lo stick a otto led RGB in funzione con la libreria NeoPixel

La guida è valida sia per gli stick che per gli anelli RGB, in quanto il funzionamento è il medesimo e differiscono solo nella forma e nel numero di led.

 

Vediamo i collegamenti necessari.

Arduino Uno r3 e lo stick da 8 led rgb (libreria NeoPixel)

Arduino Uno r3 e lo stick da 8 led rgb

 

L'articolo più letto...


Alessandro Barbero Time line 1024

Il primo sketch con la libreria NeoPixel

Vediamo insieme uno degli sketch esempio fornito da Adafruit per la libreria NeoPixel e modificato dove necessario per farlo funzionare con lo stick ad otto bit.

Questo sketch illumina quattro led per volta e li fa scorrere lungo le otto posizioni disponibili, cambia colore non appena quello precedente è giunto alla fine. Vediamo il codice riga per riga.

12 – Includiamo la libreria di Adafruit NeoPixel
14 – A quale pin di Arduino abbiamo attaccato il cavetto che porta a DI (D Input)? Scriviamolo accanto a PIN
15 – Quanti led ha la nostra striscia o il nostro anello? Scriviamolo accanto a N_LEDS
17 – Creiamo un oggetto chiamato strip di tipo Adafruit_NeoPixel. Come potete vedere, nella funzione a destra vengono passati i parametri inseriti nelle righe 14 e 15.
20 – Richiamiamo il metodo begin() dell’oggetto strip. Questo è molto simile a quando si dichiara un pin come ad esempio: pinMode(4, INPUT)
24 – Richiamiamo la procedura chase() presente in fondo allo sketch e gli passiamo come parametro il metodo Color() dell’oggetto strip. Al metodo Color() passiamo come parametri tre numeri che vanno da 0 a 255. Nel nostro caso siccome vogliamo il rosso la combinazione è 255, 0, 0.
25, 26 – Idem con verde e blu.
29 – Dichiarazione della procedura chase() di tipo void (ovviamente, altrimenti non sarebbe una procedura).
Static significa che quella procedura non potrà essere usata al di fuori di quel file, non è il nostro caso ma è bene saperlo.
Il parametro che viene passato è di tipo uint32_t e si chiama c.
uint32_t è un tipo di intero che occupa sempre 32 bit.
30 – Nel corpo della funzione troviamo un ciclo for. Questo significa che eseguirà le righe comprese tra la 31 e la 34 tante volte quanto il numero totale dei nostri led RGB.
uint16_t è un un intero a 16 bit.
strip.numPixel() è un metodo dell’oggetto strip che ci restituisce il numero di led RGB utilizzati. Nel ciclo for, al fine di avere un determinato effetto, è stato incrementato di 4. Come vedremo nel video, i led RGB che si accenderanno contemporaneamente saranno appunto 4.
31 – Il metodo setPixelColor() dell’oggetto strip accende e spegne i led RGB a seconda dei parametri che gli vengono passati. Il primo parametro è la posizione del led RGB, se noi abbiamo otto led ci saranno otto posizioni: da 0 a 7. Nel nostro caso la posizione verrà incrementata in maniera automatica mentre il colore gli verrà passato dal metodo Color() presente nel loop()
32 – Qua il metodo setPixelColor() spegne i led RGB di quattro posizioni indietro. Come potete vedere il secondo parametro è 0 che in informatica equivale, per convenzione, a spento.
33 – Il metodo show() dell’oggetto strip serve a rendere i cambiamenti effettivi, senza questa riga non vedremmo nulla.
34 – Piccolissimo delay di 25 millisecondi tra l’esecuzione dei cicli del for.

Di seguito un breve video che riprende, in ordine, gli effetti dei tre sketch.

Vediamo ora un secondo esempio con la libreria NeoPixel

Questo sketch è basato sul precedente ma l’ho ulteriormente personalizzato, aggiungendo altri colori e semplificando, a mio parere, la comprensione del codice, pulendolo e rendendolo più semplice da integrare con i propri progetti. Lo sketch in questione illumina un led di un colore e lo fa scorrere per tutti gli otto led. Una volta arrivato in fondo parte il secondo colore e così via.

10 – 16 Dichiarazione di variabili di tipo uint32_t e inizializzazione con i valori di ritorno del metodo Color() dell’oggetto strip.
21 – Il metodo show() dovrebbe inizializzare tutti i led come spenti, in questo modo se dovessero esserci dei led rimasti accesi da un precedente sketch questo metodo li spegne.
22 – Il metodo setBrightness() è autoesplicativo, è possibile regolare la luminosità dei led dando come parametro un valore da 30 a 255.
Non è possibile utilizzare questo modo all’interno del loop() ma solamente nel setup(), questo significa che la luminosità è regolabile solo all’inizio.
26 – 32 Come potete vedere il loop() è molto pulito. Richiamiamo diverse volte la funzione chase() dando come parametri le nostre variabili dichiarate a inizio sketch.
35 – 40 La funzione chase() è praticamente identica a quella del precedente sketch, differisce solamente nel numero di led accesi contemporaneamente, in questo caso solamente uno.

 

Terzo ed ultimo esempio con la libreria NeoPixel

Ho voluto in questo sketch indicare come accendere staticamente gli otto led per ottenere, come in questo caso, una bandiera. Vediamolo riga per riga. Non mi soffermerò nei punti precedentemente spiegati.

29 – 30 Utilizzo del metodo setPixelColor() dell’oggetto strip. Il metodo riceve due parametri, la posizione del led e il colore.
42 – 51 Se togliamo il commento a queste linee la bandiera dell’Italia lampeggerà ogni secondo.

 

Più di uno stick / ring? Nessun problema con la libreria NeoPixel

E se volessimo collegare più led come nel video qui sotto? Basta collegare a DO del primo stick o ring, il DI del secondo e così via, come nell’immagine. Da notare che nel video c’è un anello in più, il quale è collegato all’anello precedente nell’identica maniera.

Arduino, uno stick da 8 led e un anello da (Libreria NeoPixel)

Arduino, uno stick da 8 led e un anello da 12

Da notare che nel video c’è un anello in più, il quale è collegato all’anello precedente nell’identica maniera.

 

Attenzione all’alimentazione!

A proposito dell’alimentazione possiamo dire che, finché i led accesi contemporaneamente sono otto o meno, è sufficiente l’alimentazione di Arduino, superato questo numero è consigliabile utilizzare un’alimentazione esterna per i led ed utilizzare Arduino solamente come microcontrollore.

 

Spero che anche questo tutorial sia stato d’aiuto a qualcuno, rimango disponibile per qualsivoglia aiuto.

Grazie,
Alessandro

Alessandro

Alessandro è un milanese che vorrebbe scappare da Milano, è appassionato di informatica ma vorrebbe vivere senza telefono, è un artigiano eppure vorrebbe robotizzare tutto, impara una cosa e già vorrebbe studiare dell’altro. Autodidatta da sempre, gli piace sbattere la testa finché tutto non funziona come vuole lui, spesso ci riesce anche! Il motto che si ripete dentro la testa è: “Se ci sono riusciti gli altri ci posso riuscire anche io”.

Potrebbero interessarti anche...

2
Lascia una recensione

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Alessandroyupu79 Recent comment authors

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

  Subscribe  
più nuovi più vecchi più votati
Notificami
yupu79
Ospite
yupu79

Bel lavoro Alessandro. Io ho da poco assemblato una scheda con 140 Neopixel ma sfortunatamente con un semplice programmino che me li fa accendere in sequenza mi sono accorto che rispondono male accendendosi in maniera random o addirittura molti sono spenti.Spero di poter risolvere questo intoppo in modo da poter avanzare con il mio reale progetto. Potresti darmi qualche dritta? Grazie

Scroll Up