Balles de jonglage avec micropython – part 1

Balles de jonglage avec micropython – part 1

Lors de ma première participation à un SummerCamp à Nantes en 2013, j’avais discuté d’un projet ludique qui combinait plein de sujets qui me bottaient bien : l’électronique, le jonglage, l’informatique, le libre, la modélisation d’un objet, le moulage etc. Le principe du projet : des balles de jonglages lumineuses dont les lumières et les couleurs varient en fonction des types de jonglage que l’on effectue. Quelques années plus tard, l’idée continue de trotter dans ma tête et je continue d’apprendre des choses en électronique qui pourrait au bout d’un moment (et le temps le permettant) faire en sorte que je finisse par faire avancer ce projet. Une bande de potes m’ont offert un « bon pour » de matos électronique, et je me suis dit que c’était l’occasion de passer le pas et acheter le matos nécessaire pour mettre en œuvre ces idées (même si dans l’absolu j’aurais idéalement aimé faire ça avec des composants récupérés à droite à gauche).

Matos

Du coup, voici de quoi je suis parti, pour réaliser 3 balles de jonglage :

Il existe déjà un certain nombres de projets similaires, certains avec des bouts en accès libre, mais pas tous :

  • Roger Antonsen avec une TEDx à ce sujet, il utilise ses balles de jonglages pour sensibiliser aux mathématiques et aux sciences en général de manière ludique (vidéo à la MakerFairvidéo TEDx et autre TEDx sur les maths)
  • Arkadi Rafalovich avec des balles de jonglages open hardware et open source et son « Chess Timer » reprenant des balles lumineuses.
  • Sylvain GARNAVAULT de la Companie Parabole avec des balles de jonglage mais aussi des quilles utilisées dans du spectacle vivant (notamment le spectacle INTERFACES, vidéos)
  • Jonathan Jamieson a publié du code pour ses balles pilotées par Android (code, vidéo)
  • Juggglow – des Autrichiens qui ont des balles connectées avec une application Android pour compter le nombre de passes et s’entraîner avec l’application

Coté logiciel il y a quelques logiciels libres de simulation de jonglage qui pourront être utiles dans le processus de développement  :

Prototype – débuts

On commence par brancher les Wipy2.0 et se faire un environnement de développement (initialement sous Pymakr un fork de Eric IDE, puis sous Atom, maintenant sous VSCode). Il y a plusieurs mises à jour firmware à faire bien évidemment (d’ailleurs quasiment à chaque fois que je m’y remets). La documentation de pycom est pas trop mal faite : https://docs.pycom.io/chapter/gettingstarted/

Wipy2.0 sur une breadboard branchées à un port serie pour la mise à jour du firmware

Wipy2.0 sur une breadboard branchées à un port serie pour la mise à jour du firmware

Trois wipy avec clignotent en bleu Trois wipy avec clignotent en bleu (heartbeat)

Pour l’instant j’ai réussi à faire les choses suivantes :

  • mettre à jour le firmware des wipy (ce qu’il faut faire souvent vu que c’est pas vraiment stable et c’est vraiment approche prototypage, il n’y a pas encore toutes les features annoncées sur la boite…),
  • jouer avec la LED incorporée avec la wipy directement en python, par exemple en faisant un dégradé depuis le vert vers le rouge,
  • connecté la wipy au wifi avec mot de passe,
  • connecté la wipy à un bus MQTT pour envoyer et lire des informations (section à part entière plus bas),
  • connecté et soudé le chargeur de batterie LI-PO pour faire tourner le microcontrôleur sans être branché,
  • et j’en oublie.

MQTT

Me suis dit que ce projet était l’occasion d’aller tester MQTT.Il s’agit d’un bus de communication avec une topologie « publish/subscribe », des canaux sur lesquels on écrit ou on s’abonne.

L’idée est de faire causer les balles entre elles pour qu’elles puissent décider quelle couleur elles doivent afficher, et ce, idéalement, sans causer à une machine en plus. Pour l’instant, il semble difficile de faire tourner un serveur MQTT sur une des balles, donc ce ne sera peut-être pas la techno idéale, mais j’y apprends des choses. Peut-être les balles pourront être couplées à une Raspberry Pi Zero W qui a du wifi et hébergerait ferait une partie du boulot. Pour l’instant, sur mon réseau local, j’avais un serveur MQTT déjà tout prêt sur une vielle Raspberri Pi qui fait tourner ma sonde teleinfo.py, node-red et home-assistant (et son composant mqtt).

Micropython vs Arduino

L’avantage de micropython par rapport à Arduino est que je suis quand même plus à l’aise pour coder étant donné que le langage est plus facile d’accès que du C++ (et accessoirement c’est ce que je pratique au quotidien au boulot). En revanche, l’inconvénient est que l’écosystème est beaucoup plus petit, donc pour du matériel bien supporté et ayant des librairies bien faites en Arduino, avec micropython c’est parfois un peu le désert, ou des choses qui marchent à moitié. Ce que je n’ai pas réussi à faire pour l’instant :

  • faire marcher de manière consistante le ruban de LEDs

Problèmes WS2812B avec micropythonProblèmes WS2812B avec micropython

  • lire l’accéléromètre, j’envisage d’essayer une autre puce que j’avais dans mes stocks (ADXL345) qui semble avoir une librairie en micropython
  • faire causer les wipy en bluetooth entre elles ou avec une tablette ou téléphone android

J’avoue avoir du mal à recommander les produits de PyCom à ce stade, je trouve la qualité assez variable.

Expérimentation en mode monitoring énergétique

Pour continuer à avancer, j’ai mis en place une petite expérimentation qui se branche sur mon système de mesure d’électricité dont j’ai parlé précédemment. Je prends la consommation apparente (PAPP dans le jargon), et connaissant ma moyenne de consommation et le minimum et maximum, je vais afficher où est ma consommation par un code couleur : vert pour min, jaune pour moyen, rouge pour max. Niveau techno, j’en profite pour toucher à des trucs qui me font marrer, donc ce n’est pas forcément les composants retenus pour l’implémentation finale. Oui, on va dire que c’est usine à gaz! Dans node-red, toutes les minutes, je lance un script python qui collecte l’info de teleinfo et pond un dictionnaire, je le convertis en JSON (version JS), après avoir extrait la valeur PAPP, je converti cela en valeur RGB et l’envoie sur le bus MQTT

De l’autre côté la wipy étant connectée au wifi, elle se connecte au même bus MQTT et chope cette valeur et l’affiche sur la LED. Du coup, je n’utilise plus que le chargeur, la batterie et la WiPy.

Petite démo en vidéo : quand on branche la bouilloire (gros poste de consommation d’électricité) on passe d’un voyant vert à rouge, et on retourne à vert à la fin.

Voilà, c’est pour faire joujou, je doute qu’un indicateur visuel tel que celui là permette une boucle de rétroaction pour agir sur sa consommation énergétique. Cela permet aussi de voir que la question de la batterie et de sa consommation ne va pas être simple, en l’état, ce prototype (donc sans les composants) ne tient que deux heures sur batterie. Ça fait peu pour une LED connectée. Ça doit bouffer beaucoup de ressources en wifi et MQTT. Va falloir voir comment optimiser cela.

Le code source est publié par ici (gros work-in-progress): https://framagit.org/arthurlutzim/jugglewipy

Suite

Trop de choses restent à faire, mais essayons tout de même d’en faire une liste :

  • expérimenter de construire une balle de jonglage en latex
  • modéliser avec FreeCAD et imprimer en 3D un boîtier pour tenir les composants entre eux

boule wipy

  • essayer de brancher un moyen de communication supplémentaire : des connecteurs RF 433MHz que j’ai en stock,
  • adapter un logiciel de jonglage pour commencer à coder des séquences de lumières (ou repartir from scratch en python),
  • faire marcher les trucs qui ne marchent pas encore sur la wipy2.0
  • continuer d’explorer MQTT et ses différents clients
  • jouer avec midi2mqtt pour contrôler les balles avec une table de mixage MIDI (BCF2000)
  • déterminer comment « programmer » les enchaînements de couleurs,
  • détecter les mouvements,
  • détecter les hauteurs (théoriquement possible, je ne sais pas à quel point il faut calibrer),
  • trouver un moyen d’avoir des boutons pas trop planqués mais pas trop gênants non plus,
  • continuer à documenter le tout.

Bref, y a encore beaucoup de boulot, et plein de choses à apprendre.

ps. n’arrivant pas à trouver un bon moyen d’héberger les petites vidéos, j’ai exploré du côté des GIFs avec ffmeg, gifify et gifsicle. Je maîtrise pas encore complémentent la taille des fichiers, désolé si ceux-ci sont trop gros. Le tout hébergé sur un lutim qui est installé avec yunohost. Merci le libre!

 

Afficher les commentaires Masquer les commentaires

Laisser un commentaire

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