1. Présentation Générale

Ce projet permet de contrôler plusieurs rubans de LEDs WS2812 (NeoPixel) connectés à un Arduino, en leur appliquant différents effets lumineux.
Un programme Python assure la communication entre l’ordinateur (PC, MAC, Raspberry) et l’Arduino via le port série.

L’architecture repose sur un protocole texte simple utilisant des commandes séparées par des virgules.


2. Schéma du Système

  • Arduino UNO / MEGA (ou équivalent) connecté à deux rubans WS2812 :
    • Ruban 1 : 300 LEDs, pin D2
    • Ruban 2 : 144 LEDs, pin D3
  • PC exécutant un script Python qui envoie des commandes à l’Arduino via USB (port série).

3. Programme Arduino

3.1. Définition des Rubans

  • Ruban 1 : 300 LEDs sur la broche D2
  • Ruban 2 : 144 LEDs sur la broche D3
  • Les rubans sont stockés dans un tableau strips[] pour un accès générique.

3.2. Types d’Effets

Les effets disponibles sont définis dans l’énumération EffectType :

NomCodeDescription
STOP0Arrête un effet par son ID
FIXED1Affiche une couleur fixe sur une portion de ruban
BLINK2Clignotement entre deux couleurs
CHASE3Effet chenillard (une LED active qui se déplace)
FADE4Transition progressive entre deux couleurs
RAINBOW5Cycle arc-en-ciel
FIRE6Effet feu (flickering en rouge/orange)
SNOW7Effet neige (points blancs aléatoires qui descendent)
SMOKE8Effet fumée (dégradés gris aléatoires qui s’estompent)

3.3. Gestion des Effets

  • Jusqu’à 50 effets simultanés (MAX_EFFECTS).
  • Chaque effet est identifié par un ID unique généré lors de sa création.
  • Les effets sont stockés dans un tableau effects[].

3.4. Protocole de Communication

Les commandes envoyées à l’Arduino suivent le format :

num,cmd,strip,param1,param2,...
  • num : Numéro de séquence (envoyé par le PC)
  • cmd : Type d’effet (voir tableau ci-dessus)
  • strip : Numéro du ruban (0 = ruban 1, 1 = ruban 2)
  • paramX : Paramètres dépendant de l’effet

Exemple de Commandes

  • Couleur fixe rouge sur LEDs 0 à 50 du ruban 0 : 1,1,0,0,50,255,0,0
  • Clignotement entre rouge et vert (LEDs 10 à 100, intervalle 500ms) : 2,2,1,10,100,255,0,0,0,255,0,500
  • Stopper un effet avec ID = 7 : 3,0,7

Réponses de l’Arduino

  • Réponse au format : num,OK/id,code
  • OK (1) → commande acceptée
  • ER (0) → erreur, avec code d’erreur :
    • MSG_LENGTH_3 : commande trop courte
    • STRIP_NUMBER : numéro de ruban invalide
    • PARAM_COUNT : mauvais nombre de paramètres
    • UNKNOWN_CMD : commande inconnue

4. Programme Python

4.1. Connexion Série

  • Paramètres :
    • Port : "COM3" (Windows) ou "/dev/ttyUSB0" (Linux)
    • Baudrate : 115200
    • Timeout : 5s

4.2. Fonctions Principales

  • send_line(line)
    Envoie une commande à l’Arduino et attend une réponse.
    • Retourne un tuple (num, status, id)
    • status = "1" si succès, sinon "0" ou "timeout"
  • stop_effect(id)
    Envoie plusieurs requêtes STOP pour s’assurer qu’un effet est bien arrêté.

4.3. Exemple d’Utilisation

# Allume un effet FIXED en rouge sur ruban 0 (LEDs 50 à 100)
num_msg, bok, eff_id = send_line("1,1,0,50,100,255,0,0")
print("R <-", num_msg, bok, eff_id)

# Attendre 10 secondes
time.sleep(10)

# Stopper l’effet
stop_effect(eff_id)

4.4. Communication Exemple

S -> 1,1,0,50,100,255,0,0
R <- 1,1,5   # effet créé avec ID=5
...
S -> 2,0,5
R <- 2,1,0   # effet 5 stoppé

5. Sécurité & Limitations

  • Alimentation adaptée :
    • 300 LEDs WS2812 → jusqu’à 18 A (à pleine luminosité blanche).
    • Prévoir une alimentation externe 5V avec puissance suffisante.
  • Bien relier les masses (GND) entre l’Arduino et l’alimentation du ruban.
  • Le protocole ne gère pas encore les priorités d’effets ni la sauvegarde en EEPROM.

6. Améliorations Possibles

  • Ajout d’un protocole JSON au lieu de CSV pour plus de clarté.
  • Ajout de commandes pour régler la luminosité globale.
  • Gestion de plusieurs effets sur un même segment de ruban.
  • Interface graphique (GUI Python, Qt ou Tkinter).

7. Résumé

  • Arduino → gère les rubans, applique les effets.
  • Python → envoie des commandes série, gère la logique utilisateur.
  • Protocole simple CSV → extensible, robuste.

Ce système permet un contrôle temps réel de rubans WS2812 avec une grande flexibilité.

Référence API des Effets LED (Arduino + Python)

Format Général des Commandes

num,cmd,strip,param1,param2,...
  • num : Numéro de message (incrémenté par le script Python)
  • cmd : Code de l’effet (voir tableau ci-dessous)
  • strip : Numéro du ruban (0 = ruban 1, 1 = ruban 2, etc.)
  • paramX : Paramètres spécifiques à l’effet

1. Commandes Disponibles

CommandeCodeDescription
STOP0Arrête un effet à partir de son ID
FIXED1Affiche une couleur fixe sur un segment
BLINK2Fait clignoter un segment entre deux couleurs
CHASE3Chenillard (LED active qui se déplace)
FADE4Transition progressive entre deux couleurs
RAINBOW5Effet arc-en-ciel
FIRE6Effet feu (flickering rouge/orange)
SNOW7Effet neige (points blancs descendant)
SMOKE8Effet fumée (points gris estompés)

2. Paramètres par Effet

STOP (0)

Arrête un effet en cours à partir de son ID.

num,0,id
  • id : identifiant de l’effet à stopper (reçu lors de sa création).

Exemple :

5,0,12

➡️ Stoppe l’effet ayant ID = 12.


FIXED (1)

Affiche une couleur fixe sur une plage de LEDs.

num,1,strip,start,end,R,G,B
  • start : première LED (index)
  • end : dernière LED
  • R,G,B : couleur (0–255)

Exemple :

6,1,0,0,50,255,0,0

➡️ LEDs 0 à 50 du ruban 0 en rouge.


BLINK (2)

Clignotement entre deux couleurs.

num,2,strip,start,end,R1,G1,B1,R2,G2,B2,interval
  • R1,G1,B1 : couleur 1
  • R2,G2,B2 : couleur 2
  • interval : durée d’un état en ms

Exemple :

7,2,1,10,30,255,0,0,0,255,0,500

➡️ LEDs 10–30 du ruban 1 clignotent rouge/vert toutes les 500 ms.


CHASE (3)

Effet chenillard.

num,3,strip,start,end,R,G,B,interval
  • R,G,B : couleur de la LED active
  • interval : temps entre déplacements (ms)

Exemple :

8,3,0,0,20,0,0,255,100

➡️ Chenillard bleu sur LEDs 0–20 du ruban 0.


FADE (4)

Transition progressive entre deux couleurs.

num,4,strip,start,end,R1,G1,B1,R2,G2,B2,interval
  • R1,G1,B1 : couleur de départ
  • R2,G2,B2 : couleur de fin
  • interval : durée d’un cycle de fade (ms)

Exemple :

9,4,1,0,50,255,0,0,0,0,255,200

➡️ LEDs 0–50 du ruban 1 passent progressivement du rouge au bleu toutes les 200 ms.


RAINBOW (5)

Cycle arc-en-ciel.

num,5,strip,start,end,interval
  • interval : vitesse du défilement (ms)

Exemple :

10,5,0,0,100,50

➡️ LEDs 0–100 du ruban 0 affichent un arc-en-ciel animé.


FIRE (6)

Effet feu réaliste (rouge/orange clignotant).

num,6,strip,start,end,interval
  • interval : vitesse de mise à jour (ms)

Exemple :

11,6,1,0,50,80

➡️ LEDs 0–50 du ruban 1 avec un effet feu.


SNOW (7)

Effet neige (points blancs descendant le long du ruban).

num,7,strip,start,end,interval,density
  • interval : vitesse de chute (ms)
  • density : densité (0–100 %)

Exemple :

12,7,0,0,144,150,10

➡️ LEDs 0–144 du ruban 0 → neige clairsemée (10%).


SMOKE (8)

Effet fumée (points gris estompés).

num,8,strip,start,end,interval,density
  • interval : vitesse de génération (ms)
  • density : densité (0–100 %)

Exemple :

13,8,1,0,50,200,30

➡️ LEDs 0–50 du ruban 1 → fumée dense (30%).


3. Codes de Retour de l’Arduino

  • Réponse standard : num,OK,id ou num,ER,code

Signification

  • OK (1) → succès
  • ER (0) → erreur
Code d’erreurValeurSignification
MSG_LENGTH_30Message trop court (< 3 champs)
STRIP_NUMBER1Numéro de ruban invalide
PARAM_COUNT2Nombre de paramètres incorrect
UNKNOWN_CMD3Commande non reconnue

4. Exemple Session Complète

S -> 1,1,0,0,20,255,0,0
R <- 1,1,4        # effet FIXED créé avec ID=4

S -> 2,2,0,0,20,255,0,0,0,255,0,500
R <- 2,1,5        # effet BLINK créé avec ID=5

S -> 3,0,5
R <- 3,1,0        # effet ID=5 stoppé

Dépendances

1. Arduino (programme embarqué)

Bibliothèques Arduino

  • Arduino.h (fournie par défaut)
  • Adafruit_NeoPixel
    • Installation via Arduino Library Manager
    • Permet de piloter les rubans LED WS2812/WS2812B

Outils


2. Python (passerelle série côté PC)

Version minimale

  • Python 3.8+

Modules nécessaires

Source Python

Python

Source Arduino

C

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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