12 votos

Más de un botón en el mismo pin

Estoy haciendo algún proyecto y estoy usando Arduino para hacer el prototipo, tengo que usar 10 pulsadores (junto con más cosas) y no tengo suficientes pines.

Una solución que se me ocurre es utilizar los pines analógicos y usar cada uno de ellos para dos pulsadores, algo así:

schematic

simular este circuito - Esquema creado con CircuitLab

De esta manera puedo leer el pin A0 y saber cuál de ellos está siendo empujado mirando si el voltaje es de 5V o la mitad de eso.

¿Es una buena idea? Se supone que los diferentes botones no deben ser presionados al mismo tiempo, que es el único problema que puedo pensar.

¿Hay formas mejores?

0 votos

¿Cuántas clavijas está tratando de utilizar?

0 votos

@W5VO necesitaría 22, con 10 botones, la placa solo tiene 18... así que dos botones por cada pin analógico solo necesito 5 pines analógicos y la placa tiene 6.

1 votos

Para que lo sepas, muchos fabricantes de automóviles utilizan el mismo enfoque para los controles montados en el volante para el sistema de audio. Tienen (más o menos) 8 botones, cada uno con su propia resistencia. Esto les permite pasar un solo cable (o un par de cables para garantizar un retorno limpio) desde el volante hasta el cabezal de audio. Es un enfoque perfectamente bueno.

22voto

Passerby Puntos 28913

¿Por qué desperdiciar varios pines analógicos para dos interruptores cada uno, cuando podrías hacer cualquier número de botones en un solo pin analógico?

Dos formas de hacerlo. Una es en serie, la otra es en paralelo.

enter image description here

enter image description here

Así son los controles de audio del volante de algunos coches. Y cómo funcionan algunos de los controladores en línea del iPod más antiguos.

Dependiendo de las resistencias que utilices, si necesitas que se pulsen varios botones al mismo tiempo, y de lo sensible que sea tu entrada analógica, podrías tener los 10 botones en un solo pin.

0 votos

Gracias, yo también pensé en esto, pero también pensé que quizás las lecturas de voltaje no eran tan exactas como necesito para poder confiar en este método. Probaré esto también y veré cómo funciona.

0 votos

Como mis fundamentos de análisis de la red de resistencias no son del todo sólidos, intenté usar CircuitLab para simular el circuito en serie, y dibujar una tabla de verdad, para la medida de voltaje en el pin de entrada analógica. Encontré que, las combinaciones B2+B3 dan como resultado 2,499V y las combinaciones B1+B4 dan como resultado 2,498V. Con cifras tan cercanas, creo que el típico ADC de 10 bits no podrá diferenciar correctamente las combinaciones de entradas múltiples. ¿Qué me dices? Por supuesto, una tecla a la vez, funcionaría perfectamente sin duda. Nota B1=Botón1.

0 votos

¡En realidad, B2+B4 da 1,666V, mientras que B2+B3+B4 también da 1,666V ! La solución podría ser usar diferentes valores de resistencias para R1, R2, R3, R4 y no mantenerlas todas de 1K. ¿Qué dices?

10voto

Kip Diskin Puntos 11

Eso funcionaría, pero una mejor manera es con un matriz . Se trata del mismo concepto que la multiplexación de LEDs con una matriz, pero con interruptores.

enter image description here

Se trata de una matriz de 2x2. Una matriz útil es más grande, porque a este tamaño, no estás ahorrando ningún pin sobre la conexión de los interruptores individualmente.

Con una matriz de 3x3 puedes conseguir 9 interruptores. Necesitas 10, así que puedes añadir una fila o una columna más y soportar 12 interruptores, o simplemente poner el décimo interruptor en su propio pin.

La ventaja en este caso es que se puede utilizar la E/S digital, que es más barata y suele ser más abundante que la E/S analógica. A registro de desplazamiento es una forma barata de añadir más IO digital, si se te acaba.

Si quieres aún menos pines, puedes, para aumentar un poco la complejidad, utilizar charlieplexing . Tendrás que añadir diodos además de los interruptores, y estos diodos probablemente cuesten tanto como un registro de desplazamiento. Sin embargo, si el costo no es su principal preocupación, entonces puede tener alguna ventaja. Con este método, podrías leer todos tus interruptores (hasta 12, en realidad) con cuatro pines.

0 votos

Sólo una pregunta. ¿Por qué es esto mejor si voy a necesitar más pines? De esta manera necesitaré 6 pines para la matriz de 9x9 más un pin más para la décima, mientras que en lo que hice, necesitaría sólo 5 pines.

0 votos

@MyUserIsThis esto escala mejor a medida que el número total de interruptores sube. ej. una matriz 5x5 te permite conectar 25 interruptores a 10 pines. Como comentario más general, hacer las cosas de la manera convencional hace que sea más fácil para cualquier otra persona entender lo que has hecho; y para ti reconocer lo que hacen los circuitos de otras personas (porque te has entrenado en la implementación estándar).

0 votos

@MyUserIsThis ver ediciones. Passerby también tiene una buena respuesta.

2voto

Buu Nguyen Puntos 19391

Como nota inicial, no hay nada exclusivamente "cuántico" en los operadores no conmutativos o en la formulación de la mecánica en un espacio de Hilbert, como demuestra la mecánica de Koopman-von Neumann, y no hay nada exclusivamente "clásico" en una representación de la mecánica en coordenadas de un espacio de fase, como demuestra la formulación de la teoría cuántica de Groenewold y Moyal.

Sin embargo, existe una diferencia fundamental entre las teorías cuánticas y las clásicas. Hay muchas maneras de intentar destilar esta diferencia, ya sea vista como no localidad, incertidumbre o el problema de la medición, la mejor manera de aislar lo que las distingue que he escuchado es esta:

La mecánica cuántica trata de cómo interactúan la fase y la amplitud de la probabilidad. Esto es lo que falta fundamentalmente en las formulaciones del espacio de Hilbert de la mecánica clásica, donde las ecuaciones de evolución de la fase y la amplitud están totalmente desacopladas. Es esta interacción fase-amplitud la que nos da el comportamiento onda-partícula, la difracción de los electrones en el experimento de las dos rendijas y, por tanto, una motivación fácil (y probablemente la vía de entrada más común) para la mecánica cuántica. Esta interacción fase-amplitud es también fundamental para entender las variables canónicamente conjugadas y el problema de la incertidumbre.

Creo que si se adopta este enfoque, la necesidad de una teoría física diferente puede justificarse inicialmente con mayor facilidad por la interferencia de una sola partícula, lo que lleva a los puntos mencionados anteriormente.

2voto

Neville Puntos 21

Sí, me parece una buena idea, pero de todos modos voy a proponer una alternativa que se me acaba de ocurrir.

Si se tiene acceso a las puertas lógicas, se pueden mapear muchas n botones para ceil(log2(n + 1)) pines a través de la lógica booleana. Como ejemplo, si tienes 4 botones, pero solo 2 pines puedes crear una configuración como esta:

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

Eso es, button0 presionado debe tener pin0 y pin1 bajo; button1 , pin0 bajo y pin1 alto; button2 , pin0 alto un pin1 bajo; y button3 , pin0 y pin1 alto.

De aquí surgirían las siguientes expresiones booleanas

pin0 = button2 OR button3
pin1 = button1 OR button3

De este modo, se puede realizar un mapeo de 4 botones a 2 pines con sólo 2 puertas OR. Sin embargo, se necesitaría un pin adicional y algo de lógica adicional para indicar si se está pulsando algún botón.

Por supuesto, seguirá habiendo problemas si se pulsan varios botones simultáneamente.

Además, si sigues utilizando el método de las resistencias, considera la posibilidad de utilizar valores más grandes en las resistencias que no sean de 100 ohmios, ya que 5 V a través de resistencias del orden de 100s de ohmios produciría una corriente del orden de 10s de mA, que es algo innecesariamente alto. Supongo que valores más razonables serían 10k Ohm o 47k Ohm.

0 votos

Gracias por su enfoque. Yo también pensé en algo así, pero no tengo puertas lógicas y tengo toneladas de resistencias. Y sí, suelo usar resistencias de 10k para esto, 100 ohmios era sólo el valor por defecto del editor de circuitos. Gracias de nuevo por tu ayuda.

0 votos

Creo que finalmente utilizaré el enfoque de las resistencias, ya que no tendré que comprar puertas lógicas, además su enfoque lógico me ahorra sólo 1 pin y no lo necesito. Aunque lo tendré en cuenta para proyectos más grandes. Muchas gracias.

0 votos

Muy bien. Buena suerte con tu proyecto.

0voto

JohnnyDeauville Puntos 11

Si $\pi$ es un $k$ -partición de $[n]$ , dejemos que $m_0(\pi),\dots,m_{k-1}(\pi)$ sean los elementos máximos del $k$ partes de $\pi$ en orden descendente, por lo que necesariamente $m_0(\pi)=n$ . Eliminación de los enteros $\{1,\dots,m_{k-i}(\pi)\}$ elimina $i$ partes de la partición, dejando $k-i$ partes.

Establecer $m_k(\pi)=0$ y para $i=1,\dots,k$ dejar $a_i(\pi)=m_{i-1}(\pi)-m_i(\pi)\ge 1$ claramente $$a_1(\pi)+\cdots+a_k(\pi)=n$$ es un $k$ -composición de $n$ .

Reclamación: Dejemos que $b_1+\cdots+b_k$ sea cualquier $k$ -composición de $n$ ; luego hay $1^{b_1-1}\cdot2^{b_2-1}\cdot\ldots\cdot k^{b_k-1}$ $k$ -particiones $\pi$ de $[n]$ tal que $a_i(\pi)=b_i$ para $i=1,\dots,k$ .

Como ejemplo, tomemos $n=5,k=3$ y la composición $1+2+2=5$ . Que $3$ -particiones $\pi$ de $[5]$ tienen $a_1(\pi)=1,a_2(\pi)=2$ y $a_3(\pi)=2$ ? Para tal $\pi$ debemos tener $m_0(\pi)=5$ , $m_1(\pi)=5-1=4$ y $m_2(\pi)=4-2=2$ . Con un poco de trabajo encontramos que las particiones en cuestión son $$\begin{align*} &\big\{\{1,3,4\},\{2\},\{5\}\big\},\\ &\big\{\{1,3,5\},\{2\},\{4\}\big\},\\ &\big\{\{1,2\},\{3,4\},\{5\}\big\},\\ &\big\{\{1,2\},\{3,5\},\{4\}\big\},\\ &\big\{\{1,4\},\{3,5\},\{2\}\big\},\text{ and}\\ &\big\{\{1,5\},\{3,4\},\{2\}\big\}, \end{align*}$$ por lo que sí hay $1^{1-1}\cdot2^{2-1}\cdot3^{2-1}$ de ellos.

Prueba de reclamación: Supongamos, ahora, que $b_1+\cdots+b_k$ es un $k$ -composición de $n$ . Para que un $k$ -partición $\pi$ de $[n]$ para satisfacer la condición de que $a_i(\pi)=b_i$ para $i=1,\dots,k$ debe cumplir la condición de que $m_i(\pi)=m_{i+1}(\pi)+b_{i+1}$ para $i=0,\dots,k-1$ (donde ponemos $m_k(\pi)=0$ ).

En particular, $m_{k-1}=b_k$ , por lo que hay $b_k-1$ enteros positivos menores que $m_{k-1}$ claramente cada uno de ellos puede entrar en cualquiera de los $k$ partes de $\pi$ . Hay $b_{k-1}-1$ enteros positivos menores que $m_{k-2}$ y mayor $m_{k-1}$ ; no pueden ir en la parte cuyo elemento máximo es $m_{k-1}$ pero pueden entrar en cualquiera de los otros $k-1$ partes de de $\pi$ . Y en general hay $b_i-1$ enteros positivos que son menores que $m_{i-1}$ y mayor que $m_i$ cada uno de los cuales puede ir a cualquiera de los $i$ partes de $\pi$ cuyos elementos máximos están en el conjunto $\{m_0(\pi),\dots,m_{i-1}(\pi)\}$ no en ninguna de las partes con elementos máximos más pequeños. Así, estos $n-k$ Los elementos no máximos pueden distribuirse entre los $k$ piezas en

$$\prod_{i=1}^k i^{b_i-1}=1^{b_1-1}\cdot2^{b_2-1}\cdot\ldots\cdot k^{b_k-1}$$

diferentes maneras. $\dashv$

2 votos

Por favor, añade un resumen de lo que contiene el enlace por si alguna vez muere, especialmente cuando está en español y este es un sitio en inglés.

0 votos

Lo siento, puede ser la situación normal que en España es normal para referirse a una publicación Inglés ... Pero el enlace es muy interesante, dice como construir un teclado de 10 teclas usando solo un pin con descripción fotográfica paso a paso, los diagramas para hacer un tablero y una imagen para hacer la tapa de los botones. También el código para manejar el teclado, fácil de entender. Buen desarrollo creo yo.

0 votos

No es tanto el lado español de las cosas, estoy de acuerdo en que el diagrama es claro, se ve bien y puedo resolver de qué se trata sólo en base a eso. Pero Stack Exchange desaconseja las respuestas sólo con enlaces porque no son útiles si el enlace muere, imagínate si ese blog se cierra / borra mañana lo útil que sería la respuesta. Tal vez podrías incluir el esquema y una o dos frases sobre él y dejar sólo el enlace como referencia para más información.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X