Led Wars : La Revanche du Ruban de LED

Présentation

L’objectif est de réaliser divers animation avec un ruban de LED RGB .

Matériel Nécessaire

– Un ruban de LED de référence WS2811B SMD5050, de 150 LED, de 5
mètres de long à un prix d’environ 19 €.

La  LED RGB WS2812 utiliser sur le ruban de LED à une capacité de 16
777 216 couleurs affichable grâce au 3 leds (Rouge, Vert, Bleu) et
256 niveau de luminosités. Elle sont piloter numériquement à l’aide
d’un seul fil.

Par ailleurs 3 LED : rouge, vert, bleu et un contrôleur numérique qui
les pilotes sont intégrées dans la LED RGB WS2812.

– Une alimentation de puissance 50W, de tension 5V et de courant 10A
par exemple la MeanWell RS-50-5 d’un prix d’environ 15 €

– Un Arduino Uno d’un prix d’environ 20 €

– Un ancienne alimentation de PC enlevée de sa carte électronique

– Un cordon d’alimentation de PC

– Un câble USB pour connecter l’Arduino et le PC

– Un cordon d’alimentation pour alimenter l’Arduino

– Un cordon permettant de connecter le ruban de led à l’alimentation
et l’Arduino

Outillage nécessaire

– Un tournevis cruciforme

Câblage

Il existe deux configuration possible :

– Câblage en fonctionnement autonome, utiliser lors de l’usage normale
du Ruban de LED RGB
– Câblage connecter à l’ordinateur, utiliser pour développez le
programme sur l’IDE Arduino

Câblage en fonctionnement autonome

En mode autonome, l’Arduino est indépendant et utilise la même
alimentation que le ruban de LED RGB.

L’alimentation 230 V vers 5 V est intégré dans le boîtier d’une ancienne
alimentation de PC.

Le fil ou transite les donnée numérique pour piloter les LEDS du ruban
de LED RGB est branchée sur l’entrée 6 de l’Arduino. Il faudra
configurer la même entrée durant la phase de développement du programme.

Câblage en mode de connection avec le PC

En mode de connection avec le PC, l’Arduino utilise l’alimentation du PC
et sont programme peut être mis à jour.

Développement du programme

Pour développer le programme gérant l’animation du ruban de led vous
devez avoir deux chose : l’IDE Arduino ainsi que la bibliothèque
Adafruit NeoPixel.

Installation de l’éditeur Arduino

 Sous Debian

Pour installe l’IDE Arduino sous Debian GNU/Linux, ouvrer un terminale,
loguer vous en root :

$ su

Puis installer le paquet Arduino avec l’utilitaire `apt` via la commande
:

# apt-get install arduino

 Sous Windows

Rendez-vous sur la page de téléchargement de l’éditeur de programme Arduino.

Puis cliquer sur Windows Installer pour télécharger le programme
d’installation.

Une fois télécharger vous n’avez plus que à lancer le programme
d’installation.

Installation de la librairie Adafruit NeoPixel

Vous pouvez soit télécharger la librairie directement sur internet.
Décompresser l’archive. Renommer le dossier `Adafruit_NeoPixel-master`
en `Adafruit_NeoPixel`, puis copier le dossier dans le dossier
`~/sketchbook/libraries`.

Ou récupérer la librairie directement dans le dossier `librairie` du
répertoire source de cette documentation et le copier dans le dossier
`~/sketchbook/libraries`.

Vous pouver aussi directement le faire en ligne de commande.

En téléchargent sur le site :

$ wget https://github.com/adafruit/Adafruit_NeoPixel/archive/master.zip

$ unzip master.zip

$ mv Adafruit_NeoPixel-master/ ~/sketchbook/libraries/Adafruit_NeoPixel

Structure de base du programme

Voici la structure de base du programme qui gère le ruban de LED.

#include <Adafruit_NeoPixel.h> // Charge la librairie Neo Pixel d'Adafruit utilisé pour piloter le ruban de LED

#define PIXEL_PIN 6 // On définit le pin où est connecté la patte DATA du bandeau
#define PIXEL_COUNT 150 // On définit le nombre de LED compris sur le Ruban de LED soit 150 pour le ruban de 5m50

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); // Paramètre l'objet strip qui correspond à toute les LED du ruban

void setup() {
strip.begin(); // Lance la connection
strip.show(); // Initialise toute les led à 'off'
}

/* Définition des couleurs */
int RED[3] = {255, 0, 0}; // Couleur Rouge
int GREEN[3] = {0, 255, 0}; // Couleur Verte
int CYAN[3] = {0, 255, 255}; // Couleur Cyan
int YELLOW[3] = {255, 125, 0}; // Couleur Jaune
int ORANGE[3] = {255, 40, 0}; // Couleur Orange
int PURPLE[3] = {255, 0 , 255}; // Couleur Violette
int PINK[3] = {255, 0, 100}; // Couleur Rose
int BLUE[3] = {0, 0, 255}; // Couleur Bleu
int WHITE[3] = {255, 255, 255}; // Couleur Blanche
int OFF[3] = {0, 0, 0}; // Éteint

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
}

Allumer toutes les led d’une même couleur

Voici la fonction pour allumer toute les leds d’une même couleur.

void allLeds(int COLOR[])
{
for(int i = 0 ; i < PIXEL_COUNT ; i++)
{
strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]);
}
strip.show();
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en argument de la fonction la couleur que vous
souhaiter utiliser.

Par exemple ci dessous j’ai allumer toute les led du ruban de la couleur
rouge. Je passe pour cela en argument le tableau RED à la fonction
`allLeds`.

void loop() {
strip.brightismes(100); // Règle la luminosité à 100 % de la luminosité maximale
allLeds(RED);
}

Allumer le ruban de LED moitiée d’une couleur, moitiée d’une autre

Voici la fonction pour allumer le ruban de LED moitiée d’une couleur,
moitiée d’une autre.

void allBicolor(int COLOR_LEFT[], int COLOR_RIGHT[])
{
for(int i = 0 ; i < PIXEL_COUNT/2 ; i++)
{
strip.setPixelColor(i, COLOR_LEFT[0], COLOR_LEFT[1], COLOR_LEFT[2]);
}

for(int i = PIXEL_COUNT/2 ; i < PIXEL_COUNT ; i++)
{
strip.setPixelColor(i, COLOR_RIGHT[0], COLOR_RIGHT[1], COLOR_RIGHT[2]);
}
strip.show();
}

 

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction la couleur de la
première moitiée du ruban de LED, et la couleur de la seconde moitiée du
ruban de LED.

Par exemple ci dessous j’ai allumer la moitiée du ruban de couleur cyan
et l’autre moitiée de couleur bleu.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
allBicolor(CYAN,BLUE);
}

Allumer le ruban de LED d’une couleur de façon progressive

Voici la fonction pour allumer le ruban de LED d’une couleur de façon
progressive.

void progressiveUp(int temps, int COLOR[])
{
for(int lumi = 0 ; lumi < 100 ; lumi++)
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]);
}
strip.setBrightness(lumi);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction la couleur du ruban de
LED, et le temps entre les différent pallié de luminosité.

Par exemple ci dessous j’ai allumé le ruban de LED de couleur bleu avec
une durée de 10 ms par pallié de luminosité.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
progressiveUp(10, BLUE);
}

Variation progressive d’une couleur à une autre

Voici la fonction pour faire varier le ruban d’une couleur à une autre.

void changeColor(int temps, int colorDebut[3], int colorFin[3])
{

int color[3] = {0};

color[0] = colorDebut[0];
color[1] = colorDebut[1];
color[2] = colorDebut[2];

while(color[0] != colorFin[0] || color[1] != colorFin[1] || color[2] != colorFin[2])
{

if(color[0] > colorFin[0])
{
color[0]--;
}
else if(color[0] < colorFin[0])
{
color[0]++;
}

if(color[1] > colorFin[1])
{
color[1]--;
}
else if(color[1] < colorFin[1])
{
color[1]++;
}

if(color[2] > colorFin[2])
{
color[2]--;
}
else if(color[2] < colorFin[2])
{
color[2]++;
}

delay(temps);
allLeds(color);
}
}

 

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de la
variation, la couleur de départ, la couleur d’arrivée.

Par exemple ci dessous le ruban de LED varie de la couleur bleu à la
couleur rouge par paliée d’une durée de 10 ms.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
changeColor(10, BLUE, RED);
}

Faire déplacer une LED le long du fil

Voici la fonction pour faire déplacer une LED le long du fil.

void ledUp(int temps, int color[3])
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, color[0], color[1], color[2]);
strip.show();
strip.setPixelColor(i, 0, 0, 0);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de l’effet
ainsi que sa couleur.

void loop() {
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
ledUp(20, RED);
}

Faire allumée progressivement châque LED en mode chenillard

Voici la fonction pour faire allumée progressivement châque LED en mode
chenillard.

void chenillardUp(int temps, int color[3])
{
for(int i = 0 ; i < 150 ; i++)
{
strip.setPixelColor(i, color[0], color[1], color[2]);
strip.show();
delay(temps);
}
}

Puis vous n’avez plus qu’à l’appeler dans la boucle principal du
programme. Et passer en arguments de la fonction le temps de l’effet
ainsi que sa couleur.

void loop() {
allLeds(OFF);
strip.setBrightness(100); // Règle la luminosité à 100 % de la luminosité maximale
chenillardUp(10, GREEN);
}

15 réflexions sur « Led Wars : La Revanche du Ruban de LED »

  1. Salut. Très bien ce tuto, je ne connais pas encore Arduino mais j’ai de bonnes bases en codage et un peu en électronique, en te lisant, ça me donne envie de m’y mettre.

    Juste deux questions :
    – n’y aurait-il pas une micro coquille, en fait tu connectes l’entrée numérique du ruban sur la sortie numérique N°6 et non l’entrée 6 sauf si j’ai loupé quelque-chose.
    – dans cette configuration, penses-tu qu’il est possible d’utiliser le controleur pour d’autres travaux dans la boucle? Je veux dire, le code semble utiliser un timer, peut-être qu’il peut travailler sans saccade même si la carte gère des capteurs ou communique via un réseau. Je ne connais pas grand chose encore, mais j’hésite entre prendre un arduino MEGA pour gérer plein de capteurs et un éclairage sympa ou multiplier les petits arduinos

    1. N’y aurait-il pas une micro coquille, en fait tu connectes l’entrée numérique du ruban sur la sortie numérique N°6 et non l’entrée 6 sauf si j’ai loupé quelque-chose ?
      Non c’est bien la sortie digital numéro 6 déclarer par la ligne :
      #define PIXEL_PIN 6
      En fait la pin 6 peut être définie en entrée ou en sortie.

    2. Dans cette configuration, penses-tu qu’il est possible d’utiliser le controleur pour d’autres travaux dans la boucle ?
      Honnêtement, j’ai pas tester. Sa serai intéressant de voir cela surtout pour après contrôler le ruban de led à travers un site web.

  2. Bonjour,
    J’essaie de faire progressivement changer de couleur ma guirlande LED mais le logiciel Arduino m’indique : ‘allLeds’ was not declared in this scope.
    Je ne sais pas où se situe mon ou mes erreur(s), je n’y connais rien. Pourriez-vous m’aider ?

    1. Vous avez bien déclarer la fonction allLeds comme cela dans votre code ?

      void allLeds(int COLOR[])
      {
      for(int i = 0 ; i < PIXEL_COUNT ; i++) { strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]); } strip.show(); }

    1. La fonction allLeds c’est le code ci dessous elle permet d’allumer toute les leds de la même couleur. Par exemple pour allumer toute les led de la couleur rouge il faudra passer RED à allLeds soit allLeds(RED); ce qui allumera toute les leds du ruban avec la couleur rouge :
      void allLeds(int COLOR[])
      {
      for(int i = 0 ; i < PIXEL_COUNT ; i++)
      {
      strip.setPixelColor(i, COLOR[0], COLOR[1], COLOR[2]);
      }
      strip.show();
      }

  3. Une erreur dans l’appel de la routine “allLeds
    void loop() {
    strip.brightismes(100); // Règle la luminosité à 100 % de la luminosité maximale
    allLeds( RED); // <— cette syntaxe fonctionne sans crochet
    }

  4. Bonjour
    Je cherche à allumer certaines LED les unes après les autres.
    (Quand une s’allume la précédente s’éteint …)
    Est-ce quelqu’un a une idée de programmation ?

    Merci

  5. Bonjour, je débute dans le pilotage led à trois fils, je suis tomber sur ce tuto en cherchant un effet flamme pour un luminaire en forme de montgolfière. j’essaye de réduire au maximum la taille de la carte de pilotage, ça fonctionnerai avec une Adafruit FLORA v3 ?

    1. Du coup j’ai acheté un pro trinket 16Mhz, par contre le ruban à 4 fils c’est une 3636 (deux pour alim et deux pour la commande) est ce qu’il faut connecter les deux fils de commande?

  6. Merci pour ton tuto.
    Il m’a permit de finaliser mon éclairage d’escaliers.
    Lorsque je monte ou descends, chaque marche s’éclaire avec le chenillard puis s’éteins au bout de quelques secondes.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.