Veilleuse de nuit Arduino et ws2812b

Veilleuse de nuit Arduino dispose de trois modes de fonctionnement qui peuvent être changés à l’aide d’un bouton tactile. Il est également possible de régler les effets lumineux dans chaque mode – modifier la luminosité de la bande adressable, jusqu’à l’extinction et modifier la vitesse de commutation ou de scintillement des LED. Le WS2812B est contrôlé par un Arduino Nano, cette carte, de par sa petite taille, s’intègre parfaitement dans n’importe quel boîtier.


Ce dont vous aurez besoin

  • Arduino Uno / Arduino Nano / Arduino Pro Mini
  • ruban adressable ws2812b
  • câble usb
  • boutons-poussoirs
  • résistance de 100 à 500 ohms
  • librairie Adafruit_NeoPixel.h

Matériel supplémentaire sur ce sujet:

  1. Guirlande sur Arduino et bande LED ws2812b
  2. Librairie Adafruit_NeoPixel.h: exemples d’effets
  3. Librairie FastLED.h Arduino: exemples d’effets

Lampe WS2812B de type veilleuse à base Arduino

Si vous avez la possibilité de découper la veilleuse Arduino sur une machine laser, vous pouvez télécharger la maquette sur notre site web. Vous pouvez utiliser votre propre lampe décorative pour ce projet en prévoyant un espace pour les boutons poussoir. Dans notre version, les boutons sont fixés au corps en contreplaqué avec de la colle thermofusible. La lampe peut être connectée via un câble USB à un chargeur de smartphone ou à un PC.

Le schéma de câblage de la lumière décorative est placé dans l’image ci-dessous. Les broches numériques 8, 10, 12 sont utilisées pour connecter les boutons au Arduino Pro Mini. La bande d’adresse LED est contrôlée à partir de la broche 4, qui est connectée au WS2812B via une résistance de 100 à 500 ohms. Les LED WS2812B permettent de réaliser de nombreux effets magnifiques qui ne sont pas possibles avec les bandes de LED classiques.

Schéma de câblage veilleuse de nuit Arduino

Schéma de câblage veilleuse de nuit Arduino
Schéma de câblage veilleuse de nuit avec Arduino

Le premier bouton (broche 8) est responsable de la modification de la luminosité de la lampe de nuit sur l’Arduino. Le deuxième bouton (broche 10) permet de modifier la teinte des LED. Le troisième bouton (broche 12) permet de changer les modes de fonctionnement de la veilleuse. Une fois le circuit assemblé, vous pouvez charger le programme dans le microcontrôleur. La bibliothèque Adafruit NeoPixel pour la bande ws2812b devra être installée pour le firmware.

Programme Arduino pour veilleuse de nuit avec ws2812b

#include "Adafruit_NeoPixel.h"

Adafruit_NeoPixel strip(15, 4, NEO_GRB + NEO_KHZ800);

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

byte w = 1;
byte d = 0;

byte r = 250;
byte g = 250;
byte b = 250;
byte brign = 30;
 
void setup() {
   pinMode(8, INPUT_PULLUP);
   pinMode(10, INPUT_PULLUP);
   pinMode(12, INPUT_PULLUP);

   strip.begin();
   strip.show();
   strip.setBrightness(brign);

   for (int i = 0; i <= r; i++) {
      for (int pix = 0; pix <= strip.numPixels(); pix++) {
         strip.setPixelColor(pix, strip.Color(i, i, i));
         strip.show();
         delay(1);
      }
   }
}

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

    // si le bouton 1 a été pressé, ajouter la luminosité
    if (button1WasUp && !button1IsUp) {
       delay(10);
       button1IsUp = digitalRead(8);
       if (!button1IsUp) { brign = brign + 30; if (brign > 150) { brign = 0; } }
    }
    button1WasUp = button1IsUp;

    // si le bouton 2 a été pressé, augmenter le délai
    if (button2WasUp && !button2IsUp) {
       delay(10);
       button2IsUp = digitalRead(10);
       if (!button2IsUp) { d = d + 30; if (d > 150) { d = 0; }
       }
    }
    button2WasUp = button2IsUp;

    // si le bouton 3 a été pressé, changer de mode
    if (button3WasUp && !button3IsUp) {
       delay(10);
       button3IsUp = digitalRead(12);
       if (!button3IsUp) { brign = 30; d = 30; w++; if (w > 3) {w = 1;} }
    }
    button3WasUp = button3IsUp;
}

void loop() {

   // ***** premier mode *****
   while (w == 1) {
     knopka();
     strip.setBrightness(brign);
     for (int pix = 0; pix <= strip.numPixels(); pix++) {
        strip.setPixelColor(pix, strip.Color(r, g, b));
        strip.show();
        delay(50);
     }
  }

  // ***** deuxième mode *****
  while (w == 2) {  
    for (uint32_t firstPixelHue = 0; firstPixelHue < 65536; firstPixelHue += 256) {
      knopka();
      strip.setBrightness(brign);
      for (int p = 0; p < strip.numPixels(); p++) {
         uint32_t pixelHue = firstPixelHue + (p * 65536L / strip.numPixels());
         strip.setPixelColor(p, strip.gamma32(strip.ColorHSV(pixelHue, 255)));
      }
      strip.show();
      delay(d);
    }
  }

  // ***** troisième mode *****
  while (w == 3) {
    for (int i = 50; i < 250; i++) {
      for (int p = 0; p <= strip.numPixels(); p++) {
        strip.setPixelColor(p, 0, 0, b * i / 250);
      }
      knopka();
      strip.setBrightness(brign);
      strip.show();
      delay(d);
    }

    for (int i = 250; i > 50; i--) {
      for (int p = 0; p <= strip.numPixels(); p++) {
        strip.setPixelColor(p, 0, 0, b * i / 250);
      }
      knopka();
      strip.setBrightness(brign);
      strip.show();
      delay(d);
    }
  }
}

Explication du code pour lampe LED de type veilleuse:

  1. les modes sont changés en utilisant une boucle while et en changeant la variable w. Si vous le souhaitez, vous pouvez ajouter vos propres modes de fonctionnement;
  2. les variables brign (luminosité) et d (retard) sont limitées, une fois la valeur maximale (150) atteinte, les variables sont remises à zéro.

Conclusion. Il est conseillé de tester le fonctionnement du luminaire avant d’assembler le boîtier. N’utilisez pas trop de LED dans le luminaire, car cela nécessiterait une alimentation séparée. Chaque LED RVB consomme 60 mA à sa luminosité maximale, c’est-à-dire que pour une alimentation de 1 A, vous ne devez pas connecter plus de 15 LED ws2812b. 15 LEDs consommeront 960mA = 60 x 15, donc un chargeur standard ou le port USB PC suffira.





Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.