Vue normale

Hier — 28 décembre 2024Arduino & Raspberry Notepad

MicroPython : réutiliser un afficheur VFD (Vacuum Fluorescent Display) avec un Pico sous MicroPython

Bonjour à tous,

Ce qu'il y a de bien dans ces périodes festives, c'est qu'il est possible de se pencher (ou repencher) sur des projets personnels qui sortent des sentiers battus.

En attendant le réveillon du Nouvel An, je vous propose une petite lecture distrayante.


Introduction

Il y a quelques années, j'ai reçu un MiniDisc player Sony HCD-MJ1 présentant une panne mécanique irréparable sur le lecteur MiniDisc.

J'ai donc décidé de faire de la récupération en commençant par l'afficheur VFD (tube a vide avec affichage fluorescent).

Tube VFD du Sony HCD-MJ1

Même s'il s'agit d'une technologie d'un autre temps, ces afficheurs sont incroyablement attrayant. Produisant leur propres lumières, ils offrent aussi un excellent contraste et permettent la lecture sous de nombreuses conditions de luminosité.

L'afficheur VFD ici présent utilise un contrôleur M66004 et j'ai eu la chance de dégotter la fiche technique du M66004 (voir une copie disponible ici).
Ce dit donc une nouvelle occasion de mettre MicroPython à l'honneur (sur Raspberry-Pi Pico).

Fonctionnement des Vaccum Fluorescent Display

Avant de faire de se lancer dans la fiche technique et un peu de rétro-ingénierie de la carte, il convient de savoir comment un tel dispositif fonctionne.

Une VFD est constitué en trois niveau (si l'on fait abstraction du tube en verre et du vide).

Source: cette page de Futaba corporation
  1. Un filament est chauffé de sorte à accroître l'activité des atomes du métal le constituant. Des électrons s'échappent du filament et forment un nuage autour du filament. A noter que le filament n'est pas chauffé au point de rougir sous nos yeux!
  2. Le filament en maintenu à une tension négative (bien inférieure à -10V).
  3. La grille, qui se trouve entre le filament et les segments de de l'afficheur est raccordée sur la masse (donc un potentiel positif par rapport au filament).
    Les électrons sont attirés vers la grille, un petit nombre est capturé par la grille le reste poursuit sont chemin vers les segments.
  4. Quand il y a plusieurs chiffres/digits: chaque chiffre/digit dispose de sa propre grille. Cette grille est bien entendu branchée à la masse uniquement lorsqu'un chiffre doit être affiché (afin créer un flux d'électron vers les segments).
  5. Les segments qui ont un potentiel plus positif que le filament vont attirer les électrons. Comme la grille, brancher le segment à la masse sera suffisant pour attirer l'électron. Lorsqu'un segment est frappé par un électron, celui-ci émet une lumière fluorescente en réaction.
  6. Les segments avec un potentiel plus négatif que le filament repousseront les électrons (ce qui évitera au segment de s'illuminer).

La ressource suivante provenant de TubeClockDB.com met en évidence les éléments avec les tensions (les potentiels) qui y sont appliqués.
On y voit bien:

  1. que le filament est alimenté avec un tension relativement faible
  2. le filament est maintenu a une tension bien inférieure à la grille (et ai segments).
 
Source: Cette page sur TubeClickDB.com

Une vidéo instructive

Je vous conseille aussi de consulter la vidéo Youtube "How a VFD works, wiring and testing" qui s'avère être très instructive.

L'afficheur du HCD-MJ1

C'est le moment de revenir à notre carte. 

Cliquer pour agrandir

A l'aide de la fiche technique M66004 datasheet, j'ai réussi a décoder le circuit d'alimentation du contrôleur M66004. Il fonctionne en logique 5V, de la tension entre la grille et le filament est de -35V (dit VP dans la fiche technique). 

Reconstitution du schéma.

Enfin, la tension de filament est fixée arbitrairement à 3V et la tension "cutoff bias" mesurée directement sur la carte.
Tous les potentiels sont connu et peuvent être reporté sur le graphique de Futaba Corporation.

Tensions applicative du VFD Sony

Et pour finir, l'exemple de la fiche technique M66004 est complété avec les informations collectées... et nous avons un excellent candidat pour un schéma définitif.

Circuit de commande

C'est le moment d'envisager le raccordement sur un microcontrôleur. J'ai volontairement choisi un Pico sous MicroPython.

La commande se fait avec trois signaux:

  • /CS: a mettre au niveau bas pour communiquer avec le composant.
  • SCK: signal d'horloge. la donnée est acquise lors du flan montant du signal d'horloge.
  • SDATA: Serial data. Les bits sont envoyés un par un en commençant par le bit de poids le plus fort (MSBF).

Tous les signaux étant identifiés, le connecteur principal peu maintenant être documenté avec les tension d'alimentation et les signaux de données.


Brancher sur un Raspberry-Pi Pico

Il n'y a rien de vraiment particulier dans les indications de raccordement ci-dessous.
Et comme le la logique de commande est en 5V, j'ai utilisé un 74AHCT125 en guise de Level Shifter.

Cliquer pour agrandir

Le lecteur attentif remarquera que la tension d'alimentation du filament (heater) est passé à 4.5V.
L'expérience à démontré que les 3V n'étaient pas suffisant pour illuminer tous les segments (l'écran étant relativement large).
Par essai/erreur, la tension 4.5V semble suffisante mais rien n'empêche d'augmenter celle-ci jusqu'à la tension logique (5V).

Un tout premier script

Comme vous pouvez vous en douter, je ne suis pas arrivé si loin sans avoir réussi :-)

La fiche technique contient une commande appelée ALL DIGIT DISPLAY ON qui permet tester le système d'éclairage (expliqué tel quel dans la doc).

Cela fût donc le premier script écrit pour développer et tester la bibliothèque.

from machine import Pin
from vfd_m66 import VFD_M6604

_reset = Pin(Pin.board.GP18, Pin.OUT, value=True ) # Unactive
_cs = Pin( Pin.board.GP14, Pin.OUT, value=True ) # unactiva
_sdata = Pin( Pin.board.GP13, Pin.OUT )
_sck = Pin( Pin.board.GP16, Pin.OUT, value=True )

vfd =VFD_M6604( sck=_sck, sdata=_sdata, cs=_cs, reset=_reset )
vfd.digit_length( 16 )
vfd.all_digit_on( )

Ce qui produisit un "Hourra" dès que l'écran s'illumina :-)

Commande ALL DIGIT DISPLAY ON
Pas facile de prendre une photo sans flash => Photo un peu floue

Le dépôt GitHub

Fonctionnalités avancées

Une fois cette première étape franchie, j'ai poursuivi le projet pour ajouter les fonctionnalités suivantes:
  • Envoi de commande
  • Envoi de caractères (chaîne de caractères)
  • Définition de caractères personnalités (RAM1 à RAM16)
  • Contrôle individuel des segments.
    Chaque Digit (position sur l'afficheur) peut contenir jusqu'à 35 segments!
  • Activation des symboles (et leur identification)

Disposition des Digits sur l'afficheur

Un digit pouvant être associé a un ensemble de symboles, il faut identifier chaque segments du Digit pour savoir quel symbole sera allumé sur l'afficheur.

Détails du 15ieme digit de l'afficheur
Voici un exemple de code permettant d'illuminer les encadrements CD et MD ainsi que le mot "Digital" et la flèche jaune.
vfd =VFD_M6604( sck=_sck, sdata=_sdata, cs=_cs, reset=_reset )
vfd.digit_length( VFD_LEN )

d15 = vfd.attach_digit( digit_idx=15, ram_idx=RAM15 )
d15.set( 28, True )
d15.set( 19, True )
d15.set( 26, True )
d15.set( 27, True )
d15.update()

Dépôt GitHub

La bibliothèque, code d'exemple et documentation (en anglais) sont maintenant disponible dans le dépôt

La suite du projet

Ce projet n'est pas encore achevé.
Il serait intéressant de pouvoir contrôler l'afficheur via:

  • WiFi, 
  • liaison série
  • liaison USB-Serie
Rien d'impossible pour un Pico ou Pico-W.
Cela permettrait même de contrôler l'afficheur depuis un ordinateur :-)

Ce qui manque surtout à ce projet c'est un étage d'alimentation adéquat.
J'utilise des alimentations de laboratoire pour générer les alimentations nécessaires.

J'espère que vous avez trouvé cet article intéressant.
Dominique



À partir d’avant-hierArduino & Raspberry Notepad

Défi scolaire: des piles maisons pour alimenter un Pico

Bonjour à tous,

Commençons par vous souhaiter un joyeux Noel et un maximum de joie en famille.

Introduction

Il n'y a pas si longtemps, Kev écrivait un article où il se demandais s'il était possible d'alimenter un Pico avec des pommes de terre (avec du Zinc et du Cuivre).

La réponse est non car s'il est possible d'atteindre une tension raisonnable, le courant disponible est limité à quelques µA!

Le sujet n'est pour autant pas clôturé... il y a d'autres façons de créer des piles.
Je me suis penché sur ce sujet passionnant et captivant.
Les options intéressantes ne manquent pas... voici ma petite liste aide-mémoire :-)

Piles salines - Aluminium / Air / eau salée

La vidéo ci-dessous présente la réalisation d'une pile saline à l'aide d'aluminium, charbon de bois, eau salée et quelques éléments d'usage courant (tube PVC, essui-tout, ...).

Voir cette vidéo YouTube

Selon l'auteur, la configuration démontrée permet de d'obtenir une pile capable de produire 4V et un courant de 20mA.

Ce que j'aime dans cette approche, c'est qu'il est possible de réaliser cette pile SANS avoir besoin d'outils énergivores (comme une foreuse).


Lien vers la vidéo

Pile Cuivre - Zinc

Mon premier réflexe a été de penser à cette combinaison. Je vous propose deux vidéos sur le sujet. 

Ce qui est intéressant c'est que le zinc et le cuivre sont faciles à trouver.
Par contre la production en tension et courant sont relativement faible. Par contre, il est envisageable de recharge ce type de batterie (avec un électrolyte adéquat).


Les matériaux étant faciles à trouver, il est possible d'expérimenter différents types d'assemblage des électrodes (série,parallèle,espacement) et d'électrolytes.

Pile Saline Aluminium / Cuivre 

Voici un autre type de pile saline a base de tube en aluminium, fil de cuivre, eau salée et sable. Des éléments faciles a trouver.
L'intérêt ici réside dans l'épaisseur des matériaux, grâce notamment au tube en aluminium.

Le sable est ici utilisé comme "électrolyte". Initialement utilisé comme élément de remplissage, cet isolant est ensuite mouillé avec de l'eau salée!

Selon la vidéo, l'assemblage permet de produire ~5.3V. Le courant de court-circuit est inconnu mais l'expérience n'est pas dénuée d'intérêt.

J'ai tendance a penser qu'il faudrait maximiser la surface de cuivre et réduire l'espace entre le cuivre et l'aluminium.

Remarque:
le fil de cuivre va inévitablement s'oxyder et se couvrir de vert-de-gris... qui est aussi un isolant. Attention en manipulant le vert-de-gris car il est toxique pour l'environnement (et l'homme en cas d'ingestion).

La pile canette

Juste un dérivé de la pile ci-dessus. les canettes utilisées dans cette vidéo sont certainement en aluminium (attention, il en existe en fer avec revêtement protecteur). La réalisation des piles est probablement plus aisée.


Electrolyte polymère en Gel

L'électrolyte est un des éléments principaux des piles. Jusqu'ici c'est de l'eau salée qui sert d'électrolyte.

En navigant sur Internet, on se rend rapidement compte qu'il est existe beaucoup d'autres.... mais sans vraiment savoir lequel resterait à la portée des Maker.

La vidéo ci-dessous propose de réaliser un électrolyte Polymer sous forme de Gel. Les constituants peuvent être achetés sur Internet et la réalisation est relativement simple.

Cerise sur le gâteau, il est possible de régénérer le films électrolyte en le plaçant dans l'eau.


Bon visionnage
Dominique

Encodeur à quadrature, Pico et MicroPython

Bonjour à tous,

L'article d'aujourd'hui regroupe plusieurs domaines.
Il démarre en effet de la récupération d'éléments sur l'imprimante HP DesignJet T520 ou je m'arrête spécifiquement sur les moteurs équipés de disques optiques.


Equipé d'un moteur 5V (CN459-60067 BN026Y18), d'un disque optique et d'un encodeur à quadrature optique, je voulais savoir s'il était possible de l'utiliser avec MicroPython.

Le disque optique

La photo haute résolution du disque optique permet de relever plusieurs informations utiles.

Le disque présente 50 interstices transparents entre deux numéro successif. Le disque étant numéroté de 1 à 12, cela représente 600 pulsations par tour (ce que reprend l'une des références sur le disque).

Les autres références/informations sur le disque ne renvoi malheureusement que vers les imprimantes HP.

L'encodeur optique

Pour sa part, l'encodeur optique est monté sur une plaquette fixée directement sur le support métallique.
Cet encodeur contient un LED (émetteur de lumière) ainsi que deux capteur photo-sensibles. Le décalage entre les deux capteurs permet d'identifier le sens de rotation du moteur.



Le connecteur 4 contacts est utilisé pour:

  • la masse
  • l'alimentation 5V (déduit de la résistance utilisée pour la LED).
  • Deux signaux à quadrature.

Les signaux

Quelques mesures rapides permettent de savoir que le capteur produit une tension de sortie (pas besoin de résistances pull-up ou pull-down).

Maintenant que le brochage est identifié, il ne reste plus qu'à branché un oscilloscope sur les deux canaux de sorties.


 


Notez le décalage entre les deux signaux entre marche avant et marche arrière!

L'oscilloscope nous informe aussi que la fréquence des pulsations est de 24.4 KHz (soit 24400 fois par seconde). La période est de 1/24400 soit 41µSec (temps en deux impulsions sur un même canal).

Brancher sur Raspberry-Pi Pico

Les signaux de sortie étant étant en 5 volts (ou presque), il faut utiliser un pont diviseur de tension pour ramener la tension sous 3.3V.

 

Bibliothèque et code d'exemple

D'autre part la période de 41µSec nécessitera un code particulièrement rapide pour ne pas rater d'impulsion.
Une section de code en PIO permettra de suivre suivre la cadence... même sous MicroPython!

La bibliothèque adéquate est disponible dans le dépôt esp8266-upy ( esp8266-upy/LIBRARIAN/rp2lib ).
rp2qenc.py contient le code PIO et la classe PIO_QENC permettant d'utiliser un encodeur à quadrature autonome sur un Pico.
La classe PIO_QENC permet de compter (ou décompter) un compteur permettant de connaître le nombre de tour moteur (valeur signée encodée sur 32 bits).

Le code permettant de lire le compteur est relativement simple.

from machine import Pin
from time import sleep_ms
from rp2qenc import PIO_QENC

pinA = Pin(15, Pin.IN, Pin.PULL_UP)
pinB = Pin(16, Pin.IN, Pin.PULL_UP)

qenc = PIO_QENC(0, (pinA, pinB))
print('starting....')
for i in range(120):
    print('iter %3i : Quadrature value = %i' % (i,qenc.read()) )
    sleep_ms(500)
qenc.sm_qenc.active(0)
print('stop')


Voici qui termine ce petit article.

Raspberry Compute Module 5 : 8Go RAM - 32 Go eMMC en stock

Bonjour à tous,

A propos du compute module

Le monde du Raspberry-Pi ne se limite pas au célèbre nano-ordinateur mais s'étend aussi dans le monde industriel avec le Compute Module.
Le compute module concentre sur une carte les éléments essentiels du nano-ordinateur laissant à la carte fille la possibilité de mettre en place les interfaces adéquates.
Depuis le CM4, de nombreuses cartes furent lancées sur le marché. Celle-cis sont aussi compatible avec le CM5.

Une gamme Compute Module chez MCHobby

Depuis la sortie du CM5, MCHobby a décidé de s'intéresser un peu plus à cette plateforme avancée qui peut aussi offrir des possibilités inédites aux Makers et aux entrepreneurs.

Après le kit de développement CM5 (CM5 DevKit), MC Hobby à maintenant en stock son premier compute module 5:

Il s'agit du CM5108032

Compute Module 5, 8Go RAM, 32 Go eMMC - CM5108032
disponible chez MCHobby

Le CM5108032 est un compute module avec:

  • 8 Go de RAM
  • 32 Go stockage eMMC
  • WiFi / Bluetooth

Le stockage eMMC permet de stocker le système d'exploitation afin d'accélérer le démarrage de la plateforme. un stockage eMMC offre un débit similaire a un disque M2 sur le bus PCIe Gen 2, ce qui est plus qu'honorable :-)

eMMC vs disque M.2

Il serait tentant de penser qu'un disque M.2 serait plus intéressant d'une eMMC.
C'est vrai si l'on ne considère que l'espace de stockage!

L'usage d'un disque M.2 diminue significativement la fiabilité, d'autant plus si le projet est exposée à des vibrations ou écarts de température (ce qui est le lot de tout système mobile). Ce n'est pas pour rien que les SmartPhones stockent leur OS sur une eMMC plutôt qu'une carte SD ou en disque M2 interne ;-) .

En effet, utiliser un disque M.2 implique contact électriques et contraintes mécaniques, des éléments dont il faut tenir compte car ils peuvent empêcher le système de démarrer.

Un Compute Module avec eMMC intégrée assure une meilleure résilience au système car il est assuré de booter sur ses propres ressources. 
Un modèle eMMC aura -lui- la possibilité de rapporter la défectuosité si le disque M.2 devenait inaccessible ou inopérant mais en soi, rien n'empêche d'ajouter un disque M.2 pour du stockage de masse. 

A tester: le CM 4 Maker Board

Ce sera l'occasion d'utiliser ce module CM5 pour tester la carte CM4 Maker Board de Cytron, carte que je n'avais pas encore eu l'occasion de tester.


Je que te trouve particulièrement intéressant, c'est d'avoir tous les connecteurs sur un seul côté de la carte. Je trouve appréciable de disposer d'un HDMI standard, du GPIO Raspberry-Pi et d'un connecteur M.2 (pour un stockage de masse).

Il peut être alimenté via USB-C ou un jack (7-18V).


Vraiment une carte très intéressante pour créer un Mini-PC Raspberry-Pi avec des fonctionnalités complémentaires (puisque nous disposons de ports et de GPIOs.

Cela sera pour un prochain article.
Dominique

Plancha-CMS: Refusion et fin de projet

Amis Maker,

Pas plus tard qu'hier, le projet "Plancha-CMS", un projet MicroPython de refusion CMS, se voyait doté d'une interface utilisateur et de ses premières fonctionnalités (Cooling et Pre-Heat)!

Très excité par cette avancée rapide, je décidais de poursuivre sur ma lancée avec la refusion!

projet "Plancha-CMS"

La refusion

La refusion (reflow en anglais) est un procédé permettant de réaliser la soudure de composants montés en surface (CMS, SMD en anglais) placés sur la carte. C'est ma refusion de la pâte à soudé (aussi appliqué sur la carte) qui soude les composants.
Plus de détails ici sur Wikipedia.

Le profile de refusion

Il n'est pas question de placer la carte, les composants et la pâte de refusion sur une surface étant déjà 250°C! Il faut y aller "en douceur" si je peux m'exprimer ainsi.

Il faut donc suivre ce que l'on appelle un "profile de refusion" visant à:

  1. éviter un choc thermique trop brutal,
  2. de permettre au composant de monter un peu en température
  3. permettre au flux contenu dans la pâte de fondre et de se répandre sur la carte
  4. d'éviter que les composants ne grillent parce qu'il restent trop longtemps à une température trop élevée.

Voici deux exemples de profile de refusion:

 

Enfin, l'article "Reflow Soldering Technology" propose de nombreuses informations pratiques.

Source: Reflow Soldering Technology

Source: Reflow Soldering Technology

Profile d'essai SN0 de la Plancha-CMS

Sur base des informations ci-dessus, voici les 5 phases du profile que je vais mettre en oeuvre pour les premiers essais.

  1. Mise en chauffe: Montée à 150°C en 90' => soit une rampe de 2°C/sec
  2. pré-chauffage: (Rampe jsq'à 180°C en 90' => soit une rampe de 0.33°C/sec
  3. Mise en refusion: montée à 245°C en 45' => soit une rampe de 1.44°/sec
  4. Refusion: maintient à 245°C pendant 30'
  5. Refroidissement: coupure de la chauffe et ventilation

Codage du profile SN0 en Python

Le profile ci-dessous peut être encodé comme suit:

PROFILE_SN0 = [(150,90),(180,90),(245,45),(245,30)]

Voici une liste de tuple (t°_finale, temps_alloué_sec) décrivant les différentes phases détaillées ci-avant.
Le refroidissement venant après la dernière phases.

La première phase est donc 150°C en 90 sec. La dernière est 245°C pendant 30 sec (le maintient à la température de refusion).

Du code pour le peuple

Le code est bien entendu disponible sur le dépôt GitHub Plancha-CMS.
Le script main.py assure le traitement d'un profile par l'appel de la méthode  profile_heating( profile ) qui accepte le profile en paramètre (voir PROFILE_SN0 ci-avant).

Petit rappel

La mise en oeuvre du profile de chauffe s'appuie sur un contrôleur PID qui, lui, contrôle la température de la semelle chaque seconde et applique la correction nécessaire (voir les précédents articles sur Plancha-CMS).

Traitement d'une phase

Pour chacune des phases, le temps alloué en divisé en intervalles de 5 secondes, ce qui permet de calculer la rampe de température à suivre pour atteindre la température finale désirée.
Le PID est donc informé, toutes les 5 secondes, de la nouvelle température à atteindre. Cela permet d'éviter les trop brusques montées en température de la semelle.

Avec des intervalles de 5 secondes, le contrôleur PID dispose de 4 à 5 itérations pour effectuer l'asservissement de la température.

En admettant que la température de la semelle est à 22°C (t° de la pièce) lors du démarrage de la première phase (150,90) du profile, soit (atteindre 150°C, en 90Sec) , nous pouvons déduire:

  • Nous aurons 90 / 5 = 18 itérations de 5 secondes pour cette phase.
  • Une différence de température de 150°C - 22°C = 128°C à combler
  • Soit 128°C / 18 itérations = une augmentation de 7.11 °C toutes les 5 secondes.

La fin de la première phase atteinte, il ne reste plus qu'a  passer immédiatement à la suivant, donc (180,90), et procédé à l'identique... sauf que cette fois, la température de départ est 150°C (T° de fin de la phase précédente).

Contrôler l'exactitude de la régulation.

Voici les informations PID produites par l'exécution de profile_heating( PROFILE_SN0 ) :

1, 46, 41
2, 46, 40
3, 46, 41
4, 46, 41
5, 46, 42
0, 52, 43
1, 52, 44
2, 52, 44
3, 52, 46
4, 52, 47
1, 58, 48
2, 58, 50
3, 58, 50
4, 58, 51
5, 58, 52
0, 65, 53
1, 65, 54
2, 65, 54
3, 65, 55
4, 65, 56
0, 71, 57
1, 71, 58
2, 71, 59
3, 71, 61
4, 71, 63
1, 77, 64
....

On constate que la première colonne est remise a zéro toutes les 5 secondes (à chaque fois que le PID est informé d'une nouvelle température. La deuxième colonne est la T° a atteindre, la troisième colonne est la température de la semelle.

Les données importées dans une feuille de calcul permet de générer un rendu sous forme de graphique.
La première colonne (les itérations PID, chaque seconde) est remplacée par une valeur incrémentée permettant ainsi d'obtenir un écoulement du temps linéaire et globale sur la totalité de la régulation.


Rendu dans le graphique, il est possible de voir les escaliers des différentes consignes attribuées au PID (en bleu) et le suivit de température de la semelle (en rouge).

Phases de la refusion et température de la semelle

La courbe de refusion est excellente (même si elle présente un retard de 5 à 10 degrés). Il y manque la phase de maintient à 245°C qui n'était pas encodée dans le script Python.

Après une légère adaptation du code, il est maintenant possible de relever une courbe de refusion complète... et le résultat est plutôt satisfaisant :-)

Refusion SN0 -> refusion de SnCu à 245°C

Auto-critique:

1. il serait plus approprié d'avoir un pointe a 245°C qui dure plus longtemps.
2. le retard systématique entre la consigne et la température est probablement causée par le déplacement de la sonde de température du dessous de la semelle au dessus de la semelle. Ce qui aurait sensiblement modifié les paramètres PID.
3. Adapter les paramètres pour répondre au point 2 pourrait fort bien corriger le point 1.

Ressources

Voici un projet terminé qui saura se monter utile.

Plancha-CMS: contrôle utilisateur et premières fonctionnalités

Amis Maker,

Peut-être vous souvenez-vous du projet "Plancha-CMS", un projet MicroPython au long cours sur-lequel je me penche de temps à autre.
Le dernier article date de mai 2023 avec un dernier dernier opus technique  en Août 2021.

Interface Homme-Machine

Dans l'article de mai 2023, j’envisageai l'usage d'un écran OLED graphique.
Quand j'ai repris mon projet ce Week-end, j'ai finalement opté pour un afficheur 2x16 I2C et un encodeur rotatif+click I2C... c'est que je voulais avancer vite.


Sur l'image ci-dessus, il est possible de constater:

  • La finalisation de l'interface utilisateur
  • La connexion USB vers l'ordinateur (pour finaliser le développement)
  • La présence du bouton Reset (et du plus discret switch RUN_APP)
  • Le repositionnement du thermocouple sur le dessus de la plancha.

Securité avant tout

La Plancha-CMS dispose déjà d'un arrêt d'urgence qui s'avère essentiel durant le développement.

J'ai cependant ajouté quelques sécurités complémentaires:

  • Arrêt forcé du relais SSR au démarrage du microcontrôleur.
  • Définition d'une température critique (CRITICAL_T = 380).

La température est constamment surveillée par le contrôleur PID, contrôleur qui fonctionne en toute indépendance grâce à un Timer!
C'est donc l'endroit idéal pour renforcer la sécurité.
Si la température lue par le PID atteint CRITICAL_T alors:

  • le contrôleur PID est arrêté
  • le relais SSR est désactivé
  • le microcontrôleur est réinitialisé (pour assurer de l'arrêt du code).

Interface utilisateur

Le menu principal est simple a appréhender, il suffit d'utiliser l'encoder et de cliquer pour sélectionner la fonctionnalité. Les LEDs vertes de l'encodeur indique simplement qu'il n'y a pas de tâche en cours d'exécution.

Le menu prévoit 3 fonctionnalités:

  • Pre-Heat: préchauffage à la température sélectionnée par l'utilisateur. Affichage de la T° en temps réel.
    Maintenue de la température; cliquer pour sortir de la chauffe et entamer la phase de refroidissement par air forcé (jusqu'à T° < 35°C).
    Le refroidissement peut être interrompu à tout moment (en cliquant).
  • Cool: Refroidissement par air forcé avec affichage de la température. Interruption manuelle en cliquant.
  • Solder: en cours de développement - Processus de soudure en suivant un profil de refusion. 

Processus de Préchauffage

Si l'utilisateur sélection l'entrée Pre-Heat alors il à la possibilité de sélectionner la température de préchauffe souhaitée (à l'aide de l'encodeur rotatif).


Une fois la température sélectionnée... il faut encore confirmer la pré-chauffe (au cas où la sélection serait une erreur utilisateur).

Une fois confirmé, la température est configurée sur le contrôleur PID et affichée en temps réel sur l'écran.

L'utilisateur peut quitter le processus à tout moment en cliquant l'encodeur rotatif.

Le script affiche également des informations sur la connexion USB-Serie, de quoi reconstituer un graphique de la montée en température à l'aide d'une feuille de calcul.

Temps_sec, T_Consigne, T_reel
1, 100, 45
2, 100, 44
3, 100, 44
4, 100, 45
5, 100, 46
6, 100, 48
7, 100, 51
8, 100, 54

Ressources

  • Dépôt Plancha-CMS (GitHub, MCHobby)
    Voyez le fichier install.sh pour l'installation des dépendances.
     

A tout bientôt pour la suite ;-)
Dominique


Comment installer Pi OS sur un Compute Module 5 équipé d'une eMMC

Introduction

Le compute module 5 (tout comme le CM4) existe en deux versions aux comportement fort différents:

  • CM5 Lite où il n'y a pas de stockage eMMC. Dans ce cas, l'OS est chargé depuis une carte SD. En cela, cela ne change en rien du fonctionnement d'un Raspberry-Pi 5.
  • CM5 avec stockage eMMC : le système d'exploitation est alors chargé depuis l'eMMC. Le connecteur SD n'est pas utilisable dans ce cas! 
Comment flasher l'eMMC
 

La question à laquelle il faut trouver une réponse est:

Comment installer Raspberry-Pi OS dans l'eMMC?

Si comme moi vous disposez d'un Kit de développement Compute Module 5 alors cette question est plus que pertinente.

La documentation officielle

l'article "Flash an image to a Compute Module" sur Raspberrypi.com apporte une réponse technique où il est possible de s'égarer.

Il me parait utile de préciser que SecurBoot et la Signature ne sont pas indispensables! Savoir cela peut grandement simplifier les opérations d'installation (ce qui est pratique lors de nos premières fois).

Principe d'installation

  1. Configurer l'IO board pour désactiver le boot eMMC (avec un jumper/cavalier).
  2. Brancher le CM5 sur un ordinateur a l'aide du cable USB-A ==> USB-C.
  3. Mettre le Compute Module sous tension (en pressant le bouton marche/arrêt sur l'IO board).
  4. Utiliser le logiciel rpiboot avec mass-storage-gadget64 sur l'ordinateur.
    Ce qui expose l'eMMC sur l'ordinateur par l'intermédiaire du lien USB.
  5. Utiliser RPI-Imager pour flasher une image Raspberry-Pi 5 sur l'eMMC.

Installer rpiboot

Le logiciel rpiboot est l'une des pierres angulaires du processus d'installation.
Il est préférable d'utiliser ce logiciel depuis une machine Linux (sous Ubuntu ou depuis un Raspberry-Pi).
A noter qu'il est également possible d'utiliser Windows au pris de quelques adaptations.

rpiboot peut être installé sur une machine Linux en utilisant la commande:

$ sudo apt install rpiboot

Si l'installation apt n'est pas possible par ce qu'un OS Linux est "plus agé" (comme c'est mon cas avec Linux Mint, un dérivé d'Ubuntu) alors il faudra compiler rpiboot sur votre ordinateur... comme je l'ai fait.

A propos de rpiboot

rpiboot est une interface générique de chargement de firmware. Il permet de booter un RPi distant et d'y charger un firmware spécifique... idéal pour tester vos images personnalisés / SecurBoot / etc.

L'un des firmwares spécialisés est mass-storage-gadget64 qui émule un périphérique de stockage de masse  dit MSD (Mass Storage Device). L'ordinateur hôte traitera alors le Pi comme un périphérique de stockage USB.

Compiler rpiboot

S'il n'a pas été possible d'installer le logiciel rpiboot alors il faudra le compiler directement depuis le code source.

Ce code source est disponible sur le dépôt raspberrypi/usbboot :

Voici les instructions permettant de compiler sur votre ordinateur:

$ sudo apt install git libusb-1.0-0-dev pkg-config build-essential
$ git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
$ cd usbboot
$ make

Une compilation qui se passe comme sur des roulettes.

Préparer votre configuration

Désactiver le boot eMMC

Avant de brancher votre DevKit sur l'ordinateur, il convient de désactiver le boot eMMC! Cela permettra de charger un firmware via USB avec rpiboot.

Commencez par placer le cavalier sur la position "disable eMMC boot".

Placer le cavalier "disable eMMC boot"

Brancher en USB

Assurez-vous que l'utilisateur fait déjà partie du groupe "plugdev". Cela peut facilement être vérifié avec la commande groups.

$ groups
domeu adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers

Branchez ensuite le DevKit sur votre ordinateur avec le câble USB.
Ne pas oublier de presser le bouton marche/arrêt pour démarrer le computer module!


Utilisez dmesg pour vérifier la détection du Compute Module (le module Broadcom).

Démarrer rpiboot

1iere tentative

A mon premier démarrage, rpiboot ne trouvait pas mass-storage-gadget64 .

Voici les messages pour mémoires.

$ sudo ./rpiboot
RPIBOOT: build-date Dec  9 2024 version 20240422~085300 cbcf2934
Waiting for BCM2835/6/7/2711/2712...
2712: Directory not specified using default /usr/share/rpiboot/mass-storage-gadget64/
read_file: Failed to read "2712/bootcode5.bin" from "/usr/share/rpiboot/mass-storage-gadget64//bootfiles.bin" - No such file or directory
Failed to open bootcode5.bin

2ieme tentative

J'ai donc utilisé le paramètre -d pour indiquer le répertoire de stockage pour mass-storage-gadget64 . Il se fait que c'est un sous-répertoire direct de rpi-boot.

$ ./rpiboot -v -d mass-storage-gadget64

Alors malgré ma présence dans le groupe plugdev, je reçois un message d'erreur laissant entendre que "je ne fais peut-être pas partie du groupe plugdev"!
Voyez ci-dessous le message d'erreur.

...
2712/memsys03.bin position 0008b000 size 40972
2712/bootcode5.bin position 00095400 size 72660
Completed file-read 2712/bootcode5.bin in archive mass-storage-gadget64/bootfiles.bin length 72660
Permission to access USB device denied. Make sure you are a member of the plugdev group.

$ groups
domeu adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers

3ieme tentative

Cette fois, je me suis fendu d'un sudo pour augmenter les privilège. Et cela à fonctionné :-)

$ sudo ./rpiboot -v -d mass-storage-gadget64
RPIBOOT: build-date Dec  9 2024 version 20240422~085300 cbcf2934
Boot directory 'mass-storage-gadget64'
Loading: mass-storage-gadget64/bootfiles.bin
Using mass-storage-gadget64/bootfiles.bin
Waiting for BCM2835/6/7/2711/2712...
Device located successfully
...
...
...
File 2712/boot.img not found in mass-storage-gadget64/bootfiles.bin
Loading: mass-storage-gadget64/boot.img
File size = 30409216 bytes
Received message ReadFile: boot.img
File read: boot.img
libusb_bulk_transfer sent 30409216 bytes; returned 0
Received message Done: boot.img
CMD exit
Second stage boot server done
rpi-boot ayant finalement démarré mass-storage-gadget64 sur le compute module, notre système hôte devrait avoir accès à un nouveau lecteur/drive... ce que nous allons constater de suite.

Accès à l'eMMC

Avec le mass-storage-gadget64 actif sur le compute module, l'ordinateur hôte à maintenant accès à un nouveau lecteur branché via USB.

Voici deux méthode pour s'en assurer.

lsblk : lister les périphérique de type block

la commande lsblk affiche tous les lecteurs branchés sur l'ordinateur.

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sda      8:0    0 232,9G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0 232,4G  0 part /
sdb      8:16   1  29,1G  0 disk 
sr0     11:0    1  1024M  0 rom

La commande révèle un disque sdb d'une  taille de 29.1 Go. Il s'agit de l'eMMC présent sur le compute module.

Le gestionnaire de disque

Les distributions Linux proposent généralement un gestionnaire de disque permettant d'inspecter les lecteurs/disques et le détail de leur partition.
Voyez ci-dessous une capture du gestionnaire de disque sous Linux Mint (dérivé d'Ubuntu).

Nous y retrouvons également le disque de 31 Go du compute module.
Cette fois les informations sont plus précise avec un modèle de disque reprenant la mention "mmcblk0 Raspberry Pi multi-fonction USB device (100)" .

Quel OS pour mon CM5

L'idéal est de créer un OS sur mesure pour votre projet enfoui.
Mais cela serait bien trop long pour réaliser notre premier test!

Par chance, le CM5 est un équivalent du Raspberry-Pi 5 et l'IO Board du Dev Kit propose -à peu prêt- les mêmes périphériques qu'un Raspberry-Pi 5.

Nous pourrons donc flasher un OS Pi 5 pour réaliser nos premiers essais avec le Compute Module 5.

Flasher l'OS sur CM5

Le documentation renseigne l'utilitaire Linux dd pour transférer l'image sur le disque eMMC. Mais dd est aussi surnommé Disk Destroyer parce qu'une simple erreur dans son utilisation peu littéralement écraser/détruire le contenu de votre disque.

L'approche la plus simple est encore d'utiliser RPi-imager qui fera le même boulot (mais avec moins de risque).

Choisir un OS Raspberry-pi 5 / 64 bits
 

Choisir le périphérique correspondant au disque mmcblk0.

Bien que pas forcement nécessaire pour un OS avec bureau graphique j'ai néanmoins personnalisé mon OS.

personnalisation du système d'exploitation

Pas forcement inutile pour un projet enfoui, l'activation du service SSH sera certainement se monter utile.

Activer le service SSH

Démarrer votre CM5

Une fois flashé:

  1. Eteindre le CM5 avec le bouton marche arrêt
  2. Débrancher de l'ordinateur hôte
  3. Brancher le câble HDMI sur la sortie HDMI0
  4. Brancher le bloc d'alimentation sur la prise USB-C.
  5. Presser le bouton marche/arrêt et soyez patient!

Comme pour un Pi 5, le CM5 redimensionnera le disque et rebootera une ou deux fois avant d'afficher quelque-chose sur la sortie HDMI.

Fiez vous à la LED activity qui rapporte les accès disques.

La LED power est:

  • éteinte ==> CM5 est activé
  • allumé ==> CM5 hors tension 

Et voici ci-dessous le démarrage du CM5 :

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. 

SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Exploration du monde fractal - Mandelbrot, Julia sets et variations sur de multiples paramètres

Bonjour à tous,

J'ai toujours eu un faible pour les représentations fractales.
Les vidéos sur le sujet ne manquent pas mais il arrive parfois qu'il y en ait qui sorte du lot.

La vidéo "Mandelbrot's Evil Twin" de 2swap nous offre une habituelle introduction mais c'est l'exploration des paramètres (et domaines complexes) que les choses deviennent vraiment intéressantes.

Mandelbrot - source: Mandelbrot's Evil Twin

Chose que j'ai apprise dans cette vidéo, c'est que la couleur dépend du temps qu'il a fallut pour découvrir/calculer le point.

Julia set - source: Mandelbrot's Evil Twin

Et l'un des nombreux "morphisme" qu'il est possible de découvrir dans la vidéo

C'est mieux en vidéo


Introduction au calcul des Mandelbrot

La vidéo "The complete Idiot's Guide to the Mandelbrot Set" est une excellente vidéo qui repend le calcul depuis zéro avec explication à l'appui.
Les explications reprennent également le calcul dans le domaine des nombres complexes. Une vidéo à voir.



Passez une bonne journée,
Dominique
Dominique



Recycler les déchêts de PLA... sans refaire du filament

Bonjour à tous,

Dans les divers conversations avec Jeremy, qui fait de l'impression 3D sur BambuLab, il y a cette question qui revient régulièrement:

Comment réutiliser les déchets d'impression et les impressions ratées?

La réponse usuelle : refaire du filament

refondre le PLA pour en refaire un filament est la réponse la plus commune.
Il ne manque par d'article sur ce sujet! Cela demande par ailleurs un matériel relativement avancé (sans pour autant garantir une qualité équivalente).

La réponse innovante : fondre un objet

Objet réalisé à partir de PLA fondu

Refonte d'un nouvel objet

J'ai trouvé l'idée vraiment séduisante même si elle était bien cachée.
Voici quelques détails collectés sur la vidéo "Melting 3D print waste into silicone molds" de Shayway.

L'idée c'est d'utiliser un "moule en Silicone" dans lequel on place une couche de déchet de PLA


Puis que l'on place dans un four a 220°C  pour faire fondre

Puis on rempli encore avec du PLA... et on recommence jusqu'à ce que le moule est complètement rempli de PLA fondu.

Améliorer la technique

Cela pourrait être intéressant de calibrer les déchets pour avoir de meilleure opérations de remplissage.... et peut être même d'avoir des couleurs plus homogènes

Et quoi de mieux qu'un broyeur pour réaliser un calibrage (rapide et efficace).


Où trouver des moules en silicone

Dans les boutiques de bricolage/décoration DIY. Il est également possible d'en trouver sur des boutiques en lignes (mais il n'est pas possible d'en évaluer la qualité).


J'ai personnellement un faible pour les moules en hexagone... parce qu'ils permettent de réaliser des projets évolutifs comme celui-ci

J'espère que cela vous donnera de idées



Impression 3D: utilisation d'insert avec des projets électroniques

Bonjour à tous,

Aujourd'hui, nous allons parler des inserts, ces éléments métallique que l'on "insert" dans une impression 3D (ou un support en plastique). L'insert permet ensuite de visser un élément et de le maintenir en place.

Cet article partage notre expérience sur le sujet

Exemple d'insert

Quelques constations

Avant de me lancer dans les détails, j'aimerais aborder 2 points:

  1. Nombre de sites Maker propose des inserts pour de la visserie M3 ou plus.
    C'est, selon moi, loin d'être idéal.
  2. J'ai récupéré des inserts & vis de coques de laptops avant leurs mises au rebus.
    C'est plutôt facile à faire avec un pince coupante.
    Ces inserts utilisent des vis en M2.

Evitez les inserts Metric 3

Si vous ne faite que des assemblages de pièces imprimées en 3D alors un M3 (ou plus grand) sera parfait/

Si vous faites de l'électronique amateur alors évitez le M3!
En effet, les trous de fixations des cartes sont couramment prévu pour du M2 ou M2.5.

Prenez un Raspberry-Pi, les trous de fixation font 2.7mm de diamètre, donc prévu pour un Metric 2.5. Ce cas est loin d'être une exception!

Bien qu'un Metric 2.5 soit parfaitement utilisable dans le cas du Raspberry-Pi, j'ai opté pour des inserts et visserie en M2

Une visserie en M2 sera parfaitement utilisable dans le cas de figure ci-dessus. Elle permettra de compenser les "écarts" lorsque l'insert n'est pas parfaitement positionné sous les trous de la carte!

N'oublions pas que les inserts sont placés à la main et avec un fer a souder... il est donc facile d'être un peu hors d'alignement par rapport au PCB.

Des inserts en Metric 2

Fort de mes essais et expériences avec les inserts récupéré sur des ordinateurs portables, j'ai fini par trouver la ligne de produit de MW Components qu'il est possible de se fournir chez divers distributeurs.

MW Components

Les inserts de la série H (court) sont très faciles à installer sur une impression 3D. Il faut, bien entendu, réaliser un support d'insertion en suivant les recommandations du fabriquant.

référence fabriquant 256X115H

Visserie M2 en PVC

Une astuce intéressante c'est d'utiliser des vis en PVC!

Je m'explique: si vous utilisez des vis métalliques alors il faut absolument que l'insert soit parfaitement aligné (avec le trou dans le PCB).
Ni le PCB, Ni la vis métallique n'offriront l'opportunité de finaliser l'assemblage!

Avec une vis en PVC, celle-ci peut sensiblement se déformer permettant ainsi de réaliser un assemblage dit "plastique".
Un petit problème d'alignement n'empêchera pas de placer la vis!

Placement des inserts

La méthode débrouille

Il est très commun d'utiliser une pointe conventionnelle de fer a souder (~200°C sur du PLA).

Pointe de fer a souder conventionnelle
(une vieille de préférence)

Utiliser votre pointe de fer a souder présente néanmoins quelques inconvénients:

  • Guidage difficile (suivant la forme de votre pointe de fer)
  • Alignement approximatif
  • Risque de retour de plastique/PLA dans l'insert
  • Risque d’abîmer le filet de l'insert

Le porte insert

L'idéal est d'utiliser un porte insert en lieu et place de la pointe de fer à souder.
Cela évitera tous les problèmes liés à l'utilisation d'une pointe de fer à souder.

Porte insert pour station fer à souder Weller PU81

C'est pratique et facile à utiliser. Une chauffe à 200°C convient pour le PLA.


Fabriquer son porte insert

J'ai une station de Fer Weller PU81 avec fer standard

Plutôt que de passer un temps certain a trouver un porte insert, j'ai plutôt opté pour la fabrication maison d'une pièce sur mesure à partir d'une section en laiton.

Voici les informations nécessaires si vous voulez fabriquer votre propre porte insert.


Bon amusement
Dominique

PCB Raspberry-Pi : moi aussi j'en veux un!

Bonjour,

La semaine dernière c'était la grande messe Raspberry-Pi pour les partenaires de l'aventure... dont fait partie MC Hobby en tant que Revendeur Approuvé. 

L'occasion d'améliorer nos connaissances techniques sur les différentes plateformes mais aussi l'opportunité de visiter l'usine Sony à Pencoed (Pays de Galles).

Les interdictions chez Sony

Bien entendu, interdit de filmer, interdit de prendre des photos, interdit de trop traîner et même interdit de prendre un déchet!

Il y avait là un beau PCB Raspberry-Pi 5 au rebus (échec au contrôle)... je me le serait bien ramené comme souvenir... mais pas questions de l'avoir (cela aussi est interdit)!

Mettre un PCB a nu

Je voulais vraiment un PCB de Raspberry-Pi, j'en ai donc fait un a partir d'un Pi défectueux.

J'ai donc sorti ma station à air chaud, mon fer a souder et j'ai commencer à désassembler ma première carte RPi... et voir aussi comment je pouvais m'en sortie.

PI 3 B+ v1.2 - face avant

PI 3 B+ v1.2 - face arrière

C'est une expérience intéressante à réaliser, qui fait par ailleurs appel à de nombreuses techniques.

Le SoC et la RAM sont de loin les éléments les plus longs à dessouder (~5 minutes chacun).

Des connecteurs (voyez cette technique), le RJ45 fût le le plus difficile à enlever... d'où l'éraflure sur le PCB.

Voici quelques informations utiles si vous voulez conduire la même expérience:

  1. Utiliser un tapis silicone (il resiste à la chaleur)
  2. Préchauffer la carte (au four entre 70 et 100°C).
    Je ne l'avais pas fait et cela aurait été une bonne idée pour dessouder plus facilement les gros composants.
  3. Configurer la station d'air chaud sur 430°C
    C'est violent mais efficace pour dessouder.
  4. Configurer le fer a souder sur 425°C
  5. Manipuler la carte avec soin (cela va sacrément chauffer)
  6. Utiliser du flux et de la bride à dessouder pour éliminer les excès de soudure
  7. Nettoyages à l'alcool (pour les résidus de flux)
  8. Nettoyage final à l'eau chaude + Liquide vaisselle + Mr Propre.

C'est vraiment très intéressant pour tester et améliorer ses techniques à l'air chaud.

En plus, cela à vraiment de l'allure.


HP DesignJet T520 - réparation et/ou récupération d'une imprimante grand format

 Bonjour à tous,

Dans le dernier article, je faisais encore des investigations sur HP DesignJet T520 pour essayer de la réparer.

Après de nombreuses tentatives, j'ai jeté l'éponge et passe donc à la phase de récupération...

Démontage

Comme tous les produits HP, nombre de composants sont difficiles d'accès.
Le démontage s'apparente à Trek... il m'a fallut environ 8 heures de démontage.

La dernière publication la table tracante était dans cet état:

Après 8 heures de démontages, je suis arrivé à cela!

 
Les éléments récupérés sont répartis autour du pied central.
L'image ci-dessous montre (près du pied gauche) les divers éléments plastiques non récupérables (tout comme ceux de la coque extérieure).

Eléments récupérés

Voici ce que j'ai eu l'occasion de récupérer.

Motorisation générale

Une telle table traçante ne manque pas de moteurs mais ce qui est le plus intéressant, c'est le couplage avec des engrenages réducteurs et un système optique permettant le positionnement 

Dans le disque de positionnement était disposé sur un axe (8mm) avec un engrenage équipé d'un système "torpedo" qui entraîne l'axe dans un seul sens de rotation (et route libre dans l'autre sens). L'optique de lecture est composé de deux éléments... probablement pour détecter le sens de rotation ou augmenter la précision (ce sera pour plus tard)


Ce deuxième moteur et engrenage réducteur est enfermé dans un boîtier avec son disque optique. Cet assemblage est très intéressant mais dispose d'un débrayage mécanique automatique lorsque le moteur inverse son sens de rotation. 

Ce qui serait intéressant, c'est de pouvoir neutraliser l'embrayage en fonction des besoins.... a voir.


Ces deux derniers moteurs, toujours avec disque optique et engrenage réducteur.
Ils seront d'excellents outils d'apprentissage :-) 



Courroie du charriot

Une courroie crantée est utilisée pour la traction du chariot. C'est un élément vraiment très intéressant à récupérer. En sus, Il  y a le moteur, la roue libre et le mécanisme de mise-sous-tension.

Ces éléments s'accompagnent du ruban et de l'optique de positionnement du charriot (lecteur sur la carte. L'ensemble accompagné des éléments nécessaires pour la mise-sous-tension du ruban optique.


Pompe à air

Cette imprimante contient une petite pompe utilisée pour injecter de l'air dans les buses durant la phase de nettoyage. Il y a même une valve (à l'extrême gauche de la photo) qui laisse passer l'air lorsque l'on pousse dessus (c'est le chariot qui pousse dessus)

Axes et roulettes

Cette imprimante/table-traçante regorge d'éléments rotatifs.


1) Axe de 6mm
2) axe creux (~40mm)
3) Roulettes de transport du papier sur leur supports
4) Engrenage divers en relation avec l'axe 40mm.
5) Quelques ferrites (pour les rubans conducteurs).

Optique de détection

Il y a aussi l'optique de détection du charriot (qui permet de détecter une surface blanche).

Matériaux

Il y a aussi des matériaux qui peuvent s'avérer intéressants si l'on ne craint pas bricolage plus avancé. Avec un longueur d'un mètre ou plus, ces éléments sauront certainement se montrer utile dans un projet d'envergure.

Nous avons:

1) Pièces métalliques pouvant servir de matière première ou de support à renforcer
2) Axe creux de 10mm
3) Rail de guidage de la tête d'impression sur un support métallique (pas facile à dévisser, je l'ai laissé sur le support pour éviter ma déformation de l'axe).
4) Tablier de l'imprimante. Cette assemblage est d'une rigidité impressionnante et non démontable car il y a du frein-filet partout!. Cet élément, probablement le plus lourd de l'imprimante, sera une excellente base pour la réalisation d'une machine outil maison.


De la visserie, roulement, ressorts, engrenage de tout type et abondante visserie.
Des éléments qui seront toujours se montrer utiles.

Voilà, c'était une parenthèse très intéressante dans les articles de MC Hobby.

Dominique


Equiper une armoire PC (Chariot de recharge) Ergotron d'un cerveau - une histoire de savoir faire

Bonjour à tous,

Dans les milieux scolaires, il devient courant de rencontrer une armoire Ergotron (chariot de recharge). Celle-cis sont destinés au stockage de PC, Laptop et tablette.

Dans cet article, nous allons parler de l'automatisation d'une telle armoire.


Projet mis en place à la demande du Lycée Français Jean-Monnet.
L'occasion pour MCHobby de mettre son savoir-faire à l'épreuve

L'armoire Ergotron

Commençons par jeter un petit coup d'oeil sur une armoire Ergotron.
Cette armoire dispose de serrures et même d'un anneau pour cadenas.

 


Itération 1: intégration

Chaque professeur dispose d'une cartes RFID fournie par le lycée. Système largement employé en interne et qui devrait idéalement permettre l'ouverture de l'armoire.


 A la fin de cet itération, l'armoire dispose:

  1. D'un microcontrôleur Raspberry-Pi Pico
  2. D'un lecteur RFID
  3. D'un détecteur d'ouverture de porte.
    Il ne faut pas qu'elle reste ouverte trop longtemps
  4. D'une interface utilisateur rudimentaire (buzzer, Led Rouge et Verte)
  5. D'un fichier d'autorisation (inclus dans le système)
  6. D'un fichier de log
    qui a ouvert l'armoire et quand? Quel sont les tentatives infructueuses.
Cette première itération débouche sur une carte de contrôle capable de fonctionner sur une batterie 12V (ou depuis un bloc d'alimentation 12V).

Une carte contrôleur avec le capteur RFID au dessus pour permettre une lecture directe des cartes RFIDs.

Itération 1: RFID + buzzer + LEDs
 

Au dessous la carte contrôleur présente toute l'électronique nécessaire au contrôle de l'armoire (détecteur de porte, loquet électro-magnétique)

Itération 1: carte contrôleur + détecteur de porte + ouverture de porte
 
Le loquet électromagnétique permet d'autoriser l'ouverture de l'armoire pendant une dizaine de seconde lorsque la carte présentée sur le lecteur est accepté.
 
L'image ci-dessous présente la modification nécessaire sur le système de fermeture pour empêcher/autoriser l'ouverture de l'armoire.
 

Itération 2: support WiFi

Ce qui serait bien maintenant, c'est de pouvoir utiliser une connexion WiFi pour:
  1. mettre à jour le fichier d'autorisation de la carte de contrôle.
    A intervalle régulier ou sur demande
  2. téléverser les logs sur un serveur
  3. autoriser une ouverture à distance (via requête WiFi).

L'ajout d'un afficheur LCD et d'un clavier numérique permet également de saisir des codes d'ouvertures (code pin) ou d'activer des fonctions spéciales.

Version avec Pico Wireless + LCD + KeyPad

Version avec Pico Wireless + LCD + KeyPad

 
Cette version WiFi du projet s'accompagne d'une API permettant à l'ensemble d'offrir les services connectés à l'armoire.
Cette API est également implémentée à l'aide de Flask et Python mais peut très bien être ré-implémentée sur un autre système/autre langage (ex C#)
 
L'afficheur LCD (avec rétro-éclairage RGB) sera bien utile pour affichés messages et autorisation d'accès.
Afficheur complémentaire


  1. Information générale
  2. Espace disponible
  3. Statut de la connectivité WiFi
  4. Ligne de statut (indiquant ici la saisir d'un code Pin)
  5. Nombre de caractère saisi pour le code Pin

La création de la bibliothèque esp8266-upy/qwiic-serlcd-i2c permet de prendre l'afficheur de SparkFun en charge.

Des caractères personnalisés ajoutés au projet permettent l'affichage de la connectivité WiFi.


Itération 3: détection des ordinateurs

En 3ieme itération, le but est de détecter les ordinateurs présents et absents.
Il ne s'agit pas ici de savoir si l'emplacement est occupé ou vide mais bien d'identifier l'ordinateur qui y est inséré!
 
Pour résoudre ce problème, nous faisons appel à l'impression 3D pour créer un réceptacle pour les ordinateurs.

Cette impression 3D prend place dans les divers emplacement et  permet d'insérer un ordinateur tout en le maintenant bien en position. Cette précision est nécessaire pour décoder le pictogramme d'identification apposé sur l'ordinateur, tablette, chromebook.

Ces éléments imprimés en 3D s'accompagnent de cartes d'acquisition (Reader), d'un bus de données blindé et d'une carte contrôleur.

Reader, Bus de données et Controleur

Controleur pour 3 bus de données
 
On y retrouve encore une fois un Raspberry-Pi Pico qui s'occupe de la gestion des bus et collecte des informations.
Le contrôleur met les données à disposition par l'intermédiaire d'une simple liaison série (le protocole est vraiment très simple).

L'intérêt de cette solution réside dans son autonomie car:

  • Il détecte automatiquement les emplacements (slot) disponibles.
  • Il détecte les conflits d'adresses sur un bus.
  • Il est capable de faire l'acquisition des données de la carte d'acquisition sur simple demande.

Voici, par exemple, un extrait d'échange entre un hôte et la carte contrôleur pour lister les emplacements détectés (commande VIEW).

----------------------------------------
Laptop Storage Detector (LSD).
VERSION:0.1.0
----------------------------------------
Initializing...
 
READY
VIEW
2.9
2.29
2.48

READY

Amélioration de dernière minute

Dans le même temps, le projet principal a bénéficié d'un petit upgrade.
Il est maintenant capable d'accepter une double alimentation batterie + réseau électrique.
Inutile d'utiliser la batterie si le l'armoire est branchée sur le réseau électrique (ce qui sera forcement le cas lorsque les PCs sont mis en charge).

MicroPython: Cellule de charge et limite d'utlisation

Bonjour à tous,

Dans le projet Steam Belgian Knife (sbk.education), il y a l'utilisation d'une cellule de charge comme capteur de pesée ou de capteur force.
La cellule de charge est l'élément principale d'une balance électronique.

L'une des application envisagées est la mesure de la poussée d'une fusée à eau (sur un banc d'essai).
Cela ne sera malheureusement pas possible et nous verrons pourquoi

A propos de la cellule de charge

La cellule de charge est un élément mécanique prévu pour tolérer une déformation en fonction de la force qui y est appliquée.
Cette force résulte soit de la pesée d'un objet, soit d'un effort appliqué directement sur la cellule de charge (au bon endroit et dans la bonne direction).

La cellule de charge est composé d'un pont de Wheatstone, pont constitué de 4 résistances dont l'une d'entre elles est solidaire de la cellule de charge.
Lorsqu'une force déforme la cellule de charge, la résistance est également déformée et sa valeur change sensiblement.
Cela modifie l'équilibre du point de Wheatstone et modifie la tension de sortie d'un ordre de grandeur de l'ordre de quelques millivolts.

Cellule de charge

Les différences de tensions est tellement faible qu'il faut faut employer un amplificateur. Le plus connu est le hx711, un amplificateur 24 bits qui prend en charge l'alimentation et la mesure d'une cellule de charge.

HX711 avec MicroPython

Le HX711 dispose d'une bibliothèque Arduino mais comme vous le savez c'est avant tout l'utilisation avec MicroPython qui nous intéresse.

Pour commencer, voici comment brancher le capteur sur un Raspberry-Pi Pico.

Source: esp8266-upy/hx711

La bibliothèque hx711 et sa documentation (en cours de constitution) est disponible sur le dépôt esp8266-upy/hx711 .

Une fois le fichier hx711.py copié dans sur la carte MicroPython, il est possible d'exécuter l'un des programmes de test.

La tare

Les gauches de contraintes et cellules de charges n'ont pas vraiment de "point Zero".
Ces capteurs sont plus ou moins contraint au repos... et passent dans un autre état de contrainte lorsqu'une masse/force est appliquée.

Il faut donc effectuer une tare qui lit l'état du capteur au repos et mémorise la valeur comme point Zero.
Les autres mesures se feront donc par rapport à ce point Zéro. 

C'est exactement que fait une balance électronique lorsqu'elle est activée! Sa première opération consiste à réaliser une série de mesures pour déterminer le "point zéro" de repos (elle "tare").
C'est pour cela que l'affichage du "0" n'est pas immédiat sur une balance électronique.

Dans la bibliothèque la méthode HX711.tare() permet de réaliser cette opération.

test.py : mesure brute

ce simple programme de test qui affiche la valeur lue sur la cellule de charge.

from hx711_gpio import HX711
from machine import Pin
import time

pin_OUT = Pin(12, Pin.IN, pull=Pin.PULL_DOWN)
pin_SCK = Pin(13, Pin.OUT)

hx711 = HX711(pin_SCK, pin_OUT, gain=128)

hx711.tare()
while True:
	print( "---------------------------------" )
	# Raw value of load cell. Not scaled, no offset compensation
	print( "read: ", hx711.read() )
	print( "get_value: ", hx711.get_value() )
	time.sleep_ms( 500 )

Ce script retourne des "valeurs brutes".
Après avoir étalonné mes masses de test, j'ai effectué un relevé des "valeurs brutes" retournée par la fonction get_value().

Remarque: je me serais attendu à une erreur plus petite sur le poids de 1 Kg.

Si l'on reporte les valeurs dans un graphique, nous pouvons voir qu'il y a une belle relation proportionnelle.

En appliquant la règle de trois, entre les masse et get_value(), ma cellule de charge de 5Kg présente un rapport d'échelle de 404.4715 (le facteur d'échelle est calculée pour une mesure en grammes).

test_unit.py : mesure en gramme

Lorsque le facteur d'échelle est identifié (ex: 404.4715), il est possible d'obtenir la valeur de la mesure directement en grammes si e facteur d'échelle à été calculé pour une cellule de 5000 grammes (un gamme de valeur de 0 à 5000). 

Dans l'exemple ci-dessous, set_scale() est utilisé pour mentionner le facteur d'échelle.
A partir de ce instant, la valeur retournée par get_unit() sera la masse (en grammes).

from hx711_gpio import HX711
from machine import Pin
import time

pin_OUT = Pin(12, Pin.IN, pull=Pin.PULL_DOWN)
pin_SCK = Pin(13, Pin.OUT)

hx711 = HX711(pin_SCK, pin_OUT, gain=128)

hx711.tare()
hx711.set_scale( 404.4715 ) # 5000gr Gauge with 128 bit gain. Output unit will be in grams
while True:
	print( "get_units: %s gr" % hx711.get_units() )
	time.sleep_ms( 500 )

La constante de temps!

Avez-vous déjà remarqué qu'une balance réagit relativement vite mais qu'il faut  quelques secondes pour que la mesure soit stabilisée (surtout sur les balances de précision).

Ce même comportement s'applique aussi aux cellules de charges de cet article. La valeur augmente rapidement mais requière un certain laps de temps avant de se stabiliser près de la valeur finale.

J'ai ajouté un script plot_value.py qui attend la présence d'une masse pour effectuer une rafale de mesures toutes les 200ms jusqu'au retrait de la masse. En reportant les données dans un tableur, puis un graphique de l'évolution de la mesure en fonction du temps.

Source: esp8266-upy/hx711 - Cliquer pour agrandir

La forme de la courbe ressemble furieusement à la courbe de tension d'un circuit RC.

En inspectant celle-ci, nous pouvons constater:

  1. Qu'il faut environ 4 secondes pour obtenir la valeur finale.
  2. Que la section droite de la courbe présente une courbure à partir 2/3 de la valeur finale (très intéressant!).

Suivez la démonstration suivante

A partir de la valeur finale connue (400000), on calcule la valeur à 66% (soit 266666).
Le report de cette valeur de 266666 sur le tracé coupe la courbe de lecture là où celle-ci décolle de la tangente (ligne verte).

Encore mieux, il faut à peine 1077ms pour atteindre 66% de la valeur finale.

Ces 1077ms (ou 1.077 sec) est la constante de temps, temps minimal qu'il faut attendre pour avoir une idée raisonnable de la valeur finale.

Lecture rapide

En faisant une mesure à 1.077sec après que la mesure décolle du Zéro, nous obtenons une valeur indicative qu'il faut multiplier par 1.66 pour estimer le poids/force finale. 

Il suffit d'attendre 3 secondes de plus pour lire la valeur finale et éventuellement corriger la valeur finale.

Incompatibilité avec la mesure de poussée

Rappelez vous, en début d'article, nous parlions d'un banc d'essai pour mesurer la poussée d'une fusée à eau.

Il faut savoir que la majorité de la poussée se produit durant les premiers 1/500 de seconde du lancement (cf. Planète Sciences > Fusée à eau, un superbe document).

Avec une constante de temps de 1.077 sec pour l'obtention d'une mesure approximative... durant le lancement d'une fusée à eau il sera impossible d'effectuer plus d'une mesure avec la cellule de charge!

Il faudra se tourner vers un dynamomètre dont le temps de réponse est de l'ordre de la milliseconde pour effectuer des mesures pertinentes avec une fusée à eau.

Note: pour une fusée à combustible solide, la poussée dure plusieurs secondes (une dizaine), de sorte que la constante de temps à un impact moins important sur la mesure (mais quand même pas négligeable). La cellule de force sera appropriée dans ce cas.

Conclusion

La cellule de charge est un excellent outil permettant de mesurer force statique ou une masse.

Ce capteur ne conviendra pas pour la mesure de force dynamique (comprenez: qui change rapidement).

Note: il me faudra aussi poursuivre la documentation du pilote HX711 qui reste très embryonnaire.
Note 2: la documentation du pilote HX711 est maintenant complétée.

Ressources

Pour la sauvegarde de votre panne de fer à souder

Bonjour a tous,

Nombre de nouveau venu dans le monde de l'électronique se lancent dans la soudure.

Parmi les gestes indispensables, il y a ce reflex qu'ont les initiés de passer la pointe du fer sur une éponge humide... réflexe qui se répète toutes les deux minutes.

Ce n'est ni un tic, ni un toc!

Si la pointe n'est pas nettoyée alors apparaîtra un dépôt brun/noir qui s'oxyde sur la pointe. Cela diminue la conductivité thermique, empêche l'étain de mouiller la panne (et donc de fondre).
Pire encore, cette oxydation peut, et va, contaminer le métal de la panne... panne qui mouillera de moins en moins à l'étain rendant les opérations de soudures de plus en plus difficile.

La fausse bonne action consiste à gratter l'oxydation avec un cutter/couteau ou utiliser de la toile Emeri/papier de verre pour poncer délicatement la pointe. Cela ne marchera qu'un nombre limité de fois car vous allez éliminer le traitement de surface de la panne, ce même traitement qui facilite le mouillage de l'étain.

Note: Il paraît qu'il existe du rénovateur de panne, une sorte de pâte. Je ne sais pas si cela fonctionne, je n'en ai jamais eu besoin. Ma plus vieille panne à 30 ans!

Donc: attrapez ce réflexe de nettoyer votre panne toutes les deux minutes :-)

Voiture téléguidée à air comprimé

Bonjour amis Maker, amis professeurs,

De temps à autre, on tombe sur une vidéo qui se révèle être un petits bijoux d'apprentissage.
Aujourd'hui, je vous présente le projet de Tom Stanton sur la réalisation d'une voiture turbine propulsé à l'air comprimé.

Cette vidéo de Tom Stanton

Au cours de sa vidéo on découvre les différentes itérations de turbines, la vitesse maximale de 18.000 tour/minutes et le développement de la puissance maximale de 12W.

Commençons par la roue libre (en métal) et engrenage réducteur.

Cette vidéo de Tom Stanton

Avec l'axe d'entraînement (au premier plan) sur lequel vient se placer la turbine à tester avec la canule y soufflant le l'air, sous pression, contenu dans les bouteilles. Cet air est comprimé à 18 PSI (Pound per squate Inch).

1 PSI = 6894.75 Pa. A 18 PSI, la pression dans la bouteille est donc 124105 Pascal (un peu plus d'une atmosphère).

Cette vidéo de Tom Stanton

Cette vidéo de Tom Stanton

A l'aide d'une électronique adéquate, Tom mesure la vitesse de rotation (RPM) et le couple (dit Torque en anglais).

Le graphe ci-dessous présente l'évolution de la vitesse avec le temps. En début de graphe, la vitesse augmente rapidement car la pression élevée dans la bouteille permet de développer un couple important. En fin de bouteille, la pression chute, raison pour laquelle la vitesse plafonne.

Source: cette vidéo de Tom Stanton

Par ailleurs, si l'on prend la tangente à la courbe, le coefficient d'inclinaison de la droite est clairement représentative du couple développé.

Source: cette vidéo de Tom Stanton

Si l'on représente le couple (torque) en fonction de la vitesse de rotation nous obtenons une répartition qui ressemble fort une droite.

Sur le graphe ci-dessous, il est possible de refaire les même constats que précédemment. C'est au démarrage (0 RPM) que le couple est le plus important (quand la pression est au maximum dans la bouteille). A vitesse maximale (18000 RPM), la bouteille est presque vide... moment où la couple développé par la turbine est le plus faire.

Source: cette vidéo de Tom Stanton

Question: comment le couple à t'il été mesuré ?

L'intérêt d'un moteur étant quand même d'obtenir une puissance maximale et surtout de maintenir cette puissance au maximum.

Voici une petite formule fournie par Tom permettant de convertir le couple ne puissance.

Puissance (Watt) = (Couple en Nm * vitesse en RPM) / 9.549

Une fois converti en graphique Puissance (Watt) par vitesse (RPM), il est très facile de constater que la puissance maximale est obtenue aux alentours de 10000 RPM (10000 tours par minutes).

Source: cette vidéo de Tom Stanton

Il faut donc pouvoir réguler le débit d'air pour maintenir la turbine à 10000 tours par minutes.

Tom a mis au point un valve en résine, valve qui permet de contrôler le débit d'air.

Source: cette vidéo de Tom Stanton

Une idée lumineuse qui est facile à contrôler à l'aide d'un simple servo-moteur. Grandiose!

Source: cette vidéo de Tom Stanton

L'image ci-dessus présente la valve équipée de son tuyaux d'entrée.
Vient ensuite le placement de la buse de sortie et placement de la turbine.

Source: cette vidéo de Tom Stanton

Voici enfin le montage du bloc moteur avec la turbine équipée de l'engrenage d'entraînement des roues.
Le bloc moteur reprend également une valve de recharge pour remettre la bouteille sous pression.


Cette dernière capture montre l'utilisation de la valve de recharge.


Je trouve tous cela d'une magnifique inventivité!

En vidéo

Je vous invite à visionner la vidéo de Tom Stanton sur la réalisation d'une voiture turbine propulsé à l'air comprimé.


Bon visionnage
Dominique


PicoTamachibi : créer un animal virtuel/Tamagotchi avec Raspberry-Pico 2

Bonjour à tous,

01 sept 2024: Ajout d'une petite étude des niveaux, des actions utilisateurs et actions tamagotchi sur le Wiki.

Pour ce week-end, je vous propose un chouette projet MicroPython à base de Raspberry-Pi Pico 2, d'un écran OLED 128x64 I2C et de trois boutons poussoir.

Kevin McAleer nous propose de créer un animal virtuel appelé Tamachibi.
Sorti tout droit de notre enfance ces animaux virtuels se nommait Tamagotchi.

Ce que j'adore dans la vidéo de Kevin ce sont les animations de "Baby".

écran OLED 128x64 I2C

La disposition des composants sur la carte est également bien pensé.

Source: vidéo de Kevin McAleer

Les graphiques sont stockés dans des fichiers au format BPM que nous avions déjà abordé dans l'article "Lecture d'image PBM sous MicroPython".

Quelques informations pratiques

Je reprend ci-dessous quelques captures de la vidéo où l'on retrouve des informations utiles pour d'autres projets similaire (merci Kevin pour ce partage).

Composition générale de l'interface

Les différentes icones de la barre d'outils (toolbar) propose les fonctionnalités décrites ci-dessous

L'icone sélectionnée dans la Toolbar (barre à outil) est affiché en négatif!

Les ressources/icones graphiques sont disponibles sous forme de fichier BPM, un format facile à lire pour un microcontrôleur

La documentation sur les animations est aussi instructive.
Je me suis demandé quel pouvait être l'intérêt d'une séquence REVERSE mais a bien y réfléchir, cela permet de déplacer Baby à un endroit puis, plus tard, de revenir à sa position initiale.


En vidéo

Je vous propose de découvrir la vidéo de Kevin (YouTube).

Kevin prend le temps de présenter les concepts utilisés et les éléments de programmation exploités.


Amélioration possibles

Je vois quand même quelques possibilités d'amélioration (électronique et logiciel).

  • Prévoir de l'autonomie (avec un Accu Lipo) et recharge
  • Prévoir du son (du moins un minimum).
  • Diminuer la quantité de fichiers BPM (regrouper les ressources dans un fichier commun)
  • Envisager des personnages différents (et comportements différents)...
    d'où l'intérêt de regrouper les ressources.
  • Clarifier les relations entre état psychologique et paramètres vitaux (état émotionnel, actions et leurs conséquences).
    J'ai trouvé ce point un peu confus dans l'implémentation de Kevin.
     
J'ai pris un peu de temps pour réaliser un petite étude des des niveaux, des actions utilisateurs et actions Tamagotchi sur le Wiki.

Bon visionnage,
Dominique

Microscope DIY et Camera Pi

Bonjour à tous,

La Camera HQ pour Raspberry-Pi apportait des promesses intéressantes sur avec son support CS/C-Mount. 12 MegaPixels

Cam HQ pour Raspberry-Pi

Ce qui m'excitait beaucoup c'est la possibilité d'utiliser des objectifs de type "Microscope". Dans les faits, sur le plan microscopique il n'y a pas eu grand chose de concluant.

J'ai donc entamé quelques recherches et regroupé une série de vidéos assez intéressantes pour réaliser MicroScope DIY et le couplage d'un capteur CCD (comme la caméra HQ ou la Cam V3 qui dispose aussi de 12 Mpixels).
 

La méthode Pure DIY

Cette vidéo est celle qui a relancer mon intérêt pour un MicroScope Raspberry-Pi.
Il utilise un matériel et des méthodes très basique mais l'intérêt réside dans la récupération de lentilles! .


Du point de vue des cours de physique, il y a là un excellent sujet d'étude sur les lentilles, les distances focales, comment comment ré-identifier ces paramètres s'ils ne sont pas connus.

L'autre intérêt est que la méthode est d'être abordable pour réaliser un atelier avec des ados.

DIY Microscope avec PiZero W et Pi Camera

Ce microscope réalisé par Brauns CNC utilise une Spy Camera Raspberry-Pi (2 Mpixels) et une lentille Macro pour SmartPhone afin de créer un agrandissement modéré avec des images de qualités.

C'est déjà un bel agrandissement... mais pas encore du domaine microscopique

Ce projet dispose:

Voyez cette vidéo pour plus d'informations


 

Digital Microscope with PiCamera

The Post Acpocalyptic Inventor  est un maker porté sur les projets mécaniques que je classerais dans la catégorie des "projets poids lourds".
Si vous ne connaissez pas encore, je vous invite vivement à visiter sa chaîne!

Il n'empêche que de temps à autre TPAI s'attaque aussi à des projets Makers plus commun en partant d'un MicroScope existant.

Cette approche est l'une des plus abouties en terme de grossissement et de faisabilité!
Kit d'occasion acheté pour une dizaine d'euro

Il existe bien des caméras oculaires (USB) mais leur définition est de l'ordre de 2 MegaPixel là où une caméra Pi offre une définition bien supérieure! 

L'intérêt d'une Caméra Pi est aussi de fonctionner avec du logiciel OpenSource alors que les solutions commerciales vous imposent leur propre logiciel.

Dans son projet de test, TPAI a remplacé le monoculaire par une caméra sans objectif (donc avec le capteur CCD directement exposé).

Capteur CCD sans lentille

Mise à la place du monoculaire

Dans un second essai, TPAI a remplacé le support monoculaire par une section de tube d'aspirine et la caméra montée sur un capuchon ajustable (pour ajuster le back-focus de la caméra).

Ce qui permet, au final, d'obtenir des résultats très impressionnant.

Ce projet là est vraiment très intéressant!

Voyez la vidéo de "The Post Apocalyptic Inventor" ci-dessous pour plus d'informations. 


Swift SW380T + Cam HQ

Là, nous sortons clairement de la zone DIY. Un microscope Swift380T coûte entre 350 Eur (occasion) à 999 Eur (neuf).

Source: swiftmicroscopes.com

Il est visiblement possible d'y placer assez facilement une caméra Raspberry-Pi CAM HQ comme l'indique la capture ci-dessous.


Si cette option pique votre curiosité, je vous propose de regarder cette vidéo de Vittorio Saggiomo.



TrinKey QT2040 sous MicroPython: carte USB super compacte à base RP2040

Le Trinkey est une mini-clé USB produite par AdaFruit et équipée d'un microcontrôleur RP2040 (le même que le Raspberry Pico) ainsi que de 8 Mio de mémoire Flash QSPI. 

TrinKey QT2040 par Adafruit
Le Trinkey QT2040 est équipé:

  • du MCU RP2040 @ 133 MHz, 264 Kio RAM, 8 Mio Flash
  • d'une LED NeoPixel (RGB)
  • d'un connecteur Stemma QT/Qwiic
  • d'un bouton utilisateur (sert aussi au lootloader)
  • Une alimentation 3.3V @ 600mA.

Le connecteur QWiic (SparkFun) / StemmaQT (Adafruit) est un connecteur 4 pôles JST SH4 permettant de transporter un bus I2C avec une alimentation. Le bus I2C étant chainnable par nature, ce qui permet de brancher facilement capteurs et périphériques I2C (voir les connecteurs et câbles de raccordement compatibles).

Le TrinKey permet de créer des rapidement des solutions simples et efficaces... branchez là et le projet qu'elle contient est prêt à l'emploi. 

Le TrinKey est un produit qui m'excite beaucoup, j'aime l'idée d'avoir une clé USB compacte que l'on peut adapter à ses besoins. Son connecteur I2C permet de chaîner capteur I2C et actionneur mais il est aussi possible de détourner ce connecteur pour exploiter les deux GPIOs ou un UART.

Le récent déploiement d'USBDevice permet maintenant d'écrire des pilotes USB en MicroPython... une autre raison de trouver le TrinKey vraiment très attractif.

Brochage du TrinKey QT2040

Détail des GPIOs du TrinKey (Source: Adafruit TrinKey QT2040)

Utiliser avec MicroPython

Bien entendu, c'est sous MicroPython que le Trinkey m'intéresse le plus.

J'ai détaillé l'installation et utilisation du TrinKey QT2040 sous MicroPython dans le Wiki de MCHobby.

Je vous invite à suivre le lien ci-dessus.

Ressources

Le Pico 2 et son MCU RP2350

Bonjour à tous,

Le projet Amethyst, tel était son nom avant de devenir RP2350, a débuté presque en même temps que celui du RP2040. Le projet Amethyst visait déjà à anticiper les améliorations nécessaires du RP2040.

Suivez le fil de cet article... il se pourrait que vous découvriez d'autres informations croustillantes! 

Pico 2 - disponible chez MC Hobby

Ce second microcontrôleur créé par le fondation Raspberry-Pi et baptisé RP2350 est basé sur Cortex-M33 double coeurs à 150 Mhz épaulé par une mémoire flash de 4 Mio (QSPI). Le RP2350 dispose aussi d'une mémoire RAM de 512 Kio (presque le double du Pico original).

Ce nouveau microcontrôleur est non seulement plus rapide mais il dispose aussi d'une vraie unité de calcul en virgule flottante double précision. Le RP2350 dispose également d'un support DSP pour le traitement de signal... tout en restant 100% compatible avec le Pico original (logiciel et matériel).

Pico 2 - disponible chez MC Hobby

L'augmentation de fréquence d'horloge de 133 MHz à 150 MHz améliore aussi le temps d'accès à la RAM et à la mémoire Flash mais le gain en performance va bien au delà des quelques 11% apportés par l'augmentation de fréquence d'horloge.
En effet, une série Cortex-M3 est tellement plus performant qu'une série Cortex-M0

Côté GPIOs, il y a aussi une surprise:

  • Les GPIOs sont tolérant 5V ... un grand pas pour le monde rétro!
  • Les 6 bus (2x I2C, 2x SPI, 2x UART) qu'il est possible de localiser à de très nombreux emplacements sur les GPIOs grâce au Bus Fabric.
  • 24 canaux PWM.
  • toujours 3 entrées analogiques @ 12 bits (500.000 échantillons par seconde).
    (A noter que la résolution réelle est de 9.5 bits pour rester au dessus du bruit)
  • 16 canaux DMA (pour automatiser des transferts entres périphériques internes et la RAM).

Si la carte ne dispose toujours pas de lecteur pour carte SD, l'interface SDIO est toujours disponible. Il est toujours possible de réaliser une sortie VGA mais c'est le nouveau périphérique TMDS qui permettra de créer plus facilement une sortie HDMI/DVI-D qui a attiré mon attention. Le périphérique TMDS est le résultat immédiat du bloc HSTX (High Speed data Transmission) destiné à la transmission de données à haut débit.

Rien n'a changé du côté du support USB et nous avons toujours une fiche micro-USB (là où certains acteurs auraient préférés de l'USB-C même s'il est plus coûteux).

Cortex M33 ou Risc-V

L'une des grandes nouveautés du RP2350 est la possibilité d'utiliser soit les 2 coeurs ARM Cortex M33, soit deux coeurs RISC-V (ou un coeur de chaque type). 

La sélection des cores utilisés est opéré par la séquence de boot du Pico 2 qui est capable de détecter l'architecture utilisée dans le binaire utilisateur (celui qui doit être exécuté après le boot).

RISC-V est un jeu d'instruction en standard ouvert qui fait des émules depuis quelques années. Plus récemment, c'est le déploiement des premiers ordinateurs RISC-V qui fait le buzz.
Une technologie qu'il ne faut vraiment plus ignorer! A voir sur riscv.org

La fondation ouvre ainsi la porte des MCU RISC-V avec l'implémentation Open-Source Hazard3 (Dépôt GitHub).

Hazard3 prend en charge les spécifications RV32IMAC, une belle occasion de découvrir et tester le monde RISC-V sans devoir acheter un produit spécifique. Le fichier readme de Hazard3 inclus une documentation assez précise... incluant des notes pour mettre en place la chaîne de compilation.

A noter que Hazard3 est le fruit du travail personnel de Luke Wren, l'un des ingénieurs impliqués dans le projet Raspberry-Pi.

MicroPython dispose par ailleurs d'une implémentation RISC-V qui peut être testé sur le Pico 2 comme en témoigne cette vidéo (YouTube)

Mes impressions
Avec cette proposition double architecture, il est fort a parier que la fondation explore le potentiel de RISC-V pour une future lignée de microcontrôleur, voire aussi de processeurs. Avec les travaux de Luke Wren, la fondation démontre aussi qu'elle dispose d'un savoir faire en interne... et ce n'est pas rien.
Moi qui voulais explorer RISC-V et ses possibilités... voila que cela est servi sur un plateau :-)

Consommation réduite en mode veille

L'une des grosses critiques du Pico original concernait le mode veille (deepsleep) qui consommait une courant de l'ordre de 1 à 2 milliampère. Bien qu'apparemment faible, cela limite la durée de vie d'un projet sur batterie à quelques semaines.

Le Pico 2 dispose d'un tout nouvel étage d'alimentation basé sur un hacheur DC/DC très performant.

Le Pico 2 en mode veille réduit la consommation à moins de 10 µA, ce qui permet d'envisager une durée de vie de plusieurs mois sur batterie.

A noter qu'il est possible de maintenir la RAM interne sous-tension (dit "rétention mode") au prix d'un courant de veille plus important.

RAM en accès concurrent

Les 512 Kio de RAM sont répartis en 10 banques à accès concurrent! Cela signifie que chaque coeur peut accéder à son propre espace RAM en toute indépendance.

Cela autorise un périphérique tierce (ex: ADC, HSTX, PIO) à effectuer des transferts vers une banque mémoire sans être entravé par un autre processus. C'est aussi pour cela que le Pico 2 dispose de 16 canaux DMA!

Cette possibilité d'accès concurrent aux différentes banques permet ainsi d'éviter des temps d'attente imposés par une RAM monolithique ne supportant les accès concurrents. Même si cela n'est pas vraiment neuf, il s'agit là d'une optimisation importante pour maintenir de hautes performances.

Support pour RAM QSPI / PSRAM externe

Le bus QSPI (Quad SPI) est un bus SPI avec 4 lignes de données, ce qui permet de transférer plusieurs bits en un seul cycle d'horloge. Ce type de bus est déjà utilisé sur le Pico original pour accéder à la mémoire Flash.

Le microcontrôleur RP2350 apporte également le support de PSRAM externe déjà très populaire avec les plateformes ESP32.
Cela permet d'augmenter la quantité de RAM disponible sur le microcontrôleur jusqu'à atteindre 8 Mio.

A noter que le SparkFun Pro Micro RP2350 propose une carte avec 8Mio de PSRAM et 16 Mio de mémoire Flash.

SparkFun Pro Micro RP2350

Il faut cependant garder à l'esprit qu'une telle RAM est accédé par l'intermédiaire d'un bus série (même 4 bits à la fois) et qu'elle inévitablement plus lente que la RAM interne du MicroContrôleur.

Mes impressions
Le RP2040 atteignait déjà la puissance d'un Pentium, puissance que l'on dépasse allégrement avec le RP2350. Avec une PSRAM externe, le support USB et le périphérique TMDS (que nous verrons plus tard) il devient évident qu'il est possible de créer un ordinateur rétro type Pentium à partir d'un Pico RP2350.
Il va être possible de créer de puissant émulateurs avec un tel MCU.

XIP: amélioration accès à la mémoire Flash

L'accès à la mémoire flash dispose d'une plus grande bande passante grâce à une technique de cache double-banked (word stripping).

Le support de l'interface XIP (eXecute In Place) permet au MCU d'exécuter des instructions directement depuis la mémoire Flash sans nécessiter de cycle d'horloge supplémentaire. Il me semble que cette technique est déjà exploitée par MicroPython depuis un bon moment.

Les temps de transferts sont également améliorés avec des modes accélérés (burst) en lecture/écritures, translation d'adresse et "odd clock divisors" (qui me paraît encore obscure).

Mes impressions
La présence d'un Burst Mode est particulièrement pratique pour tous les projets exploitant un système de fichiers en Flash. Je pense plus particulièrement à MicroPython / CircuitPython.

Améliorations PIO

Cette section cache une petite pépite!

PIO (Programmable IO) est un langage de bas-niveau offre de vrais avantages concernant le traitement de données et manipulations des entrées/sorties en bas niveau. PIO offre des machines à état fini (StateMachine) associé à un GPIO et à une programme PIO (qui manipule le GPIO). Le programme sera exécuter à une fréquence entre 2000 Hz et 125.000.000 Hz (125 MHz). PIO permet d'envisager la réalisation d'application "time-critical" comme, par exemple, une sortie VGA, HDMI, transfert haut debit.

Le RP2350 se voit accompagné d'un 3ieme bloc PIO, ce qui porte le nombre processus PIO à 12 machine à état! ... Soit 12 mini-processus autonomes indépendants des coeurs.

Non seulement les PIO profitent de l'augmentation de fréquence à 150 MHz (contre 133 Mhz) mais le RP2350 dispose d'instructions PIO supplémentaires.

Le nouveau périphérique HSTX (High Speed Transfert) permet de créer une sortie DVI (TMDS) avec un faible impact sur le système... laissant ainsi beaucoup de ressource disponibles pour le projet.
Il est ainsi possible de créer une sortie VGA à 60 Hz sans overclocking produisant deux pixels en sortie par tick.

Le seul autre endroit où j'en ai entendu parlé est sur cette vidéo d'Adafruit Industrie qui semble avoir capté le potentiel de ce périphérique.


Architecture sécurisée

La grande nouveauté du RP2350 est l'apport d'une architecture sécurisée. Si celle-ci intéressera surtout les professionnels, elle apporte aussi ses avantages aux monde des Makers.

RP2350 inclus la fonctionnalité "ARM TrustZone-M" qui permet d'isoler du code et ses données du reste de l'application à l'aide de 8 SAU (Secure Attribut Unit). 
Voir TrustZone technology for Armv8-M Architecture sur arm.com .

Les applications industrielles utiliseront cette fonctionnalité pour verrouiller leur firmware ou garder les éléments importants à l'abri des yeux indiscrets.

Les Makers pourrons utiliser cette fonctionnalité pour y cacher des jetons de connexion (Tokens) des clés d'accès aux API (API Keys), clé WiFi et des informations privées. 

Ainsi, si le projet se perd dans la nature, il n'y a aucun risque pour les données sensibles qu'il transporte.

L'architecture sécurisée inclus:

  • Secure boot : pour empêcher l'exécution de code non autorisé sur le RP2350
  • Encrypted boot : pour empêcher la lecture non autorisée du code et des données.
  • Isolated execution : code sécurisé et code non-sécurisé peuvent être exécutés en même temps.
    Le code sécurisé a accès à la zone non-sécurisée (mais pas l'inverse!)

Cette architecture sécurisée est possible grâce aux éléments suivants:

  • Inclusion de l'extension "ARM TrustZone-M" et de 8 SAU (Secure Attribut Unit). Voir TrustZone technology for Armv8-M Architecture sur arm.com
  • 8Kio de Mémoire antifuse OTP (one-time-programmable) permettant la configuration de clé de stockage (avec blocage matériel ou logiciel).
  • Signature du boot (optionnel). Cette vérification est effectué par ma Mask ROM du microcontrôleur (donc non modifiable/non attackable) avec l'empreinte de la clé (fingerprint) stocké dans la mémoire OTP!
  • Un stockage OTP protégé pour la clé de décryption du boot (optionnel)
  • Accélération matériel du hash SHA-256
  • Un vrai générateur de nombre aléatoire matériel (TRNG)
  • Détection de glitch pour résister aux attaques par injection électro-magnétique.
  • Clé de débogage via OTP

Les attaque par injection EM

Voici une petit vidéo de Aaron Christophel qui cherche le meilleur point d'attaque pour injecter une impulsion électromagnétique en vue d'extraire le firmware d'un LPC2388. C'est la méthode de Glictching qui est ici utilisée. Cette analyse débouche sur une seconde vidéo où le firmware est extrait de la carte.


A propos de la mémoire OTP AntiFuse

OTP (One Time Programmable) est une mémoire de type ROM que l'on peut programmer une seule fois. Elle peut être utilisé pour y stocker des clés.

La mémore OTP offre une excellente résistance aux attaques car il n'est pas possible de lire les bits à l'aide d'un microscope à balayage (oui, il y a des moyens dans l'espionnage industriel).

Comme le montre l'image ci-dessous, une mémoire eFuse OTP traditionnelle, il est très facile de lire le bit (s'il est à 1 ou à 0) puisque la section de métal est vaporisée sur le fusible.


Les AntiFuse OTP fonctionnent différemment car on brûle volontairement le la jonction d'un "transistor" (son substrat) créant ainsi une voie d'écoulement  permanente pour le courant!
La différence ici, c'est qu'il n'est pas possible d'identifier les jonctions non-altérée  des jonctions en court-circuit.

C'est à la vue de tous... mais pas lisible :-)
Il semblerait que ce type de jonction soit aussi beaucoup plus difficile à manipuler avec les techniques usuelles d'espionnage industriel.

Voir ici pour plus d'information (pufsecurity.com).

MCU en version A ou version B

Le microcontrôleur RP2350 existe en deux versions A et B (30 GPIOs et 48 GPIOs).
Le MCU équipant le Pico 2 est le RP2350A qui expose 30 GPIOs sur un composant en QFN60 (10x10mm) avec une mémoire Flash externe de 4 Mio (contre 2 Mio Pico original).

Ces révisions ne concernent pas vraiment le Pico 2 mais les Makers disposés à créer leurs propres cartes!

Là où les choses deviennent intéressantes:

  • Le RP2350B dispose aussi de 8 entrées analogiques!
  • Le RP205xA & B seront disponibles avec 2 Mio de mémoire Flash QSPI stacked-in-package (c'est à dire empilé au dessus microcontrôleur).

Ces nouvelles variantes portent les références RP2354A and RP2354B (avec le dernier chiffre 4 indiquant la quantité de mémoire Flash empilé sur le microcontrôleur.

Nouveau SDK 2.0

La sortie du nouveau RP2350 et du Pico 2 coïncide avec la sortie du SDK 2.0. Rien de vraiment étonnant puisqu'il faut pouvoir supporter les nouvelles fonctionnalités du RP2350.

Il y a de nouvelles options CMake font leurs apparitions pour le support RP2350.

Le SDK inclus la configuration du boot OTP et la programmation des clés. Le SDK couvre également l'exécution de sécurisé (Secure Code).

Enfin, le SDK Python prend en charge le RP2350 ainsi que le support WiFi, Bluetooth, Ethernet pour le Pico 2.

Le Pico 2 Wireless est d'ores et déjà annoncé pour la fin de l'année 2024. Ce dernier utilisera le même module que pour le Pico original.

En attendant, il semble que Wiznet dispose déjà de cartes RP2350 à base de ses Chip Ethernet W5100S, W5500, W6100.

WizNet.io

Intégration Rust

Le langage RUST est devenu très populaire ces dernières années. Très similaire au C, RUST est surtout réputé pour sa fiabilité d'exécution (plus d'info en Français ou en Anglais).

Rust Lang

La sortie du RP2350 coïncide avec la sortie de la couche d'abstraction matériel RUST pour le RP2350 (GitHub) ainsi que le Blog documentaire l'accompagnant.

Cela signifie que des carte Pico 2 et le SDK étaient disponibles pour ajouter le support RP2350 à Rust.
Une preuve, s'il en faut, que la fondation prend Rust très au sérieux!

Intégration MicroPython

Est-il vraiment nécessaire de préciser qu'il existe une version MicroPython / CircuitPython disponible le jour même de la sortie du Pico 2 et du RP2350 ?
MicroPython do love the Amethyst
 
Vous trouverez bien entendu la version de MicroPython pour RP2350 sur micropython.org

Où acheter

Vous avez trouvé ces informations intéressantes ? Alors aider nous à en produire plus en achetant vos produits chez MC Hobby

❌
❌