Guirlande sur LED adressables WS2812B Arduino

Ghirlanda di Capodanno con LED indirizzabili ws2812b con le vostre mani – un interessante progetto sulla scheda Arduino Nano, che sarà in grado di soddisfarvi e sorprendere i vostri ospiti. In questa pagina abbiamo inserito uno schema dettagliato dell’assemblaggio del dispositivo, nonché un programma per il microcontrollore Arduino con la possibilità di controllare gli effetti luminosi sulla striscia LED indirizzabile ws2812b Arduino dai pulsanti.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • striscia LED WS2812B
  • pulsanti
  • resistenza da 100 a 500 ohm
  • cavi di collegamento
  • libreria FastLED.h

La striscia LED garland ws2812b consuma molta corrente. Se la scelta dell’alimentatore per la striscia LED indirizzabile dipende dalla tensione di alimentazione ws2812b (5 o 12 Volt). La corrente di alimentazione (Ampere) è influenzata dalla lunghezza del nastro e dalla densità dei LED, ad esempio 60 pezzi per metro. Considerando che un LED consuma 60 mA, rispettivamente 60 LED (un metro di nastro) richiedono una corrente di 3,6 Ampere.

Guirlande du Nouvel An sur LED WS2812B Arduino

Guirlande sur striscia LED WS2812B Arduino
Guirlande sur striscia LED WS2812B Arduino

L’immagine qui sopra mostra l’assemblaggio del circuito della guirlande di Natale ws2812b su un microcontrollore Arduino. I pulsanti sulla breadboard servono a configurare gli effetti luminosi: consentono di modificare i diversi effetti luminosi del ws2812b, nonché la luminosità dei LED e la velocità dei colori scintillanti. Dopo aver realizzato il progetto, è necessario scaricare e installare la libreria FastLED.h per controllare la striscia di indirizzi.

Programma Arduino per guirlande du Nouvel An sur ws2812b




#include "FastLED.h"

#define NUM_LEDS 100
#define PIN 4

byte bright = 50;
byte rate = 0;
byte w = 1;
byte baza = 0;

boolean button1WasUp = true;
boolean button2WasUp = true;
boolean button3WasUp = true;

CRGB leds[NUM_LEDS];

void setup() {
  pinMode(8, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  FastLED.addLeds <WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(bright);
}

void knopka () {
  boolean button1IsUp = digitalRead(8);
  boolean button2IsUp = digitalRead(10);
  boolean button3IsUp = digitalRead(12);

  if (button1WasUp && !button1IsUp) {
    delay(10);
    button1IsUp = digitalRead(8);
    if (!button1IsUp) { bright = bright + 50; if (bright > 250) { bright = 50; }
    }
  }
  button1WasUp = button1IsUp;

  if (button2WasUp && !button2IsUp) {
    delay(10);
    button2IsUp = digitalRead(10);
    if (!button2IsUp) { rate = rate + 10; if (rate > 50) { rate = 0; }
    }
  }
  button2WasUp = button2IsUp;

  if (button3WasUp && !button3IsUp) {
    delay(10);
    button3IsUp = digitalRead(12);
    if (!button3IsUp) { w++; if (w > 7) { w = 1; }
    }
  }
  button3WasUp = button3IsUp;
}

void loop() {

  while (w == 1) {
    knopka(); 
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = CHSV(baza+ i * 5, 255, 255);
    }
    baza++;
    FastLED.setBrightness(bright);
    FastLED.show();
    delay(50 - rate);
  }

  while (w == 2) {
    knopka();
    static uint8_t starthue = 0;
    fill_rainbow( leds + 5, NUM_LEDS - 5, --starthue, rate);
    uint8_t secs = (millis() / 1000) % (rate * 2);
    if (secs < rate) { FastLED.setTemperature( Tungsten100W ); leds[0] = Tungsten100W; }
    else { FastLED.setTemperature( OvercastSky ); leds[0] = OvercastSky; }
    FastLED.setBrightness(bright);
    FastLED.show();
  }

  while (w == 3) {
    knopka();
    fadeToBlackBy(leds, NUM_LEDS, (rate + 1) * 2);
    int pos = random16(NUM_LEDS);
    leds[pos] += CHSV(baza++ + random8(64), 200, 255);
    FastLED.setBrightness(bright);
    FastLED.show();
  }

  while (w == 4) {
    knopka();
    fadeToBlackBy(leds, NUM_LEDS, (rate + 1) * 2);
    int pos = beatsin16(13, 0, NUM_LEDS - 1);
    leds[pos] += CHSV(baza++, 255, 192);
    FastLED.setBrightness(bright);
    FastLED.show();
  }

  while (w == 5) {
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i].nscale8(250);
      }
    for (int i = 0; i < NUM_LEDS; i++) {
      knopka();
      leds[i] = CHSV(baza++, 255, 255);
      FastLED.setBrightness(bright);
      FastLED.show();
      delay(rate);
    }
  }

  while (w == 6) {
    knopka();
    fadeToBlackBy(leds, NUM_LEDS, (rate + 1) * 2);
    for (int i = 0; i < 8; i++) {
      leds[beatsin16(i + 7, 0, NUM_LEDS - 1)] |= CHSV(baza+=16, 200, 255);
    }
    FastLED.setBrightness(bright);
    FastLED.show();
    delay(10);
  }

  while (w == 7) {
    knopka();
    fill_rainbow( leds, NUM_LEDS, baza++, 7);
    if (random8() < 80) { leds[ random16(NUM_LEDS) ] += CRGB::White; }
    FastLED.setBrightness(bright);
    FastLED.show();
    delay(50 - rate);
  }
}

Spiegazione del codice per guirlande du Nouvel An sur LED ws2812b:



  1. è possibile collegare un solo pulsante nel circuito per commutare le modalità della ghirlanda natalizia (pin 12), e il valore di luminosità e la velocità degli effetti di velocità sono impostati di default all’inizio del programma.

Conclusione. Una ghirlanda di striscia LED indirizzabili ws2812b Arduino con le proprie mani può avere diversi effetti di illuminazione. Per controllare la ghirlanda potete utilizzare la libreria Adafruit_NeoPixel.h, che serve a collegare una matrice di LED indirizzabili ws2812b al microcontrollore Arduino Uno / Arduino Nano. Se avete domande sulla costruzione o sulla programmazione di questo progetto, lasciatele nei commenti a questo post.

5/5 - (1 vote)


Lascia un commento

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

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