TECLADOS ANALÓGICOS.

TECLADOS ANALÓGICOS.

Introducción.

El tema de los teclados no es nada nuevo es un tema recurrente que ya ha sido tratado en muchas páginas web y también en estas páginas, como podemos comprobar en teclado con lcd, pulsadores sin rebotes entre otros, sin embargo, en este caso vamos a abordar el tema desde el lado de los valores analógicos. Cuando trazamos un proyecto con un teclado, importa el tamaño del array aunque, habitualmente pensamos en un puerto de entradas digitales. Pues bien, en este caso optaremos por otra posible solución, las entradas analógicas.

Como debe saber, los pines de entrada analógica del Arduino pueden leer una tensión entre 0 y 5 voltios de corriente continua, puesto que el microcontrolador de Arduino, tiene una resolución máxima de 10 bits que, cuya lectura nos devolverá el valor de un entero entre 0 y 1023. Por lo tanto, mediante un sencillo circuito pasivo externo llamado «R-2R», podemos derivar una tensión a través de una o más resistencias, alterando el voltaje a leer por el pin analógico.

Cada pulsación de botones teóricamente causará una tensión única ha medir que, entonces podemos interpretar en nuestro boceto Arduino y tomar decisiones basadas en el botón pulsado. Con este artículo se demostrará que se pueden leer muchos pulsadores, utilizando sólo un pin de entrada analógica.

Este procedimiento, nos permitirá reservar los pins de E/S digitales para otros usos, como módulos LCD, etc. Puesto que podemos leer varios pulsadores conectados a un único pin analógico, decidí abordar este tema; por ese motivo he decidido realizar este artículo. Es de esperar que usted tenga alguna experiencia sobre los ejemplos que utilizan la función analogRead() que suele acompañar los IDE de Arduino, sobre todo el uso de un conjunto de resistencias en serie como teclado o en su caso un potenciómetro por distintos motivos.

Use ~EVQ-PAC05R, EVQ-PAD05R, EVQ-PAE05R, EVQ-PAG05R~LEGS ledrojo2led_verde
herrams pinzas1 cables1
placa_perforada_tiras lcd2004a-

Fig. 1

El Pin analógico.

De todos es sabido que un pin analógico puede leer los diferentes valores de tensión aplicados a su entrada. De forma similar a un potenciómetro conectado entre +5V y GND, cuando la resistencia del potenciómetro disminuye, el valor devuelto se leerá por analogRead(), al igual que cuando aumenta. De esto, se desprende que, aplicado a un teclado, ha de presentar una tensión única, para diferenciar cada pulsador o tecla presionada, pero no simultánea (como la detección de múltiples botones pulsados).

Esto, nos va a servir para realizar un teclado con varios pulsadores o teclas, que presentarán una tensión diferenciada para cada tecla; mediante la lectura de esta tensión, podemos saber que pulsador se ha presionado en cada momento. Por supuesto que se puede construir un teclado con una cantidad de tecla y de formas, aquí veremos sólo algunas de las posibles.

Vamos a realizar una práctica que, nos muestre la capacidad que tiene una entrada analógica. Para lo cual, necesitaremos 5 pulsadores estándar normalmente abiertos, los vamos a disponer en una particular forma que, intuitivamente nos indique lo que sucederá al presionar cada uno. Claro, cada usuario los puede disponer en la forma que considere mejor, en mi caso los puse siguiendo una lógica, es decir, ARRIBA, DERECHA, ABAJO, IZQUIERDA y ACEPTAR, ya que de alguna forma indican la dirección en la que se prevé que han de reaccionar las pulsaciones (a modo de un «JOYSTICK»), esquemas y disposición en las figuras.

teclado5r teclado5s3
teclado5sh0p

Fig. 2

Los dos primeros esquemas, son dos formas de conseguir un mismo propósito. Se puede apreciar que las resistencias están dispuestas en serie y entre dos de ellas se conecta un pulsador.

teclado5c teclado5e teclado5
Fig. 3

El valor de las resistencias es muy aproximado y para mayor precisión (si es posible), deberían utilizarse del 1%. En los ejemplos 1 y 3, al presionar un botón, pondrá la suma de resistencias en serie (Ra) por un lado con la suma en serie (Rb) del resto de resistencias, formando un divisor de tensión de valor diferente según el botón presionado.

En cuanto al tercer esquema, es fácil de leer y aparentemente más sencillo, pero no tiene la precisión necesaria. Utilizaremos el esquema de la figura 3, ya que las 5 resistencias son del mismo valor 3k3Ω. La formula para los cálculos viene siendo la misma, al tratarse de divisores de tensión.

 La cadena de divisores, entrega una tensión de referencia diferente, dependiendo de que botón se pulsa. En el punto A0, al pulsar el botón ‘Abajo’ obtendremos los valores calculados del divisor de tensión, para la entrada del puerto analógico. Ahora, el código es el que hará el trabajo ‘duro’, vemos como queda el teclado.

teclado5sh teclado5sh
teclado5sh01

Fig. 4

Analicemos el presente circuito; si no se pulsa ningún botón el voltaje o nivel en A0 será 0V, por lo tanto, en estas circunstancias, las resistencias no tienen ningún efecto, de modo que, la lectura en el pin analógico A0, estará en valor 0. El orden de los nombres de los pulsadores no es determinante hasta el momento de asignar el código y posterior montaje.

Supongamos que se pulsa el botón Izquierda., el divisor formado por R5 y la suma de R4 a R1, al que aplicamos la formula vista anteriormente, nos entrega una tensión de cerca de 4V que, es lo que esperábamos. Si comprobamos el resto de pulsadores, veremos que las tensiones se diferencian entre sí, en caso de utilizar más pulsadores lo que puede interesar es la exactitud y se deberá buscar valores para R de más precisión y valores concretos.

Es decir, según los valores de las resistencias la función analogRead() devolverá valores de tensión concretas, cada lectura de voltaje por analogRead() nos mostrará su valor particular para ese pulsador o tecla.

El siguiente es otro ejemplo de construcción, he incluido los valores de las R, como se puede apreciar la tensión de alimentación es de 5V.

teclado5-32Fig. 5

La matriz que forma el teclado, es un divisor de tensiones, por lo que necesitaremos conocer los valores que se obtienen en cada unión. El siguiente es un pequeño programa que nos sirve para conocer dichos valores que se mostraran en el LCD. Posteriormente, usaremos estos valores para conocer el pulsador que se haya presionado en el teclado. Para utilizar la pantalla LCD numérica, necesitaremos la biblioteca LiquidCrystal, que viene como parte de la distribución oficial de Arduino.

Capturar valores de un sensor.

Código de ejemplo del programa que captura valores que lee un sensor. Observar que A0 se ha activado el RPB.

 Usando un LCD y su librería LiquidCrystal, un ejemplo simple de captura valores en el que calibramos un sensor X, para conocer los parámetros que está leyendo. Con digitalWrite(A0, HIGH) se ha activado la RPB (resistencia de puesta a bajo o pull-down), para evitar lecturas falsas. Al pulsar un botón, se muestra un valor, dicho valor será el que nos indique que pulsador ha sido presionado. Vemos en este modelo, los valores en tensión que aplicaremos al pin analógico que deseemos. Este es el circuito funcionando:

teclado5sh0aFig. 6

Como puede ver, si no se pulsa ningún botón el voltaje en A0 será considerado 0V. En esa situación, ninguna de las resistencias tienen ningún efecto en absoluto, y la lectura analógica en A0 será firme en el límite inferior de 0. Por lo tanto, si realiza una llamada a A0 analogRead () y devuelve 0 (o cualquier valor por debajo de 100 o alrededor 0) usted considerará que no hay botones pulsados.

teclado5p0Fig. 7

Ahora considere lo que ocurre si se pulsa el botón «ABAJO». Se presenta en A0 con una tensión que está dividida entre la resistencia de 2K2 que está tratando de tirar de ella hasta 5V, y las resistencias en serie de 2K2 y 220R que están tratando de tirar hacia abajo a 0V. El voltaje presentado a A0 en ese caso se trata de 2.03V, lo que significa que si realiza una lectura analogRead () en A0, devolverá un valor de alrededor de 220. Así que si usted lee un valor de aproximadamente 220 de A0 reconoce que se presiona el botón «ABAJO».

El mismo principio se aplica para los otros botones, con las tensiones y los valores analogRead () equivalente que se muestran en el esquema de arriba. Esta es una clara forma de proporcionar un conjunto de botones de entrada, mientras que sólo uso de uno de los pines de E/S en la placa Arduino, dejando más pines libre para su uso en su proyecto.

En este ejemplo, resalto en rojo, las líneas de mayor relevancia, para nuestro proyecto, como veremos y son:

 Respete los valores de las resistencias del montaje, copie, pegue, guarde este código con un nombre y lo carga al Arduino, le mostrará distintos valores, al pulsar los botones. Realizaremos una tabla con los valores leídos; en una columna el valor mínimo leído y en otra columna el máximo, dicho valor estará entre dos márgenes mínimo y máximo. Ahora, nos queda aplicar estos valores al código de nuestro teclado, y comprobar que funciona.

Teclado analógico.

Código de ejemplo del programa de un teclado, con cinco pulsadores conectados a un sólo pin analógico.

Este es un ejemplo que puede servir como referencia a sus proyectos, siéntase libre de copiar y modificar cualquier parte del código o su contenido, en todo caso, haga referencia a su procedencia.

Si observa que pierde contraste y brillo de fondo en su pantalla LCD, tal vez esté alimentando su Arduino mediante el cable USB, en ese caso, se recomienda utilizar una fuente de alimentación externa al Arduino, entre 7 y 9VCC. Habitualmente se puede encontrar ante una baja tensión, lo que se traduce en que una línea del LCD muestra rectángulos oscuros en lugar de los típicos caracteres, además en la siguiente línea no mostrará nada. Es probable, que el programa siga funcionando; normalmente el microcontrolador es capaz de funcionar con escasos 4 Voltios, en contra la pantalla LCD necesita los 5Voltios.

Los pulsadores los puede disponer en un práctico y habitual patrón conocido como ARRIBA, DERECHA, ABAJO, IZQUIERDA y SELECT, siéntase libre de disponerlos a su gusto o su necesidad y qué hace cada botón en concreto. Este es un vídeo que muestra el funcionamiento del teclado. En el mercado existe una extensa gama de ejemplos que nos pueden ayudar a decidir nuestro modelo. A continuación, conectamos los pines de la pantalla LCD y sólo nos falta cargar el código que hemos preparado.

Teclado analógico de 5 pulsadores.

Código de ejemplo del programa que muestra como funciona el teclado analógico.

 Una vez más, copie el código y guardelo con un nombre indicativo, subalo al Arduino y compruebe su buen funcionamiento. Realice un montage similar al que se muestra a continuación, usted debe insertar en una protoboard los 5 botones ya comentados, para su uso como entrada de navegación o control, para elegir qué hace el programa cuando se pulsa un botón. Supongo que todo ha ido bien.

esquemapractico5pFig. 8

Este circuito sobre otros similares, tiene una curiosa ventaja que si usted respeta que todos los valores de las resistencias sean iguales entre sí la tensión que entrega en cada divisor es idéntica. Es decir que, si las resistencias son de 10KΩ o 2K2Ω escepto la de masa que en ese caso sería de 1KΩ, los valores aproximados serán: 4.02V, 3.04V, 2.06V, 1.08V y 0.98V esto le da una fiabilidad a la hora de tomar una decisión para realizar este teclado.


Fig. 9 Vídeo.

En el vídeo se ha obviado el teclado ya que lo importante es ver los mensajes del LCD. Con este proyecto resuelto podemos abordar uno nuevo en el que al pulsar las teclas nos movamos por un menú que nos ofrezca distintas opciones a elegir, ese es un proyecto que el lector puede abordar, parece interesante.

Ahora como siempre, si tiene algún comentario o pregunta, exponga su duda y procurare dar respuesta.

2 thoughts on “TECLADOS ANALÓGICOS.”

  1. Súper!! Soy nuevo en el tema con esto se puede aplicar para un teclado 4×4 asignándoles todos las funciones ? Como hago no lo entiendo ..

Responder a Arlesquiceno Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.