Pendentif de simulation de fluides
(mitxela.com)- Projet matériel artisanal qui intègre une simulation de fluide FLIP en temps réel et un écran LED circulaire dans un bijou de petite taille, avec pour objectif de créer un objet de simulation portable
- Le STM32L432KC est overclocké à 100MHz, et l’accéléromètre, le circuit de charge et la puce de supervision de tension sont intégrés sur un PCB 4 couches de 0,8mm pour gérer à la fois le calcul et l’affichage dans un petit pendentif
- Grâce au charlieplexing diagonal et au pilotage cyclique par DMA, le nombre de vias et la surcharge d’affichage ont été réduits, tout en révélant aussi des pièges de fabrication comme la disposition des LED et les ponts de soudure
- L’implémentation FLIP a été réécrite à partir du tutoriel Ten Minute Physics, et les collisions de particules ainsi que la hashgrid ont un impact majeur sur la stabilité et la vitesse, même à la petite échelle d’un 8x8
- Au total, 10 pendentifs ont été terminés, mais il reste des points à améliorer comme l’orientation du verre et du joint, la protection du connecteur de charge et l’usinage du boîtier métallique, ce qui laisse penser qu’une production en série ne serait pas simple
Un dispositif portable de simulation de fluides
- Le pendentif de simulation de fluides est un bijou artisanal qui exécute une simulation de fluide FLIP en temps réel
- Il utilise un boîtier plaqué or et un verre de montre protecteur, avec à l’intérieur un écran LED circulaire qui affiche le mouvement du fluide
- Le premier pendentif a été fabriqué en mars 2024, puis plusieurs autres ont été réalisés dans les mois suivants
- Il existe actuellement un petit lot de pendentifs, dont certains sont en vente tant qu’il y a du stock
- La motivation du design et les premières étapes du projet sont aussi visibles dans une vidéo YouTube
De Simsim au pendentif
- À la suite d’une précédente animation de volumetric display, le projet est né d’une volonté d’implémenter au final une simulation de fluide en temps réel capable de produire une sorte de boule à neige virtuelle en 3D
- Le concept Simsim issu de cette démarche est devenu la base de ce pendentif
- Le résultat a permis de confirmer non seulement la simulation de fluide, mais aussi les avantages inattendus d’un écran charlieplexé en diagonale
Configuration matérielle
- Les principaux composants sont les suivants
- STM32L432KC : ARM Cortex-M4, avec FPU, overclocké à 100MHz
- ADXL362 : accéléromètre ultra basse consommation
- MCP73832 : contrôleur de charge pour batterie LiR2450
- TPS7A02 : régulateur ultra basse consommation
- TPS3839 : puce de supervision de tension d’alimentation
- Le circuit est réalisé sur un PCB 4 couches de 0,8mm
- Il utilise une batterie bouton LiR2450, et le design final inclut un contrôleur de charge ainsi qu’une protection contre la basse tension
- L’objectif est d’atteindre environ 10 heures d’autonomie sur une charge complète
Charlieplexing diagonal et pilotage de l’affichage
- Le charlieplexing diagonal permet de réduire de moitié le nombre de vias par rapport à une matrice classique
- Sur un petit écran à LED à faible pas, le nombre de vias devient facilement un facteur limitant, ce qui rend l’approche particulièrement efficace
- Les LED d’un même net étant placées aux extrémités, la plupart des ponts de soudure n’affectent pas les performances
- L’écran est piloté en mode circulaire DMA sans surcoût
- En gérant deux flux DMA, il est possible de piloter une matrice charlieplexée de la même façon
- Une table de correspondance est nécessaire pour relier LED et pixels
- Modifier le mapping n’a pas de coût supplémentaire
- Les signaux de la matrice peuvent être reliés à n’importe quelles broches de port du microcontrôleur, ce qui facilite le routage
- Piloter directement un grand écran depuis les GPIO peut poser des problèmes de luminosité à cause de la résistance
ondes FET de sortie- Le charlieplexing n’allume qu’un seul pixel à la fois, donc l’effet de cette résistance se répartit uniformément sur tous les pixels
- Il est aussi possible de régler la luminosité de l’écran en modifiant la tension de la puce
Implémentation du simulateur de fluides FLIP
- La simulation FLIP s’appuie sur les travaux Ten Minute Physics de Matthias Müller, en particulier le tutoriel « How to write a FLIP Water Simulator »
- Le code n’est pas un portage direct, mais une réimplémentation réalisée en suivant le tutoriel
- Dans une simulation de fluide eulérienne, le déplacement du fluide est géré par l’advection, mais avec FLIP, le mouvement des particules transporte lui-même le fluide, sans étape d’advection séparée
- L’étape des collisions de particules s’est révélée indispensable
- Sans cette étape, l’ensemble du fluide s’effondre en une masse superposée
- Les particules se repoussent mutuellement via une impulsion proportionnelle à l’inverse de la distance
- Le code final comportait un commutateur entre collisions simples et collisions par hashgrid
- La hashgrid ajoute du coût en calcul comme en compréhension, mais apporte un gros gain de vitesse même à une petite taille comme 8x8
- L’exemple Ten Minute Physics contenait une petite erreur dans la condition aux limites de gauche, qui empêchait le fluide de s’arrêter, et cela a été repéré
Expérimentations de simulation et estimation mémoire
- Pendant le développement, divers résultats de simulation de fluide anormaux ont été produits, et le rendu des particules donnait souvent des formes rappelant des œufs de grenouille
- Le tracé de densité montrait le nombre de particules se chevauchant dans chaque cellule de grille, avec des effets visuels de type onde de choc lors des impacts contre les parois
- Environ deux semaines après la publication du concept Simsim, une démo Simsimsim a été réalisée
- Il s’agissait d’un outil de test interne pour vérifier jusqu’où la densité de LED pouvait être réduite tout en gardant une apparence fluide
- Elle a aussi servi à estimer grossièrement la RAM nécessaire pour un portage bare metal
- Le STM32L432KC dispose de 64KB de RAM, et un écran de diamètre 16 demande environ 26KB
- Le code source de la démo et du pendentif n’a pas encore été publié, mais une publication est prévue plus tard
Fabrication du premier pendentif
- Avant de fabriquer le PCB, un prototype câblé à la main a été réalisé pour vérifier que le motif d’écran charlieplexé fonctionnait bien en pratique
- Les LED ont été maintenues avec une carte découpée au laser, et une matrice 8x9 a été reliée à une carte de développement STM32L432
- La soudure du fil émaillé étant extrêmement fastidieuse, cela a conduit à concevoir rapidement un PCB
- La simulation FLIP a d’abord tourné sur le L432 dans un petit carré 8x8, avant d’être étendue à une zone correspondant au coin supérieur gauche d’un pendentif virtuel
- Une matrice charlieplexée classique exige au moins un via par LED, mais la disposition diagonale réduit cela de manière importante
- Sur les 240 LED possibles avec 16 GPIO, l’écran réel n’avait besoin que de 216 LED
- L’écran était censé être circulaire, mais avec un diamètre de 16, la disposition lui donne plutôt un aspect octogonal
PCB et conception mécanique
- Le premier design de PCB s’est avéré plus simple que prévu, notamment grâce au nombre réduit de vias
- Les couches internes du PCB ont été arrondies avec le plugin KiCad track-rounding
- Le panneau a été configuré manuellement pour que l’équipement de pick-and-place puisse saisir les cartes
- Pour les contacts de batterie, des bornes à ressort dorées montées sur PCB de type RFI shield finger ont été utilisées
- Il a fallu du temps pour trouver un connecteur de charge magnétique bas profil de 4mm, et la référence utilisée est le cx-4mm-jz de WNRE
- Les connecteurs de charge 4mm peuvent être incompatibles entre câbles même si leur polarité et celle des aimants sont identiques
Usinage métal et boîtier
- Le boîtier a été usiné en laiton, puis plaqué or
- La première structure utilisait un système snap-back, puis un joint torique a été ajouté pour supprimer le jeu et obtenir aussi une étanchéité
- Le joint torique a fortement assoupli les tolérances nécessaires
- À partir du deuxième pendentif, un verre de montre a été ajouté au-dessus de l’écran
- Un verre de 27,5mm a été choisi et, avec un joint de 0,45mm, le diamètre total est monté à 28,4mm
- Le verre s’insérait bien avec une pression adaptée, mais il lui est aussi arrivé de se briser en étant pressé sans outil dédié
Problèmes électriques révélés à l’assemblage
- Sur le premier PCB, l’absence d’accès à la broche reset du microcontrôleur a posé problème
- L’écran utilisait tout le Port A, et SWDIO/SWCLK étant aussi sur le Port A, il devenait difficile de flasher un nouveau firmware pendant le développement
- Un fil temporaire était nécessaire pour réinitialiser la puce juste avant la programmation
- Le bus keeper de la ligne d’interruption de l’accéléromètre était l’une des causes des glitches d’affichage
- Une résistance a d’abord été ajoutée, puis le problème a été entièrement résolu avec une diode
- La détection logicielle de basse tension batterie simplifiait le circuit, mais laissait subsister une part d’incertitude
- Une puce de supervision matérielle a donc été ajoutée dans la révision suivante du PCB
- Un circuit a aussi été mis en place pour détecter la connexion du connecteur de charge et tirer la broche reset
- Si le câble de charge est brièvement mis en court-circuit pendant la connexion, le polyfuse chauffe et la tension peut monter lentement, empêchant la génération de l’impulsion de reset
- Il a été jugé suffisant, si nécessaire, de connecter d’abord la partie magnétique puis de brancher l’USB ensuite
Économie d’énergie et réveil
- Le pendentif n’a pas de bouton, et sa seule entrée est constituée des données de l’accéléromètre
- Au départ, l’idée était d’activer le deep sleep en faisant tourner le pendentif au bout de sa chaîne
- Finalement, la méthode retenue a été d’augmenter à 6g le seuil de l’interruption de détection de mouvement de l’accéléromètre
- Les réveils accidentels sont réduits, et il se rallume facilement si on le secoue
- Cette méthode ne consomme pas plus qu’un mode sleep normal
Deuxième PCB et supervision de tension
- Avant le deuxième pendentif, le circuit de reset, la diode sur la ligne de wake-up et le superviseur matériel ont été intégrés au PCB
- La puce de supervision d’alimentation TPS3839 consomme 150nA, ce qui, avec les 25nA du régulateur TPS7A02, reste extrêmement faible pour une batterie bouton
- La batterie bouton LiR2450 a une capacité de 120mAh, et il faudrait plus de 13 ans pour la décharger à 1000nA
- Le seuil de coupure basse tension a été fixé à 3,08V
- Cette valeur a été choisie de manière conservatrice pour que la batterie ne subisse pas de contrainte chimique excessive, même après être restée des années sur une étagère à ce niveau
- Si les circuits de protection lithium classiques coupent vers 2,5V, c’est parce que la tension aux bornes sous charge est plus basse que la tension à vide
- Le TPS7A02 existe en version P avec active discharge et en version sans cette fonction
- La version non-P laissait le microcontrôleur et les condensateurs d’alimentation se décharger lentement même avec le régulateur désactivé
- Après passage à la version P, le problème de soft-lock près du seuil du superviseur a disparu
Troisième pendentif et structure fermée
- Sur le troisième pendentif, le snap-back a été abandonné au profit d’un boîtier en forme de cup
- Le verre de montre reste amovible, mais l’accès réel implique de retirer la vitre ou, au pire, de la casser
- Les verres de rechange coûtent environ 50p, et comme il y a un circuit de charge et une protection basse tension, il n’est pas jugé nécessaire de remplacer la batterie bouton
- La forme cup simplifie nettement l’usinage métal et réduit aussi l’épaisseur totale d’environ 1mm
- Comme le connecteur magnétique doit être monté en premier, un câblage souple en fil multibrins 36AWG a été utilisé
- La résistance entre le boîtier et la masse du PCB a été mesurée à 0.00Ω au multimètre
- La profondeur interne étant insuffisante, appuyer sur le verre pouvait comprimer le circuit ; environ 0,3mm ont été retirés à la main pour corriger cela
Améliorations de fabrication à partir du quatrième
- À partir du quatrième, l’intérieur a été usiné un peu plus profondément pour que le circuit s’insère plus facilement
- L’arrière a été aplani par lapping
- Du papier abrasif a été fixé sur une surface plane, puis le laiton a été frotté avec des abrasifs de plus en plus fins
- Un 5C collet holder de tour Hardinge a été utilisé pour maintenir les pièces parfaitement centrées tout en limitant les dégâts sur la surface externe
- La face arrière du boîtier évidé est descendue sous 1mm d’épaisseur, et une fois, une passe de coupe trop importante a même traversé la pièce
- Pour fixer le jump ring, il valait mieux l’attacher avec un fil souple avant de le souder
- Le plaquage or adhère mal sur la soudure à l’étain, et ce contraste a finalement été accepté comme élément visuel
Connecteur de charge et problèmes d’usage
- La zone autour du connecteur de charge magnétique doit être scellée à l’époxy, sans recouvrir les points de soudure, ce qui rend l’opération délicate
- Si l’on accroche le connecteur de charge sans précaution, des étincelles peuvent se produire même en 5V
- À répétition, cela peut user rapidement les deux contacts
- Pour éviter les étincelles, il suffit d’attacher d’abord le côté magnétique puis de brancher l’USB ensuite
- Une poussée sous un angle maladroit peut aussi dans certains cas inverser la polarité
- Une diode ajoutée plus tôt aurait permis de s’en protéger facilement, mais le problème a été découvert trop tard
- La LED rouge d’indication de charge fonctionne bien et projette à travers l’époxy un petit cercle rouge sur le câble
Quantité terminée et boîtier de rangement
- Comme boîtier portable, le conteneur plastique d’un verre de visée Nikon F3 convenait presque parfaitement ; ensuite, une boîte plastique de taille similaire a été utilisée avec une doublure en mousse antistatique
- Au total, 10 pendentifs ont été terminés
- Certains présentent des rayures ou des défauts de surface
- La fabrication s’est arrêtée une fois tous les circuits imprimés préparés utilisés
- S’il fallait en refaire, il faudrait modifier le design pour que le verre et le joint se mettent en place de façon plus fiable
- Le PCB pourrait être légèrement réduit
- Des encoches ou découpes d’alignement pourraient être ajoutées
- Un épaulement pour poser le PCB ainsi qu’une découpe pour les fils du connecteur pourraient être prévus
- Il a été découvert tardivement que le verre comme le joint ont tous deux une orientation
- La taille de la lunette du verre diffère entre le haut et le bas
- Le joint non plus n’est pas symétrique lorsqu’on l’observe au microscope
- Cela a probablement influé sur la force nécessaire pour presser le verre selon les pendentifs
Choix des matériaux et possibilité de production en série
- La possibilité de tout réaliser en or a aussi été envisagée, mais usiner le tout dans une masse d’or pur ne serait pas raisonnable
- L’argent est plus économique à travailler, et avec une forme cup, il serait aussi possible de fabriquer le corps en soudant une bande et une plaque d’argent, puis en reprenant légèrement l’ensemble au tour
- Le PCB se prête facilement à la production en série, mais le boîtier présente d’autres difficultés
- Il serait possible de supprimer le plaquage or et d’utiliser de l’acier inoxydable
- La forme cup simplifie l’usinage CNC
- Le jump ring pourrait exiger une opération séparée comme une soudure TIG
- Une version très bon marché pourrait aussi être réalisée avec un PCB et un boîtier imprimé en 3D
- La principale raison pour laquelle une production en série semble peu probable est tout simplement que d’autres projets occupent déjà beaucoup de temps
Conclusion et regrets restants
- Ce projet peut être considéré comme une réussite, et la qualité de fabrication est meilleure que sur l’amulet précédent
- Malgré cela, même après en avoir fabriqué 10, le résultat n’est pas jugé totalement satisfaisant
- Le fait de ne pas avoir gravé de date ni de numéro de série au dos reste un regret
- Pour fabriquer de meilleurs bijoux et progresser en usinage métal, il faudra investir dans du matériel et continuer à apprendre
- Les photos portées ont été difficiles à réaliser
- Une vitesse d’obturation lente est nécessaire pour éviter le tearing de l’écran
- L’affichage est plus intéressant en mouvement, ce qui le rend difficile à capturer en photo
1 commentaires
Avis de Hacker News
La vidéo est intéressante : je l’ai regardée presque jusqu’au bout sans même l’avoir prévu, et j’ai été complètement happé
Quand je vois ce genre de logiciel, j’ai encore plus de mal à comprendre la tendance qui consiste à dire qu’un LLM est « meilleur que les meilleurs développeurs humains » parce qu’il réussit des évaluations de code
Quand j’ai demandé à plusieurs modèles de Claude et de ChatGPT de m’aider sur des problèmes spécialisés, c’était catastrophique ; ils sont excellents pour du CRUD ou des algorithmes courants, mais très faibles dès qu’il s’agit de choses nouvelles ou atypiques
Quand on voit quelque chose comme la « simulation FLIP » de ce projet, je me demande si même ChatGPT o3, qui n’est pas encore public, aurait du mal à écrire le logiciel qui fait fonctionner ce pendentif
Je pense donc que ce jugement n’est pas juste. Les LLM sont forts quand il s’agit de partir d’une feuille blanche et d’implémenter quelque chose avec des frontières d’API claires, que ce soit une application CRUD ou une simulation physique
Là où ils sont plutôt faibles, à mon avis, c’est dans de grosses bases de code legacy, avec des tâches qui traversent plusieurs modules et beaucoup d’indices ambigus
Le plus gros problème est la précision du simulateur généré. Les LLM ne savent pas produire de bons tests, et il faut à la fois de la vérification, qui teste les mathématiques, et de la validation, qui teste la physique ; aujourd’hui, les LLM ne font correctement ni l’un ni l’autre
La méthode des solutions manufacturées (MMS), une technique standard de vérification, peut être largement automatisée avec des logiciels de calcul formel, mais elle reste fastidieuse, et d’après mon expérience il est difficile de croire qu’un LLM gère bien les manipulations algébriques nécessaires ici
Pire encore, un LLM ne peut pas produire les données expérimentales réelles nécessaires à la validation. Il faut aller chercher des expériences dans la littérature ou les réaliser soi-même ; à l’avenir il pourra peut-être orienter vers les bons articles expérimentaux, mais pour l’instant cela ne semble pas être le cas
Cela dit, il peut être utile pour donner des conseils quand une simulation ne correspond pas aux données expérimentales, et il semble aussi en savoir un peu sur la modélisation de la turbulence, même si je doute qu’il soit vraiment au fait des avancées les plus récentes
Pour une simulation de fluides destinée aux jeux ou à l’infographie, la précision physique n’est pas la priorité absolue, mais il vaut quand même mieux utiliser MMS pour vérifier que l’implémentation mathématique est correcte. MMS est une technique intéressante qui n’a pas vraiment d’équivalent direct dans les tests logiciels classiques : l’idée est de modifier le logiciel le moins possible pour créer un oracle, de sorte que si le logiciel modifié passe le test, on puisse considérer que le logiciel d’origine le passerait aussi
Dans beaucoup de cours universitaires, on demande aux étudiants d’écrire ce genre d’algorithmes en devoir, et comme dans les vidéos YouTube mentionnées par l’auteur, énormément de connaissances sur le sujet sont disponibles gratuitement sur Internet, donc accessibles à l’entraînement des LLM
Bien sûr, le projet présenté dans l’article reste très impressionnant
Ça me rappelle la phrase : « l’accès à un tour est un droit humain fondamental »
Il y a quelque temps, un enseignant m’a parlé de la dernière salle de tours d’usinage scolaire de son État : elle avait été installée dans plusieurs écoles juste après la Seconde Guerre mondiale et avait continué à exister comme une exception
Aujourd’hui, on ne pourrait plus en créer une nouvelle dans cet État, dans d’autres États son existence même serait peut-être impossible, et le moindre accident grave la ferait disparaître complètement, sans qu’il en reste une seule
Ce que je préfère, c’est que la moitié du matériel est très moderne et l’autre moitié semble être du surplus de la Seconde Guerre mondiale indestructible ; le mélange est vraiment superbe
J’ai du mal à imaginer qu’on retire des tours d’une école à cause d’un accident, et je vois ça comme une attitude culturelle autodestructrice
Avec une CNC fermée, plus de 99 % des problèmes de sécurité sont atténués, et l’utilité est bien plus grande. Sur une CNC, on entre souvent dans la zone de travail avec seulement les servos activés, pas la broche ; les blessures les plus graves seraient donc probablement des fractures, alors que sur des machines manuelles, la broche ou le mandrin peuvent happer quelqu’un et le tuer, ou projeter des fragments
J’aimerais aussi qu’il existe de vraies machines de pick-and-place open source. Les PCB sont bon marché aujourd’hui, mais ces machines gèrent encore mal les composants 0201 ou les BGA haute densité
« Machine Technology 1 » indique que les élèves acquièrent des connaissances et des compétences dans l’utilisation des outils manuels courants, du tour à moteur, de l’étau-limeur, de la perceuse à colonne, de la fraiseuse et de la meuleuse, et qu’ils pratiquent les principes mécaniques de base et les fondamentaux utilisés dans l’industrie de la fabrication de précision
« Welding 1 » enseigne la sécurité, le réglage des équipements, le transfert de métal, la protection gazeuse et le soudage de plusieurs métaux, avec un accent sur le soudage oxyacétylénique et le soudage à l’arc au tungstène sous gaz
« Construction Trades 1 » indique que les élèves apprennent la menuiserie, le métal, l’électricité, la plomberie, ainsi que l’utilisation sûre des outils manuels et électroportatifs adaptés à chaque technique
Il semble qu’il y ait eu une période, vers les années 1990-2000, où la formation professionnelle et technique avait presque disparu des écoles publiques, mais heureusement elle semble revenir
Charlieplexing : https://en.m.wikipedia.org/wiki/Charlieplexing
Un projet vraiment génial, et j’aime particulièrement la partie simulation.
Je fabrique un affichage POV pour vélo avec beaucoup de LED dans le même esprit, et j’ai réussi à envoyer des vidéos en quasi temps réel via Wi‑Fi : https://youtu.be/hxAHBvuyqpY?si=8XraFuG_Fi54Bs7T
Les idées de projets de mitxela et ses vidéos de fabrication sont vraiment excellentes. Je recommande aussi de regarder ses autres projets.
Ce projet est une alliance remarquable entre art et ingénierie.
Le niveau de finition des détails, à la fois pour la simulation de fluides et pour la conception matérielle, est énorme, et l’usage astucieux du Charlieplexing pour optimiser la disposition des LED est particulièrement impressionnant.
C’est impressionnant au point d’être difficile à croire. Voir ce genre de projet et les personnes capables de les mener à bien est à la fois très inspirant et un peu décourageant.
Je reconnais l’éthique de travail et les compétences très variées nécessaires, mais je ne pense pas pouvoir le reproduire moi-même. Je vais sans doute me contenter d’admirer depuis les coulisses.
J’aimerais connaître d’autres créateurs similaires, avec ce niveau de finition et ce type de centres d’intérêt.
Il a beaucoup de projets très intéressants utilisant des microchamps magnétiques, des moteurs, des flappers, etc.
Si la partie usinage du boîtier vous a plu, je conseille aussi Clickspring. Entre la qualité visuelle, le storytelling et les vraies compétences techniques, je pense qu’on peut raisonnablement le considérer comme l’un des meilleurs mécaniciens actuellement actifs sur YouTube : https://youtube.com/@clickspring
On peut le trouver ici : https://mitxela.com/rants
Malheureusement, il n’y a pas de lien direct, il faut donc faire défiler un peu vers le bas. Personnellement, je le relis de temps en temps, car il m’inspire à sa façon.
Curieusement, je suis plus attiré par l’idée précédente d’utiliser un vrai liquide, du mercure, pour allumer les LED.
Ce serait beaucoup plus simple à placer dans KiCad et il n’y aurait probablement pas besoin d’un PCB 4 couches.
C’est vraiment magnifique. J’ai été surpris par le prix : je m’attendais à environ 10 fois le montant demandé actuellement.
Je ne pense pas que je qualifierais ça de « prototype », comme le fait l’auteur.