Passer au contenu

Scroll Indicator

Construction du LightMessenger : fabrication, partie 2

Lab401 Light Messenger : journal de développement

Deuxième partie de notre série "Fabrication de produits avec Lab401".

Dans la première partie, nous avons discuté de notre approche et de notre méthodologie pour créer, fabriquer et lancer des produits.

Dans cette partie, nous plongeons dans les coulisses de la production de l'accessoire de Persistance de la Vision / Light Painting de Lab401 pour le Flipper Zero.

Qu'est-ce que le Light Messenger ?

Le Light Messenger est un accessoire de Persistance de la Vision et de Light Painting pour le Flipper Zero. Il possède 16 LED RGB et un accéléromètre ; lorsqu'il est branché sur votre Flipper Zero et qu'il est balayé d'avant en arrière, il " peint " des textes et des images dans l'air.

Il s'agit d'un logiciel libre et entièrement piratable, et la communauté a déjà ajouté de nouvelles fonctionnalités intéressantes.

Un grand coup de chapeau à @tixlegeek, l'ingénieur à l'origine du projet, et à @codeallnight pour leurs contributions à la base de code depuis la sortie du produit.

Étape 0 : Qu'allons-nous construire ?

Nous avons commencé par une session de brainstorming au cours de laquelle nous avons noté plusieurs idées. L'objectif était de trouver des concepts amusants, intéressants et capables d'apporter de réelles innovations au Flipper Zero, plutôt que de simplement reproduire les mêmes modules matériels qui prolifèrent comme des clones. Notre objectif était de créer un projet novateur, captivant et éducatif.

Ensuite, nous avons évalué chaque idée pour déterminer par où commencer. C'était une première pour nous, il était donc crucial que le projet initial soit clairement défini et accessible.

En plus du " critère de produit " défini dans le précédent article, comme il s'agissait de notre premier accessoire Flipper Zero, nous avions plusieurs autres critères à prendre en compte :

  • Apprendre l'architecture matérielle de Flipper Zero
  • Apprendre l'architecture de développement du logiciel Flipper Zero (FURI)
  • Mettre en place et gérer une chaîne d'approvisionnement complète (développement, prototypage, production, etc.)
  • Tester le marché des accessoires Flipper Zero

En raison de ces frais supplémentaires, il était important de fixer des objectifs réalisables. Ainsi, nous voulions nous assurer que le champ d'application des accessoires était relativement simple, afin que nous puissions nous concentrer sur l'acquisition de connaissances sans être submergés.

Nous avons opté pour l'accessoire "Persistance de la vision / Light Painting", car il était relativement simpliste en termes de matériel et de production, ce qui nous permettait de nous concentrer sur les éléments plus complexes : le développement de logiciels et l'architecture de Flipper.

De même, s'il n'y avait pas de marché pour les accessoires Flipper et que le projet entier échouait, nous échouerions rapidement (et donc à moindre coût).

En résumé, ce projet nous a permis d'apprendre et d'explorer ce que nous pouvions faire et comment.


Conception

Esquisses initiales du produit

Avant de se lancer dans la conception finale, plusieurs facteurs devaient être pris en compte. Nous devions respecter des contraintesphysiques, budgétaires et logistiques qui orienteraient nos choix techniques :

  • Robustesse mécanique
    Le complément sera utilisé par de vraies personnes, avec de grandes mains et un usage parfois difficile. Nous devions donc concevoir un module robuste, notamment en tenant compte des limitations GPIO du port externe du Flipper Zero.

  • Développement
    Le code doit rester clair et accessible pour que tout le monde puisse le comprendre et y contribuer. C'est pourquoi nous avons choisi d'organiser le projet en plusieurs modules (configuration, gestion de l'accéléromètre, rendu graphique, etc.) et d'utiliser des standards éprouvés (tels que JSON pour la configuration et Bitmap pour les images).

  • Production
    Chaque élément doit pouvoir être fabriqué avec des composants facilement disponibles. Notre choix de la paireLIS2DH12/SK6805 s'est avéré être une décision judicieuse en termes de fiabilité et d'approvisionnement.

  • Coût
    L'approche a consisté à rester simple et efficace. Nous donnons la priorité à ce qui est nécessaire pour que le produit final soit disponible à un prix raisonnable.

  • Esthétique
    L'esthétiqueest souvent négligée, mais elle contribue de manière significative à l'expérience de l'utilisateur, à l'attrait du produit et à l'image des créateurs. Lab401 et moi-même voulions être aussi fiers que possible de ce qui est offert à l'utilisateur, en veillant à ce qu'il se sente respecté et valorisé. L'objectif était d'offrir quelque chose de beau qui montre que nous avons vraiment fait de notre mieux.


Esquisse

Je commence par ce point parce que c'est l'une de mes étapes préférées. Je voulais que tous les modules complémentaires partagent une histoire commune et un fil rouge pour créer une véritable histoire. Ce souci du détail renforce l'engagement des utilisateurs, même s'il n'est pas strictement nécessaire d'un point de vue technique.

J'ai commencé par dessiner des idées sur papier, puis j'ai finalisé les ébauches en utilisant Inkscape (<3).

Pour le dos du PCB, j'ai conçu un cheat sheet sur la "sécurité de l'information" centré sur l'encodage, incluant le modèle de Shannon, des comparaisons entre Encodage, Encryptage et Hachage, ainsi qu'une table ASCII condensée et un diagramme pour le code Morse.


Prototypes

Nous avons procédé à de nombreuses itérations, de la preuve de concept à la version finale, ce qui nous a permis d'itérer rapidement chaque fois qu'un problème était identifié :

Premier prototype permettant de contrôler les fonctions périphériques et de tester différentes options

Quelques-uns des prototypes développés

Chaque prototype nous a permis de tester un aspect spécifique du module, de la détection de mouvement à l'affichage LED, et d'affiner notre code. Cette approche nous a permis de démarrer un développement sérieux sur des bases solides.


Sélection des composants

Pour lancer la production, nous devions nous assurer que tous les composants pouvaient être obtenus en quantités suffisantes. Après de nombreux tests et itérations de conception, nous avons opté pour la paireLIS2DH12/SK6805:

  • LIS2DH12: un accéléromètre offrant toutes les fonctionnalités requises, avec une excellente fiabilité et un support logiciel fourni par STMicro.

  • SK6805: Le seul modèle qui émet sur le côté, ce qui n'était pas prévu au départ mais s'est avéré être la solution idéale. Ils sont également facilement disponibles.


CIRCUIT IMPRIMÉ

Le PCB a été conçu à l'aide de KiCad (<3), un logiciel libre et gratuit extrêmement puissant. Sa communauté dynamique et ses fonctionnalités avancées nous ont permis de concevoir un circuit adapté aux besoins spécifiques du projet, tout en conservant une qualité professionnelle.


Fonctionnement et POC

Cette section plonge au cœur du projet. Le cahier des charges était le suivant :

  • Affichage de texte

  • Affichage d'images

  • Affichage bidirectionnel

Pour répondre aux contraintes dimensionnelles tout en assurant une bonne résolution, nous avons opté pour une matrice de 16 LEDs RGB (SK6805).

Pour la détection des mouvements, nous avons utilisé un accéléromètre avec au moins deux interruptions de type "tilt". Ces interruptions détectent les inversions de force et génèrent des impulsions sur les broches GPIO, qui sont essentielles pour déclencher des interruptions dans le code.

Il est important de garder à l'esprit que le port GPIO du Flipper est très bien conçu mais aussi très limité. Nous avons dû faire plusieurs tests, chercher des idées et de l'aide auprès des équipes de Flipper, mais finalement, cela a fonctionné, et nous avons rapidement mis en place un POC satisfaisant.

Premiers aperçus de l'implémentation "fonctionnelle


Premier code fonctionnel


Le code

Le développement du code a été le véritable défi.

  • Structure modulaire :
    Le code est divisé en plusieurs modules clairs :

    • Configuration : Lecture et analyse du fichierJSON pour définir l'affichage et les paramètres.

    • Accéléromètre : Gestion des interruptions via les fonctions zmax_callback et zmin_callback, qui déterminent la direction du mouvement et mettent à jour la structure de l'application via swipes_init.

    • Rendu graphique : Un shader calcule en temps réel les couleurs de tous les pixels d'une colonne en fonction de paramètres et de l'état de l'accéléromètre.

  • Optimisation en temps réel :
    Le thread principal fonctionne en continu pour recalculer et mettre à jour l'affichage LED. La gestion fine des microsecondes nous permet d'équilibrer les performances et la réactivité, même sur un matériellimité.

  • Outils dédiés pour créer facilement du texte et des images, étant donné les limitations du flipper zéro (écran monochrome et quelques boutons).

  • Facilité de contribution :
    Nous avons veillé à ce que le projet soit facilement extensible. En utilisant des standards tels que JSON et Bitmap, les utilisateurs peuvent facilement générer, importer et modifier des fichiers sans avoir à maîtriser des pipelines complexes.

Le code a été conçu de manière à ce que chaque nouvelle fonctionnalité (comme l'ajout de couleurs aux images ou l'amélioration du shader) puisse être intégrée sans perturber le système dans son ensemble.

Premiers tests réussis de la fonction "bitmap


Détails de fonctionnement

L'accéléromètre joue un rôle central dans l'orchestration de l'affichage matriciel LED. Dès que le message"SWIPE" est affiché, un thread dédié (app_acc_worker) prend le relais pour gérer les interruptions et piloter l'affichage.

Note :
En parcourant le code, vous remarquerez que nous n'utilisons pas de mécanismes traditionnels tels que les mutex ou les files d'attente d'événements à l'intérieur de la routine "display". L'API Flipper, basée sur FreeRTOS, offre ces structures, mais elles sont beaucoup trop coûteuses à ce niveau. Nous avons donc opté pour des techniques plus directes, même si certains pourraient les qualifier de "sales". Après plusieurs semaines d'itérations, cette approche s'est avérée la plus fiable pour notre cas d'utilisation, garantissant timings et stabilité

Les deux interruptions générées par l'accéléromètre déclenchent les fonctions zmax_callback et zmin_callback. Ces fonctions mettent à jour la direction du mouvement, qui est ensuite utilisée par le thread principal pour animer les LED à l'aide d'un shader dynamique . Ce shader est conçu pour être facilement modifiable via un simple changement de fonction callback, ce qui permet d'explorer différentes palettes de couleurs et effets visuels.


L'écosystème Flipper

Travailler sur le Flipper Zero est à la fois stimulant et exigeant. Les efforts de la communauté et des équipes de développement sont impressionnants et dynamiques, même si l'évolution constante de l'API nécessite parfois de revoir certaines parties du code. Ce dynamisme permet au projet de rester à la pointe de la technologie et de bénéficier des dernières améliorations du système.


Fabrication, production et essais

Une fois que nous avons itéré jusqu'au matériel final, nous avons pu mettre quelques processus en parallèle :

  • PCB / PCBA
  • Essais / CQ
  • Emballage

PCB / PCBA

Lors de la fabrication, la première étape consiste à envoyer les fichiers complets du projet à l'usine sélectionnée. Il s'agit généralement des "GERBERS" et de la "nomenclature".

Cela permettra à l'usine de fabriquer les cartes de circuits imprimés (PCB), de préparer les masques de soudure et la sérigraphie, ainsi que l'assemblage des cartes de circuits imprimés (PCBA) - où les composants sont sélectionnés, placés et soudés sur la carte de circuits imprimés.

Nous avons choisi d'utiliser l'un de nos contacts existants à Shenzhen pour le PCB + PCBA.

Tests initiaux des PCB

PCB de production. Nous avons opté pour le "snap-off ladder style" pour faciliter les tests. Une fois qu'un PCB a été testé, il peut être détaché d'un coup sec, de sorte qu'il n'y a pas de confusion sur ce qui a été testé ou non.


Essais / CQ

Il existe plusieurs approches en matière de tests et de contrôle de la qualité.
D'après notre expérience, les tests à 100 % (c'est-à-dire que chaque produit est testé individuellement) sont plus sûrs, plus fiables et, à long terme, moins coûteux que l'échantillonnage aléatoire.

Pour effectuer un contrôle de qualité à 100 %, vous devez fournir à l'usine un document SOP (Standard Operating Procedure) qui indique comment un produit doit être testé et quelles sont les conditions de réussite ou d'échec.

Dans la mesure du possible, il est préférable que les tests soient effectués dans un "gabarit". Il s'agit d'un dispositif semi-automatisé qui permet à l'usine de tester rapidement chaque dispositif individuel.

En règle générale, si vous pouvez fournir le schéma, le micrologiciel et les procédures opératoires normalisées, l'usine trouvera le moyen de construire physiquement le gabarit pour répondre à ses besoins.

Le document SOP

La mise en œuvre par l'usine du gabarit de test (avec des extraterrestres inattendus 👽)

Échantillon d'une unité réussie

Échantillon d'une unité défaillante (l'accéléromètre est tombé en panne pendant le PCBA)


L'emballage

L'emballage est un sujet fascinant : il joue un rôle important dans la perception qu'a un client d'un produit ; cette perception peut même entacher les premières expériences pratiques d'un client avec un appareil.

En même temps, à moins qu'il ne s'agisse d'un appareil de collection, les emballages seront presque immédiatement jetés.
D'un point de vue éthique, quelle est la limite entre le fait de donner au client une perception de qualité et le fait de ne pas lui faire payer trop cher un produit qui sera jeté ?

De même, l'emballage a un impact environnemental important. Lors de la production, toutes sortes de produits chimiques sont utilisés pour blanchir et colorer les matières premières ; à la réception, ils seront mis en décharge.

Nous préférons utiliser des emballages simples :

  • du carton non blanchi et non couché pour minimiser l'empreinte des produits chimiques nocifs
  • des encres à base de soja, pour minimiser l'impact sur l'environnement
  • Des inserts en mousse simples (pas de découpe personnalisée, etc.) pour minimiser les coûts.

Nous pensons qu'il s'agit là d'un équilibre entre nos engagements éthiques et une expérience de déballage agréable pour le client. De même, nous sommes honnêtes envers les clients : ils ne paient pas pour quelque chose qu'ils vont jeter.

Après avoir fait ces choix, nous avons sélectionné un format qui nous convenait, tout en restant suffisamment fin pour bénéficier des tarifs d'affranchissement "enveloppe".

Cependant, nous aurions pu et dû le rendre encore plus mince - même une réduction de 50 % de la hauteur aurait permis de réduire considérablement nos coûts de palette, d'expédition et de stockage. Une leçon à retenir pour le prochain accessoire !

Notre boîte.


Conclusion

Ce projet s'est avéré beaucoup plus complexe que prévu, mais nous avons tout donné pour livrer un produitfini, fonctionnel, extensible, esthétique, éducatif et amusant! Chaque ligne de code, chaque choix technique, a été fait pour fournir une expérience utilisateur riche et une base solide pour les contributions futures.

Au fur et à mesure que nous développerons de nouveaux projets, l'équipe de Lab401 et moi-même continuerons à gagner en confiance, en organisation et en compétences.

Notre ambition reste de créer des appareils qui incarnent pleinement notre vision initiale, et nous vous invitons à explorer, contribuer et partager vos idées sur GitHub.

Si vous souhaitez découvrir le produit final, le LightMessenger, nous serions très honorés et très intéressés de voir ce que vous en ferez !

Prises de vue de clients montrant la peinture lumineuse, les bitmaps, les modes de texte et les différents effets de couleur.

Article précédent Construction du DigiLab : En coulisses
Articles suivant Fabrication de produits avec Lab401

Laisser un commentaire

Les commentaires doivent être approuvés avant d'apparaître

* Champs obligatoires