Matriz de botones arduino

Teclado Arduino

¿Por qué el teclado está dispuesto y conectado como una matriz? Esto hace que el proceso de escaneo sea complicado. ¿Por qué no usar cada tecla como un botón independiente, entonces el estado de la tecla se determina simplemente leyendo el estado de un botón?

⇒ Como sabemos, un botón independiente requiere un pin de Arduino y GND. Tomemos como ejemplo el teclado 4×4. Si cada tecla es un botón independiente, requiere 16 pines de Arduino para 16 teclas más el pin GND. Si organizamos una tecla conectada en forma de matriz, sólo tenemos que utilizar 8 pines de Arduino, por lo que podemos ahorrar pines de Arduino. En resumen, la respuesta es: ahorrar los pines de Arduino.

Arduino pro micro teclado matriz

El uso de un teclado es una mejora sobre el uso de botones para la entrada en su proyecto Arduino. En realidad, un teclado es un conjunto de 12 o 16 botones cableados de manera que se reduce el uso de pines. En este tutorial, voy a explicar cómo funciona una matriz de teclado y cómo usarlo con un Arduino.

Una matriz de teclado 4×4 tiene 8 pines divididos en 4 filas y 4 columnas. Cuando se pulsa un botón, un pin de la fila se cortocircuita con un pin de la columna. Por ejemplo, si se pulsa el botón «1», la fila «0» se conectará con la columna «0».

Ahora para poder hacer funcionar la matriz del teclado con un Arduino, sólo tenemos que comprobar qué fila y qué columna están conectadas. Esto puede parecer fácil pero no lo es. La forma más común de implementar esto es haciendo que un pin de la columna esté alto mientras que el resto de las columnas estén bajas y hacer eso en secuencia como un perseguidor de LEDs.

Considere la primera imagen (arriba a la izquierda) en el panel de arriba donde la columna «0» está alta y el resto de las columnas están bajas. Si pulsas el botón «1», la fila «0» estará alta porque para entonces estará conectada a la columna «0». Así que si escaneas la fila «0» usando digitalWrite() mientras la columna «0» está alta, esto significa que el usuario presionó el botón «1». Para detectar cada botón que se presiona, también necesitamos escanear cada fila individualmente. Así que básicamente, se puede resumir el proceso así:

Ejemplo de teclado Arduino

He utilizado «teclados» para Arduino en el pasado, pero sólo numéricos y con tal vez 9 o 16 botones, nada más. En este tutorial os mostraré cómo he hecho esta PCB, cómo funciona para detectar los 40 botones y cómo será la salida en serie. Una vez que tengamos el teclado podremos enviar a cualquier microcontrolador cualquier carácter en minúsculas, mayúsculas, números y caracteres especiales como signo de interrogación, exclamación, etc. Espero que os guste este proyecto y quizás os sirva para vuestros proyectos en los que necesitéis un teclado alfabético completo.

La lista es muy corta. Ver la lista completa aquí en este enlace. Todo lo que necesitamos es la placa de circuito impreso, que en mi caso he hecho utilizando los servicios de JLCPCB, y luego el microcontrolador ATmega328, el cristal de 16Mhz, algunos condensadores y resistencias y un LED. Por último necesitamos 41 de esos pulsadores blandos de silicona. Estoy usando estos botones porque son más fáciles de pulsar y no hacen «clic». La salida de la PCB será una salida en serie, y para ello sólo necesitamos unos cables finos. Para programar la placa se utiliza el programador FTDI. Ver todas las partes abajo.

Matriz de botones Arduino 4×4

Al hacer la entrada de la matriz de NxM columnas / filas con botones, debe haber un diodo al lado de cada botón para evitar el «ghosting» y capaz de leer muchas teclas pulsadas juntos correctamente. Hay muchas imágenes por todas partes.

Para estar en el lado seguro, me gustaría también añadir resistencias en cada pin para asegurarse, que una mala programación (hacer algún pin de entrada OUTPUT y HIGH y presionando la tecla conectarlo a la salida LOW en el otro lado) no podría dañar los circuitos, por lo que parece 5 V/20 mA = 250 Ω (y voy a esperar que no golpearía más pines, por lo que no consideraría las limitaciones totales del puerto / chip).

Si el diodo sería teórico e ideal, entonces hay (en el peor de los casos) prometió ser máximo 1,2 V en la entrada, que es ligeramente inferior a la tensión «máxima baja» (1,5 V) y como 5V/2 kΩ = 2,5 mA de corriente.

Así que probablemente no puedo usar simplemente INPUT_PULLUP (ya que puede funcionar por suerte, pero no está garantizado por las especificaciones), pero tengo que usar INPUT y establecer algún pullup más alto allí para «quemar» más voltios en él para compensar el diodo.

Usamos cookies para asegurar que le damos la mejor experiencia en nuestra web. Si continúa usando este sitio, asumiremos que está de acuerdo con ello. Nuestros socios (incluye a Google) podrán compartir, almacenar y gestionar sus datos para ofrecerle anuncios personalizados    Más información
Privacidad