Plusieurs boutons dans la même broche

12

Je fais un projet et j'utilise Arduino pour prototyper, je dois utiliser 10 boutons-poussoirs (avec plus de choses) et je n'ai pas assez de broches.

Une solution à laquelle je pourrais penser est d'utiliser les broches analogiques et d'utiliser chacune d'elles pour deux boutons-poussoirs, quelque chose comme ceci:

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

De cette façon, je peux lire la broche A0 et savoir laquelle est poussée en regardant si la tension est de 5 V ou la moitié de celle-ci.

Est-ce une bonne idée? Les différents boutons poussoirs ne sont JAMAIS censés être poussés en même temps, ce qui est le seul problème auquel je peux penser.

Y a-t-il de meilleures façons?

MyUserIsThis
la source
Combien de broches essayez-vous d'utiliser?
W5VO
@ W5VO J'aurais besoin de 22, avec 10 boutons, la carte n'a que 18 ... donc deux boutons pour chaque broche analogique, je n'ai besoin que de 5 broches analogiques et la carte en a 6.
MyUserIsThis
1
Pour info, de nombreux constructeurs automobiles utilisent la même approche pour les commandes au volant du système audio. Ils ont (donner ou prendre) 8 boutons, chacun avec sa propre résistance. Cela leur permet de faire passer un seul fil (ou une paire de fils pour garantir un retour propre) de la roue à la tête audio. C'est une très bonne approche.
DoxyLover
Je pense que vous pouvez réellement utiliser trois broches pour entrer théoriquement un nombre infini de commutateurs à l'aide de certains registres à décalage. Il est également possible d'utiliser 8 broches pour entrer 256 commutateurs à l'aide de multiplexeurs.
Alvin Wong

Réponses:

22

Pourquoi gaspiller plusieurs broches analogiques pour deux commutateurs chacun, alors que vous pouvez utiliser n'importe quel nombre de boutons sur une seule broche analogique?

Deux façons de procéder. L'un est en série, l'autre est parallèle.

entrez la description de l'image ici

entrez la description de l'image ici

C'est ainsi que certaines commandes audio du volant de voiture sont. Et comment certains des anciens contrôleurs en ligne iPod fonctionnent.

Selon les résistances que vous utilisez, si vous avez besoin d'appuyer sur plusieurs boutons en même temps et la sensibilité de votre entrée analogique, vous pouvez avoir les 10 boutons sur une seule broche.

Passant
la source
Merci, j'ai également pensé à cela, mais j'ai également pensé que les lectures de tension n'étaient peut-être pas aussi exactement que j'avais besoin pour pouvoir s'appuyer sur cette méthode. Je vais également essayer cela et voir comment cela fonctionne.
MyUserIsThis
Étant donné que les principes fondamentaux de l'analyse de mon réseau de résistances ne sont pas assez solides, j'ai essayé d'utiliser CircuitLab pour simuler le circuit série et dessiner une table de vérité pour la mesure de tension sur la broche d'entrée analogique. J'ai trouvé que les combinaisons B2 + B3 donnent 2.499V et les combinaisons B1 + B4 donnent 2.498V. Avec des chiffres aussi proches, je pense que l'ADC 10 bits typique ne pourra pas différencier correctement les combinaisons multi-entrées. Que dis-tu ? Bien sûr, une clé à la fois, fonctionnerait parfaitement - sans aucun doute. Remarque B1 = Button1.
icarus74
En fait, B2 + B4 donne 1,666V, tandis que B2 + B3 + B4 donne également 1,666V! La solution pourrait être d'utiliser différentes valeurs de résistances pour R1, R2, R3, R4 et de ne pas toutes les conserver à 1K. Que dis-tu?
icarus74
7
Une échelle 2R / R transformait les boutons en D / A, et chaque combinaison de pressions de bouton aurait une valeur unique. Je lui ferais confiance pour fonctionner avec les boutons N-3, où N est la résolution ADC
Scott Seidman
1
@ icarus74 oui, utiliser des valeurs différentes au lieu de tous les 1k, donnerait des combinaisons uniques. Essayez 1k, 2k, 4k, 8k, 16k, etc. (ou 1k, 4k, 16k, etc., pour une gamme plus large)
Passerby
10

Cela fonctionnerait, mais une meilleure façon est d'utiliser une matrice . Il s'agit du même concept que les LED de multiplexage à matrice, mais avec interrupteurs.

entrez la description de l'image ici

Il s'agit d'une matrice 2x2. Une matrice utile est plus grande, car à cette taille, vous n'enregistrez pas de broches en connectant les commutateurs individuellement.

Avec une matrice 3x3, vous pouvez obtenir 9 commutateurs. Vous avez besoin de 10, vous pouvez donc ajouter une ligne ou une colonne de plus et prendre en charge 12 commutateurs, ou simplement placer le 10e commutateur sur sa propre broche.

L'avantage ici est que vous pouvez utiliser les E / S numériques, ce qui est moins cher et généralement plus abondant que les E / S analogiques. Un registre à décalage est un moyen bon marché d'ajouter plus d'E / S numériques, si vous en manquez.

Si vous voulez encore moins de broches, vous pouvez, pour une augmentation de la complexité, utiliser le charlieplexing . Vous devrez ajouter des diodes en plus de vos commutateurs, et ces diodes coûtent probablement autant qu'un registre à décalage. Cependant, si le coût n'est pas votre principale préoccupation, il peut avoir un certain avantage. Avec cette méthode, vous pouvez lire tous vos commutateurs (jusqu'à 12, en fait) avec quatre broches.

Phil Frost
la source
Juste une question. Pourquoi est-ce mieux si j'ai besoin de plus de broches? De cette façon, j'aurai besoin de 6 broches pour la matrice 9x9 plus une broche de plus pour le dixième, alors que dans ce que j'ai fait, je n'aurais besoin que de 5 broches.
MyUserIsThis
@MyUserIsThis cela évolue mieux lorsque le nombre total de commutateurs augmente. ex une matrice 5x5 vous permet de connecter 25 commutateurs à 10 broches. En guise de commentaire plus général, faire les choses de la manière conventionnelle permet à quiconque de comprendre plus facilement ce que vous avez fait; et pour que vous reconnaissiez ce que font les circuits des autres peuples (parce que vous vous êtes entraîné sur l'implémentation standard).
Dan est en train de jouer par Firelight le
@MyUserIsThis voir les modifications. Passerby a aussi une bonne réponse.
Phil Frost
2

L'entrée analogique est une approche valide, vous devriez pouvoir avoir plusieurs boutons dessus. Je voudrais également suggérer d'utiliser une puce d'extension IO comme la MCP23017 . Il a 16 broches qui peuvent être des entrées sont des sorties et son contrôlé avec I2C en utilisant deux broches. Adafruit a une bibliothèque Arduino pour cela.

BrianK
la source
2

Oui, cela semble être une bonne idée, mais de toute façon je vais proposer une alternative qui m'est venue à l'esprit.

Si vous avez accès aux portes logiques, vous pouvez mapper de nombreux nboutons aux ceil(log2(n + 1))broches via une logique booléenne. Par exemple, si vous avez 4 boutons, mais seulement 2 broches, vous pouvez créer une configuration comme celle-ci:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Autrement dit, button0pressé devrait avoir pin0et pin1bas; button1, pin0bas et pin1haut; button2, pin0haut et pin1bas; et button3, pin0et pin1élevé.

De là découleraient les expressions booléennes suivantes

pin0 = button2 OR button3
pin1 = button1 OR button3

Un mappage de 4 boutons à 2 broches pourrait ainsi être réalisé avec seulement 2 portes OU. Vous auriez cependant besoin d'une broche supplémentaire et d'une logique supplémentaire pour indiquer si vous appuyez sur un bouton.

Bien sûr, il y aura toujours des problèmes si plusieurs boutons sont enfoncés simultanément.

De plus, si vous allez toujours utiliser l'approche par résistance, envisagez d'utiliser des valeurs plus élevées sur les résistances autres que 100 ohms, car des résistances traversantes de 5 V de l'ordre de 100s d'ohms produiraient un courant de l'ordre de 10s de mA, ce qui est gentil. inutilement élevé. Je suppose que des valeurs plus raisonnables seraient de 10k Ohm ou 47k Ohm.

nijoakim
la source
Merci pour votre approche. J'ai aussi pensé à quelque chose comme ça, mais je n'ai pas de portes logiques et j'ai des tonnes de résistances. Et oui, j'utilise généralement des résistances 10k pour cela, 100 ohms était juste la valeur par défaut de l'éditeur de circuit. Merci encore pour votre aide.
MyUserIsThis
Je pense que je vais enfin utiliser l'approche par résistance, car je n'aurai pas à acheter de portes logiques, et votre approche logique ne me fait économiser qu'une seule broche et je n'en ai pas besoin. Je garderai cela à l'esprit pour les projets plus importants. Merci beaucoup.
MyUserIsThis
D'accord! Bonne chance pour votre projet!
nijoakim
0

La page suivante peut être utile:

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

C'est écrit en espagnol, mais les esentials sont schématisés, je pense que c'est une très bonne idée pour vous.

Sur cette vidéo vous pouvez voir le résultat final, le croquis est également sur la page, fonction encapsulée pour faciliter la mise en œuvre sur vos projets

Vidéo Youtube: clavier à 10 touches sur une seule broche

Voici un schéma du site ci-dessus:

entrez la description de l'image ici

entrez la description de l'image ici

JohnnyDeauville
la source
2
Veuillez ajouter un résumé de ce que contient le lien au cas où il mourrait, surtout lorsqu'il est en espagnol et qu'il s'agit d'un site en anglais.
PeterJ
Désolé, peut-être la situation normale qu'en Espagne, il est normal de renvoyer une publication en anglais ... Mais le lien est très intéressant, dit comment construire un clavier à 10 touches en utilisant une seule broche avec description photo étape par étape, les diagrammes pour faire un tableau et une image pour faire la couverture des boutons. Aussi le code pour gérer le clavier, facilement compréhensible. Nice developped je pense.
JohnnyDeauville
Ce n'est pas seulement le côté espagnol des choses, je suis d'accord que le diagramme est clair, semble bon et je peux comprendre de quoi il s'agit juste en fonction de cela. Mais Stack Exchange décourage les réponses de lien uniquement car elles ne sont pas utiles si le lien meurt, imaginez si ce blog est fermé / supprimé demain à quel point la réponse serait utile. Vous pourriez peut-être inclure le schéma et une ou deux phrases à ce sujet et laisser le lien comme référence pour plus d'informations.
PeterJ
Je suis une recrue dans ce forum, comment faire pour que tu me le dises? Une section spéciale ...? Merci pour votre temps
JohnnyDeauville
Je viens d'inclure le schéma et la référence d'où il vient, mais il pourrait également être utile de traduire un peu plus de la page pour donner un contexte comment cela fonctionne et quelles seront les lectures de l'ADC.
PeterJ