Cette semaine, on vous propose de vous raconter comment on a bricolé une balise lumineuse autonome basée sur le Yocto-Color-V2. L'idée était de tirer partie des séquences pré-programmables de ce module pour produire des effets lumineux qui se remarquent de loin.
Le principe
L'idée était donc d'utiliser un Yocto-Color-V2, une douzaine de barrettes de 8 LEDs NeoPixel et quatre piles pour fabriquer une espèce de gyrophare à LEDs où chaque LED est pilotable indépendamment.
Les deux ingrédients clefs: une barrette de LEDs NeoPixel et un Yocto-Color-V2
Pour résoudre le problème de l'enveloppe transparente, qui n'est pas un truc très facile fabriquer, on est simplement parti d'une boîte d'aromates en plastique.
Pourquoi se décarcasser à fabriquer une jolie boîte quand on peut utiliser une boîte de thym?
La structure interne est réalisée a l'imprimante 3D. Elle est en deux parties:
- un support pour les LEDs et les piles;
- un petit boîtier contenant l'électronique, le connecteur USB et l'interrupteur.
Les deux parties sont vissées ensemble et peuvent se séparer pour changer les piles. Les 12 barrettes de LEDs sont simplement chaînées les unes derrière les autres et l'entrée de la première barrette est directement connecté au Yocto-Color-V2, rien de bien original.
La balise complète
L'alimentation
Le seul point un peu délicat est l'alimentation: on voulait une balise capable de fonctionner de manière autonome. Pour l'alimenter, on voulait pouvoir utiliser des piles toutes simples, les piles rechargeables ayant la détestable habitude d'être vides quand on en le plus besoin. Le problème, c'est que trois piles toutes simples c'est seulement 4.5V et c'est un peu juste alors que quatre piles, c'est 6V voire plus, ce qui détruirait le processeur du Yocto-Color-V2 et les LEDs NeoPixels. On faut donc ramener cette tension de 6V à 5V. Pour cela il y a deux solutions:
Le LDO
Un LDO permet de descendre une tension en dissipant l'énergie excédentaire: cette énergie est transformés en chaleur et est donc perdue. Cette perte est plus ou moins proportionnelle à la différence de tension et au courant demandé. Un LDO est donc recommandé pour les applications demandant peu de courant et une faible chute de tension.
Le buck
Un buck, ou "step-down converter", converti l'énergie au lieu de la dissiper. Pour faire simple, il convertit la tension excédentaire en courant. Mais ce n'est pas magique pour autant: il utilise aussi une partie de l'énergie disponible pour son propre fonctionnement, il va même consommer lorsqu'on ne tire pas de courant dessus. En pratique, le rendement d'un buck dépasse rarement 80-90%. Ces caractéristiques le rendent plutôt intéressant pour les applications qui demandent une chute de courant importante, transformer du 12V en 5V par exemple.
Il se trouve qu'on a utilisé un buck D24V10F5 de Pololu, parce c'est ce qu'on avait sous la main. Mais dans notre cas, un LDO capable de supporter jusqu'à 2A aurait été une bien meilleure solution.
Le D24V10F5 de Pololu
Connecteur USB et interrupteur
On a déporté le port USB du Yocto-Color-V2 sous la balise à l'aide d'un connecteur soudé sur un petit PCB. Pour éviter que le buck ne vide bêtement les piles pendant quand la balise n'est pas utilisée, on a utilisé un commutateur DPDT qui permet d'isoler le buck quand les piles ne sont pas utilisées.
Le dessous de la balise
Suivant la position du commutateur, l'alimentation vient soit du port USB, soit des piles par l'intermédiaire du buck. Mais le port USB fonctionne parfaitement dans les deux cas parce que la terre, D+ et D- restent connectés. Par exemple, on peut y brancher un YoctoHub-Wireless-g pour piloter les changements de séquences à distance.
Le schéma de la balise
Programmation
Quelques lignes de codes permettent de pré-programmer des séquences simples mais spectaculaires, voici le code Delphi pour pré-programmer et lancer un simple gyrophare vert:
SysUtils,
Yocto_api,
Yocto_colorLedCluster;
var
errmsg:string;
c:TYcolorledCluster;
i:integer;
begin
YregisterHub('usb',errmsg);
c:=YfirstColorLedCluster();
c.resetBlinkSeq(0);
c.resetBlinkSeq(0);
c.addRgbMoveToBlinkSeq(0,$00FF00,000);
c.addRgbMoveToBlinkSeq(0,$00FF00,150);
c.addRgbMoveToBlinkSeq(0,$000000,000);
c.addRgbMoveToBlinkSeq(0,$000000,450);
for i:=0 to 95 do
begin
c.linkLedToBlinkSeq(i,1,0,(i shr 3)*150);
c.linkLedToBlinkSeqAtPowerOn(i,1,0,(i shr 3)*150);
end;
c.set_blinkSeqStateAtPowerOn(0, 1);
c.saveBlinkSeq(0) ;
c.saveLedsConfigAtPowerOn();
c.startBlinkSeq(0);
end.
Un gyrophare vert, mais on aurait aussi pu le faire rose
Les possibilités sont pratiquement infinies, on pourrait même imaginer une application tournant sur un téléphone: L'utilisateur connecterait la balise au téléphone, choisirait une animation, le téléphone programmerait la balise, et l'utilisateur n'aurait plus qu'à débrancher la balise et la mettre en route.
Et ça marche?
Oui ça marche plutôt pas mal, ce gadget simple peut s'avérer utile si vous avez besoin de placer une (grosse) lueur dans la nuit. Jugez par vous-même.