DIY - Le Bodac et les montages pour avoir plusieurs boutons sur une seule entrée Arduino

Votez pour l'image du mois
  • Lors de la réalisation d'une boîte à boutons ou d'un volant complexe, on a souvent plein de boutons et pas assez d'entrées sur son Arduino.

    En cherchant sur Internet (ou en réfléchissant), vous trouverez une multitude de montages qui permettent de câbler plusieurs boutons en utilisant moins d'entrées que de boutons.

    Ces montages peuvent se classer en 2 catégories :

    - Les matrices

    - Les réseaux de résistances

    Montages en matrice

    Les montages en matrice sont très souvent utilisés pour les claviers, les télécommandes, etc...

    Exemple de matrice pour 16 boutons, utilisant 8 entrées :

    button-matrix-4X4_sd.jpg

    Mais ce montage ne permet pas d'appuyer sur plusieurs boutons en même temps (ou alors que certains), il faut alors rajouter des diodes:

    button-matrix-4X4_diodes.png

    La façon dont il faut câbler ces diodes n'est pas commode du tout, notamment dans un volant, car chaque diode va avoir une patte "en l'air" (celle qui doit être connectée au fil de la ligne test).

    Pour un clavier c'est moins problématique car les touches et les diodes seront souvent soudées sur un circuit imprimé.

    Remarquez au passage que pour 16 boutons, il faut 8 entrées.

    Le module DigitalMatrix dans NodeBlue vous permet d'implémenter cette solution.

    Montage en réseau de résistances

    Je ne vais pas les décrire tous car il y a pas mal de variantes, mais globalement l'idée est de créer un pont diviseur de tension et de faire varier une des résistances à l'aide des boutons, la tension résultante étant mesurée par une entrée analogique.

    Le schéma le plus courant est celui ci :

    resistorladder-5.png

    Comme la matrice simple, ce montage ne permet pas d'appuyer sur plusieurs boutons en même temps mais, comparé à la matrice, pour 15 boutons il n'utilise que 3 entrées au lieu de 8. De même que pour la matrice, le câblage des résistances n'est pas commode, sauf dans le cas d'un "Rocker switch" ou commutateur rotatif, pour lequel on est d'ailleurs assuré qu'il n'y aura qu'un "bouton" appuyé en même temps.
    Le module ResLadder vous permet d'implémenter cette solution.

    Pour pouvoir appuyer sur plusieurs boutons en même temps, vous trouverez des montages type "R2R", qui s'inspirent du fonctionnement d'un convertisseur numérique analogique :

    resistorladder-r2r-8.png

    Comme pour les montages précédents qui permettent d'appuyer sur plusieurs boutons en même temps, le câblage des résistances n'est pas commode.

    J'ai donc "inventé" un autre montage (quelqu'un y a sans doute déjà pensé mais je n'ai vu ce montage nulle part). Celui ci associe les avantages du précédent en proposant un câblage plus élégant et surtout plus commode, puisque les résistance se soudent entre les broches des boutons, et qu'il n'y a besoin de relier les boutons que par un fil. J'ai nommé ce montage "Bodac" :

    Bodac_5.jpg

    Le fonctionnement étant différent, j'ai du faire un peu de maths pour éviter de stocker les 32 valeurs de seuils (pour 5 boutons) et aussi pour permettre un calibrage facile du système.

    Je vous épargne les calculs, mais cela implique la résolution d'un système (simple) de N équations à N inconnues (N étant le nombre de boutons).

    Je propose sur ma boutique des packs de résistances à 1% de précision pour réaliser des Bodacs. Je vérifie que les résistances sont dans les valeurs de tolérance pour que ça fonctionne, car selon les fournisseurs les 1% ne sont pas toujours respectés...

    Le module Bodac dans NodeBlue vous permet d'implémenter cette solution très simplement.

    Enfin pour finir j'en profite pour parler du Joycoder. Normalement ce périphérique a besoin de 7 entrées (2 pour l'encodeur rotatif et 5 pour les 4 directions + boutons), mais j'ai développé une platine qui, à l'aide de la technique précédentes et de résistances judicieusement choisies, permet de n'utiliser que 3 entrées (2 pour l'encodeur rotatif et 1 entrée analogique pour les 4 directions + le bouton).

    Voici un exemple pour intégrer un Joycoder dans NodeBlue : http://www.nodeblue.org/gui/index.php?file=examples/Joycoder.txt

    Note importante : les modules NodeBlue présentés dans cet article implémentent tous un système anti-rebond, afin d'éliminer les parasites dus aux rebonds mécaniques ou aux interférences électromagnétiques.