Tabla de contenido:

Use 1 entrada analógica para 6 botones para Arduino: 6 pasos
Use 1 entrada analógica para 6 botones para Arduino: 6 pasos

Video: Use 1 entrada analógica para 6 botones para Arduino: 6 pasos

Video: Use 1 entrada analógica para 6 botones para Arduino: 6 pasos
Video: Comunicación ARDUINO y LabVIEW #6 | Entrada Analogica 2024, Mes de julio
Anonim
Utilice 1 entrada analógica para 6 botones para Arduino
Utilice 1 entrada analógica para 6 botones para Arduino

A menudo me he preguntado cómo podría obtener más entradas digitales para mi Arduino. Recientemente se me ocurrió que debería poder usar una de las entradas analógicas para incorporar múltiples entradas digitales. Hice una búsqueda rápida y encontré dónde las personas podían hacer esto, pero que solo permitían presionar un solo botón a la vez. Quiero poder tener cualquier combinación de botones para presionar SIMULTÁNEAMENTE. Entonces, con la ayuda de TINKERCAD CIRCUITS, me propuse hacer que esto sucediera.

¿Por qué querría presionar botones simultáneamente? Como se ilustra en el diseño de TinkerCad Circuits, podría usarse para entradas de interruptores DIP para la selección de diferentes modos dentro del programa.

El circuito que se me ocurrió usa la fuente de 5V disponible en Arduino y usa 7 resistencias y 6 botones o interruptores.

Paso 1: el circuito

El circuito
El circuito

Los Arduino tienen entradas analógicas que aceptan una entrada de 0V a 5V. Esta entrada tiene una resolución de 10 bits, lo que significa que la señal se divide en 2 ^ 10 segmentos, o 1024 cuentas. En base a esto, lo máximo que podríamos ingresar en una entrada analógica mientras permitimos presionar simultáneamente sería 10 botones por 1 entrada analógica. Pero este no es un mundo perfecto. Hay resistencia en los conductores, ruido de fuentes externas y potencia imperfecta. Entonces, para darme mucha flexibilidad, planeé diseñar esto para 6 botones. Esto fue, en parte, influenciado por el hecho de que TinkerCAD Circuits tenía un objeto DIP Switch de 6 interruptores, lo que facilitaría las pruebas.

El primer paso en mi diseño fue asegurarme de que cada botón, cuando se presiona individualmente, proporciona un voltaje único. Esto descartó que todas las resistencias tuvieran el mismo valor. El siguiente paso fue que los valores de resistencia, cuando se agregan en paralelo, no pueden tener la misma resistencia que cualquier valor de resistencia individual. Cuando las resistencias están conectadas en paralelo, la resistencia resultante se puede calcular mediante Rx = 1 / [(1 / R1) + (1 / R2)]. Entonces, si R1 = 2000 y R2 = 1000, Rx = 667. Especulé que al duplicar el tamaño de cada resistencia, no vería la misma resistencia para ninguna de las combinaciones.

Entonces, mi circuito hasta este punto debía tener 6 interruptores, cada uno con su propia resistencia. Pero, se requiere una resistencia más para completar este circuito.

La última resistencia tiene 3 propósitos. Primero, actúa como una resistencia Pull-Down. Sin la resistencia, cuando no se presiona ningún botón, el circuito está incompleto. Esto permitiría que el voltaje en la entrada analógica de Arduino flote a cualquier voltaje potencial. Una resistencia pull-down esencialmente reduce el voltaje a 0 V. El segundo propósito es limitar la corriente de este circuito. La ley de Ohm establece que V = IR o Voltaje = Corriente multiplicada por Resistencia. Con una fuente de voltaje dada, cuanto mayor sea la resistencia significa que la corriente será menor. Entonces, si se aplica una señal de 5V a una resistencia de 500ohm, la corriente más grande que podríamos ver sería 0.01A o 10mA. El tercer propósito es proporcionar el voltaje de la señal. La corriente total que fluye a través de la última resistencia sería: i = 5V / Rtotal, donde Rtotal = Rlast + {1 / [(1 / R1) + (1 / R2) + (1 / R3) + (1 / R4) + (1 / R5) + (1 / R6)]}. Sin embargo, solo incluya 1 / Rx para cada resistencia que tenga su botón correspondiente presionado. De la corriente total, el voltaje suministrado a la entrada analógica sería i * Rlast o i * 500.

Paso 2: Prueba - Excel

Prueba - Excel
Prueba - Excel

La forma más rápida y sencilla de demostrar que obtendría resistencias únicas y, por lo tanto, voltajes únicos con este circuito era utilizar las capacidades de Excel.

Configuré todas las combinaciones posibles de entradas de interruptor y las organicé secuencialmente siguiendo patrones binarios. Un valor de "1" indica que el interruptor está encendido, el blanco indica que está apagado. En la parte superior de la hoja de cálculo, puse los valores de resistencia para cada interruptor y para la resistencia desplegable. Luego calculé la resistencia equivalente para cada una de las combinaciones, excepto cuando todas las resistencias están apagadas, ya que estas resistencias no tendrán un efecto sin tener una fuente de alimentación que las suministre. Para facilitar mis cálculos y poder copiar y pegar en cada combinación, incluí todas las combinaciones en el cálculo multiplicando cada valor de interruptor (0 o 1) por su valor de resistencia invertido. Hacerlo eliminó su resistencia del cálculo si el interruptor estaba apagado. La ecuación resultante se puede ver en la imagen de la hoja de cálculo, pero Req = Rx + 1 / (Sw1 / R1 + Sw2 / R2 + Sw3 / R3 + Sw4 / R4 + Sw5 / R5 + Sw6 / R6). Usando Itotal = 5V / Req, determinamos la corriente total a través del circuito. Esta es la misma corriente que pasa a través de la resistencia pull-down y nos proporciona el voltaje a nuestra entrada analógica. Esto se calcula como Vin = Itotal x Rx. Al examinar tanto los datos de Req como los de Vin, podemos ver que, de hecho, tenemos valores únicos.

En este punto, parece que nuestro circuito funcionará. Ahora para descubrir cómo programar el Arduino.

Paso 3: programación de Arduino

Programación Arduino
Programación Arduino
Programación Arduino
Programación Arduino
Programación Arduino
Programación Arduino

Cuando comencé a pensar en cómo programar el Arduino, inicialmente planeé configurar rangos de voltaje individuales para determinar si un interruptor estaba encendido o apagado. Pero, mientras estaba acostado en la cama una noche, se me ocurrió que debería ser capaz de encontrar una ecuación para hacer esto. ¿Cómo? SOBRESALIR. Excel tiene la capacidad de calcular ecuaciones para ajustar mejor los datos en un gráfico. Para hacer esto, querré una ecuación del valor entero de los interruptores (binario) versus la entrada de voltaje correspondiente a ese valor. En mi libro de Excel, puse el valor entero en el lado izquierdo de la hoja de cálculo. Ahora para determinar mi ecuación.

Aquí hay un tutorial rápido sobre cómo determinar la ecuación de una línea dentro de Excel.

1) Seleccione una celda que no contenga ningún dato. Si ha seleccionado una celda que tiene datos, Excel intentará adivinar qué es lo que desea marcar como tendencia. Esto hace que sea mucho más difícil establecer una tendencia, porque Excel rara vez predice correctamente.

2) Seleccione la pestaña "Insertar" y seleccione un gráfico de "Dispersión".

3) Haga clic derecho en el cuadro del gráfico y haga clic en "Seleccionar datos …". Aparecerá la ventana "Seleccionar fuente de datos". Seleccione el botón Agregar para continuar seleccionando los datos.

4) Déle un nombre de serie (opcional). Seleccione el rango para el eje X haciendo clic en la flecha hacia arriba y luego seleccionando los datos de voltaje. Seleccione el rango para el eje Y haciendo clic en la flecha hacia arriba y luego seleccionando los datos enteros (0-63).

5) Haga clic con el botón derecho en los puntos de datos y seleccione "Agregar línea de tendencia …" En la ventana "Formato de línea de tendencia", seleccione el botón Polinomio. Al observar la tendencia, vemos que el orden de 2 no coincide del todo. Seleccioné una Orden de 3 y sentí que esto era mucho más preciso. Seleccione la casilla de verificación "Mostrar ecuación en el gráfico". La ecuación final ahora se muestra en el gráfico.

6) Hecho.

está bien. De vuelta al programa Arduino. Ahora que tenemos la ecuación, programar el Arduino es fácil. El número entero que representa las posiciones del interruptor se calcula en 1 línea de código. Al usar la función "bitread", podemos tomar el valor de cada bit individual y así conocer el estado de cada botón. (VER FOTOS)

Paso 4: Circuitos TinkerCAD

Circuitos TinkerCAD
Circuitos TinkerCAD

Si no ha revisado TinkerCAD Circuits, hágalo ahora. ¡¡¡¡ESPERE!!!! Termina de leer mi Instructable y luego échale un vistazo. TinkerCAD Circuits hace que probar circuitos Arduino sea muy fácil. Incluye varios objetos eléctricos y Arduinos, lo que le permite incluso programar el Arduino para realizar pruebas.

Para probar mi circuito, configuré 6 interruptores usando un paquete de interruptores DIP y los até a las resistencias. Para demostrar que el valor de voltaje en mi hoja de cálculo de Excel era correcto, mostré un voltímetro en la entrada del Arduino. Todo esto funcionó como se esperaba.

Para demostrar que la programación de Arduino funcionó, envié los estados de los interruptores a los LED, utilizando las salidas digitales de Arduino.

Luego cambié cada interruptor para cada combinación posible y estoy orgulloso de decir "FUNCIONA" !!!

Paso 5: "Hasta luego, y gracias por todos los peces". (ref.1)

Todavía tengo que probar esto con equipo real, ya que actualmente viajo por trabajo. Pero, después de probarlo con TinkerCAD Circuits, creo que funcionará. El desafío es que los valores de las resistencias que he especificado no son todos los valores estándar para las resistencias. Para evitar esto, planeo usar potenciómetros y combinaciones de resistencias para obtener los valores que necesito.

Gracias por leer mi instructable. Espero que te ayude con tus proyectos.

Deje comentarios si ha intentado abordar este mismo obstáculo y cómo lo ha resuelto. Me encantaría aprender más formas de hacer esto.

Paso 6: referencias

No pensaste que te proporcionaría una cita sin proporcionar una referencia a su fuente, ¿verdad?

árbitro. 1: Adams, Douglas. Hasta luego y gracias por todos los pescados. (El cuarto libro de la "trilogía" de la Guía del autoestopista galáctico)

Recomendado: