Saisie de chiffres en mode Retro sur micro:bit
La microbit, avec ses deux boutons A et B, peut très vite se trouver limitée lorsque dans un projet, on souhaite saisir des chiffres ou des nombres. On a alors besoin de mettre à contribution ses interfaces d'entrée/sortie pour brancher un dispositif extérieur. Le plus simple est bien sûr d'utiliser des matrices de boutons comme celui-ci.
Mais pourquoi pas faire preuve d'originalité et recycler ce qu'on peut trouver facilement dans nos greniers ou celui de nos parents - ou grand parents ! Dans cet article, je vous propose d'utiliser une IHM originale basée sur un cadran rotatif de vieux téléphone. Ce projet est relativement simple à mettre en oeuvre et saura éveiller l'intérêt auprès de vos utilisateurs ! En voici une démonstration :
Le principe
Démontage du téléphone
La première étape consiste à démonter un vieux téléphone. La récupération du cadran roratif ne pose aucun problèmes : ces vieux appareils étaient conçus pour être facilement réparables et les pièces interchangables. Ah la belle époque !
Il faudra veiller à ce que le cadran tourne bien et que les contacts des lamelles soient bien propres. Utilisez du lubrifiant et de la bombe à contact si besoin.
Fonctionnement mécanique du cadran
Le cadran fonctionne en fait comme un interupteur : la rotation entraîne le mouvement de lames qui vont faire contact.
- Un premier jeu de lames va donner l'information que le cadran est en train d'être actionné en faisant un contact durant le temps de la manipulation
- Un second jeu de lames va donner l'information du chiffre sélectionné en fournissant des impulsions (mouvement de lames faisant un contact temporaire). Le nombre d'impulsions correspond au chiffre sélectionné, sauf pour 0 qui sera codé par 10 impulsions (c'est pourquoi le 0 se trouve tout à la fin du cadran !)
Nous avons donc toutes les informations pour passer amintenant au montage et au codage du projet.
Mise en oeuvre
Le montage électrique
Le cadran offre 4 fils. Nous n'en utiliserons que 3 :
- La masse (fil rouge et blanc)
- Le contact d'activation du mécanisme (fil bleu)
- Le contact d'impuslions (fil rouge)
Puisque ces fils correspondent à des contacts de lames, le branchement électrique se fera comme pour un simple interrupteur : Nous utiliserons ici les résistances de PULL-UP internes à la carte micro:bit ce qui permet de simplifier le montage. Le fil de masse va sur la broche GND, le fil d'activation sera connecté à la broche 1 et le fil d'impulsions, à la broche 2, tout simplement !
Le fonctionnement électrique du cadran
Afin de pouvoir programmer la carte microbit, nous avons besoin de comprendre électriquement ce qui se passe sur les broches.
Observons ce qui se passe lorsqu'on saisit le chiffre 9 au cadran. Sur cette capture à l'oscilloscope,
- la voie Bleue correspond à la broche 1, c'est à dire le signal d'activation.
- la voie jaune correspond à la broche 2, c'est à dire le signal d'impulsions.
Comme nous le voyons, pour savoir qu'un chiffre est en train d'être saisi, il nous suffira de détecter un passage de la broche 1 au niveau bas. Pour connaître le chiffre saisi, nous devrons compter le nombre de transitions de la broche 2 du niveau bas au niveau haut.
Le programme
Le programme Python à partir de ce moment devient assez simple. En voici le code source :
# IHM : Entrée numéroteur téléphonique # Olivier Lecluse # http://www.lecluse.fr/blog/numeroteur/ # CC BY-SA import microbit as mb enable = mb.pin1 enable.set_pull(enable.PULL_UP) impuls = mb.pin2 impuls.set_pull(impuls.PULL_UP) def read_wheel(): count = 0 # number of impulses imp_low = True while enable.read_digital() == 0: mb.display.show(mb.Image.ALL_CLOCKS[count]) im = impuls.read_digital() if imp_low and im == 1: # We have a rising edge imp_low = False count += 1 imp_low = (im == 0) if count == 10: count = 0 return count while True: if enable.read_digital() == 0: # Enable low => wheel is moving mb.display.show(read_wheel())
Tout se passe dans la fonction read_wheel()
: tant que la roue est actionnée, on comptabilise le nombre de transitions
de la broche impuls
(pin2) du niveau bas au niveau haut. Pour détecter ces fronts montants, nous utilisons une variable booléenne imp_low
permettant
de détecter le changement d'état de la broche impuls
.
La cerise sur le gâteau est la petite animation en forme d'horloge. La réalisation est un jeu d'enfant avec la carte microbit : nous utilisons le tableau d'images ALL_CLOCKS
.
Pour réaliser l'animation, nous affichons l'image correspondant à la valeur du nombre d'impulsion.
Conclusion
Comme vous le voyez, la mise en oeuvre de ce projet est presque plus simple que l'utiisation d'un clavier externe. De plus, ce projet permet de recycler de vieux matériels obsolètes tout en donnant une touche rétro pour un projet original.
C'est aussi l'occasion de réfléchir à l'aspect IHM : comment fournir à une macvhine une information de type numérique en s'afranchissant du trivial clavier et du fastidieu appui répété sur les boutons A et B. J'ai proposé une première répone dans cet article sur la fabrication d'une roue codeuse. Nous avons ici une seconde approche qui a été utilisé pendant des décénies dans tous les téléphones et qui était un modèle d'ergonomie et de simplicité pour l'époque !
C'est parti pour une expédition dans le grenier !!