
Entretien du watercooling
6 mai 2019
L’IRC
9 janvier 2022Dans le cadre d’un projet en cours pour l’association Aikaran, je suis actuellement en train de transformer un agrès de feu en agrès de lumière. Pour cela, j’utilise des leds adressables Neopixel, que je commande avec un Arduino. Voici étape par étape la complexification du code, et les effets produits.
Dans le cadre de la création d’un bâton de lumière, je vais recouvrir un ancien fire staff de leds adressables, et les commander à distance. Si l’idée tient en à peine une ligne, sa mise en place va prendre bien plus de temps.
La conception comprend un cahier des charges fonctionnel et technique, qui sera notre guide tout au long de la conception du light staff (appelons le ainsi…).
Le point de départ, c’est donc un staff
Sur le modèle de base, le kevlar (qui se trouve à chaque extrémité) va être retiré. Toutefois, l’épaisseur qu’il occasionnait sera reproduite grâce à des boîtiers à chaque extrémité. Ce sont ces boîtiers qui accueilleront les différents éléments électroniques, ainsi que la batterie. Tout le staff, à l’exception de la partie centrale, sera ensuite recouvert de leds adressables.
Des leds adressables ?
Je ne vais pas vous expliquer ce qu’est une led, simplement vous expliquer pourquoi celles que je vais placer sur le staff sont très spécifiques.
Elles sont de marque Neopixel. Ces leds multicolores ont la particularité de pouvoir être commandées indifféremment.
Pour ce faire, elles possèdent 3 connecteurs: 2 pour être alimentée électriquement, et un troisième qui enverra les commandes. C’est ce troisième connecteur qui va préciser quelle led allumer, avec quelle couleur, quelle intensité et à quel moment. Une alimentation de 5V en courant continu suffit à éclairer le bandeau.
Combien de leds pour un staff ?
La programmation
Ahhh, on en arrive aux choses concrètes. J’utilise un Arduino pour commander les Neopixels. Aussi, le code qui permettra de les faire fonctionner sera du C. Le logiciel Arduino gère la compilation du code et l’envoi vers la carte électronique, c’est un gain de temps très interessant.
Pendant longtemps, je me suis retourné le cerveau pour savoir comment coder les fonctions qui feront fonctionner le staff. J’ai finis par me dire qu’il valait mieux commencer au plus basique, puis, petit à petit, complexifier les choses. Alors reprenons les bases: on va allumer une leds, puis la faire clignoter. Ensuite, on introduira le principe de pulsation. Enfin, on apprendra à donner une couleur aléatoire à la led, et enfin, on laissera l’Arduino choisir aléatoirement une led parmi toutes celles du bandeau, qu’il éclairera d’une couleur aléatoire.
Afin de ne pas faire un article à rallonge, toutes ces sections se présentent sous la forme d’un menu déroulant. A mesure que les scénarios se complexifient, le code se complexifie aussi. Pour autant, il s’agit, à l’origine, du code basique que vous verrez dans le premier scénario.
Il y a parmi vous probablement des développeurs, des codeurs. Je ne suis ni l’un, ni l’autre, et d’avance, si le code vous parait sale, ou pas optimisé, j’en suis désolé et j’appelle à votre tolérance. Le code n’est absolument pas optimisé, je suis dans une optique de logique pour le moment. Viendra ensuite l’optimisation du code.
Optimiser le code consiste par exemple à mutualiser certaines fonctions, plutôt que de les « coder » à chaque fois qu’elles sont nécessaires. En évitant ces répétitions, on libère de la mémoire dans l’Arduino: le traitement des informations est plus efficace, et l’on peut donc en demander plus à la machine. A cela s’ajoute également la mise en forme du code, qui permet une lecture plus rapide, et un débogage simplifié en cas de besoin. Il faut qu’un développeur qui n’a jamais travaillé sur votre code soit en mesure de le comprendre dès la première lecture.
Enfin, le projet Arduino est open source. Aussi, afin de participer aux créations de la communauté, mes travaux sont également libres. Dans chaque section, vous trouverez un lien pour télécharger le code source correspondant. Vous êtes libre d’utiliser ce code, le modifier, ou vous en servir pour vos propres projets.
Maintenant au travail !
Avant qu’une led ne clignote et ne change de couleur, il faut pouvoir l’allumer. C’est la manipulation la plus basique que l’on puisse faire.
Commençons donc par les bases.
Voici le code qui permet cela.
Le code utilisé pour programmer un Arduino est du C.
Comme pour tous les programmes, le code a besoin de faire appel à une librairie. Dans notre cas, nous appelons une librairie que nous avons au préalable ajoutée à la liste des librairies d’Arduino: Adafruit_NeoPixel.h
Par la même occasion, on donne quelques informations sur le matériel Néopixel que l’on utilise:
- Nombre de leds connectées et contrôlables
- Emplacement sur l’Arduino qui émet les ordres
- Type de pixel
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
Ici, on introduit la notion de variable pour définir l’emplacement sur l’Arduino. Il a été au préalable définit que PIN correspondait à l’emplacement 6. C’est donc sur la broche 6 que le cable de commande des NeoPixels est connecté.
Viennent ensuite les deux void communes à tous les codes NeoPixel: setup et loop.
Dans la première void setup, on renseigne les informations qui définissent l’état initial du bandeau.
void setup() {
strip.begin();
strip.show();
}
void setup() {<br />
strip.begin();<br />
strip.show();<br />
}
La commande strip.show(); demande l’affichage du code couleur inséré juste au dessus. Etant donné qu’au dessus, il n’y a aucun code couleur spécifié, il est demandé à toutes les leds de n’afficher aucune couleur. Ainsi, les leds sont toutes réinitialisées.
La seconde void loop contient le code à proprement parler. Ce code est joué en boucle, indéfiniment.
void loop() {
strip.setPixelColor(1, 255, 0, 255);
strip.show();
}
Dans cette partie, la ligne strip.setPixelColor permet de dire quelle led allumer, et avec quelle couleur. La syntaxe est la suivante:
strip.setPixelColor(N° de led, R,G,B)
R, G et B rappelle les couleurs primaires Red (rouge), Green (vert) et Blue (bleu)
Les valeurs pour ces trois nombres varient de 0 (rien) à 255 (couleur maximale).
Dans notre exemple, la ligne déclare « configure la led N° 1 pour afficher un rouge maximal, pas de vert, et un bleu maximal ».
Juste en dessous, la ligne strip.show(); ordonne l’affichage des déclarations faites au dessus. La led 1 va donc s’éclairer en violet.
Le code est terminé. Toutefois, comme la void loop est jouée en boucle, ce code va se rejouer indéfiniment. La led va donc rester allumée violet fixe.

Obtenir le fichier source
Le code se complexifie gentiment.
Maintenant qu’on sait donner une couleur à une led, on va lui en donner deux: du violet, et du noir.
void loop() {
strip.setPixelColor(1, 255, 0, 255);
strip.show();
delay(500);
strip.setPixelColor(1, 0, 0, 0);
strip.show();
delay(500);
}
A chaque fois, on affiche le résultat avec la commande strip.show();. Cette commande est suivie par un tempo: delay(500);
Cette temporisation se lit « attendre 500 millisecondes »
Ainsi, on configure une couleur (le violet), on l’affiche, puis on attend une demi seconde. Ensuite, on configure une autre couleur (le noir), on l’affiche, puis un attend une demi seconde, et tout recommence.

Obtenir le fichier source

Obtenir le fichier source
Obtenir le fichier source

Obtenir le fichier source












