Publié le 23 mars 2024 - par

Un afficheur pour la course de LEDs Open LED Race

J’ai décrit il y a quelques jours une course de LEDs open source OPEN LED RACE (OLR) qui remporte un succès à chaque présentation sur un salon ou une expo. Pour améliorer la lisibilité de la course pour les spectateurs (les participants sont tellement concentrés sur la course qu’ils ne seront sans doute pas concernés) j’ai utilisé la télémétrie fournie par OLR. Sur le port série on récupère les informations de début de course, du gagnant et les positions de chaque coureur. J’ai décidé de les envoyer sur une matrice 16×16 LEDs RGB pour un affichage bien visible.

Une afficheur 16×16 RGB pour la cours de LED Open Led Race

Le matériel

Matériel Lien Quantité
Matrice RGB 16×16 LEDs https://s.click.aliexpress.com/e/_Dc8CvwD 1
Arduino Nano https://fr.aliexpress.com/item/32892316815.html 1
Plaque support Arduino
Bornier à vis
https://fr.aliexpress.com/item/32892316815.html 1
Alimentation à découpage 5V/5A https://s.click.aliexpress.com/e/_DeWGxNX 1
Fils de liaison LEDs (3 pins) https://s.click.aliexpress.com/e/_DlSsACp 1

On est à moins de 20 euros si on commande sur Aliexpress.

Un souci

Le souci ? l’Arduino Nano Every sur lequel tourne OLR envoie les données de télémétrie sur le port USB. Il faut savoir que l’Arduino Nano Every dispose de 2 ports UART Série, contrairement à l’Arduino Nano de base qui n’a qu’un port série partagé entre TxD, RxD et le port USB comme on peut le voir sur le schéma du nano :

Schéma de l’Arduino Nano

Attention : Au vu de ce schéma il faut bien noter que si vous essayez de mettre à jour le programme d’un Arduino Nano via le port USB pendant que le port série RxD est connecté… ça ne va pas fonctionner ! il faut débrancher RxD avant de mettre à jour via USB !!

Alors que sur l’Arduino Nano Every il existe 2 ports série comme le montre le schéma :

 

Ici le port série 0 en rouge est attribué à l’USB et le port Tx1 Rx1 est relié aux bornes TxD RxD de la carte… Donc on peut utiliser les deux ports série en même temps… Sauf que la télémétrie de OLR est envoyée sur le port Série 0 de l’Arduino Every, donc sur l’USB à destination du PC et que… il et impossible de connecter 2 Arduino via leur port USB (sans rentrer dans les détails). On doit passer par le port Série 1 sur un Arduino Every. Il faut donc modifier le programme OLR pour qu’il envoie aussi la télémétrie sur le port Série 1… ou utiliser un Arduino Nano classique.

Tableau provenant du blog de Jean-Christophe, spécialiste de l’Arduino : https://arduiblog.com/2019/07/08/larduino-nano-every/

Alors pourquoi un Arduino Nano Every me direz vous ? Parce qu’il peut gérer plusieurs bandeaux de LEDs de 5 mètres (il a plus de mémoire que le Nano : 6Ko au lieu de 2Ko)  et que lorsque je monte un projet comme celui-ci j’aime bien anticiper sur d’éventuelles évolutions, même s’il n’y a pas d’évolution 😀 .

L’habillage

Pour habiller la matrice je n’ai pas réinventé le fil à couper l’eau chaude (un coucou à Alain B. qui est dans les étoiles 😉 ) puisque BromB a mis en ligne sur Thingiverse un ensemble qui me convenait parfaitement. Mais en fonction de vos besoins vous trouverez d’autres solutions. Vous pouvez télécharger les fichiers en cliquant sur ce lien.

On trouve cette structure dans laquelle la matrice de LEDs vient se poser, LEDs vers le haut. le plot central maintient la matrice en place et évite qu’elle ne se déforme. Des ouvertures sont prévues pour passer les fils.

Sur la matrice de LEDs, on va poser cette grille. Pour l’imprimer il faudra que votre imprimante 3D soit parfaitement réglée car le diffuseur ne possède qu’une couche ! On commence par une couche de blanc, puis les croisillons qui séparent les LEDs et évitent que la lumière ne diffuse entre les LEDs, sont noirs.

Un logiciel comme CURA permet par exemple de programmer un changement de filament après la première couche. (Extensions > Post traitement > Modifier le G-code).

Une fois cette grille imprimée correctement,on peut fermer l’arrière de la boîte avec cette plaque, également disponible sous forme de fichier STL.

La matrice en images

Vue de la matrice de LEDs 16×16 avec l’Arduino nano et l’alimentation à découpage

Vue de la matrice de LEDs 16×16 avec l’Arduino nano et l’alimentation à découpage

Ici le diffuseur blanc (1 couche) a été enlevé. Il est au dessus de la matrice de LEDs et on voit les séparateurs noirs.

La grille noire en haut de l’image permet de bien séparer les LEDs les unes des autres et évite la diffusion de la lumière.

Sur cette dernière image on a les fils de la matrice de LED. en bas l’alimentation et l’entrée des données Din sur laquelle on envoie les données à afficher. au centre l’alimentation sur laquelle j’envoie le 5v de l’alimentation à découpage. En haut la sortie vers une autre matrice avec la prise 3 pins standard.
On peut alimenter la matrice en 5v entre les bornes 5v et GND de n’importe quel câble mais je préfère séparer et alimenter par le câble central. Pour les données, il faudra relier la pin Din à la sortie D6 de l’Arduino (ou une autre mais il faudra modifier le programme en conséquence) et ne pas oublier de relier une des bornes GND à la masse de l’Arduino pour assurer une masse commune.

Le programme

La documentation OLR en ligne donne toutes les informations sur ce qui est envoyé en télémétrie :

On voit que les données sont envoyées puis qu’un code hexadécimal 0x0A est envoyé, équivalent à \n ou Line Feed.

La phase de la course est indiquée par le code R. Pour nous on guette R4 pour démarrer le compte à rebours et R8 qui indique que la course est finie.

On reçoit ensuite la position de chaque voiture dans le tour en cours, et le nombre de tours réalisés. La charge batterie (100) n’est pas utilisée ici.

A la fin de la course, le vainqueur est désigné, ce qui nous permet d’afficher sa couleur sur toute la matrice de LEDs.

 

Les problèmes rencontrés

Lors des tests j’ai eu un souci avec la voiture verte. Dans OLR, le programme envoie la télémétrie vers le port USB et l’affichage sur le moniteur série est parfait on a bien la séquence de télémétrie

p1M2, 75,100

qui signifie que la voiture 1 est dans le tour 2 et a parcouru 75% du tour, que sa batterie est à 100%.

C’est le même buffer que j’envoie sur le port Serial 1 de l’Arduino Nano Every. Lorsque j’utilisais le bouton de la voiture rouge, la verte devenait  p1,75,100 !
Le M2 ayant disparu, le décodage ne se faisait plus et l’affichage de la verte s’arrêtait.

Finalement j’ai résolu le problème de façon détournée en ajoutant un « T, » avant d’envoyer la télémétrie vers le port Serial1 et… ça a résolu le problème. NE cherchons pas, ça fonctionne et c’est le principal. Il suffit de découper la chaîne reçue différemment et c’est bon !

Le programme

Le programme Arduino est livré tel quel et sans garantie, mais il est copyleft et vous pouvez le modifier comme vous voulez. Il est destiné à tourner sur un Arduino Nano qui reçoit les données de télémétrie sur son port série.

Vous pouvez aussi le télécharger en cliquant sur ce lien.  J’ai laissé les print qui ont servi aux tests, vous pourrez les enlever pour alléger le programme.

Modifications de Open LED Race

Ajout de sorties vers Serial1

J’ai ajouté une sortie vers le port Série 1 de l’Arduino Nano Every et j’ai mis « T, » devant la télémétrie des voitures pour réduire le défaut que j’avais sur la voiture verte qui ne s’affichait pas. Maintenant c’est de temps en temps la blanche qui n’affiche rien…??? à suivre

En fait pour la verte au lieu de   p2M1,50,100  je recevais  p2,50,100 (uniquement après avoir utilisé le bouton rouge !) ce qui fausse le décodage et bloque l’affichage de la couleur verte. apparemment j’aurais le même souci avec la blanche ?

 

Vidéo

 

Conclusion

Une belle interface pour Open Led Race. J’ai encore quelques soucis avec la transmission des données. Je suis descendu à 9600 bits/s mais de temps en temps il y a des pertes de données, je vais continuer à chercher la cause et améliorer à mesure. (mettre des ferrites sur le c^ble série, modifier le programme pour vérifier le longueur de la chaine reçue…).

Le programme dans github : https://github.com/framboise314/Display-for-Open-LED-Race

Sources

Projet Open Led Race

https://www.thingiverse.com/thing:5746531

http://electroniqueamateur.blogspot.com/2020/05/matrice-de-leds-rgb-16-x-16-ws2812b-et.html

 

Open Led Race, Faites courir les LEDs !

 

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

Une réflexion au sujet de « Un afficheur pour la course de LEDs Open LED Race »

  1. Ping : Un afficheur pour la course de LEDs Open LED Race

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.