BixiBot
Création d’un indicateur interactif de disponibilité des vélos à une borne libre-service BIXI précise.
Informations sur le projet
BixiBot est un panneau mural en bois muni de DELs qui indiquent si des vélos sont disponibles ou non à la station de vélopartage près de chez moi. Il existe plusieurs applications qui donnent cette information, mais je trouve plus simple et amusant de l’avoir affichée près de ma porte d’entrée.
Matériel
Avant de construire le projet, j’ai d’abord créé une maquette :

Dans un magasin d’artisanat, j’ai trouvé un panneau de bois qui ressemblait à ma maquette et qui était de la bonne taille. J’ai creusé l’arrière du panneau pour y loger l’électronique à l’aide d’une mèche Forstner.

J’ai choisi d’utiliser des DELs WS2812 de 8mm car elles sont esthétiques et ne nécessitent pas de diffuseur contrairement à leurs équivalentes 5050. À l’époque, ces DELs étaient nouvelles et j’ai obtenu l’un des premiers lots chez Soldering Sunday.

Une fois le perçage terminé, je devais graver le logo Bixi et le nom des rues où se trouve la station. Cette tâche dépassant mes compétences en bois, j’ai fait appel à un atelier de découpe laser. J’ai trouvé une version SVG du logo Bixi et conçu la disposition du panneau dans un logiciel de dessin vectoriel. Je suis allé chez Umake à Montréal. Ils ont été très habiles et ont même proposé de découper le logo dans de l’acrylique rouge gratuitement. J’ai ainsi pu incruster le logo dans le panneau, ce qui rend le rendu très net !

J’ai ensuite teint et verni le panneau, puis j’ai intégré l’électronique. J’ai commencé par les DELs, poussées dans les trous et fixées à la colle chaude. J’ai soudé les bus d’alimentation et de masse avec du fil de cuivre nu, puis les lignes de données.

J’ai choisi le SparkCore comme microcontrôleur pour pouvoir contrôler le panneau par WiFi. J’avais initialement fait une erreur en perçant 14 trous au lieu de 15, j’ai donc ajouté un encodeur RVB qui fait office de 15e DEL et peut aussi déclencher certaines actions.

Logiciel
Les données des stations de vélos sont disponibles sous forme d’un gros fichier XML, difficile à analyser sur un microcontrôleur. Pour des raisons de bande passante, j’ai décidé de faire l’analyse sur mon serveur WebFaction. J’ai écrit une petite application web utilisant le framework web.py. L’application analyse le nombre de vélos disponibles et de stations libres. Comme le fichier ne contient pas la position des vélos disponibles dans le support, j’ai codé un retour aléatoire des positions pour un rendu plus naturel sur le panneau. Une requête à https://bixibot.studioimaginaire.com/station retourne un tableau JSON avec l’état de chaque vélo.
La mise à jour du panneau est gérée par Node-Red tournant sur un serveur à la maison. J’ai créé un flux qui récupère les données JSON de mon application web.py et utilise l’API web du Spark Core pour mettre à jour l’affichage. Cela peut sembler compliqué, mais l’avantage est la modularité. Par exemple, comme le service de vélopartage ne fonctionne pas en hiver, je peux utiliser un autre flux dans Node-Red pour afficher la température.

J’espère que ce projet vous plaît ! N’hésitez pas à poser des questions dans les commentaires.

Album photo ici.
Outils
- Python
- WS2811
- SparkCore
- NodeRed