Cette semaine, on vous présente un petit bricolage relativement simple, basé sur le fait que les balles de ping-pong blanches font d'excellents diffuseurs de lumière. On a fabriqué une espèce de luminaire multicolore pilotable par internet et alimenté par PoE.
L'idée est d'utiliser des balles de ping pong et de placer une LED RGB dans chacune de ces balles. On a choisi des LEDs NEOPIXEL d'Adafruit: elles sont déjà soudées sur un PCB minuscule et on peut les acheter en quantité pour un prix raisonnable. Pour piloter ces LEDS on utilise un Yocto-Color-V2 qui permet non seulement d'affecter une couleur indépendante à chaque LED, mais aussi de jouer des animations de manière complètement autonome. Effets de lumière psychédéliques en perspective.
Le matériel de base, des LEDs NEOPIXEL et des balles de ping pong
Construction
On voulait donc fabriquer une ribambelles de petites balles lumineuses au bout de tiges rigides bien bien alignées.
On voulait fabriquer un truc qui ressemble plus ou moins à ça.
Pour ça, en plus des LEDs et des balles de ping pong, on a utilisé:
- Des tubes de carbones de 4mm, disponible dans les bons magasins de modélisme
- Du contre-plaqué 3mm
- Un mètre de profilé aluminium en U
- Des perles percées d'un trou de 4mm qui entrent dans le profilé
- Du Fil électrique capable de tenir au moins 1A
- Du Fil électrique suffisamment fin pour en passer 4 brins dans les tubes de carbone
- De la colle époxy
Les ampoules
Pour fabriquer les "ampoules", on a commencé par découper trois rondelles dans le contre-plaqué. On les a collé ensemble et peinte en noir. Ce qui donne un espèce de capuchon dans lequel chaque LED sera logée. On pourrait probablement utiliser des bouchons de flacon à la place.
Fabrication de petits capuchons
On a ensuite soudé quatre petits fils sur les pads +,GND,In et out de chacune des LEDS.
On soude des fils sur chacune des LEDs
On a fait passer les fils dans la tige de carbone. Comme ils rentrent tout juste, le plus facile consiste à dénuder leur extrémités, les torsader et les souder au bout d'un fil rigide. Il suffit alors de faire passer le fil rigide dans le tube en premier et de tirer ensuite dessus pour que les 4 autres fils suivent le mouvement. La LED se retrouve alors à l'extrémité de la tige de carbone.
On a fait passer les fils dans la tige de carbone
Ensuite, avec un Dremel et une fraise, on a percé un gros trou dans chacune des balles des ping-pong. Il faut que ce trou soit plus gros de la LED mais plus petit que de diamètre du capuchon. De plus, si on le centre sur le plan de joint de la balle, il sera plus facile d'orienter toutes les balles de la même façon. En effet le joint reste assez visible par transparence.
Perçage des balles de ping-pong
Après avoir vérifié que la LED marchait toujours, on finalement collé ensemble la tige de carbone, le capuchon et la balle à la colle epoxy. Pour être sûrs que la tige et la balle soient bien aligné on a fabriqué un petit dispositif de centrage qui tient le tout ensemble pendant que la colle sèche.
Collage et test
Le support
Pour fabriquer le support, on a percés des trous régulièrement espacés dans le profilé d'aluminium. On a percé avec un diamètre un peu plus grand que celui des tiges: 5mm pour la tige puisse flotter dans le trou.
Profilé en aluminium; perçage.
On a ensuite passé une tige que dans chacun des trous, et on a terminé chaque tige avec une perle. Ainsi lorsque l'ensemble est vertical, chaque tige reste à peu près libre de s'orienter comme bon lui semble.
Les tiges sont bloquées par des perles
On a ensuite câblé toutes les tiges en soudant les fils ensemble. Les + et GND sont soudé à deux fils plus gros qui longent l'intérieur du profilé et les IN et OUT sont chainés. Honnêtement, c'est la partie la plus fastidieuse et la moins amusante. Si on doit en reconstruire un, on fera fabriquer un PCB qu'on placera au fond du profilé et on soudera les fils directement dessous. Ça coutera plus cher, mais se sera infiniment plus facile et plus propre.
Le schéma de cablage.
Une fois le système suspendu, on s'est rendu compte que l'alignement des balles, quoique raisonnable, n'était pas parfait, et ce malgré l'astuce des perles. On donc fabriqué un gabarit pour aligner les balles, et une fois celui-ci en place on a immobilisé les tiges en versant de la colle époxy dans le profilé. Un conseil: vérifiez que toutes les LEDS fonctionnent avant de tout coller définitivement.
Immobilisation des balles et collage des tiges
Un fois la colle sèche, on a retiré le garabit et les balles ont conservé leur bel alignement.
Alignées comme à la parade
Le Controleur
Les LEDS sont contrôlées par un Yocto-Color-V2, lui-même controlé par un YoctoHub-Ethernet. On a aussi utilisé un Yocto-Light-V2 pour mesurer la lumière ambiante et pouvoir ajuster la luminosité du lustre en conséquence. Pour avoir quelque chose de propre, on a utilisé DipTrace pour faire fabriquer un PCB qu'on a utilisé pour interconnecter les trois modules. Et on a placé le tout dans une jolie boîte en aluminium.
Le controleur
On s'est donc retrouvé avec 19 balles de ping pong lumineuses, qu'on peut alimenter et contrôler par internet. On peut même programmer à distance des animations autonomes en utilisant le système d'animation du Yocto-Color-V2.
Le système, terminé
Comme le YoctoHub-Ethernet supporte le PoE, il n'y a pas besoin d'alimentation séparée: tout le système est alimenté par le câble Ethernet.
Application: une horloge BCD
Pour tout vous dire, ce petit bricolage n'est pas juste destiné à faire de joli effets de lumière. On compte l'utiliser comme horloge BCD. En effet, avec 19 balles, on peut faire quatre groupes de 4 balles séparés par une balle. C'est largement assez pour afficher en binaire les quatre digits correspondant aux heures et aux minutes.
Application: une horloge BCD
Évidement l'affichage de l'heure ne peut pas se faire manière autonome. Mais en utilisant le système de callbacks HTTP du YoctoHub-Ethernet, un simple script PHP peut faire l'affaire:
include("yocto_api.php");
include("yocto_colorledcluster.php");
include("yocto_lightsensor.php");
$errmsg='';
date_default_timezone_set('Europe/Paris');
if (yregisterhub('callback',$errmsg)!=YAPI_SUCCESS) die($errmsg);
$leds = yFirstColorLedCluster();
if (is_null($leds)) die('No led cluster');
$sensor = yFirstLightSensor();
if (is_null($sensor)) die('No light sensor');
$l = intVal($sensor->get_currentValue() / 2);
$l = max( 0x10, min( 0x80,$l ));
$now = Date("Hi");
for ($i=0;$i<19;$i++)
$buffer[$i]=0x008000 | $l;
for ($i=0;$i<4;$i++)
{$digit = ord($now[$i])-48;
for ($j=0;$j<4;$j++)
$buffer[$i*5+$j]=($digit&(1<<(3-$j)))>0?0x40FF00|$l:0x40FF00|($l>>4);
}
for ($i=0;$i<19;$i++)
$leds->hsl_move($i,1,$buffer[$i],900);
Print('done.');
?>
En guise de conclusion, voici une petite vidéo du système en fonctionnement.