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.
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.
D'un détecteur d'ouverture de porte. Il ne faut pas qu'elle reste ouverte trop longtemps.
D'une interface utilisateur rudimentaire (buzzer, Led Rouge et Verte)
D'un fichier d'autorisation (inclus dans le système)
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:
mettre à jour le fichier d'autorisation de la carte de contrôle. A intervalle régulier ou sur demande
téléverser les logs sur un serveur
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
Information générale
Espace disponible
Statut de la connectivité WiFi
Ligne de statut (indiquant ici la saisir d'un code Pin)
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).
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).
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.
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.
Qu'il faut environ 4 secondes pour obtenir la valeur finale.
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.
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 :-)
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.
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).
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.
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.
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).
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 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.
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.
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
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.
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.
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.
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!
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).
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.
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:
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)
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.
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.
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).
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 ?
C'est le moment de se pencher sur les raccordements électriques et l'organisation réseau.
50+ Raspberry-Pi en Rack
A propos de SuperPi
Le projet SuperPi vise à créer un super-calculateur/Cluster didactique à l'aide de 50+ Raspberry-Pi. Voyez cet article contenant plus de détails.
La force d'un Super-Calculateur/Cluster c'est le traitement en parallèle (Parallel Computing) pouvant servir dans de très nombreux domaines.
Mini-rack de test
J'ai assemblé un mini-rack de test pour faciliter les tests et apprentissages qui se profilent.
Organisation électrique
Seule les éléments de contrôle comme le Router, le NAS et la Station de contrôle sont immédiatement mis sous-tension.
L'alimentation du Rack de Pi est contrôlée séparément à l'aide d'un Power-Switch-Tail . Le Power-Switch-Tail tout comme le signal Panic (qui fait une shutdown rapide des RPi) sont pris en charge par la station de contrôle par m'intermédiaire de GPIO..
La Station de contrôle aura ici un rôle essentiel puisque:
Active/désactive les différents Rack
Effectue les mise-à-jour sur les racks
Distribue les tâches de calcul
Collecte les résultats
Affiche les statistiques
Collecte et stocke les résultats
Affiche les résultat (en option)
Organisation réseau
Pour faciliter la mise en oeuvre, les différents éléments sont configurés en adresse IP Fixe (voir configuration des noeuds)
Organisation réseau - cliquer pour agrandir
Seul l'adresse externe du routeur n'est pas encore fixée car il s'agit toujours d'un élément inconnu.
Le Routeur est là pour autoriser les connexions:
vers Internet,
vers un réseau hôte
ou autorisé une connexion depuis le réseau hôte (pour prendre le contrôle de SuperPi depuis l'extérieur).
Pour la suite
Il faut que m'active sur le routeur et sa configuration. Ce sera l'occasion de me perfectionner dans se domaine (j'y ai quand même des lacunes).
Les amateurs de MicroPython seront heureux d'apprendre qu'une nouvelle bibliothèque qwiic-serlcd-i2c vient d'être ajoutée à notre dépôt esp8266-upy
Qu'est ce que SerLCD?
SerLCD de SparkFun est un afficheur LCD série propulsé par un microcontrôleur
ATmega328P. SerLCD permet d'ajouter un afficheur Cristaux Liquide 16x2
RGB dans votre projet. Le microcontrôleur gère l'écran et les
communications séries!
Les afficheurs SerLCD peuvent communiquer de trois façon différentes:
série, I2C et SPI. L'afficheur est équipé de d'un connecteur Qwiic
(aussi appelé StemmaQT), ce qui l'intègre dans l'écosystème Qwiic qui
simplifie les raccordements grâce à sa connexion universelle.
Outre son connecteur Qwiic/StemmaQt, l'intérêt de SerLCD réside dans son support du bus I2C (il n'a donc besoin que des signaux SDA et SCL) et que l'adresse I2C est modifiable de façon logicielle.
La bibliothèque
Cette dernière -nommée serlcd.py- est disponible sur le dépôt dans le sous-répertoire qwiic-serlcd-i2c.
Elle doit être copiée sur votre plateforme MicroPython avant de pouvoir l'utiliser.
Si vous utilisez mpremote, l'installation peut se faire très simplement à l'aide de la commande suivante:
Pour pouvoir utiliser cet afficheur, il suffit d'utiliser son connecteur Qwiic/StemmaQt avec un câble adaptateur JST-SH 4 . Le raccordement est super simple.
En guise d'exemple, voici le raccordement sur un Raspberry Pico... simple non?