Ruban de leds RGB contrôlé par une PYBStick26


Dans ce tutoriel nous allons fabriquer un décors lumineux #LedStick à base d’un ruban de leds RGB néopixels d'Adafruit qui s’anime dès qu’on le branche. Pour cette réalisation nous allons utiliser une PYBStick26, fabuleuse carte MicroPython issue de la collaboration entre Garatronic, MCHobby et la revue Programmez! Elle va nous permettre de contrôler un ruban de leds RGB grâce à quelques-unes de ses 26 broches entrées/sorties, ainsi qu’une bibliothèque MicroPython spécialement conçue pour.



Matériel nécessaire


J'ai conçu une petite carte d'extension pour la PYBStick26 qui va permettre de piloter un ruban de leds RGB de votre choix. Attention à bien prendre un modèle RGB (et non pas RGBW) neopixels. Dans mon cas, j'ai utilisé ce ruban d'1m RGB souple noir de 30 leds que j'ai enroulé à l'intérieur d'un décors de type support de bougie.


En plus du ruban, je conseille de prendre aussi une paire de connecteurs jst-sm 3 pôles mâle/femelle pour pouvoir brancher/débrancher le ruban en toute sécurité sans se tromper avec les polarités, car il n'y survivrait pas.


Selon le nombre de leds que vous voulez éclairer, prenez un transformateur 5V avec prise Jack DC de bonne qualité, entre 2A (pour 30 leds ou moins) jusqu'à 5A pour piloter des rubans plus grands. En principe une led consomme au max 60 ma. Les animations ne les éclairent jamais toutes en full white en même temps: tablez sur une alimentation 5v 30 ma par leds: ça tient largement.


Bien entendu il vous faudra une PYBStick26: un modèle LITE est suffisant pour cette réalisation (c'est ce que j'utilise). Un modèle STANDARD est parfaitement compatible.


Quelques composants supplémentaires à prévoir:

  • 1 carte d'extension, à faire fabriquer chez n'importe quel fabriquant de PCB à partir des fichiers GERBER fournis sur mon Github: il s'agit du fichier GERBER_LedStick_v1.1.zip

  • 1 level-shifter 74AHCT125, avec un support 2*7 broches à souder

  • 1 condensateur polarisé 470uF

  • 1 condensateur céramique 100nF

  • 1 petit bornier 3 pôles, ou bien une prise jst femelle à souder, impérativement au pas de 2,54mm: le ruban y sera connecté. Personnellement je préfère un bornier sur lequel je visse le câble avec embout jst-sm femelle libre: ça laisse plus de longueur pour y connecter le ruban avec son connecteur jst-sm mâle.

  • 1 Barrel-Jack DC mâle 3 points à souder: l'alim 5V y sera branchée.

  • 2 barrettes à souder 13 pin mâles pas 2,54mm (personnellement j’achète des barrettes 40 pins sécables).

  • 1 diode de redressement ou Schottky de petite taille, type 1N4001 (ce que j'ai pris) ou SB560.


Circuit électronique


Schéma

Ce circuit est parfaitement réalisable sur une breadboard en mode prototype. La PYBStick26 est alimentée en externe (5V 2A) via une prise Jack DC reliée à la broche 4 Vin, avec une petite diode Schottky en série afin d’éviter que l’alimentation de la prise USB (Vbus) vienne se déverser dans l’alimentation externe. Vous me diriez «Ha oui mais l’inverse alors? Comment protéger l’alimentation USB pour éviter que l’alimentation externe ne s’y déverse?». Et bien il y en a déjà une dans la PYBStick26 qui évite cela! Ainsi nous pouvons brancher l’alimentation externe et la clé USB en toute sécurité. J’ai privilégié une petite diode 1A max (type 1N4001).

Si vous testez sur une breadboard, il n’est pas nécessaire de relier à la masse toutes les masses de la PYBStick: une seule suffit. Il faut privilégier celle juste en dessous de Vin (pin n°6), ou bien la pin n°25 car elles sont faciles à localiser.

Le ruban est aussi alimenté en 5v avec l’alimentation externe. On ne peut pas l'alimenter avec le 5v récolté sur Vbus car c'est limité à 1A max. Il va falloir convertir la sortie S19 de la PYBStick, qui délivre un signal 3.3v, en 5v, via un circuit-intégré Level-Shifter (74AHCT125): il dispose de 4 entrées logiques qui vont pouvoir transformer 4 signaux 3.3v en 5v: un seul nous est nécessaire. On relie 1OE à la masse pour activer une conversion, puis 1A à la sortie S19 de la PYBStick (cette sortie va commander le ruban) et 1Y converti en 5v sera reliée au signal du ruban (fil du milieu). Toutes les autres entrées logiques 2OE, 3OE et 4OE doivent être reliées au +5V pour les désactiver et éviter des oscillations aléatoires de ces convertisseurs qui consommeraient du courant pour rien.


Quelques condensateurs de découplage sont présents pour protéger le ruban de leds et le 74AHCT125, lors du branchement notamment qui peut générer des pics. Il n’y en pas besoin pour protéger la PYBStick26 car l’entrée Vin dispose d’un régulateur de tension déjà protégé par des condensateurs: on peut y mettre jusqu’à 18v sur Vin.


Attention le ruban de leds est particulièrement fragile: la moindre erreur de polarisation (vous vous trompez entre le +5v et la masse) ou la moindre erreur de tension (un chargeur 12v au lieu de 5v) et le ruban ainsi que le 74AHCT125 sont morts. Il vaut mieux vérifier 3 fois plutôt qu’une que les branchements et voltages sont bons avant de tout mettre sous tension ...

Le prototype sur breadboard en vidéo:


Soudure des composants


Il faut commencer par souder les barrettes femelles fournies sur la PYBStick26. Petite astuce pour les souder parfaitement perpendiculaires à leur socle: utilisez le support 2*7 broches du 74AHCT125 (si vous en avez deux, c'est encore mieux) car l'écartement entre les deux rangées correspond exactement à la longueur de ce support ( 6* 2,54 mm).


Commencez par souder la diode sur la carte d'extension, au choix sur la face avant ou arrière, mais attention à bien respecter le sens comme indiqué sur la sérigraphie en dessous (sens de la bague indiqué). Ensuite soudez le support du 74AHCT125 dans le bon sens, puis la petite capacité céramique, le bornier, le jack DC ainsi que le condensateur polarisé (patte la plus longue à souder sur le +). Pour finir soudez les deux rangées de 13 pin mâles orientées par dessous (soudures apparentes au dessus de la carte donc).


Vérifiez un coup les voltages au cas où ...débranchez le tout et assemblez ensuite le 74AHCT125 sur son support (dans le bon sens, attention à ne pas tordre une patte ...) et enfin la carte sur la PYBStick: le connecteur Jack DC 5V est orientée à l'arrière de la clé USB. Connectez le ruban en vous assurant de ne pas vous tromper avec le +5V et la masse surtout (voir les sérigraphies au niveau du bornier). La PYBStick26 et sa carte d'extension sont prêtes, il ne reste qu'à installer les scripts MicroPython.


Scripts MicroPython


Tous les fichiers mentionnés ci-dessous sont récupérables sur mon Github, répertoire du projet LedStick. Ils faut déposer les 3 fichiers *.py correspondants à la racine du lecteur PYBFLASH lorsque vous branchez la PYBStick26 sur votre ordinateur (dans mon cas j’utilise un Raspberry pi), et c'est tout!

  • ws2812.py

  • rubanLeds.py

  • main.py

Une fois les fichiers recopiés sur la PYBStick26: débranchez-la de son support USB, puis branchez le jack 5v: les animations démarrent immédiatement.

Les bibliothèques utilisées


Deux bibliothèques sont nécessaires pour faire fonctionner le ruban avec le script MicroPython que je propose.

  • ws2812.py développée par MCHobby, proposée sur leur github (section Bibliothèques - Dépendances) au demeurant très bien documenté, dans lequel il y a des exemples de codes MicroPython et de circuits pour causer avec un ruban de leds Neopixels (et plein d'autres exemples), dont je me suis très largement inspiré pour ce tuto. Cette bibliothèque permet de gérer les allumages/extinction des leds via le bus SPI de la PYBStick26 ce qui nous simplifie énormément la tâche.

  • rubanLeds.py: il s'agit d'une classe qui permet d'exécuter des animations colorées sur le ruban, animations que l'on va utiliser dans le script principal.


Le script principal


Il s'agit du fichier main.py que vous pouvez adapter à votre besoin avec l'import de la bibliothèque d'animation du ruban.


Usages


Il faut d'abord instancier un objet de la classe RubanLeds en précisant le nombre de leds et l'intensité souhaitée (entre 0=min et 1=max). Par exemple pour un ruban de 30 leds et intensité à 40% (100% ça troue les yeux croyez moi! il ne faut pas les regarder de face ...)


from rubanLeds import RubanLeds
leds = RubanLeds(nb_leds=30, intensity=0.4)

Ensuite les principales méthodes à utiliser de la classe RubanLeds pour lancer des animations sont:

  • leds.off() : extinction du ruban, toutes les leds en même temps.

  • leds.fade_off(fadein): extinction des leds les unes après les autres, en partant de la première si fadein=True (valeur par défaut), sinon en partant de la dernière.

  • leds.rainbow_cycle(): lance un cycle de couleur arc-en-ciel réparti sur toutes les leds. Plus le nombre de leds est grand, et plus le dégradé de couleur sera joli.

  • leds.random_cycle(pastel, red, green, blue): allume les leds au hasard avec des couleurs pastels si pastel=True, ou vives si pastel=False. Des composantes rouge, verte ou bleue peuvent être annulées (red=True/False, green=True/False, blue=True/False) pour donner un ton. C'est du plus bel effet quand on annule une seule composante avec des couleurs pastels.

  • leds.fade_wheel(fadein): allume les leds l'une après l'autre avec un effet de fade in (fadein=True) ou fade out (fadein=False) en utilisant un cycle de couleurs arc-en-ciel.

  • leds.fade_random(fadein, pastel, red, green, blue): allume les leds avec un effet de fade in ou fade out, couleurs vives ou pastel choisies au hasard, composantes rouge/verte/bleue activées ou non.

  • leds.shuffle_wheel(): allume les leds dans un ordre aléatoire, en suivant un cycle arc-en-ciel

  • leds.shuffle_random(pastel, red, green, blue): allume les leds dans un ordre aléatoire avec de couleurs vives ou pastel, composantes rouge/vert/bleu activées ou non.

  • leds.mono_wheel(fadein, delay): allume toutes les leds de la même couleur mais varie en suivant les couleurs de l'arc en ciel. Démarrage avec un effet fade in ou fade out. le delay (en secondes, 0.1 par défaut) est un temps d'attente entre chaque changement de couleur.

  • leds.mono_color(fadein, color, delay): allume toutes les leds avec la même couleur color=(r,v,b) rouge par défaut (255,0,0). Effet de fade in ou fade out au début. Temps d'attente delay (=0.1 secondes par défaut) avant de rendre la main.

En combinant des effets arc-en-ciel, couleurs pastels ou vives avec composantes rouge/vert/bleu désactivées ou non, du clignotement aléatoire ou des enchaînements d'allumage en fade in et extinction en fade out ...: on peut créer des tonnes d'animations colorées en boucle infinie vraiment cool.

Dans mon cas j'utilise le ruban de leds scotché à l'intérieur d'un support de bougie: le script main.py enchaîne pas mal d'animations colorées du plus bel effet. Un autre usage qui est très joli: fixer le ruban le long d'une plante grimpante intérieur, et l'animer avec la méthode mono_wheel(fadein=True, delay=1): ça génère une lumière diffuse toute verte qui vire doucement vers le jaune, puis orange, rouge, violet bleu pour redevenir vert et recommencer à l'infini. En jouant avec le paramètre delay on peut plus ou moins temporiser les changements de couleurs et c'est splendide dans une plante (attention en l'arrosant...), ou au dessus / derrière un meuble.


Quelques clichés du #LedStick dans un support de bougie



logo_papsdroid_64x64.png
suivre l'acutalité du blog sur Facebook:
  • Facebook Social Icône

© 2019, de papsdroid.fr,  administré depuis un Raspberry pi4