Vue lecture

Sun Ultra 5: Oups, un problème de RAM

Bonjour à tous,

Profitons d'un peu de temps libre pour faire du retro-computing!

Après le test de boot du Sun Ultra 5, j'ai essayé d'initialiser la NVRAM et c'est à ce moment que la machine a cessé de fonctionner.
Plus d'image sur le moniteur... Argh!

Oups! RAM issue

Heureusement que le Service Manual du Sun Ultra 5 est disponible sur le Net, cela facilite grandement les recherches :-)

Presser la combinaison STOP + D à la mise sous tension permet de démarrer le test de la carte mère (Motherboard POST). POST signifiant Power On Self Test.

Après quelques clignotement du CAPS LOCK indiquant le défilement des tests, le clavier s'arrête sur CAPS LOCK + SCROLL LOCK en éclairage fixe.

Selon le tableau ci-dessous, j'ai un problème de RAM!!!
et dire qu'elle a fonctionné correctement pendant un moment.

Sun Ultra 5 - Keyboard Error Code

Post Messages

Lors du POST, la première opération effectuée est d'ouvrir le port série (Port A) pour y envoyer les messages de POST.

Voici comment réaliser la connexion à l'aide d'un convertisseur USB-vers-RS232.


Connexion TIP entre PC et SUN ULTRA 5
Cliquer pour agrandir

Voici les messages récupérés:

Hardware Power ON

@(#) Sun Ultra 5/10 UPA/PCI  3.19 Version 4 created 1999/04/28 15:05
Probing keyboard Done
%o0 = 0000.0000.0055.4001

Executing Power On SelfTest

@(#) Sun Ultra 5/10 (Darwin) POST 3.0.7 (Build No. 612) 14:24 on 04/28/99

CPU: UltraSPARC-LC (Clock Frequency: 360MHz, Ecache Size:  256KB)

Init POST BSS
        Init System BSS
NVRAM                                                                                                                                                                               
        NVRAM Battery Detect Test                                                                                                                                                   
        NVRAM Scratch Addr Test                                                                                                                                                     
        NVRAM Scratch Data Test                                                                                                                                                     
DMMU TLB Tags                                                                                                                                                                       
        DMMU TLB Tag Access Test                                                                                                                                                    
DMMU TLB RAM                                                                                                                                                                        
        DMMU TLB RAM Access Test                                                                                                                                                    
Probe Ecache                                                                                                                                                                        
        Probe Ecache                                                                                                                                                                
Ecache Tests                                                                                                                                                                        
        Ecache RAM Addr Test                                                                                                                                                        
        Ecache Tag Addr Test                                                                                                                                                        
        Ecache RAM Test                                                                                                                                                             
        Ecache Tag Test                                                                                                                                                             
All CPU Basic Tests                                                                                                                                                                 
        V9 Instruction Test                                                                                                                                                         
        CPU Tick and Tick Compare Reg Test                                                                                                                                          
        CPU Soft Trap Test                                                                                                                                                          
        CPU Softint Reg and Int Test                                                                                                                                                
All Basic MMU Tests                                                                                                                                                                 
        DMMU Primary Context Reg Test                                                                                                                                               
        DMMU Secondary Context Reg Test                                                                                                                                             
        DMMU TSB Reg Test                                                                                                                                                           
        DMMU Tag Access Reg Test                                                                                                                                                    
        DMMU VA Watchpoint Reg Test                                                                                                                                                 
        DMMU PA Watchpoint Reg Test                                                                                                                                                 
        IMMU TSB Reg Test                                                                                                                                                           
        IMMU Tag Access Reg Test                                                                                                                                                    
All Basic Cache Tests                                                                                                                                                               
        Dcache RAM Test                                                                                                                                                             
        Dcache Tag Test                                                                                                                                                             
        Icache RAM Test                                                                                                                                                             
        Icache Tag Test                                                                                                                                                             
        Icache Next Test                                                                                                                                                            
        Icache Predecode Test                                                                                                                                                       
Memory Probe                                                                                                                                                                        
        Probe Memory                                                                                                                                                                
                INFO: All the memory banks in 10 bit column mode                                                                                                                    
                bank 0:   0MB                                                                                                                                                       
                bank 2:   0MB                                                                                                                                                       
                                                                                                                                                                                    
***********************                                                                                                                                                             
STATUS =FAILED                                                                                                                                                                      
TEST   =Probe Memory                                                                                                                                                                
SUSPECT=No DIMM                                                                                                                                                                     
MESSAGE=No Memory Detected or only a single DIMM in a bank                                                                                                                          
                                                                                                                                                                                    
                                                                                                                                                                                    
                                                                                                                                                                                    
Status of this POST run:        FAIL                                                                                                                                                
manfacturing mode=CHAMBER                                                                                                                                                           
Time Stamp [hour:min:sec] c3:b4:80  [month/date year] e0/e5 1970                                                                                                                    
                                                                                                                                                                                    
                                                                                                                                                                                    
                                                                                                                                                                                    
                                                                                                                                                                                    
Power On Selftest Completed                                                                                                                                                         
Software Power ON0.0000.0000.0001 ffff.ffff.f00b.3190 0002.3333.0200.001b                                                                                                           
                                                                                                                                                                                    
@(#) Sun Ultra 5/10 UPA/PCI  3.19 Version 4 created 1999/04/28 15:05                                                                                                                
Clearing E$ Tags  Done                                                                                                                                                              
Clearing I/D TLBs Done                                                                                                                                                              
Probing Memory Done                                                                                                                                                                 
MEM BASE = 0000.0000.0000.0000                                                                                                                                                      
MEM SIZE = 0000.0000.0000.0000                                                                                                                                                      
MMUs                                                                                                                                                                                
RED State Exception                                                                                                                                                                 
                                                                                                                                                                                    
TL=0000.0000.0000.0005 TT=0000.0000.0000.0010                                                                                                                                       
   TPC=0000.0000.0000.4200 TnPC=0000.0000.0000.4204 TSTATE=0000.0044.1500.1500                                                                                                      
TL=0000.0000.0000.0004 TT=0000.0000.0000.0010                                                                                                                                       
   TPC=0000.0000.0000.4200 TnPC=0000.0000.0000.4204 TSTATE=0000.0044.1500.1500                                                                                                      
TL=0000.0000.0000.0003 TT=0000.0000.0000.0010                                                                                                                                       
   TPC=0000.0000.0000.4200 TnPC=0000.0000.0000.4204 TSTATE=0000.0044.1500.1500                                                                                                      
TL=0000.0000.0000.0002 TT=0000.0000.0000.0010                                                                                                                                       
   TPC=0000.0000.0000.0600 TnPC=0000.0000.0000.0604 TSTATE=0000.0044.1504.1400                                                                                                      
TL=0000.0000.0000.0001 TT=0000.0000.0000.0030                                                                                                                                       
   TPC=0000.01ff.f000.1f98 TnPC=0000.01ff.f000.1f9c TSTATE=0000.0044.1500.0400                                                                                                      
                     

Il y a effectivement un problème de mémoire puisque les deux modules ne sont pas détectés.

C'est vraiment pas de chance... j'avais eu un POST avec un signal vidéo.

C'est au moment de l'initialisation de la VRAM en vue d'installer un OS que tout a cessé de fonctionner.

Sauf erreur, la RAM s'installe par deux barrettes.

Vérifications effectuées

  • Inspection des barrettes, des connecteurs et des contacts.
  • Repositionnement des RAM
  • Vérification des soudures (sur les barettes)
  • Vérification de la carte mère et pistes (on ne sait jamais).
  • Contrôle des tensions d'alimentations
  • Contrôle de la tension 3V3 sur les barrettes

Je n'ai pas encore eu le courage de vérifier les lignes d'adresses à l'oscilloscope... l'un des modules RAM est probablement défectueux.

Prochaine étape

Essayer de trouver deux modules RAM de remplacement.

16-Mbyte DIMM 60-ns, 16-Mbyte DIMM
32-Mbyte DIMM 60-ns, 32-Mbyte DIMM
64-Mbyte DIMM 60-ns, 64-Mbyte DIMM
128-Mbyte DIMM 60-ns, 128-Mbyte DIMM
256-Mbyte DIMM 60-ns, 256-Mbyte DIMM
32-Mbyte DIMM 50-ns, 32-Mbyte DIMM
64-Mbyte DIMM 50-ns, 64-Mbyte DIMM
128-Mbyte DIMM 50-ns, 128-Mbyte DIMM
256-Mbyte DIMM 50-ns, 256-Mbyte DIMM

J'ai même retrouvé les références SUN (SUN part Number)

SUN Part Number for SUN ULTRA 5

Ce n'est vraiment pas de chance.

  •  

MicroPython : LCD3310 avec Raspberry-Pi Pico (PCD8544)

Bonjour à tous,

L'écran du célèbre Nokia3310 est bien connu par Maker. Ses 84 * 48px  permettent
Nous lui avions déjà consacré un article en juillet 2020.
C'est aussi l'occasion de sortir le Pico-2-Explorer qui ne quitte décidément plus le bureau.

LCD3310 (PCD8544) sous MicroPython et Pico-2-Explorer
 

Cette fois, nous avons eu l'occasion d'avoir une dalle brute avec son ruban 8 contacts.
Ce fût l'occasion de documenter la nappe et tester cet écran avec un Raspberry-Pi Pico. Après plus de 4 ans, la bibliothèque fonctionne toujours comme un charme.

Source: esp8266-upy/modlcd3310

Tester l'écran se fait très facilement

import time
from machine import SPI, Pin
from lcd3310 import LCD3310

# Pico - create the bus & Pins
ssel = Pin( Pin.board.GP9, Pin.OUT, value=True ) # Not selected by default
lcd_reset = Pin( Pin.board.GP13, Pin.OUT, value=True ) # Not selected by default
lcd_data  = Pin( Pin.board.GP12, Pin.OUT, value=True ) # Data/Command (Data by default)
spi = SPI( 1, miso=Pin.board.GP8, mosi=Pin.board.GP11, sck=Pin.board.GP10 ) 

lcd = LCD3310( spi, ssel, lcd_reset, lcd_data )
print( "contrast: %s" % lcd.contrast )
# See all Framebuffer Method for more information
# https://docs.micropython.org/en/latest/library/framebuf.html
#
lcd.fill( 1 ) # Light-up all points
lcd.text( "Hello", 0,0,0 ) # text, x,y, color=0=transparent
lcd.update()
time.sleep( 3 )

lcd.clear()
lcd.text( "MCHobby<3", 3, 12 )
lcd.text( "Micro-", 3, 12+10 )
lcd.text( "   Python", 3, 12+10+10 )
lcd.rect(0,0,83,47,1)
lcd.update()

lcd.contrast = 110 # 0..127

Tutoriel

Pour en savoir plus, n'hésitez pas à consulter le tutoriel disponibles dans le dépôt esp8266-upy/modlcd3310 .

Où acheter

  • Pico-2-Explorer - plateforme d'apprentissage @ MCHobby
  • MOD-LCD3310 (PCD8544) - écran Nokia 3310 84x48 pixels @ MCHobby
  • MOD-LCD3310 (PCD8544) - écran Nokia 3310 84x48 pixels @ Olimex
  •  

     

     

    •  

    Trump: Impact des Tarifs Douaniers chez les Makers

    Bonjour à tous,

    Nous étions loin de nous attendre à une telle surprise dans le monde des Makers... la politique douanière de Donald Trump aura, pour nous Maker Européen, un impact significatif!

    Source: Tariffs of Tump sur Cartoon movement

    Chez MCHobby nous ne sommes pas adeptes des chinoiseries, produits souvent de faibles qualités et incapables de tenir dans le temps (cela n'exclus pas pour autant de bons et fiables fournisseurs/fabriquants chinois, faut-il encore les dénicher).

    Ainsi, depuis plus d'une décade, nous distribuons des produits en provenance d'Adafruit USA et Pololu USA. Des produit biens conçus, très pratiques pour le Maker et le prototypage de produit mais surtout d'une fiabilité hors-pair!

    Seulement voilà, Trump passa par là

    Avec son slogan "America First", Trump à mis au point des taxes douanières que le monde entier juge avec une scepticisme. C'est à croire que Trump prend le monde pour un Monopoly géant... et forcement, nombre de pays/continents visés appliquent des sanctions réciproques.

    Pololu USA, l'un de nos fournisseurs, annonce un changement de sa grille tarifaire suite à l'explosion du prix de ses matières premières (composants, plastiques, moteurs) en provenance de Chine.

    Le résultat, c'est: 

    1. Fin des tarifs dégressifs
    2. Une sévère hausse des prix.
      Par exemple, la base du Romi robot augmente de 57%.

    Outch! Ca fait mal! ... pour nous comme pour Pololu dans son propre pays.

    Un petit mot de la fin:

    Un Donald cela Trump énormément.

    Bonne journée,
    Dominique

    •  

    Décortiquons le GB40 - Jump Starter / Booster de batterie

    Bonjour à tous,

    Cet article n'est pas encore un vrai projet de récupération mais rien n'exclus qu'il puisse le devenir.

    Comme vous pouvez-vous en douter, nous allons inspecter les entrailles du jouet.

    GB40 Jump Starter

    Je vous présente le GB40, un petit Jump Starter capable de développer 1000A (7000 joules) pour aider au démarrage d'un véhicule.
    Je dois avouer qu'il est effectivement capable d'offrir le petit coup de pouce nécessaire au démarrage hivernal de mon Diesel.

    Jump Starter / Booster de batterie GB40


    Le GB40 s'est montré fort utile mais c'est surtout pour un éclairage d'appoint USB que je l'ai utilisé durant quelques sortie de week-end.
    Le lecteur attentif remarquera la présence d'une lampe de lecture 3 LEDs avec un connecteur USB. A l'usage, j'avais l'impression d'une tenue assez modeste (disons pas vraiment en relation avec l'annonce des 7000 joules disponibles).

    Petit tour de l'interface et connectiques


    La face avant du  GB40 présente plusieurs boutons de commande:

    • Marche/arrêt : met l'appareil sous tension et permet de vérifier l'état de chargement de l'accumulateur.
    • Lampe/Led : fonctionne indépendamment du bouton marche arrêt. Les LEDs peuvent être activées sous différents modes d'éclairage (fixe, clignotant, etc).
    • Exclamation : (en rouge) ce bouton permet d'activer le pulse start (injecte le coup de pouce dans le circuit lorsque l'on démarre le moteur). 
    Eclairage LEDs du GB40

    L'éclairage LED présente une luminosité de 100 Lumens est l'équivalent d'une lampe a incandescence de 15W. Suffisant pour éclairer modestement une pièce de taille moyenne, éclairer correctement un moteur en cours d'inspection.
    En balade de nuit par nuit noire, la visibilité devrait s'étendre de 3 à 5m (au mieux).

    Eclairer l'intérieur d'une voiture avec 100 Lumens est beaucoup trop lumineux (surtout juste à côté). La lecture d'un ouvrage est pénible.

    A titre de comparaison, l'éclairage d'une pièce de taille moyenne nécessite entre 600 et 900 Lumens.

    Viennent ensuite les connecteurs USB sur le côté.

    • micro-USB : ce connecteur est utilisé pour recharger le GB40
    • USB-A : connecteur est alimenté en 5V lorsque le GB40 est activé. Ce dernier permet d'alimenter un smartphone, une tablette ou  autre appareil pouvant être alimenté en USB.

    L'autre extrémité du GB40 permet de brancher les pinces du Starter.
    De là a imaginer le passage de 1000A par ces câbles est totalement douteux! Cela n'exclus cependant pas un courant significatif pendant une fraction de secondes.

    7000 Joules représente 1.94 Watt-Heure. Ce qui m'interpelle, c'est que le verso du boîtier mentionne un accumulateur Lithium-Ion de 24 Wh! 

    Autrement dit, 7000 Joules (1.94 Watt-Heure) offre la possibilité d'alimenter une ampoule électrique de 1Watt pendant une heure!

    Sachant que la tension nominale du GB40 est de 12V (pour s'adapter à la batterie), la production de 1000A pourrait se faire pendant:

    1.94 Watt-Heure = U*I*temps = 12 * 1000 * temps_en_heure

    Donc le temps disponible (avant la batterie vide) est de 1.94 / (12 * 1000) = 0.00016 heure, soit 0.576 secondes... suffisant pour aider au démarrage d'un moteur.

    Pour les pointilleux, je tiens a préciser qu'il s'agit là d'une estimation très grossière! Mais cela a pour mérite de fournir un point de référence.

    Les entrailles du GB40

    Commençons par ouvrir la bête. Le GB40 est équipé de vis de sécurités triangulaires. L'utilisation d'un tournevis avec embouts de sécurité permet d'accéder à l'intérieur du GB40.

    Attention DANGER!

    le GB40 contient une batterie Lithium-Ion de 24 Wh SANS CIRCUIT DE SECURITE intégré aux cellules. Il doit en être ainsi si le dispositif doit délivrer des centaines d'ampères pour l'assistance au démarrage.

    Pour personne expérimenté uniquement!
    Tout court-circuit accidentel ou coup/perçage/déformation des accus peut provoquer une violente mise à feu avec dégagement de gaz toxiques. Un feu d'accumulateur est pour ainsi dire "impossible a maîtriser" et est capable de fondre de la céramique!


     Un fois le couvercle arrière retiré, nous retrouvons:

    • un énorme accumulateur Noco 11V à 2150 mAh (les 24 Wh annoncés)
    • les connecteurs USB (à droite) soudé sur la carte principale (située sous l'accu)
    • Une carte d'activation avec
      • la ligne de masse contrôlée par un relais (pouvoir de coupure 70A).
      • la ligne +11V contrôlée par une série de DIODES montés en parallèles
    • Les LEDs d'éclairage à l'extrême gauche (à peine visible)
    Arrière du GB40 - clique pour agrandir

    L'image ci-dessous présente la carte d'activation qui branche l'accu directement sur les pinces.

    Il est également possible d'y voir les deux connecteurs supplémentaires de l'accu:

    • Le connecteur 2 pôles est branché sur une thermistance.
      Celle-ci permet de contrôler la température de l'accu pendant son utilisation ou sa recharge.
    • Le connecteur 4 pôles permet de relever la tension des 3 cellules internes de l'accu.
      Permet au BMS de contrôler l'équilibrage des tensions des différentes cellules au moment de la recharge.

    La carte d'activation sur la gauche de l'image présente clairement le sectionnement de la masse de l'accu (le gros fils noir). Ces deux sections sont mises en contact par l'intermédiaire d'un relais (présent de l'autre côté de la carte).

    Carte d'activation

    Sans trop de surprise, nous retrouvons des deux connecteurs de sorties (output + et output - ).
    La masse (noir) est commutée par un relais de 70A 14VDC.
    Le 12V (rouge) passe par l'intermédiaire de 4x double diodes (max 45V avec un total cumulé de 160A). Ces diodes permettent de protéger l'accu contre une polarisation inverse accidentelle (ex: brancher le + du GB40 sur le pole négatif de la batterie voiture).

    40L45

    La carte principale du BG40

    Voici ce qui se trouve au coeur du BG40 avec une identification des composants principaux.

    A l'évidence la carte est architecturée autour d'un microcontrôleur 8 bits de Holtek. Ce dernier dispose par ailleurs d'un convertisseur analogique digital avec fonctionnalités avancées.

    Je note aussi le composant 8254AA de spécifiquement de ABLic. Ce dernier est spécifiquement destiné à la protection des cellules.

    Cliquer pour agrandir
    Dans un deuxième temps, j'essayerais d'en déduire un schéma de principe.

    L'accu Lithium-ion

    A l'évidence, Noco est aussi le fabriquant d'accu Lithium-Ion.
    Cet accu de 24Wh ( 11.1V * 2150 mAh ) est constitué de 3 cellules montées en séries.


    La tension d'une cellule est de 3.6 à 3.7V.
    Montée en série les 3 cellules produisent 3 * 3.7V donne les 11.1V mentionnés.
    A pleine charge, une cellule peut atteindre 4.2V (soit un maximum de 12.6V).
    La tension minimale de la cellule ne peut pas tomber sous 3.0V car elle risque de devenir instable et de prendre feu. Dans ce cas de figue, l'ensemble ne présente plus qu'une tension de 9V.

    La recharge via micro-USB est mentionnée à 2.1A max (2100 mA).
    Ce qui correspond exactement à une charge de 1C pour un accu de 2150 mAh.
    Il est généralement conseillé de ne pas dépasser 1C la charge (1C = une fois la Capacité de l'accu = 1x 2150mA pour notre accu).

    Pour ce qui est de la décharge, il faut se référer aux spécifications techniques de l'accumulateur.
    Malheureusement, la référence NLBX10 ne retourne pas d'information technique pertinente sur l'accu. J'ai ouvert le paquetage dans l'espoir de trouver plus d'informations sur les cellules mais sans succès.
    J'en viens à supposer que le X10 correspond au taux de décharge 10C.

    Autrement dit, il serait possible de décharger l'accu à 10C = 10*2150mA = 21.5 ampères sans risque d'instabilité pour l'accu.
    Pour un accu de 2150mAh ou 2.15Ah, ce dernier pourra fournir les 21.5A pendant 2.15Ah/21.5A = 0.10 heure (soit 6 minutes).

    Ceci étant nous sommes loin des "12V 1000A" mentionné sur la face avant.


    Mais c'était prévisible!

    Même s'il fallait interpréter 10X comme 10*10 (chiffre latin X=10) nous arriverions à 200A... toujours en deçà des 1000A mais soyons sérieux, la section des câbles ne correspond absolument pas à ce niveau de courant (il faut du 25mm² de cuivre!).

    Bon, c'est assez pour aujourd'hui...
    Nous aurons l'occasion d'y revenir.

    Dominique

    •  

    Attaque DDOS totalement demesurée... Ce monde devient-il fou ?

    Bonsoir à tous,

    Edit: 26/03/2025 - atteind 350.000 IP bannies

    Cela fait maintenant des mois, pour ne pas dire plus d'une année, que notre petite société MC Hobby subit des attaques de type DDOS ou mise en surcharges anormales (que l'on pourrait classer dans les actions malveillantes).

    Source image: cet article de channelnews.fr

    Comment se peut-il que notre petite boîte, qui ne compte pas plus sur la toile qu'un pet de mouche... se retrouve face à un tel déploiement de moyen.

    En moins d'une semaine, ce n'est pas moins que 179.803 adresses IP qui ont été bannies! Ces attaques proviennent de partout dans le monde avec une force de frappe peu commune!
    C'est totalement fou ! Heureusement que nous avons Super-Toine!

    Vu notre insignifiance (je veux dire en "taille d'entreprise"), je n'ose imaginer que nous sommes les seuls dans cette situation. J'en déduis que le trafic internet mondial est actuellement submergé par ces attaques.

    C'est à se demander ce qui est recherché? La déstabilisation de l'économie numériques?

    Pourquoi ce phénomène passe t'il presque inaperçu dans les news? (parce que vu d'ici... cela n'a rien d'anodin)

    •  

    Bibliothèque RoboEyes pour MicroPython

    Bonjour à tous,

    Il arrive de temps à autre que l'on tombe sur une petite perle du net.

    A propos de RoboEyes

    Il y a quelques mois, j'ai découvert RoboEyes pour Arduino (de FluxGarage.com).

    Credit: RobotEye par FluxGarage.com

     dont il est possible de voir les caractéristiques sur cette vidéo et cette autre vidéo.

     

     

    Je suis instantanément tombé sous le charme... <3 

    RoboEyes pour MicroPython

    Comme je suis plutôt MicroPython qu'Arduino, j'ai voulu faire un portage sous MicroPython pour pouvoir jouer avec cette magnifique bibliothèque.

    Voila qui est fait! La bibliothèque micropython-roboeyes est maintenant publiée sur GitHub. 

    Brancher un écran est très facile... surtout si c'est écran OLED I2C:

    Et le résultat est plutôt convaincant comme en témoigne la vidéo ci-dessous:


    Pour, au final, un code assez facile à appréhender:

    from machine import I2C, Pin
    from roboeyes import *
    import ssd1306
    
    i2c = I2C( 1, sda=Pin.board.GP6, scl=Pin.board.GP7 )
    lcd = ssd1306.SSD1306_I2C( 128, 64, i2c, addr=0x3d )
    
    def robo_show( roboeyes ):
    	global lcd
    	lcd.show()
    
    # Plug RoboEyes on any FrameBuffer descendant
    robo = RoboEyes( lcd, 128, 64, frame_rate=100, on_show = robo_show )
    robo.set_auto_blinker( ON, 3, 2) 
    robo.set_idle_mode( ON, 2, 2) 
    
    while True:
    	robo.update()  # update eyes drawings 

    La bibliothèque offre de nombreuses possibilités de création géométrique pour les yeux (voyez l'exemple test_basic.py).


    Les fonctionnalités sont également détaillées dans les exemples et la documentation de l'API RoboEyes vous permettra de rapidement prendre le contrôle des yeux.

    Avantages apportés par MicroPython

    Le FrameBuffer

    Comme l'implémentation est basée sur le FrameBuffer de MicroPython, tous les écran dérivant de FrameBuffer peuvent être utilisés avec RoboEyes.

    Autrement dit, la majorité des afficheurs graphiques sous MicroPython fonctionneront :-) 

    Portabilité

    RoboEyes est Platform Agnostic, il fonctionnera donc sur toutes les plateformes MicroPython. La seule vrai dépendance est le FrameBuffer de MicroPython.

    Envie d'en savoir plus?

    •  

    Pico-2-Explorer : découverte et exploration de l'électronique avec MicroPython

    Bonjour à tous,

    Je vous présente le projet Pico-2-Explorer, petit nouveau au catalogue MC Hobby.

    Pico-2-Explorer : Raspberry Pico 2 sous MicroPython

    Le Pico-2-Explorer, c'est un mini-laboratoire visant a simplifier la prise en main de de la programmation sous MicroPython (Python pour Microcontroleur) avec des raccordements simplifiés.
    L'usage de Thonny IDE est également un élément clé pour réaliser ses premiers pas sans stress.

    Raccordements simplifiés

    Un seul fil est nécessaire pour utiliser l'un des composants disponibles sur le Pico-2-Explorer.

    Ces raccordements simplifiés permettent de démarrer rapidement la partie programmation sans trop se prendre la tête.

    Source: Pico-2-Explorer wiki (montage simplifié)

    Cela n'empêche pas de disposer d'une version détaillée des raccordements dans les différents tutos.

    Source: Pico-2-Explorer wiki (montage détaillé)

    Des tutoriels pour le peuple

    Bien entendu, on ne vous lâche pas avec la carte sans vous épauler.
    Le Pico-2-Explorer dispose d'une série de tutoriels de prise en main et d'utilisation de différents composants.

    Ces tutoriels reprennent l'information nécessaire à la compréhension des composants utilisés, de quoi débuter en douceur avec Thonny IDE.

    Les tutoriels du Pico-2-Explorer

    Une meilleure lisibilité

    Un problème récurrent dans le prototypage, c'est les problèmes de Parallaxe.

    Avoir les libellés sur la carte et un connecteur rehaussé d'un centimètre peut-être source d'erreur de branchement. En effet, il est très facile de se brancher sur la broche d'à côté sans s'en rendre compte. C'est d'autant plus vrai que le connecteur est long (ex: 20 broches comme sur le Pico).

    Pour éviter cette source de confusion, les libellés des broches sont rehaussés juste à côté du connecteur. C'est vraiment très confortable a l'usage!


    Composants à usage multiples

    En plus d'apprendre, Pico-2-Explorer propose des composants à usage multiple.
    Disposer de bouton et LEDs pré-raccordés sous la main sera quasi indispensable lors de vos propres explorations (c'est du vécu)

    Détail du Pico-2-Explorer

    Un potentiomètre saura aussi se montrer fort utile pour fixer rapidement une consigne (ou tester des composants analogiques).
    L'usage du buzzer reste bien entendu à discrétion de l'utilisateur, les bibliothèques sont déjà disponibles sur la carte. 

    Connecteur Qwiic/StemmaQt

    Le bus I2C est un incontournable dans le monde de l'électronique. Nous avons prévus un connecteur Qwiic (chez SparkFun) également appelé StemmaQT (chez Adafruit). 

    Celui-ci permet de brancher rapidement des capteurs et extension.

    Connecteur Qwiic/StemmaQt sur le Pico-2-Explorer

    Comme vous pouvez le constater, ce dernier se trouve juste sous sa documentation (qui servira d'aide mémoire). 

    Il est prévu l'écriture d'un tutoriel exploitant cette connectique. Dans l'attente, notre dépôt esp8266-upy contient de nombreux pilotes pour du matériel I2C.

    Documenter vos projets

    Le dépôt pico-2-explorer contient la ressource pico-2-explorer-drawing.png en haute résolution.

    Dégainez votre logiciel de dessin favori et dessinez vos propres raccordement.

    ressource pico-2-explorer-drawing.png (en haute résolution)

    Plus d'information

    Pour plus d'information, je vous invite à la consultation de la fiche produit du Pico-2-Explorer.


    •  

    Afficheurs multi-segments : des idées d'impression 3D

    Bonjour à tous,

    J'ai un petit faible pour les afficheurs originaux et, de fait, je fouille de temps en temps à la recherche de projets.

    Afficheur réalisé par Ben Makers Everything

    Il y a de moyen de réaliser des afficheurs vraiment très attractifs.

    Afficheurs réalisés par Christopher's Factory

    Et ce que je trouve encore plus intéressant, c'est qu'il est aussi possible de créer des variantes RGB.

    Afficheurs réalisés par Christopher's Factory

    En vidéo c'est mieux

    Je vous propose de visionner les deux vidéos:

    Fabrication d'afficheurs multi-segments par Ben Makes


    Afficheurs à 6 segments par Christopher's Factory.

     

    Pas mal n'est ce pas!

    •  

    Utiliser un module 4G / LTE SimCOM A7682E avec Raspberry-Pi Pico et MicroPython

    Bonjour à tous,

    Cela fait un moment que nous vendons le HAT GSM 4G / LTE de Garatronic pour Raspberry-Pi et celui-ci connaît un certain succès.

    Ainsi, nous avons décidé de produire une bibliothèque MicroPython pour l'utiliser avec un Raspberry-Pi Pico.

    HAT GSM 4G / LTE avec Raspberry-Pi Pico 2

    Brancher le module SimCom A7682E

    Source: Dépôt GitHub

    Brancher le HAT sur le Raspberry-Pi Pico est assez simple. Il lui faut une source d'alimentation 5V, 3V3 et un UART et une broche pour contrôler la mise sous tension. 

    Bibliothèque sim76xx pour MicroPython

    La bibliothèque -=[en cours de développement]=- est publiée sur le dépôt GitHub

    Celle-ci concerne prend déjà en charge:

    • La connexion sur réseau mobile
    • La gestion des messages URC (unsollicited Result Code) -> les notifications
    • La réception / émission de SMS
    • Gestion des appels vocaux (émettre/recevoir/décrocher/raccrocher/...)

     Voici les quelques ligne nécessaires pour se connecter sur un réseau mobile

    from machine import UART, Pin
    from sim76xx import *
    import time
    
    # Pico 
    pwr = Pin( Pin.board.GP26, Pin.OUT, value=False )
    uart = UART( 0, tx=Pin.board.GP0, rx=Pin.board.GP1, baudrate=115200, bits=8, parity=None, stop=1, timeout=500)
    sim = SIM76XX( uart=uart, pwr_pin=pwr, uart_training=True, pincode="6778" )
    
    sim.power_up()
    while not sim.is_registered:
    	time.sleep(1)

    Passer un appel vocal est à peine plus compliqué

    # Create Voice call object
    voice = Voice( sim )
    " Calling...
    voice.call( PHONE_NR )

    L'envoi d'un SMS est tout aussi trivial

    # Create SMS object
    sms = SMS( sim )
    # Send message to PHONE_NR )
    sms.send( PHONE_NR, 'Test message' )

    Options avancées

    La bibliothèque permet également de traiter les appels et SMS entrant.
    Cela se fait en prenant en charge les URC (des messages non sollicités) qui sont ensuite transformer en notifications par la bibliothèque.

    Les URC sont correctement détectés et capturées durant le traitement des instructions utilisateurs (oui, ces URC arrivent à n'importe quel moment et sans prévenir).
    Si le script utilisateur est en attente alors un appel régulier à la méthode update() permettra de capturer les URC durant les périodes sans activités.

    sms = SMS( sim )
    
    # Attendre notifications
    while True:
      time.sleep( 1 )
      sim.update()
      if not sim.notifs.has_new:
        continue
    		
      # Traitement des notifications
      _time, _type, _str, _cargo = sim.notifs.pop()
      while _time!=None:
        if _type == Notifications.SMS:
          # Cargo contient l ID du SMS
          print( f"SMS received @ id {_cargo}")
    
          # Lecture SMS Entrant
          _msg = sms.read( _cargo )
          print( f"  phone:{_msg.phone}" )
          print( "  Message :", _msg.message )
    
          # effacer SMS entrant
          sms.delete(_cargo) 
    
          # Envoi réponse
          try:
            id = sms.send( _msg.phone, "%s received!" % _msg.message )
          except SMSError as err:
            print( 'SMS Send error!', str(err) )
        else:
          print( "autre notification", (_time, _type, _str, _cargo) )
    
         # Next nofitication
         _time, _type, _str, _cargo = sim.notifs.pop()

    Encore plus

    La bibliothèque contient actuellement 15 exemples couvrant les concepts fondamentaux, les SMS et les appels vocaux.

    Voir le bas du fichier readme pour une description des différents exemples.

    Où acheter

    Les produits utilisés dans cet article sont disponibles chez MCHobby.


    •  

    Autopsie: Raspberry-Pi Touchscreen et curseur de la souris au comportement erratique

    Bonjour à tous,

    C'est l'histoire d'une demande d'intervention concernant deux écrans tactiles Raspberry-Pi

    Le problème décrit est une "série de déplacements erratiques du pointeur de souris" lorsque le doigt est déplacé sur la surface de l'écran,

    Le problème

    Voici la vidéo disponible sur YouTube.


    Cela se produisant sur les deux écrans achetés, les clients ont immédiatement pensés à un problème matériel... 

    Seulement voila, tous les produits Raspberry-Pi sont testés sur chaîne de production. Il est donc peu probable d'avoir un produit défectueux, ... deux produits défectueux en même temps, c'est le signe qu'il faut chercher une cause environnemental!

    Le source du problème

    Hypersensibilité de la dalle tactile

    La dalle tactile fonctionne par effet capacitif. Quelques capteurs répartis sur la dalle essayent de mesurer le courant de fuite qui s'échappe par par le doigt lorsque celui-ci touche l'écran.

    Ce dispositif, par nature, est donc très sensible aux problèmes d'alimentations et aux boucles de courants.
    Tout problème de masse, aussi minime soit-il, aura une répercussion immédiate sur la partie tactile.
    Après des recherches sur les Forums Raspberry-Pis, voici les suggestions trouvées:
    • Vérifier les masses (masse commune)
    • Vérifier l'alimentation, sinon vérifier l'alimentation et après encore vérifier l'alimentation.
    Cette dernière proposition est plus que bien indiquée.

    Démonstration en vidéo

    La vidéo ci-dessous présente un test complémentaire réalisé sur l'un des écrans. 

    Première partie de la vidéo:

    Seule la surface tactile est touchée => problèmes est bien présents. 

    Seconde partie de la vidéo:

    Le client touche aussi la partie métallique à l'arrière de l'écran.
    Il porte donc le potentiel de la masse de l'écran au même potentiel que son propre corps => l'écran fonctionne parfaitement.


    C'est donc bien un problème de masse!

    La solution

    Après de multiples tests, le client à brancher une alimentation redondante entre le GPIO et le connecteur d'alimentation de l'écran. 

    Ce faisant, l'alimentation est plus stable (section supérieure des fils) ainsi qu'une meilleure ligne de masse => c'est réglé.


    Voilà, tout est rentré dans l'ordre !

    Dominique

    •  

    MyDin: Carte 2 relais et contrôleur Pico sous MicroPython

    Bonjour à tous,

    Petit retour sur notre projet de carte contrôleur MyDin en cours de développement.

    Le dernier article sur le sujet détaillait les deux cartes principales, leurs fonctionnalités et détails techniques.

    La bibliothèque MicroPython et les tests avancent rapidement.
    Cet article s'attarde un peu sur le montage dans le boîtier Din.

    Un peu d'impression 3D

    Deux pièces supplémentaires ont été imprimées pour maintenir la carte contrôleur bien en place.

    MyDin - carte contrôleur DINCASE-MB3PICO

    Elément qui vient se placer comme ci-dessous sur la carte contrôleur.

    MyDin - carte contrôleur DINCASE-MB3PICO

    Test d'assemblage

    Il faut préalablement équiper le contrôleur du câble d'interface

    Puis présenter la carte face à l'ouverture USB.


    Enfin, placer la seconde pièce pour sécuriser la carte dans son emplacement.

    MyDin - carte contrôleur DINCASE-MB3PICO

    Sans oublier, bien sur, d'utiliser les vis de fixation.

    Accès au port USB du Pico

    Vient ensuite la connexion de la carte de fond de panier.

    MyDin - carte de fond 2 Relais DINCASE-2R-BP3MOD
    MyDin: DINCASE-MB3PICO + DINCASE-2R-BP3MOD

    Reste plus qu'a refermer le boîtier.



    Module fermé et prêt à l'emploi

    Ensuite

    Il reste encore à s'occuper de:

    1. la face du module avec l'accès aux boutons.
    2. finaliser la bibliothèque MicroPython.

    Du code en prévisualisation

    Voici un exemple rudimentaire présentant le fonctionnement général de la bibliothèque.

    Le point principal est l'appel configure() qui précise la carte contrôleur et la carte d'interface associée.
    Dans le cas présent, l'appel configure( Pico3Mod, TwoRelay3Mod ) nous informe que:

    1. La carte contrôleur est basée sur un Raspberry-Pico (3 modules DIN).
    2. La carte d'interface est un module 2 relais (3 modules DIN).
    L'objet ainsi créé expose les interfaces de la carte contrôleur et des interface de la carte en fond de panier.
    Cette approche permet d'envisager d'autres combinaisons de cartes contrôleurs (incluant d'autres interfaces) et d'autres cartes d'interfaces.
     
    from mydin import configure
    from mydin.pico import Pico3Mod
    from mydin.backplane.relays import TwoRelay3Mod 
    import time, sys
    
    din = configure( Pico3Mod, TwoRelay3Mod )
    
    # === Relays ==================================
    din.rel1.on()
    print( "Rel1 is", din.rel1.value() )
    time.sleep(1)
    
    din.rel2.on()
    print( "Rel2 is", din.rel2.value() )
    time.sleep(1)
    
    print( "All relays off" )
    for relay in din.relays:
    	relay.off()
    print( "relays state", [relay.value() for relay in din.relays] )
    
    # === LEDs ====================================
    for i in range( 20 ):
    	for led in din.leds:
    		led.toggle()
    		time.sleep_ms(100)
    # turn off all leds.
    [ led.off() for led in din.leds ]


    Qu'en pensez-vous ?

    •  

    MyDin : Carte 2 relais et controleur Pico sous MicroPython

    Bonjour à tous,

    La solution MyDin existe déjà depuis quelques années pour permettre le prototypage de projets pro et semi-pro. J'en parlais dans cet article.

    Le projet connaît un développement intéressant en proposant des cartes plus avancées disponibles dans la collection myDin de MCHobby.

    mb3mod

    Bien qu'en cours de développement, les avancées sont suffisantes pour une petite présentation ;-) .

    A propos de myDIN

    Le but du projet myDin c'est de proposer un écosystème de boîtier + cartes permettant d'accueillir les projet Makers mais aussi de développer des solutions Pro/Semi-Pro pour les inclure dans des boîtier DIN.

    myDin permet de combler le vide cruel entre le banc d'essai et le coffret électrique.

    Source: Gamme myDin chez MCHobby.

    L'idée derrière cette gamme est de proposer des cartes de fond de panier pour la commande de "puissance" et des cartes frontales pour l'interface de votre projet.

    myDin est un outil qui vous laisse le libre choix du début à la fin de votre projet.

    Carte 2 relais pour boîtier DIN 3 modules

    Plus récemment, j'ai préparé une carte de fond de panier 2R-BP3MOD pour le boîtier DIN 3 modules.

    Cette carte de prototypage propose:

    • 2 relais opto-isolés capables de couper un courant important
    • Une alimentation 5V
    • Un connecteur d'interface JST-PH7
    Ces deux relais permettent de commander des appareils comme pompe à eau, petit chauffage, ventilation, éclairage, ...).
    Grâce a l'isolation galvanique offert par les relais, il est aussi de commander la mise en marche (ou arrêt) d'une chaudière ou d'un AirCo en simulant l'appui sur un bouton.
    Premier prototype de la carte 2R-BP3MOD (fond de panier)

    Le connecteur présente une connectique "standardisée" entre la carte contrôleur (développée ci-après) et les cartes de fond de panier.

    Description de l'interface avec la carte contrôleur

    Carte contrôleur pour boîtier DIN 3 modules

    Comme une carte de puissance ne présente aucun intérêt sans carte de contrôleur adéquate.

    Voici une carte Pico sous MicroPython Pico-MB3MOD équipée des éléments essentiels à la réalisation de nombreux projets d'automatisation. 

    Carte contrôleur pour boîtier DIN 3 modules

    La carte de contrôle propose une interface utilisateur et des connecteurs d'extensions accessibles depuis la face avant du boîtier DIN.

    L'intérêt d'utiliser du code Python est de permettre le développement facile de solution personnalisée en utilisant Thonny IDE (disponible sur Thonny.org).
    Cela est rendu possible grâce à MicroPython!

    DIN 3 module avec
    carte contrôleur + carte fond de panier.

    La carte de contrôle propose les fonctionnalités suivantes:

    • Raspberry-Pi Pico 2 Wireless
    • 4x boutons utilisateurs.
    • 4x LEDs utilisateurs.
    • 1x LED de statut (contrôlable par le code utilisateur)
    • Bouton Reset, LED d'alimentation, switch RUN_APP (sous forme de connecteur a ponter).
    • 1x connecteur Qwiic (JST-SH4, pas visible).
    • 1x connecteur UEXT (IDC 2x5 conn).
    • 1x connecteur 1Wire (en vert).

    A propos du Pico 2 Wireless

    Ce module DIN est propulsé par Raspberry-Pi Pico 2 Wireless, un microcontrôleur Dual Core @ 150 MHz.

    Pico 2 W disponible chez MC Hobby

    Disposant de 512 Kio de RAM, ce microcontrôleur surpuissant est capable d'exécuter du code MicroPython (mais aussi Arduino, Circuit Python, Rust, C, etc).

    Il est même assez puissant pour proposer un mini Web-Serveur.

    Comme les 4 Mio de mémoire Flash est également utilisée pour stocker le système de fichiers de MicroPython, un espace de stockage énorme pour vos scripts et ressources (ex: faire du datalog).

    Les GPIOs du Pico sont tous attribués dans le projet, suivant vos besoins, il sera possible d'en récupérer l'un ou l'autre sur le connecteur UEXT en fonction des besoins.

    A propos du connecteur Qwiic 

    Ce connecteur popularisé par SparkFun, aussi connu sous le nom StemmaQt chez Adafruit Industries, transporte un bus I2C ainsi qu'une alimentation 3V3.

    Source: Wiki MCHobby - Connecteurs

    Ce connecteur est pratique pour connecter rapidement un capteur sur la carte contrôleur (luxmètre, Humidimètre, température, qualité d'air, etc) ou afficheurs (4x7 segments, LCD, OLED, etc)

    Un connecteur de choix pour rendre le module DIN sensible au monde environnent ET/OU améliorer l'interaction avec l'utilisateur.

    A propos du connecteur UEXT

    Ce robuste connecteur transporte plusieurs bus (I2C, UART, SPI) ainsi qu'une alimentation. Le connecteur UEXT est popularisé par la société Olimex.
    Voyez la gamme UEXT disponible chez MCHobby.

    Source: Wiki MCHobby - Connecteurs

    Le bus SPI pourra être utilisé pour faire de l'échantillonnage haut-débit ou pour connecter un écran TFT.

    L'intérêt de ce connecteur est d'utiliser un empattement de 2.54mm, ce qui permet aussi d'utiliser les fils de prototypage soit avec les bus, soit en utilisant directement les GPIOs associés.

    Seul le bus I2C ne peut être détourné car il est également utilisé sur la carte contrôleur.

    A propos du connecteur 1Wire

    Le bus 1-Wire (Wikipedia) est surtout connu grâce au capteur de température DS18B20.

    Sonde température DS18B20 Waterproof

    Le connecteur à ressort permet d'ajouter facilement une (ou plusieurs) sonde(s) de température. 

    Les sondes de température sont pratiques pour surveiller la température d'une serre, d'un aquarium, vivarium ou d'un frigo.

    LES DESSOUS de la carte contrôleur


    Le module est équipé d'une horloge RTC de précision, ce qui permettra au module de rester à l'heure même après une coupure de tension :-)
    Disposer d'une horloge permet aussi de planifier des tâches horodatée.
     
    Le buzzer amplifié est là pour offrir un retour sonore. Utile par exemple pour produire une alerte lorsque les conditions environnementales semblent anormale.
    Encore une fois, cela serait fort utile pour les Aquariums et Vivariums.
     
    Une empreinte de connecteur Qwiic est également disponible sous la carte. Cela permettra, au besoin, d'ajouter des fonctionnalités avancées par l'intermédiaire du bus I2C.
     
    Enfin, comme le microcontrôleur RP2350 dispose d'un capteur de température, celui-ci pourra être utilisé pour surveiller la température à l'intérieur du boîtier.

    Où acheter

    Votre avis compte aussi

    Je crois que ce projet réunit des éléments dans une configuration prometteuse.
    Il me faut encore me pencher sur la partie logicielle de sorte à faciliter la personnalisation.

    Si cet article vous inspire commentaires et remarques alors n'hésitez pas à les partager dans la section "commentaire" de cet article.

    A tout bientôt,
    Dominique

    •  

    Autopsie Raspberry-Pi 5 - Résolution d'un problème avec RP1

    Bonjour à tous,

    Chez MC Hobby, nous essayons toujours d'aider nos clients... même au delà de la période de garantie.

    4 flash long + 3 flash court = RP1 not found

    Lorsque le Pi présente 4 flashs longs + 3 flashs courts, cela signifie que le SoC n'a pas trouvé le composant RP1.

    Le premier réflexe est souvent de penser à un défaut du matériel... c'est pourtant illogique.

    Le RP1 c'est un tank!

    Bien que le RP1 soit le dernier composant arrivé sur le Raspberry-Pi, c'est une composant particulièrement fiable parce que, pour commencer, il est toujours réalisé en 40nM.
    Dans le monde de la gravure microprocesseur, 40nM fait un peu office de tank!
    C'est que le RP1 est prévu pour contrôler les GPIO et doit donc être capable de délivrer plusieurs milliampères sur ces entrées/sorties.
    C'est pour cela que le RP1 est bâtit comme un tank!

    Le SoC ou la RAM ont plus de chance de défaillir avant le RP1 (sauf si vous faites des court-circuits avec le GPIO... fumée magique tu verra...).

    Autopsie

    1) Le "flash code" nous apprend:

    Le SoC démarre et charge le programme de boot depuis la l'EEPROM.

    2) La mise à jour EEPROM réussie nous apprend:

    La séquence de BOOT démarre la mise-à-jour EEPROM avant de finaliser l'initialisation des composants de la plateforme. C'est assez intelligent!

    Que la RAM est accessible et fonctionne parfaitement.

    3) Pas de "Debug Probe" disponible.

    Cela aurait probablement fourni des informations intéressantes... mais bon.

    3) Inspection visuelle nous apprend:

    Sauf court-circuit sur GPIO, il est peu probable que le RP1 rende l'âme spontanément. Il est fort probable -si pas certain- qu'une manipulation ait arraché un composant!

    Je vous propose de faire l'inspection sur les photos transmises par le client... juste pour vois si vous pouvez identifier le problème.

    Résultat de l'inspection plus bas...







    Alors l'image n'est pas très nette suite au grossissement logiciel mais le composant partiellement arraché est sur l'une des deux pistes de l'horloge RP1.
    Normal donc qu'il ne réponde plus au sollicitations du SoC.


    Réparation

    Par chance, c'est parfaitement réparable. Nous avons recommandé au client de remettre délicatement le composant en place puis de refaire une soudure.

    C'est une tâche délicate compte tenu de la taille des composants... voici la réponse reçue du client ce Lundi matin.

    Hi Dominique,

    I'm super impressed and you clearly have an attention to detail I don't have yet. This was the source of the issue, moved back and re-soldered the component, and TADAAAA!!

    You made my weekend! And again, well done on catching this!

    All the best!

    Alexandre
    Cela fait plaisir!

    •  

    VFD: Utiliser un élévateur de tension en "cascade de Villard"

    Bonjour à tous,

    Préambule

    Dans mon article d'hier "VFD: La tension de sortie d'un transformateur n'est pas une constante!", je réduisais la tension de sortie de 36V (à vide) d'un transformateur 24V en le mettant en charge à l'aide d'une résistance de 330 Ohms.

    Ce faisant, cela produisait un dégagement constant de chaleur de 1.3W et l'élévation de la température à 70°C. 

    Cet article va explorer d'autres options

    Cascade de Villard

    Etant donné que nous avons aussi un transformateur 230 V AC vers 2x 6V AC, il est possible d'envisager l'utilisation d'une Cascade de Villard... qui permet d'élever une tension alternative en employant des étages de Diode + Condensateur.

    La tension de sortie Vout produite est une tension continue et relevée aux bornes du condensateur.

    Ce qu'il y a de bien avec la cascade de Villard, c'est qu'il est possible de chaîner les étages.


    Il n'est pas une absolu nécessité d'utiliser des condensateurs polarisés.
    Comme je tiens à produire une tension de -24V pour le VFD, j'ai préféré utiliser des condensateurs polarisés.

    La seule condition imposée est que chaque condensateur et chaque diode doit être capables de supporter le double de la tension d'alimentation.

    Je vous propose cette vidéo de "Ludic Science" qui donne des détails sur la réalisation d'une cascade de Villard.


    Cas du transformateur 6V

    Souvenez-vous, dans le précédent article, le transformateur 6V à vide produisait une tension de 10.44 Vrms à vide.
    La tension de pic est toujours de 14.74V (soit 10.44 x 1.41).

    J'ai donc récupérer la tension alternative sur le premier étage 5V pour obtenir une tension de 25V DC.

    L'utilisation d'un oscilloscope pour contrôler la tension aux bornes du condensateur révèle que celle-ci est parfaitement lissée (en l'absence d'un courant de charge).

    Cependant, vu que les deux circuits partagent des diodes en commun, nous ne pouvons pas simplement imposer la masse du circuit 5V DC comme référence commune avec le +28V DC (de sorte à obtenir les -28V nécessaires).


    Pour que cela puisse fonctionner, il faut que le circuit générant les 28V DC soit totalement isolé du premier. Il faut donc utiliser le 2ieme secondaire 6V sur premier transformateur.
    Il sera alors possible de créer du -28V DC avec la masse commune.

    Si cela est fonctionnel, cela me prive aussi de mon 2ieme secondaire 6V destiné à la "chauffe" du filament.

    Cela avance, au moins cette fois, il n'y a plus de dissipation de chaleur (compré au précédent article).





    •  

    VFD: La tension de sortie d'un transformateur n'est pas une constante!

    Préambule

    Si vous avez l'occasion de vous pencher sur les derniers articles concernant les "Vaccum Fluorescent Display" (FVD) alors vous savez que trois tensions sont nécessaires:

    • 5V pour la logique.
    • -24V pour les grilles.
    • 5V isolée pour l'alimentation du filament.

    Je me tourne donc vers la réalisation d'une alimentation à multiples tensions de sorties. Je recherche donc quelques transformateurs 220V AC...

    Les transformateurs

    Mon premier transformateur est un BV302D06023 de Zettler Magnetics.

    BV302D06023 de Zettler Magnetics

    Dont voici les caractéristiques principales:

    • Voltage - Primary: 230V
    • Voltage - Secondary (Full Load): 6V
    • Current - Output (Max): 383mA
    • Primary Winding(s): Single
    • Secondary Winding(s): Dual
    • Center Tap: No
    • Power - Max: 2.3VA

    Mon second transformateur BV302S24012 toujours de Zettler Magnetics.

    BV302S24012 de Zettler Magnetics 

    Dont voici les caractéristiques principales:

    • Voltage - Primary: 230V
    • Voltage - Secondary (Full Load): 24V
    • Current - Output (Max): 50mA
    • Primary Winding(s): Single
    • Secondary Winding(s): Single
    • Center Tap: No
    • Power - Max: 1.2VA

    Les premières mesures = surprise

    C'est en commençant mon petit montage de test que je m’aperçois que la tension de sortie des transformateurs ne sont pas celles attendues.


     

    Au lieu de 6V est de 10.44 V AC et de 13V DC après pont redresseur + condensateur (le double de la tension AC annoncée).

    C'est encore pire pour la sortie 24V AC atteint 50V DC!!! Outch!

    Que se passe t'il ?

    Et bien c'est simple, la tension de sortie du transformateur varie en fonction du courant de charge.
    D'ailleurs, la tension secondaire est indiquée pour la plein charge (comme le mentionne l'indication "Full Load".

    Etant donné qu'il n'y a pas de charge sur l'alimentation, il est normal d'avoir une tension de 10.44V AC supérieure aux 6V AC attendus.
    La tension de 13V DC s'explique parce que le condensateur lisse la tension à la tension de pic (Vpeak) de la sinusoïde.

    10.44V AC est une tension Vrms. Pour obtenir la tension de pic, on applique la formule suivante:

    Vpeak = Vrms * 1.41


    Donc VPeak = 10.44 * 1.41 = 14.74 V auquel il faut soustraire 2 * 0.7V de chute de tension dans les diodes (0.7V par diode).

    Donc, la tension de pic aux bornes du condensateur est donc de 14.74 V - 1.4 = 13.34V et sera la tension lissée par le condensateur.

    Note:

    • Pour la régulation 5V avec un L7805, la tension d'entrée de 13V DC ne sera pas un problème!
    • La tension de 50V sera un problème car le régulateur MC79L24 accepte un maximum de -40V!

    Réduire la tension de sortie du transfo 24V

    Comme précisé, le transformateur 24V produit une tension redressée de 50V DC.
    C'est principalement parce que la tension de sortie à vide du transformateur est de 37V AC.

    Une façon de réduire la tension de sortie est de mettre le transformateur en charge avant d'effectuer le redressement. Cela tombe bien, j'ai une résistance de 330 Ohms 5W sous la main.


    Utiliser cette résistance fera circuler un courant dans le transformateur et abaissera la tension de sortie AC. Mais quel sera cette tension ?

    Le transformateur dispose d'une puissance de 1.2 VA (Volt-Ampère).

    Donc 1.2 VA = Usecondaire * Isecondaire

    Or, comme la résistance sera branchée directement sur la sortie du transformateur on peut aussi écrire

    Usecondaire = R * Isecondaire 
    Usecondaire = 330 * Isecondaire

    En substituant dans la Usecondaire dans la formule de la puissance nous obtenons:

    1.2 = 330 * Isecondaire * Isecondaire

    Donc Isecondaire = SQRT( 1.2 / 300 ) = 0.063 A ou 63 mA.

    Maintenant que le courant est connu, il est aussi possible de déterminer la tension sur le circuit secondaire.

    Usecondaire = 300 * Isecondaire = 330 * 0.063 = 20.87V AC Vrms 

    Après contrôle, la tension de sortie est mesurée à 21.8V... car la résistance ne vaut pas exactement 300 Ohms.

    Tension redressée

    La puissance de 1.2 VA se calcule sur des valeurs Vrms.
    Les 20.87 V AC déterminés par calcul seront donc en Vrms.
    Puisque la tension a été mesurée à 21.8V, la suite réutilisera cette dernière valeur.

    La tension de pic sera Vpeak = Vrms * 1.41 = 21.87 * 1.41 =  30.73 Volts.
    Il faut y soustraire la chute de tension des diodes (2 * 0.7V), ce qui donne une tension Vpeak de 30.73-1.4 = 29.33 Volts aux bornes du condensateur.

    La tension lissée sera de 29.33 V DC (mesuré à 29.7 VDC), pile dans les spécifications du régulateur -24V  :-)

    Puissance dissipée dans la résistance

    Le courant circulant dans la résistance de 330 Ohms produit un échauffement.
    Puisqu'il s'agit d'une tension alternative, la puissance dissipée par une résistance se formule comme suit: P = R * I² = 330 * 0.063² = 1.3 W

    La température de la résistance monte assez vite et se stabilise autour de 70°C~75°C à l'air libre (même pour une résistance de 5W).

    Cela chauffe vraiment beaucoup... même si l'on reste dans les tolérances de puissance de la résistance.!!!
    Augmenter la surface d'échange ne serait pas du luxe.

    Puissance consommée sur le transformateur 24V

    La tension de -24 V produite sert principalement à la polarisation des grilles du VFD. Il n'y aura donc pas de courant significatif consommé sur ce circuit.

    La résistance de charge de 330 Ohms reste donc un élément indispensable de ce circuit.

    Cela représente quand même une puissance dissipée en chaleur de 1.3W ! Pas franchement idéal!

    Je vais voir si une cascade de Villard (multiplicateur de tension) ne serait pas plus indiqué!
    A tout bientôt pour la suite.


    •  

    Afficheur VFD du four Micro-Ondes Whirpool-MT267

    Bonjour Amis Maker,

    Toujours dans la série des articles sur les tubes VFD (Vaccum Fluorescent Display), voici mon article de détente pour ce dimande.

    Les VFD sont des tubes sous vide qui étaient utilisés pour afficher des informations sur nos appareils électroniques durant les années 1980 à 2000.
    Bien que largement remplacé par des afficheurs LEDs et autres technologies, les VFDs sont encore forts appréciés malgré leur anachronismes.

    Si vous ne savez pas comment fonctionne un VFD, je conseille vivement la lecture du tout premier article sur les VFD.

    VFD du Whirlpool MT267

    Il y a bien des années, je disposais d'un four à micro-ondes MT-267, un excellent appareil mais qui à rendu l'âme.

    Four micro-ondes / multi-fonctions MT-267

    Il utilisait un afficheur VFD (je ne le savait pas encore à l'époque)... et j'aimais beaucoup l'effet produit par ce type d'affichage.
    J'ai donc récupéré le panneau de commande.

    Panneau de commande du MT-267

    Panneau de commande du MT-267

    Le panneau de commande ci-dessous peut être démonté pour accéder à l'électronique.

    Panneau de commande du MT-267

    La carte expose:

    • L'afficheur VFD complet
    • Un encodeur rotatif d'excellente qualité
    • Une EEPROM de 1K (sur la gauche de l'encodeur).
    • Ce qui serait le contrôleur VFD est collé sous l'afficheur.
    • Une belle série de bouton.

    Afficheur VFD - mention FV731GN

    Comme le montre l'image ci-dessus, l'afficheur propose:
    • des segments supplémentaires (pour afficher des lettres)
    • Nombre à 5 digits --OU-- 4 digits + 1 décimale 
    • Affichage de l'heure
    • des tirets pouvant servir de barre de progression (au dessus et en dessous
    • Quelques symboles pouvant être fun à utiliser (comme "la tasse de café").

    Après un peu de travail, il est possible d'accéder au contrôleur présent sous l'afficheur.

    TOSHIBA TMP47C1670

    Le contrôleur de cette carte n'est pas un simple Contrôleur VFD mais plutôt un microcontrôleur TMP47C1670 de Toshiba.
    Ce microcontrôleur est spécialisé pour les interface d'affichage VFD et saisie clavier. Etant donné que c'est un microcontrôleur, il dispose aussi d'entrées/sortie standard, de Timer, d'une horloge, d'un générateur PWM et même d'un convertisseur analogique/numérique.

    Diagramme de bloc du TMP47C1670

    Le TMP47C1670 est un peu trop complexe pour envisager sa reprogrammation.
    Par contre le diagramme nous apprend qu'il y a des broches réservées au contrôle des segments (les anodes) et des broches réservées au contrôles des digits (les grilles).

    En utilisant ces informations, le brochage TMP47C1670 et la carte, il est possible de re-documenter le brochage de l'afficheur VFD.

    Brochage du VFD - mention FV731GN

    Il me faudra, bien entendu récupérer (ou acheter) un controleur VFD parmi ceux utilisables avec MicroPython (PT6302, M9202 / MSM9202, M66004) déjà abordés dans les quelques articles précédents.

    A tout bientôt,
    Dominique




    •  

    MicroPython: réutiliser un afficheur VFD du lecteur CD CDP-CX350 (partie 2)

     

    Bonjour amis Maker,

    Le précédent article sur les tubes VFD (Vaccum Fluorescent Display) c'était le contrôleur VFD M9202 (aussi appelé MSM9202) de mon ancien Sony compact disk player CDP-CX35.


    Poursuite du hacking

    Après la prise en main de l'afficheur VFD, je veux maintenant prendre le contrôle du restant de la facade... cela concerne les LEDs, les encodeurs rotatifs et les boutons.
    Sony compact disk player CDP-CX350


    Interface Clavier

    Le connecteur principal était déjà partiellement décodée pour l'afficheur VFD.

    CDP-CX350 - détail de la carte principale

    En poursuivant les investigations, j'ai découvert que les LEDs étaient contrôlées par un GPIO expander 16 bits (M66310). Pour leur part les boutons sont raccordés en grappe.

    Voici donc le complément d'information concernant le connecteur principal (CON1) et le connecteur vers la carte fille (CON2).


    On peut y voir que les broches DataIn, ShiftClk, Reset de l'afficheur VFD sont ici utilisées pour contrôler le GPIO Expander M66310 (plus le signal LatchClk).

    Contrôler les LEDs

    Pour prendre le contrôle des LEDs, il faut donc envoyer les 16 bits de données vers le M66310 puis activer le signal LatchClk pour mettre à jour les sorties sur le GPIO Expander.


    Les données sont envoyés en utilisant les mêmes signaux DataIn, ShiftLck que l'afficheur VFD. Le contrôleur VFD a son ChipSelect désactivé durant la communication avec le M66310.

    Comme déjà précisé, une fois les 16 bits de données envoyés vers le M66310, une impulsion est envoyé sur LatchClk pour envoyer les bits sur les sorties.

    En suivant les traces, il est alors possible de relier LEDs et GPIOs du MF66310.

    Une fois la bibliothèque m66310.py rédigée, le contrôle du GPIO expander est relativement simple.

    from machine import Pin
    from m66310 import M66310
    import time
    
    _reset = Pin(Pin.board.GP18, Pin.OUT, value=True ) # Reset désactivé
    _cs = Pin( Pin.board.GP14, Pin.OUT, value=True ) # VFD désactivé
    _sdata = Pin( Pin.board.GP13, Pin.OUT )
    _sck = Pin( Pin.board.GP16, Pin.OUT, value=True )
    
    # M66310 GPIO Expander, Latch on raising edge
    _latch = Pin( Pin.board.GP20, Pin.OUT, value=True ) 
    
    # Modifier tous les bits en un fois (sous forme de nombre)
    leds = M66310( _sdata, _sck, _latch, _reset )
    leds.data = data = 0b0000000000011100 # 16 bits.
    leds.update()
    time.sleep_ms( 500 )
    leds.clear()
    leds.update()
    
    # Modification bit à bit
    for bit_idx in range( 2, 16 ):
    	print( bit_idx )
    	leds[bit_idx]=True
    	leds.update()
    	time.sleep_ms(100)
    	leds[bit_idx]=False
    	leds.update()
    leds.clear()
    leds.update()

    Détecter les boutons pressés

    Dès le début de ce projet, je suis assez étonné de trouver deux entrées 5V et deux masses totalement distinctes sur le connecteur principal.

    Il m'aura fallu attendre le décodage de la partie bouton pour me rendre compte que les boutons sont raccordés en grappe chacun avec une résistance d'une valeur différente.

    En voici un exemple d'une série de boutons branché sur la broche "key1".

    Raccordement des boutons en grappe

    Il faut donc ajouter une résistance pour compléter un pont diviseur et ainsi obtenir une tension (qui dépend du bouton pressé).

    Cela explique aussi la raison pour laquelle il existe deux masses et deux sources 5V. Un circuit est destiné à la lecture analogique et un autre circuit est destiné au circuits logiques et contrôleurs.
    Le circuit analogique ne peut pas être perturbé par des parasites, variation de tension ou courant qu'il est plus facile de rencontrer sur le circuit logique (surtout à cause du contrôleur VFD).

    La quantité de boutons sur le panneau fait qu'ils sont regroupés sur différentes grappes indépendantes. C'est ainsi que la carte présente les sorties Key0, Key1, Key2, Key3, Key4. Les encodeurs étant également des boutons un peu spéciaux, ceux-cis sont également repris sur les grappes.

    J'ai documenté toutes les grappes dans le dépôt micropython-M9202-VFD.

    Ensuite

    1. Je dois toujours réaliser un étage d'alimentation pour rendre un projet VFD autonome (j'avance sur ce point).
      Cela me facilitera aussi la vie lors du test d'autres VDF.
    2. La réalisation d'une carte personnalité permettra d'interagir facilement avec les éléments de ce panneau.

    Ressources

    •  

    16 Go de RAM pour mon Raspberry-Pi 5

    Bonjour à tous,

    Cela aura prit un certain temps mais ça y est, il l'ont enfin sorti, le Raspberry-Pi 5 de 16 Go est enfin là.

    Raspberry-Pi 5 de 16 Go

    Le lecteur attentif remarquera que le PCB porte la mention 16GB RAM.
    Il s'agit d'une PCB spécialement modifié pour supporter le module de 16 Go RAM.

    Utilité de 16 Go RAM

    Il n'est pas rare de rencontrer 16 Go de RAM sur un ordinateur. 

    As t'on vraiment besoin de 16 Go de RAM?
    La réponse serait: cela dépend de votre application. 

    Le port PCIe permet déjà d'ajouter un disque NVME offrant ainsi des taux de transfert justifiant l'intérêt d'une capacité RAM plus importante.

    Les applications gourmandes en RAM apprécieront cet espace supplémentaire.
    Parmi elles, nous retrouvons:

    • Navigation internet : toujours aussi gourmande en ressource
    • LLM :  les grand modèle linguistique ont besoin de beaucoup de mémoire.
    • La virtualisation
    • Déploiement Kubernetes (conteneurs)
    • Conception graphique (modélisation 3D)
    • L'édition 4K : forcement gourmande en RAM.
    • Simulations : programmes gourmand en ressources processeur mais aussi en RAM.
    • Windows : probablement les plus RAMivore de tous les OS existant.
    • Mais aussi l'amélioration de la compilation d'application.

    Où acheter

    Chez l'un des Approved Reseller de la fondation comme MC Hobby.


    •  

    Payconiq : crise de confiance chez les clients de Web-Marchand

    Chers clients,
    Chers Amis WebMarchand,
    Chers Bancontact,

    "Payconiq" - ca rime avec "Panique" !

    A la veille d'une sortie cruciale, c'est très agacé que j'écris cet article qui, une fois de plus, étale les conséquences d'un fondamental manque de réflexion chez Payconiq/Banksys!

    En effet, une récente modification technique chez Payconiq créée la panique chez les clients du WebMarchand MC Hobby.

    Depuis quelques jours, Payconiq : spécialiste du paiement sûr et facile, très apprécié des belges, a étendu sa fenêtre de réponse aux WebMarchands de 2 heures!

    En gros, vous payez tout de suite... mais le WebMarchand n'aura confirmation du paiement que dans un intervalle de 2 heures (ce qui est confirmé, 2 heures, vraiment!).

    Et puisque le WebShop ne reçoit pas de confirmation, le panier n'est pas transformé en commande. D'autant que le prélèvement sur le compte bancaire du client est immédiat!
    Pour une méthode de paiement instantané... "Ca la fout mal!".

    Conséquence:

    Nous avons des appels de clients débités sur leur compte bancaire qui ne comprennent pas  pourquoi il n'ont pas la commande correspondante dans le web-shop après leur paiement!

    Web-marchand prit au piège:

    Comme la solution Payconiq est liée à Bancontact, il est impossible de désactiver l'un sans désactiver l'autre.

    Si le WebMarchand veux garder le moyen de paiement Bancontact (c'est dans son intérêt), il présente de-facto les paiement PayConiq.

    Le mot de la fin

    Espérons que Payconiq/Banksys se rendra rapidement compte de leur erreur!

    Dominique





    •  

    MicroPython: réutiliser un afficheur VFD du lecteur CD CDP-CX350 avec un Pico sous MicroPython

    Bonjour amis Maker,

    Je n'arrête décidément plus mes expérimentations avec les tubes VFD (Vaccum Fluorescent Display).
    Cette fois, je me suis penché que contrôleur VFD M9202 (aussi appelé MSM9202) qui a sa propre petite histoire.


    Introduction

    Il y a bien des années, je me suis payé un Sony compact disk player CDP-CX350, un carrousel capable de contenir 300 Compact Discs. J'adorai ce lecteur.

    Sony compact disk player CDP-CX350

    Je parle au passé car ce magnifique appareil n'a pas survécu à ses multiples déménagements. C'est que 300 CD, cela fait son poids et jeunesse aidant j'ai habité divers endroits.
    Et c'est avec désolation que j'ai découvert que mon génial lecteur CD avait mécaniquement dépassé tout espoir de réparation.toute lecture... nous étions en 2005!

    Le maker était en sommeil

    Bien qu'en 2005 je n'y connaissais pas grand chose en programmation microcontrôleur, j'ai procédé à la récupération de la face avant me disant qu'un jour, peut-être, je pourrai le recycler.

    Sony compact disk player CDP-CX350 (face avant)

    Sony compact disk player CDP-CX350 (face avant)

    De nos jours

    Nous sommes en 2025, j'ai ressorti la face avant du lecteur (photos ci-dessus) en vue d'un recyclage complet de l'afficheur VFD mais aussi les boutons, les LEDs, les encodeurs rotatifs, etc!

    La carte principale à l'afficheur VFD est visible ci-dessous

    CDP-CX350 Carte principale

    De haut en bas, la carte reprend les éléments suivants:

    • Connecteur d'interface : en haut a gauche, destiné à recevoir un ruban. Ce connecteur 23 contacts permet de communiquer avec tous les éléments de la carte principale et carte fille.
    • Connecteur carte fille : ce connecteur bleu (toujours en haut) permet de connecter les éléments de la carte fille (encodeurs rotatifs, bouton play/pause/...)
    • Récepteur infrarouge : en haut à droite, permet de réceptionner les signaux de la télécommande.
    • L'afficheur VFD : superbe comme tous les autres et contenant de nombreux symboles. Ce VFD est piloté par un contrôleur VFD M9202 (OKI).
    • LEDs oranges : contrôlée avec un GPIO expander 16 bits M66310FP. Ce GPIO expander est aussi un LED Driver. Les deux contrôleurs M66310FP & M9202 partagent le même bus de communication.
    • Boutons : les nombreux boutons présent sur cette carte (comme la carte fille) sont regroupés par lot sur 5 lignes "keys" distinctes. Chacun de ces boutons ayant une résistance pull-down spécifique (dans son groupe), il faut utiliser une entrée analogique pour déterminer quel bouton est pressé dans un groupe donné.
    • Emetteur infrarouge : les 5 LEDs "bleues" sont en fait des émetteurs infrarouges accompagnés de leur circuit de puissance (les transistors) et connecteur d'interface (en bas à gauche)

    Le contrôleur VFD M9202

    CDP-CX350 - détail de la carte principale

    A partir de la fiche technique du M9202, j'ai pu identifier les différentes connexions nécessaires au contrôle de l'afficheur.

    C'est en lisant la fiche technique du M9202 (MSM9202) que j'ai remarqué que le protocole est identique à celui utilisé pour le ChipSet PT6302 de Princeton Technology.


    CDP-CX350 - Contrôle du VFD

    Si vous ne savez pas comment fonctionne un VFD, je conseille vivement la lecture du tout premier article sur les VFD.

    Le connecteur reprend les signaux:

    • Clk : signal d'horloge du M9202 utilisé pour la transmission de données.
    • DataIn : signal de données du M9202 (communiqués bit-à-bit en commençant par le bit le moins significatif)
    • ChipSelect : activation du M9202. Nécessaire lorsque le microcontrôleur doit envoyer des données.
    • VFL : tension négative permettant de contrôler les grilles ( -25V est suffisant).
    • Heater1 & 2 : filament de chauffe (5 Ω), alimenté en 2.9V (consommation 170mA).

    Les signaux identifiés, voici comment brancher le Pico pour contrôler le VFD.

    • Un 74AHCT125 est utilisé pour convertir les signaux logiques.
    • Le circuit Cut-off bias voltage est réalisé à l'aide de 2 diodes Zener et résistance de 2.2K
      il m'a fallu un certain temps pour me rendre compte que j'avais oublié de le monter... raison pour laquelle l'afficheur n'affichait absolument rien.

    Le montage réalisé et la bibliothèque installée, il est possible de tester l'un des nombreux scripts d'exemples disponibles dans le dépôt.

    Il est maintenant possible de tester les Digits et d'identifier leurs positions.
    La disposition des caractères est un peu bizarre mais n'empêche en rien la représentation de texte.


    Comme pour les autres VFD, le contrôle individuel des segments permet aussi de contrôler les divers symboles (voir le Digit #16 ci-dessous).

    Contrôle des segments 0 à 34 d'un digit.

    L'exemple test_btn_segment.py montre justement comment prendre le contrôle des segments sur le Digit #16.

    Pour la première fois, j'utilise aussi l'ADRAM du contrôleur VFD.

    ADRAM, 2 bits complémentaires par digits

    l'ADRAM est un espace mémoire de deux bits supplémentaires par Digits (donc 35 segments + 2 bits ADRAM). Ces bits additionnels peuvent être utilisés pour activer/désactiver des symboles (ou points) supplémentaires.

    Les bits ADRAM sont souvent utilisés pour activer un point décimal, double-point ou un curseur sur l'afficheur. 

    Dans le cas présent l'ADRAM est utilisé pour activer un symbole supplémentaire sur l'écran. Ainsi, en fixant l'ADRAM du Digit #8 à 0b01, le libellé "GROUP" est illuminé au dessus du Digit #8.

    M9202 : code et exemples

    Le dépôt github micropython-M9202-VFD dispose des informations nécessaires à la prise de contrôle de l'afficheur VFD avec le contrôleur OKI M9202. 

    La bibliothèque utilisée est vfd_pt63.py disponible dans le dépôt micropython-PT6302-VFD.

    Dépôt GitHub micropython-M9202-VFD

    Le dépôt contient plusieurs exemples utilisés pour tester l'afficheur VFD.

    • test_display_all.py : active le mode de test du VFD illuminant toutes les segments.
    • test_display_chars.py : les caractères A à Z sur les 16 positions du VFD.
    • test_display_str.py : affiche la chaîne de caractères "ABCDEFGHIJKLMNOP" sur l'afficheur à partir de la position 1. Très pratique pour deintifier la position de chaque Digit.
    • test_custom_char.py : création et affichage d'un caractère personnalisé.
    • test_segments.py : active progressivement les segments 0 à 34 du digit sélectionné.
    • test_btn_segment.py : utilise un bouton Up et Down (sur GPIO 0 et 1) pour contrôler le segment allumé entre 0 et 34.
    • test_adram.py : modifie les bits ADRAM des digits de 1 à 16. Permet d'identifier les éléments/symboles activés par les combinaisons binaires testées.
    • test_adram_raw.py : manipulation brut de l'ADRAM par envoi direct des messages. Uniquement à des fins de démonstration.
    • test_btn_adram.py : Utilise un bouton Up et Down (sur GPIO 0 et 1) pour contrôler le Digit (de 1 à 16) dont l'ADRAM est modifié.
    • test_raw.py : test brut de l'afficheur VFD en envoyant des messages brutes. Uniquement à des fins de démonstration.

    Boutons, encodeurs et LEDs

    Le décodage de ces éléments est en cours. Le dépôt contient déjà des informations mais il reste encore un travail non négligeable à réaliser.
    Cela fera l'objet d'un autre article.

    Ressources

    N'hésitez pas à partager vos commentaires et suggestions.

    Dominique

    •  

    MicroPython: réutiliser un afficheur VFD Proximus TV avec un Pico sous MicroPython

    Bonjour Amis Maker Belge,

    Cet article intéresse certainement tous les Makers mais les Belges se sentiront privilégié ;-)
    Après le contrôleur VFD M660004 dans le précédent article, cette fois, c'est le contrôleur VFD PT6302 qui est à l'honneur.


    Introduction

    Mon tout premier afficheur VFD (Vaccum FLuorescent Display) fût récupéré sur un décodeur Belgacom TV (aujourd'hui Proximus TV) de 4ieme génération.

    En 2022, je démontais le décodeur pour le transformer en alimentation d'établi. A cette occasion, je mettais l'afficheur de côté en espérant pourvoir le hacker.

    Fort de ma toute récente expérience avec le VFD de Sony, j'ai embrayé sur celui de Belgacom/Proximus TV que l'on peu admirer dans toute sa gloire ci-dessous!

    Source: le dépôt micropython-PT6302-VFD

    Fonctionnement d'un VFD

    Si vous ne savez pas encore comment cela fonctionne, je vous invite à lire la section "Fonctionnement des Vaccum Fluorescent Display" dans mon précédent article.

    Préparer la carte Belgacom

    A l'évidence, la carte est équipée des éléments nécessaires pour générer la tension négative pour les grilles ainsi que l'alimentation du filament.
    Diandre! Je ne suis jamais arrivé à la faire fonctionner!

    J'ai donc sorti mon fer à souder et j'ai éliminé tous les composants entre les boutons poussoirs et le bord opposé de la carte!  J'ai bien entendu préservé le contrôleur et les composants directement attachés.

    Eliminer/déssouder les composants non essentiels!
    Source: le dépôt micropython-PT6302-VFD

    De la sorte, je me mets à l'abri de comportements électroniques indésirables lorsque je prendrais le contrôle du contrôleur VFD.

    A partir de la fiche technique du contrôleur PT6302 (disponible dans le dépôt), j'ai repéré les signaux utiles et les broches correspondants.

    Cliquer pour agrandir
    Source: le dépôt micropython-PT6302-VFD
    • VDD: Tension logique (5V).
    • VEE: Tension négative utilisé pour fixer le potentiel du filament de chauffe (-25 à -35 volts)
    • VSS: masse commune.
    • RSTB: Reset du contrôleur
    • CSB: Chip Select. Placez le au niveau bas pour communiquer avec le composant.
    • CLKB: signal d'horloge. L'acquisition du bit de données se fait sur le flan montant du signal d'horloge.
    • DIN: Data Input=entrée de donnée. Les données sont envoyée bit à bit (LSBF = bit le moins significatif en premier).

    Brancher sur un Pico

    Avant d'envisager le branchement sur un Pico, il faut:

    1. Recréer le circuit de polarisation du filament de tungstène. C'est qu'en enlevant tous les composants... j'ai aussi enlevé ces éléments.
    2. Récupérer les signaux  VDD, VEE, VSS, RSTB, CLKB, DIN du contrôleur (sans oublier ceux du filament de chauffe).

    Polarisation du filament

    Par expérimentation, une tension de 2.9V est suffisant (le courant de chauffe atteint 150mA). Deux résistance de 500 Ohms sont utilisés (appris avec le VFD de Sony)

    Par expérience, encore, une tension VEE (ou VP) de -25V est suffisante pour un fonctionnement correct.
    Une tension de -35V est également convenable mais fait un peu trop chauffer la résistance de 2.2K (1/4W). Avec VEE de -25V, la tension bias est alors de -19V, un différence de 6V qui s'est révélée suffisante à l'usage.

    Récupération des signaux

    Vient ensuite la localisation de tous les signaux VDD, VEE, VSS, RSTB, CLKB, DIN sur le contrôleur (où différents endroits de la carte).




    Brancher sur Raspberry-Pi Pico

    Ayant décidé de garder une tension logique de 5V pour le contrôleur VFD, il faut donc utiliser un LevelShifter (un 74AHCT125) pour adapter les tensions.

    Source: le dépôt micropython-PT6302-VFD

    Bibliothèque MicroPython

    Il fallait s'en douter... ce projet devait inévitablement déraper vers MicroPython.

    Le dépôt GitHub micropython-PT6302-VFD contient la bibliothèque composée de deux fichiers:

    • vfd_pt63.py : contrôle des fonctions essentielles du contrôleur VFD.
    • vfd_proximus.py : fonctions avancées facilitant la prise en main de l'afficheur utilisé sur Proximus TV / Belgacom TV.

    Scripts d'exemple

    le dépôt reprend de nombreux exemples mais c'est principalement ceux relatifs à ProximusTV qui sont les plus intéressants.

    Ce premier exemple indique comment afficher du texte et allumer/éteindre les symboles de l'écran.

    from vfd_proximus import *
    from machine import Pin
    import time
    
    d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
    d.print("VFD Proximus") 
    
    # affiche toutes les options une par une
    #   TITLE, CHANNEL, TRACK, STEREO, RECORD, CLOCK, ANTENNA, AM, FM
    for option in ALL_OPTIONS:
    	d.options += option
    	time.sleep_ms( 500 )
    
    for option in ALL_OPTIONS:
    	d.options -= option
    	time.sleep_ms( 500 )
    
    d.clrscr()
    d.print("Done !")

    Alors, l'afficheur de Belgacom TV / Proximus TV dispose de trois sections d'affichage sur le dessus de l'écran. C'est trois sections sont accessibles par l'intermédiaire des propriétés left , center , right .

    Source: le dépôt micropython-PT6302-VFD

    Il existe pas mal de moyen d'y afficher des informations, y compris des entiers et nombre décimaux comme l'indique l'exemple ci-dessous.

    from vfd_proximus import *
    from machine import Pin
    import time
    
    d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
    d.print("Show float")
    
    VALUES =  [1.25,15.2,32,133.78,73.1,5.2]
    
    for value in VALUES:
    	d.center.float( value )
    	d.update()
    	time.sleep(1)
    d.center.clear()
    d.update()
    
    for value in VALUES:
    	d.left.float( value )
    	d.update()
    	time.sleep(1)
    d.left.clear()
    d.update()
    
    d.clrscr()
    d.print('Done!')

    Ce second exemple se concentre sur le disque dans la section de droite. Le script fait d'abord clignoter le disque... puis fait tourner un secteur sur le disque.

    from vfd_proximus import *
    from machine import Pin
    import time
    
    d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
    d.print("Show DISC")
    
    # Allumer éteindre le disque
    for i in range( 10 ):
      d.right.disc( i%2 )
      d.right.update()
      time.sleep_ms( 500 )
    d.right.disc( False )
    
    # Rotation du disque
    d.right.disc_start()
    d.update()
    while True:
      d.right.disc_step()
      d.update()
      time.sleep_ms( 50 )
    d.right.disc( False )


    Enfin, un exemple simple mais celui que je préfère.... afficher l'heure.
    Les heures et minutes sont affichées sur la section centrale... tandis que les secondes sont affichées sur la section de droite.

    from vfd_proximus import *
    from machine import Pin, RTC
    import time
    
    rtc = RTC()
    
    d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
    d.print("VFD Time") 
    d.center.separator = COLON
    d.right.separator = COLON
    
    while True:
    	year, month, day, weekday, hours, minutes, seconds, subseconds = rtc.datetime()
    	d.center.set( digit_group2=hours, digit_group1=minutes )
    	d.right.set( seconds )
    	d.update()
    	time.sleep_ms( 200 )

    Ressources

    Si le sujet vous intéresse, voyez le dépôt GitHub contient d'autres informations.

    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.

    •  

    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



    •  

    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

    Les dimensions étant exprimés en pouce (inches), voici ces informations reportées en mm.

    Dimensions en mm

    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

    •