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 !

Photo cadran

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 !

Branchements

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.

Capture Oscilloscope

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 !!