Comment mesurer l'état de beaucoup de boutons

Comment mesurer l'état de beaucoup de boutons

Si vous avez déjà essayé de construire un panneau de contrôle interfacé par USB avec beaucoup de boutons ON/OFF, vous savez que ce n'est pas ausi simple que l'on pourrait se l'imaginer. Non seulement la multiplication des boutons rend rapidement le câblage complexe, mais si vous êtes limités à 5 ou 8 entrées par module, le nombre de modules d'interface à utiliser va rapidement augmenter. Une manière d'améliorer ces deux problèmes consiste à multiplexer plusieurs boutons sur une interface analogique, et c'est ce que nous allons vous montrer aujourd'hui.

Le principe du multiplexage consiste à ajouter des résistances différentes à chaque bouton, de sorte à ce que la valeur lue sur l'interface change en fonction du bouton pressé. Plusieurs topologies de connexion sont possibles selon les critères de l'application. Pour cet article, nous nous intéressons au cas le plus flexible, c'est-à-dire à celui qui permet de détecter à tout moment n'importe quelle combinaison de boutons, de sorte à ce que l'état d'un commutateur à bascule par exemple n'empêche pas la lecture d'un bouton à pression temporaire. Le circuit de connexion doit donc assurer la possibilité de différencier l'état de chaque bouton indépendamment de l'état des autres boutons auxquels il est multiplexé.

Voici le circuit de raccordement que nous préconisons:

Schéma d'interconnexion pour multiplexer des interrupteurs
Schéma d'interconnexion pour multiplexer des interrupteurs


Ce circuit permet de raccorder quatre interrupteurs par entrée analogique AnButton. Cela vous permet par exemple de lire 20 boutons sur un Yocto-Knob ou même 24 boutons sur un Yocto-MaxiDisplay.

Les valeurs des résistances n'ont pas été choisies au hasard: ce sont des valeurs courantes faciles à trouver, et elles ont été choisies pour minimiser les risques d'erreur par lecture analogique avec une entrée analogique Yoctopuce. Avec un peu d'audace, on aurait pu rajouter un cinquième interrupteur avec une résistance de 470Ω, mais selon la tolérance des résistances, le bruit électromagnétique ambiant et la longueur des fils raccordant les boutons, on aurait risqué des erreurs de lecture, donc nous vous proposons d'en rester à quatre boutons par entrée pour maximiser la fiabilité du système.

En plus d'augmenter le nombre de boutons disponibles par entrée, ce schéma a l'avantage de simplifier considérablement le câblage par rapport à la solution triviale qui consiste à brancher chaque bouton sur une entrée. Voici à quoi ressemble le câblage d'un panneau de contrôle à 20 boutons:


 

Construction d'un panneau de contrôle avec 24 boutons multiplexés sur six entrées



Voyons maintenant comment lire les valeurs. La résistance théorique du circuit en fonction des boutons est donc la suivante:

SW1 actifSW2 actifSW3 actifSW4 actifrésistanceprop.
nonnonnonnon17.7 KΩ100%
nonnonnonoui16.7 KΩ94%
nonnonouinon15.7 KΩ89%
nonnonouioui14.7 KΩ83%
nonouinonnon13 KΩ73%
nonouinonoui12 KΩ68%
nonouiouinon11 KΩ62%
nonouiouioui10 KΩ56%
ouinonnonnon7.7 KΩ44%
ouinonnonoui6.7 KΩ38%
ouinonouinon5.7 KΩ32%
ouinonouioui4.7 KΩ27%
ouiouinonnon3 KΩ17%
ouiouinonoui2 KΩ11%
ouiouiouinon1 KΩ6%
ouiouiouioui0 KΩ0%


Nous avons donc bien une forte discrimination entre les valeurs possibles, de 5% au minimum entre chaque valeur. Utilisez néanmoins des résistances de précision 1% pour éviter les risques d'erreur, en particulier pour les résistances de 10KΩ et 4.7KΩ.

Pour le décodage, rien ne sert de faire une mauvaise approximation par une formule arithmétique, en raison des valeurs qui ne sont pas régulières. Le plus simple, le plus fiable et le plus rapide consiste à identifier l'état de chaque interrupteur par quatre comparaisons successives: une comparaison pour déterminer l'état du SW1, puis une pour déterminer l'état du SW2, etc.

Pour vous simplifier la vie, nous avons décidé d'ajouter le décodage implicite de ces états directement dans la fonction AnButton disponible sur les entrées analogiques des modules Yoctopuce. Ainsi, si vous mettez à jour le firmware de vos modules Yoctopuce dotés de fonctions AnButton, il vous suffira désormais de configurer dans le module un type d'entrée digitale, et la valeur numérique lue sur la fonction AnButton correspondra directement à l'encodage numérique des boutons considérés comme des bits, soit un chiffre entre 0 et 15 compris. Non seulement ce sera plus facile pour vous, mais cela permet au module de gérer de manière autonome le filtrage anti-rebond nécessaire à la lecture sans faute d'interrupteurs mécaniques. N'hésitez pas à en profiter!

Commenter 3 commentaires Retour au blog



1 - jips001 Samedi 26 septembre 2020 15H20

Bonjour, quelle est la longueur de câble maximale possible entre les boutons et l'entrée du Yocto-knob ?

Cordialement

2 - mvuilleu (Yocto-Team)Lundi 28 septembre 2020 9H29

@jips001: La longueur maximale dépend de l'erreur rajoutée par les fils. Comme nous utilisons intentionnellement des valeurs de résistance assez haute, la résistance des fils ne devrait pas être trop problématique. Par contre plus les fils sont grands, plus ils peuvent faire antenne et récupérer des parasites, donc il est recommandé d'utiliser du cable torsadé pour les longues sections de fils. Vous pourriez probablement déporter assez facilement quatres entrées analogiques avec du cable réseau qui est fait de paires torsadées, par exemple en utilisant un RJ45-Adapter (https://www.yoctopuce.com/EN/products/accessories-and-connectors/rj45-adapter). Prenez soin de bien utiliser une paire pour chaque entrée.

3 - jips001 Lundi 28 septembre 2020 12H39

Merci pour votre retour !

Yoctopuce, get your stuff connected.