«

»

Ago 03

Stampa Articolo

NeoPixel Ring 16 WS2812

Hai già letto un mio articolo dedicato ai NeoPixel ed alcuni progetti già realizzati è ora di capire come puoi usare un NeoPixel Ring 16 WS2812 per i tuoi progetti ed idee di design

neopixel ring 16 WS2812 RGB Led

Il primo passo è procurarti un anello di led di tipo NeoPixel Ring 16 WS2812 che ti servirà per iniziare il tuo prossimo progetto luminoso.

Come si collega il NeoPixel Ring 16 WS2812

Il numero di cavi necessari per un singolo anello è tre:

  • Alimentazione +5v
  • Ground o negativo
  • Segale In

Nello schema seguente è indicato non solo come collegare il primo NeoPixel Ring 16 WS2812 ma anche un secondo anello in cascata al primo sfruttando l’OUT del primo anello verso l’IN del secondo.

led NeoPixels Ring 16 WS2812 diagram

Nel mio primo esperimento ho deciso di utilizzare un Arduino Uno per collegare i neo pixel e testare la libreria rilasciata da Adafruit per il controllo dei led con chip WS2812.

Ho scelto il pin 6 come vedi in questa foto:

NeoPixelRing WS2812 Collegamenti

La libreria Adafruit_NeoPixel

Adafruit distribuisce diverse versioni di NeoPixel e rilascia molta documentazione a riguardo, oltre alla libreria che puoi scaricare da questo link: Adafruit_NeoPixel e che contiene oltre alla libreria alcuni semplici esempi da provare subito con i tuoi led WS2812.

Il primo esempio che ho provato è simple.ino che trovi nella dir Adafruit_NeoPixel/examples/simple/simple.ino

Lo sketch simple.ino

ecco come si presenta lo sketch una volta caricato nell’IDE Arduino:

// 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>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      16

// When we setup the NeoPixel library, we tell it how many pixels, 
// and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change 
// the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // delay for half a second

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines 
  // if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code

  pixels.begin(); // This initializes the NeoPixel library.
}

void loop() {

  // For a set of NeoPixels the first NeoPixel is 0, second is 1,
  // all the way up to the count of pixels minus one.

  for(int i=0;i<NUMPIXELS;i++){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.

    pixels.show(); // This sends the updated pixel color to the hardware.

    delay(delayval); // Delay for a period of time (in milliseconds).

  }
}

iniziando dalla linea 05: includi la libreria Adafruit NeoPixel che ti offre le funzioni che ti serviranno per controllare i led;

linee 06-08: se sei su un sistema che fa uso delle AVR inclidi la libreria avr/power.h, ti ascio approfondire in sede adeguata a cosa serve la power.h, non la tratterò in questo articolo;

linea 12: definisci il pin a cui hai connesso l’anello, nel mio esempio ho scelto il pin 6 come nell’esempio;

linea 15: definisci il valore della costante NUMPIXEL che dice allo sketch il numero dei led di cui è formato il tuo progetto, in questo esempio ho usato un NeoPixel Ring 16 WS2812 in cui il numero 16 indica il numero esatto di led di cui l’anello è composto.

linea 22: inizializza la classe Adafruit_NeoPixel passandole il numero di led, il pin a cui è connesso l’anello di neopixel ed un parametro che indica alla libreria come comunicare con la striscia/anello led;

linea 24: definisci l’intervallo di delay;

linee 26-35: l’unica linea valida in questo esempio è la linea 34 il cui compito è dare inizio all’oggetto pixels creato come istanza della classe Adafruit_NeoPixel alla linea 22;

linea 42: definisci un ciclo da 0 al numero massimo di pixel definiti;

linea 45: per ciascun pixel dell’anello usa il metodo setPixelColor a cui devi indicare il led su cui vuoi agire ed il codice colore da inviare, per inviare il corretto codice colore la libreria Adafruit ti mette a disposizione il metodo Color a cui passi i valori di R,G e B in 255esimi ossia da 0 a 255 con 255 valore massimo;

linea 47: usa il metodo show dell’istanza pixels per visualizzare quanto impostato;

linea 49: per ciascun ciclo for attendi un tempo pari a delayval impostato in precedenza

Al termine dell’invio su arduino e avvio dello sketch se tutto è andato a buon fine ed hai collegato bene il tuo NeoPixel Ring 16 WS2812 dovresti ottenere una immagine simile alla seguente:

NeoPixel Ring 16 WS2812 simple examples

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/neopixel-ring-16-ws2812.html

4 comments

Vai al modulo dei commenti

  1. Marco

    Ciao,
    volevo segnalarti, in caso non lo conoscessi, questo sito dove è possibile scaricare un software per gestire molti effetti

    http://www.solderlab.de/index.php/software/glediator

    Saluti

    1. Mauro Alfieri

      Ciao Marco,
      grazie per la segnalazione, non lo conoscevo.
      Tu hai già realizzato qualcosa con questo sw ? Se hai realizzato un video tutorial su come installarlo,usarlo e qualche effetto demo su matrici di led inviami il link, solo se ne sei l’autore e proprietario ) ti scrivo un articolo di presentazione.

      1. Marco

        Ciao,
        sto aspettando le matrici 8×8 per poter effettuare alcuni esperimenti, appena ho qualcosa ti faccio sapere

        1. Mauro Alfieri

          Ottimo Marco !!!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>