Tutoriel : Lampadaire Wifi / domotique par specimen
Vous ne savez pas quoi faire cet hiver ?
J’ai acheté un ruban LEDs « intelligentes » WS2812B, sans but précis, juste par curiosité de ces leds dites « intelligentes ».
Ce ruban de 5m comprend 300 noeuds de 3 leds RVB adressables individuellement, on peut donc allumer chaque plot individuellement de 0 à 255 pour chaque couleur. Le ruban est recoupable facilement avec une simple paire de ciseaux.
Alors comment ça marche ? Il faut 3 fils, 0v +5v et un bus. On envoie une trame sur le bus avec des instructions RVB pour noeud1, noeud2, noeud3, etc…. quand un noeud recoit la trame avec une instruction pour noeud1, il considère que c’est pour lui, allume ses leds en conséquence et retransmet la trame au noeud suivant, en supprimant au passage les instructions pour noeud1 (qui ont été traitées), noeud2 fera de même etc…
Aucune « intelligence » donc mais un procédé assez malin et un exploit technique malgré tout, il y a quand même 300 cpus embarqués qui collaborent pour faire le job !
J’ai d’abord vérifié que le ruban fonctionnait une fois connecté à un ESP8266. Après quelques ratés, bonne surprise, ça marche et c’est très rapide !
Alors quoi faire avec ça ? un simple éclairage d’ambiance sous un meuble… du gachis, il faut un truc matriciel qui puisse afficher des choses complexes. Une matrice carrée bof, c’est quelconque. Pourquoi pas un lampadaire qui serait capable d’éclairer et d’afficher quelques informations sous forme de matrice. L’inconvénient c’est que quelque soit le point de vue, on perd visuellement la moitié de la matrice. Mais c’est aussi un avantage, quelque soit le point de vue on peut lire.
Le problème de l’alimentation : De fait, on se retrouve avec 300 noeuds de 3 leds (RVB). Comptons 20mA par led. Donc potentiellement 18A sous 5v pour allumer l’ensemble en blanc à pleine puissance ! En pratique, mes essais confirment qu’une alim de 8A suffit. On peut de toutes façons régler la puissance pour éviter que le milieu du ruban ne devienne jaunâtre ou même rouge. Avec 8A je ne perçois une dégradation qu’au dessus d’une intensité de 200 (sur 255 possible), ce qui suffit largement à arracher les yeux et à éclairer une pièce de 15m². Sur la vidéo j’ai réglé à 30 pour éviter de cramer le capteur de mon téléphone. De toutes façons les alims > 8A sont hors de prix et hors gabarit pour ce que je veux faire.
Avec juste le port USB connecté à mon PC ça fonctionne, on ne peut pas tout allumer en blanc, mais les 3 couleurs primaires fonctionnent individuellement à faible puissance.Matériel :
Un ruban de 5m / 300leds WS2812B (environ 30€ sur ebay)
Une alim format allongé (spécial led) 5v / 8A. Vérifier que sa taille est compatible avec le tube ! (environ 30€ sur amazon)
Un ESP8266-12 wifi (environ 10€ ebay), surement possible avec un Wemos à 3€
Un chute de médium 30×30 pour le socle
Un cable micro-usb (facultatif, pour faire les mises-à-jour logiciel sans tout démonter)
5m de câble 3x1mm (magasin de bricolage)
Un tube PVC 200 x 68 et quelques raccords (environ 7€ dans tous les magasins de bricolage)
Montage :
Ruban led : Il faut enrouler le ruban led adhésif autour du tube. Mais bien entendu, le pourtour du tube de 68 ne correspond pas pile au leds qui font chacune 16mm de long (60 leds / mètre). J’ai donc grossi artificiellement le diamètre du tube en enroulant du papier adhésif.
Socle : Un raccord 45° (je n’ai trouvé que ça en 68) découpé à la scie à métaux et poncé, collé au milieu d’une planche carrée. Le tube s’emmanche dedans. Percer le centre du socle assez gros pour passer le fil secteur et la prise usb. Faire une saignée sur le dessous pour que les câbles passent sans que le socle ne soit bancal. Vous pouvez aussi creuser un emplacement pour la prise USB qui ne sert que pour la mise à jour et pourra s’intégrer sous le socle pour ne laisser sortir que la prise 220v.
Raccordements :
Le ruban est alimenté au 2 bouts ce qui peut paraître curieux, mais quand on a calculé les puissances dissipées on comprend qu’en alimentant qu’à une extrémité, le ruban de 5m ne s’allumera jamais en entier. Il faut donc percer le tube en haut et en bas de l’enroulement pour descendre un câble d’assez grosse section à l’intérieur.
Il faut aussi descendre le fil du bus (le câble de terre fera l’affaire). Attention le bus à un sens. J’ai pas fait gaffe, l’entrée du bus est en bas de l’enroulement.
Peu importe car on peut corriger en bidouillant le soft. Si vous voulez reprendre mon code tel quel, faites comme moi !
Raccorder les deux + du ruban, le Vin de l’ESP et le + de l’alim ensemble
Raccorder les deux – du ruban, le GND de l’ESP et le – de l’alim ensemble
Raccorder le bus du ruban au 5 de l’ESP
Faites descendre les 2 câbles dans le tube jusqu’au socle.
Brancher le câble USB sur l’ESP en traversant le socle.
Passer le câble 220v avant de raccorder les câbles à l’alim.
Glissez soigneusement l’ESP, l’alim et les câbles dans le tube.
Le code est fait en C++ via l’interface de programmation Arduino, simple et rapide. Je ne rentre pas dans le détail pour la gestion des librairies, téléchargez et installez ESP8266WiFi / Adafruit_NeoPixel / TimeLib / WiFiUdp avant de compiler le code et de l’envoyer dans l’ESP via USB.
Programmation : Le plus pénible est de créer les matrices pour chaque caractère à afficher en effet j’ai 23 tours de 13 leds ch acun mais si on veut pouvoir lire il faut des caractères de 23×6. Je n’ai fait que les chiffres de 0 à 9, les « : » et l’espace. J’ai utilisé Excel pour dessiner les caractères et générer une liste de booléens correspondant.
Une fois chaque caractère en matrice, il faut adresser le ruban, qui lui est linéaire (leds 1 à 300), ça se complique bigrement au niveau soft !
Surtout quand on veut les faire défiler comme pour l’heure sur la vidéo. J’ai décidé de mettre tout ce qui devait être affiché dans une grande matrice (avec des blancs avant et après pour un défilement fluide). Ensuite il faut 3 boucles imbriquées (x, y et le décallage) pour afficher la matrice 13×23 et la faire scroller. Inutile d’effacer à chaque fois, ca sintillerait et ça n’apporte rien car toutes les leds sont mises à jour. C’est là qu’on voit que c’est super rapide, j’ai temporisé sinon on ne peut pas lire.
En fait on prépare la trame dans le soft, et quand on l’envoie les 300 leds s’allument instantanément dans la couleur demandée. Le déroulement de l’heure c’est 42 fois l’adressage de 300 leds, 12600 adressages en 3 secondes sans temporisa tion. Impressionnant.
Après il y a les anneaux et les secteurs qui dépendent de la matrice mais qui sont nettement plus simples niveau programmation.
Le reste des effets sont repris des exemples que j’ai trouvé sur le net.
Heure : Au départ j’ai bricolé un bout de code php sur mon serveur jeedom pour pouvoir passer l’heure à l’ESP. Compliqué, depuis Jeedom on appelle le code php qui appelle l’ESP. Heureusement, il y a une librairie time et même une synchronisation NTP qui permet à l’ESP de rester pile à l’heure malgré l’absence d’horloge matérielle. On pourrait même faire défiler la date.
Jeedom : Quand on en est là, il suffit de faire un script avec des boutons et un appel http pour activer telle ou telle fonction, à vous d’ajouter les vôtres. Il y a un retour d’état qui peut servir pour connaître la fonction en cours d’exécution, 0 si éteint.
Une fois fait vous pourrez activer chaque fonction à partir de vos scenarios. Je n’ai pas fait de plugin parce que c’est évolutif, du coup il faudrait le mettre à jour à chaque ajout de fonctionnalité.
Sur la vidéo je déclenche la démo à partir d’une télécommande zwave.
Problème :
Pour être honnête je m’y suis repris à 3 fois pour faire une vidéo « propre ». Il semble que quand on sollicite trop le ruban il arrive qu’il bug plus ou moins. Parfois il semble qu’un noeud arrête de transmettre la trame aux noeuds suivants. Ça peut même parfois empêcher d’éteindre le ruban. J’ignore si ca le fait sur tous ou uniquement sur le miens. Je l’ai quand même maltraité (branchement du bus à l’envers…). Si on sépare les opérations de quelques secondes / minutes il n’y a pas de problème, c’est fiable à 100%.
Il me reste les finitions hardware. Un coup de papier de verre et peinture sur le tube, le socle et le bouchon en haut. Il faut que je me débrouille pour que le tube continue à être amovible pour laisser l’accès à l’électronique.
Côté électronique on peut par exemple facilement ajouter un capteur de température sur l’ESP qui remonterait des valeurs à Jeedom. Pourquoi pas un détecteur de présence à ultra son en perçant le tube à mi-hauteur ?
En matière de soft c’est encore plus vaste. On peut imaginer de faire défiler une météo simplifiée avec la température prévue et un logo pour peu qu’on se donne la peine de mettre les logos en matrice. Faire clignoter le lampadaire quand on a un mail ou faire défiler un panneau triangulaire quand il y a un bouchon sur le trajet du boulot devient un jeu d’enfant.
J’ai un algorithme qui passe du jaune au bleu en passant par le rouge en 30 mn, je l’exécute à l’heure du couché du soleil, c’est assez déco et fun même si les jours raccourcissent. J’ai la même chose à l’inverse (du bleu au jaune) au levé du soleil.
A vous de jouer maintenant, j’attends vos idées et vos réalisations avec impatience !
Pour toute question, ou pour récupérer le code, rendez-vous sur le forum Jeedom ICI
Ce tutoriel vous est proposé par Specimen, membre de la communauté Jeedom
Et on le remercie pour cette idée lumineuse 😉