TriLeds
2022 · Seul auteur, 72 commits, janvier à octobre 2022.
Mon TFE 2022 à l'EPHEC : des triangles LED modulaires qui s'assemblent par aimants et pogo pins, pilotés depuis une API Flask et une application React avec une roue de couleurs et une visite guidée.
Ce que j'ai livré
- Des triangles LED modulaires qui s'emboîtent : aimants N35, pogo pins, bandes LED WS2815
- Des boîtiers imprimés en 3D, conçus sous SolidWorks et affinés sur plusieurs prototypes
- Une API Flask sur un Raspberry Pi 3 : authentification JWT, limitation de débit, 15 modes d'animation
- Une application React avec une roue de couleurs et une visite guidée
- Un déploiement qui survit à un redémarrage : Gunicorn, Nginx, systemd
En chiffres
- modes d'animation
- 15
- commits, seul auteur
- 72
- de janvier à octobre 2022
- 10 mois
- Raspberry Pi 3 fait tourner les LED, l'API et l'application
- 1

Contexte
Mon travail de fin d'études (TFE) pour mon bachelier en informatique à l'EPHEC : un produit lumineux modulaire et physique, construit seul du matériel imprimé en 3D jusqu'à l'application web qui le pilote.
Le problème
Une installation lumineuse faite de triangles physiques séparés ne fonctionne que si chaque triangle se connecte, s'alimente et échange des données de façon fiable avec ses voisins, et survit à des assemblages et désassemblages répétés sans qu'une connexion lâche.
Contraintes
Les connecteurs devaient tenir malgré des assemblages et désassemblages répétés, sans joint soudé. La logique d'animation devait tourner sans à-coups sur un Raspberry Pi 3 sans GPU dédié. Et comme l'API exposée sur le réseau pilotait du matériel réel, elle avait besoin d'une vraie authentification, pas d'un point d'accès ouvert.
Ce que j'ai construit, en détail
Des triangles LED modulaires qui s'assemblent avec des aimants N35 et se connectent par pogo pins, câblés avec des bandes LED adressables WS2815. Un Raspberry Pi 3 héberge tout : le pilote LED, une API Flask (authentification JWT, limitation de débit) exposant 15 modes d'animation, et une application React avec une roue de couleurs et une visite guidée pour les nouveaux utilisateurs. Les boîtiers des triangles ont traversé plusieurs cycles de conception sous SolidWorks et de prototypes imprimés en 3D avant que la forme tienne correctement ses aimants et ses pogo pins. L'ensemble se déploie avec Gunicorn derrière Nginx, lancé comme service systemd pour survivre à un redémarrage.
Décisions
- Des pogo pins plutôt que des connexions soudées
- Les triangles devaient s'assembler et se séparer à répétition sans user une connexion. Les pogo pins transportent à la fois l'alimentation et les données à travers le joint magnétique, donc réassembler l'installation ne veut jamais dire ressouder.
- Impact L'installation se démonte et se remonte sans fer à souder.
- Une API authentifiée par JWT devant le matériel
- L'API Flask se place entre l'application web et le pilote LED du Raspberry Pi, avec une authentification JWT et une limitation de débit. L'application React et sa visite guidée parlent à cette API, jamais directement au matériel.
- Impact Aucune requête n'atteint les LED sans jeton valide, et la limite de débit plafonne les appels à l'API.
- Itérer le boîtier en prototypes imprimés en 3D
- SolidWorks permettait de tester à l'écran l'ajustement aimant-pogo pin, mais seul un prototype imprimé montrait si le joint tenait vraiment à l'assemblage réel. Plusieurs cycles d'impression et de test ont façonné le triangle final avant qu'il soit assez fiable pour être câblé et allumé.
- Impact Le boîtier final garde ses aimants et ses pogo pins en place, montage après montage.
Résultat
Une installation lumineuse modulaire fonctionnelle avec 15 modes d'animation, pilotable depuis une application web avec visite guidée, et le projet qui m'a fait construire pour la première fois un objet physique de bout en bout, du boîtier imprimé au Python sur le Pi et à l'application, le même réflexe qu'on retrouve aujourd'hui dans les abat-jour imprimés en 3D de Studio Cocha.
72 commits, seul auteur, janvier à octobre 2022, dépôt public.
Stack
- Python
- Flask
- React
- Raspberry Pi
- SolidWorks
- Gunicorn
- Nginx



