Arduino: Led strip con led indirizzabili e libreria NeoPixel

Ciao a tutti!
questo Natale il mio albero si è colorato in modo un po' particolare..



"L'upgrade" all'albero è arrivato da Arduino e da una striscia a led un po' speciale, infatti ho utilizzato i led WS2812B, si trovano anche su ebay a circa 20 euro al metro.
Questi led possono essere programmati singolarmente, quindi ogni singolo led può avere un colore diverso, a differenza delle strisce tradizionali dove tutti i led devono avere lo stesso colore.
Il risultato dal vivo è davvero fantastico e può essere usato per illuminare qualunque cosa voi immaginiate.



Utilizzando la libreria "NeoPixel" creata da Adafruit è possibile controllare facilmente questi fantastici led, inoltre sono presenti dei fantastici esempi tra i quali quello dell'effetto che ho utilizzato per il mio albero:



Ecco lo sketch di esempio che ho utilizzato:

  1. #include <Adafruit_NeoPixel.h>
  2. #define PIN 6
  3. // Parameter 1 = number of pixels in strip
  4. // Parameter 2 = pin number (most are valid)
  5. // Parameter 3 = pixel type flags, add together as needed:
  6. //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
  7. //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
  8. //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
  9. //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
  10. Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ400);
  11. void setup() {
  12.   strip.begin();
  13.   strip.show(); // Initialize all pixels to 'off'
  14. }
  15. void loop() {
  16.   // Some example procedures showing how to display to the pixels:
  17.   //colorWipe(strip.Color(255, 0, 0), 50); // Red
  18.   //colorWipe(strip.Color(0, 255, 0), 50); // Green
  19.   //colorWipe(strip.Color(0, 0, 255), 50); // Blue
  20.   rainbow(20);
  21.   rainbowCycle(20);
  22. }
  23. // Fill the dots one after the other with a color
  24. void colorWipe(uint32_t c, uint8_t wait) {
  25.   for(uint16_t i=0; i<strip.numPixels(); i++) {
  26.       strip.setPixelColor(i, c);
  27.       strip.show();
  28.       delay(wait);
  29.   }
  30. }
  31. void rainbow(uint8_t wait) {
  32.   uint16_t i, j;
  33.   for(j=0; j<256; j++) {
  34.     for(i=0; i<strip.numPixels(); i++) {
  35.       strip.setPixelColor(i, Wheel((i+j) & 255));
  36.     }
  37.     strip.show();
  38.     delay(wait);
  39.   }
  40. }
  41. // Slightly different, this makes the rainbow equally distributed throughout
  42. void rainbowCycle(uint8_t wait) {
  43.   uint16_t i, j;
  44.   for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
  45.     for(i=0; i< strip.numPixels(); i++) {
  46.       strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
  47.     }
  48.     strip.show();
  49.     delay(wait);
  50.   }
  51. }
  52. // Input a value 0 to 255 to get a color value.
  53. // The colours are a transition r - g - b - back to r.
  54. uint32_t Wheel(byte WheelPos) {
  55.   if(WheelPos < 85) {
  56.    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  57.   } else if(WheelPos < 170) {
  58.    WheelPos -= 85;
  59.    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  60.   } else {
  61.    WheelPos -= 170;
  62.    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  63.   }
  64. }

Se invece volete creare qualcosa con le vostre mani dovete capire il funzionamento di questa libreria, per rendere più chiaro il tutto ho scritto questo piccolo codice.
Quello che faremo è accendere i primi 3 led della striscia, il primo di rosso il secondo verde e il terzo blu.
ecco lo sketch:

  1. #include <Adafruit_NeoPixel.h>
  2. #define PIN 6
  3. // Parameter 1 = number of pixels in strip
  4. // Parameter 2 = pin number (most are valid)
  5. // Parameter 3 = pixel type flags, add together as needed:
  6. //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
  7. //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
  8. //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
  9. //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
  10. Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
  11. void setup() {
  12.   strip.begin();
  13.   strip.show(); // Initialize all pixels to 'off'
  14. }
  15. void loop() {
  16.   strip.setPixelColor(0, 255, 0, 0);
  17.   strip.setPixelColor(1, 0, 255, 0);
  18.   strip.setPixelColor(2, 0, 0, 255);
  19.   strip.show();
  20.   delay(10);
  21. }

Come potete vedere è molto semplice, dopo la configurazione iniziale e l'inizializzazione, nel loop trovare il vero e proprio comando dei led.
se analizzate la prima riga del loop "strip.setPixelColor(1, 255, 0, 0);" vedrete che i numeri tra le parentesi sono 4.
Il primo numero indica il led che voglio comandare (si parte da 0), il secondo la "quantità" di colore rosso, il terzo la quantità di verde e il quarto la quantità di blu.

ed ecco la foto del risultato:


Infine metto anche lo schema elettrico, è molto semplice, però vi serve un buon alimentatore da 5volt e la corrente che fornisce deve essere almeno 0.06 Ampere per led.
Quindi nel mio caso, con una striscia di un metro da 60 led vi serve un alimentatore da 5 volt e minimo 3.6 Ampere.

Questo è tutto, vi lascio divertire con questi fantastici led, Ciao!

Segui Daniele Alberti su Google+ e su Twitter!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...