Maîtriser le contrôle des LEDs WS2812B avec Arduino – Guide complet
Dans ce tutoriel, nous allons apprendre à contrôler des LEDs RGB adressables individuellement ou un ruban de LEDs WS2812B à l'aide d'Arduino. Vous pouvez regarder la vidéo suivante ou lire le tutoriel écrit ci-dessous pour plus de détails. Nous expliquerons d'abord le principe de fonctionnement à travers quelques exemples de base, puis nous examinerons un projet Arduino vraiment sympa utilisant ces LEDs : une table basse interactive à LEDs DIY. Cette table intègre des LEDs WS2812B, des capteurs de proximité infrarouges pour détecter les objets, et un module Bluetooth HC-05 pour contrôler les couleurs via une application Android personnalisée. Ce projet est une collaboration entre moi et Marija de la chaîne YouTube Creativity Hero. Examinons de plus près le ruban de LEDs. Il est composé de LEDs RGB de type 5050 dans lesquelles le circuit de pilotage WS2812B, très compact, est intégré. Selon l'intensité des trois LEDs individuelles Rouge, Vert et Bleu, nous pouvons simuler n'importe quelle couleur. Ce qui est génial avec ces LEDs, c'est qu'on peut contrôler tout le ruban avec une seule broche de l'Arduino. Chaque LED a trois connecteurs à chaque extrémité : deux pour l'alimentation et un pour les données. La flèche indique le sens de circulation des données. La sortie de données de la LED précédente est connectée à l'entrée de données de la suivante. On peut couper le ruban à la taille voulue, ainsi qu'espacer les LEDs avec des fils. Côté alimentation, elles fonctionnent en 5V et chaque LED Rouge, Vert, Bleu consomme environ 20mA, soit 60mA par LED à pleine luminosité. Notez que quand l'Arduino est alimenté via USB, la broche 5V ne peut fournir qu'environ 400mA, et avec le connecteur d'alimentation (barrel jack), environ 900mA. Si vous utilisez plus de LEDs et que le courant total dépasse ces limites, vous devez utiliser une alimentation 5V séparée. Dans ce cas, il faut aussi relier les deux masses (GND) ensemble. De plus, il est recommandé d'utiliser une résistance d'environ 330Ω entre l'Arduino et la broche de données du ruban pour réduire le bruit, ainsi qu'un condensateur d'environ 100µF entre le 5V et la masse pour lisser l'alimentation. Comme exemple, j'utiliserai un ruban de 20 LEDs, connecté à l'Arduino via une résistance de 330Ω et alimenté par une alimentation 5V séparée, comme expliqué ci-dessus. Pour programmer l'Arduino, nous utiliserons la bibliothèque FastLED, excellente et bien documentée, qui permet un contrôle facile des LEDs WS2812B. Vous pouvez vous procurer les composants nécessaires pour cet exemple via les liens ci-dessous : Description : On inclut la bibliothèque FastLED, on définit la broche de données du ruban, le nombre de LEDs, et un tableau de type CRGB. Ce type contient les LEDs avec trois octets pour chaque canal de couleur Rouge, Vert, Bleu. Dans le setup, on initialise FastLED avec les paramètres définis. Dans la boucle loop, on contrôle les LEDs comme on veut. Avec la fonction CRGB, on définit la couleur de n'importe quelle LED avec trois paramètres RVB. Pour appliquer le changement sur les LEDs, il faut appeler FastLED.show(). Avec des boucles "for", on peut facilement créer des animations. La première boucle "for" allume les 20 LEDs en bleu, de la première à la dernière, avec 40ms de délai. La seconde boucle rallume les 20 LEDs en rouge, mais dans l'ordre inverse, de la dernière vers la première. La bibliothèque FastLED offre de nombreuses autres fonctions pour créer des animations et des shows lumineux vraiment intéressants. C'est à votre imagination de faire briller votre prochain projet LED. Regardons maintenant le projet de table basse interactive à LEDs mentionné au début. C'était une collaboration entre moi et Marija de Creativity Hero. Vous pouvez consulter son article où elle explique tout le processus de fabrication de la table, depuis la découpe et l'assemblage de la structure en bois jusqu'au soudage et à la connexion de toute l'électronique. Ici, j'expliquerai le fonctionnement de la partie électronique, comment construire l'application Android personnalisée et programmer l'Arduino. Voici le schéma électrique complet de ce projet. La table comprend 45 LEDs adressables, 45 capteurs de proximité infrarouges et un module Bluetooth HC-05, tous connectés à un Arduino Mega. Le circuit est alimenté par une alimentation 5V 6A. Vous pouvez vous procurer les composants nécessaires via les liens ci-dessous : Lien connexe : Comment utiliser une LED RGB avec Arduino | Tutoriel Voici le code Arduino pour ce projet. Si on exclut la fonctionnalité de contrôle des couleurs par Bluetooth, on voit que le code est en fait très simple. Description : On définit les paramètres de base comme expliqué plus haut et on configure les 45 broches des capteurs de proximité en entrées. Dans la boucle principale, avec une seule boucle "for", on met toutes les LEDs à une couleur de fond, et on vérifie si le capteur de proximité a détecté un objet. Si c'est vrai (état LOW dans ce cas), la couleur réactive est appliquée à la LED correspondante. À la fin, FastLED.show() met à jour les couleurs. Pour inclure le contrôle des couleurs par Bluetooth, il faut ajouter quelques lignes de code et créer l'application Android. J'ai déjà des tutoriels séparés sur l'utilisation du module HC-05 avec Arduino et sur la création d'applications Android avec MIT App Inventor, vous pouvez les consulter pour plus de détails. Voici comment fonctionne l'application Android. Elle comprend une palette de couleurs d'où on peut choisir des couleurs, deux cases à cocher pour sélectionner si la couleur choisie s'applique aux LEDs réactives ou aux LEDs de fond, et un curseur pour régler la luminosité. Si on regarde les blocs de l'application, on voit ce qui se passe quand on touche le canevas où est placée l'image de la palette. Avec les blocs .GetPixelColor, on récupère les valeurs Rouge, Vert, Bleu de la couleur choisie, et avec le bloc Bluetooth SendText, on envoie cette information à l'Arduino sous forme de texte. Selon la case cochée, on envoie un premier caractère différent (marqueur) qui aide à identifier la commande à la réception côté Arduino. La même chose se produit quand on bouge le curseur : une valeur de 10 à 100 est envoyée sous forme de texte, avec le marqueur "3" devant. Vous pouvez télécharger l'application Android ci-dessous, ainsi que le fichier de projet MIT App Inventor : Description : On définit d'abord la communication série entre l'Arduino et le module HC-05 (broches RX/TX). Dans le setup, on règle le baud rate du module. Dans la boucle loop, avec Bluetooth.available() on vérifie s'il y a des données entrantes du smartphone. Si oui, avec Bluetooth.readString() on reçoit les données sous forme de chaîne. Avec .startsWith() on vérifie le premier caractère (marqueur) pour savoir si on veut changer la couleur réactive, la couleur de fond ou la luminosité. Avec .substring() on extrait les valeurs RVB du texte reçu et on les convertit en entiers. Ces valeurs sont utilisées dans la boucle "for" qui définit les couleurs et allume les LEDs comme expliqué plus haut. De la même façon, on ajuste la luminosité. C'est tout pour ce tutoriel. N'hésitez pas à poser vos questions dans les commentaires ci-dessous.Vue d'ensemble

Fonctionnement des LEDs WS2812B



Exemples Arduino et LEDs WS2812B
Exemple 1

Code Arduino pour le premier exemple :
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
leds[0] = CRGB(255, 0, 0); FastLED.show(); delay(500);
leds[1] = CRGB(0, 255, 0); FastLED.show(); delay(500);
leds[2] = CRGB(0, 0, 255); FastLED.show(); delay(500);
leds[5] = CRGB(150, 0, 255); FastLED.show(); delay(500);
leds[9] = CRGB(255, 200, 20); FastLED.show(); delay(500);
leds[14] = CRGB(85, 60, 180); FastLED.show(); delay(500);
leds[19] = CRGB(50, 255, 20); FastLED.show(); delay(500);
}Exemple 2

Code Arduino pour le second exemple :
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
for (int i = 0; i <= 19; i++) {
leds[i] = CRGB(0, 0, 255); FastLED.show(); delay(40);
}
for (int i = 19; i >= 0; i--) {
leds[i] = CRGB(255, 0, 0); FastLED.show(); delay(40);
}
}Table basse interactive à LEDs avec les WS2812B


Codes sources
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(brightness);
// Définir les 45 broches des capteurs de proximité comme entrées, de la broche 3 à 48
for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
pinMode(pinNo, INPUT);
}
}
void loop() {
for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
leds[pinNo] = CRGB(0, 255, 0); // Mettre toutes les LEDs en vert
// Si un objet est détecté sur le capteur correspondant, allumer la LED réactive
if (digitalRead(pinNo + 3) == LOW) {
leds[pinNo] = CRGB(0, 0, 255); // LED réactive en bleu
}
}
FastLED.show(); // Mettre à jour les LEDs
delay(20);
}

DIY_Reactive_LED_Table_Control
1 fichier(s) 0.00 KB Télécharger
DIY_Reactive_LED_Table_Control Fichier projet MIT App Inventor
1 fichier(s) 208.06 KB Télécharger
Code Arduino avec Bluetooth :
#include <SoftwareSerial.h>
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
SoftwareSerial Bluetooth(53, 52); // Arduino(RX, TX) - Bluetooth (TX, RX)
// Couleur de fond initiale
int backR = 100, backG = 50, backB = 10;
// Couleur réactive initiale
int reactiveR = 10, reactiveG = 50, reactiveB = 100;
int brightness = 50; // Luminosité initiale
String dataIn = "";
void setup() {
FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(brightness);
Serial.begin(38400);
Bluetooth.begin(38400); // Baud rate par défaut du module Bluetooth
for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
pinMode(pinNo, INPUT);
}
}
void loop() {
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.readString(); delay(20);
if (dataIn.startsWith("1")) { // Couleur réactive
delay(10);
String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
reactiveR = stringR.toInt();
String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
reactiveG = stringG.toInt();
String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
reactiveB = stringB.toInt();
} else if (dataIn.startsWith("2")) { // Couleur de fond
String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
backR = stringR.toInt();
String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
backG = stringG.toInt();
String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
backB = stringB.toInt();
} else if (dataIn.startsWith("3")) { // Luminosité
String stringBrightness = dataIn.substring(dataIn.indexOf("3") + 1, dataIn.length());
brightness = stringBrightness.toInt();
FastLED.setBrightness(brightness);
}
}
for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
leds[pinNo] = CRGB(backR, backG, backB);
if (digitalRead(pinNo + 3) == LOW) {
leds[pinNo] = CRGB(reactiveR, reactiveG, reactiveB);
}
}
FastLED.show(); delay(20);
}
Processus de fabrication
- Construire une télécommande IR universelle avec Arduino : Guide étape par étape
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Centre de contrôle d'alimentation Arduino : N-FET, P-FET, Relais et RTC
- Contrôle IoT à Distance d'un Bras Robotique Personnalisé avec Arduino MKR1000
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Contrôlez un rover Arduino avec Firmata et une manette Xbox One
- Mesurer la masse de la Terre avec Arduino : Guide DIY étape par étape
- Construire un robot quadrupède Arduino intelligent : guide étape par étape
- Construire une Boussole Numérique Temps Réel avec Arduino et Processing