Teclado matricial con Arduino. Varios ejemplos

En este proyecto, aprenderemos a utilizar un teclado matricial 4x4 tipo membrana para controlar nuestros proyectos con Arduino.

Básicamente, un teclado es un periférico de entrada que consiste en un conjunto de teclas, las cuales se comportan como interruptores electrónicos que envían información cada vez que se presionan.


Este tipo de teclado consiste en 3 membranas, de allí recibe su nombre. Dos membranas contienen material conductor de electricidad, y en medio de ellas hay una membrana no conductora que sirve para separarlas, la cual contiene un agujero donde va cada botón. Bajo condiciones normales, el interruptor se encuentra abierto porque la corriente no puede circular, pero cuando se presiona una tecla, la membrana de arriba y la de abajo hacen contacto a través del pequeño agujero que hay en la membrana del medio, permitiendo que la corriente circule y se envíe la información.


Que sea un teclado matricial, significa que usa el esquema de una matriz para agrupar los pulsadores, es decir, los organiza en filas y columnas, haciendo que cada pulsador tenga una posición única dentro de la matriz. Esto tiene la ventaja de que se necesiten menos pines del Arduino a la hora de conectar el teclado, pues con este sistema se utiliza un pin por cada fila y un pin por cada columna. En este proyecto utilizaremos un teclado 4x4, esto quiere decir que se utilizarán 8 pines del Arduino cuando lo vayamos a conectar. 


El teclado se conecta a pines digitales del Arduino. Las columnas las conectaremos desde el pin digital 2 hasta el 5, y las filas irán conectadas desde el pin digital 6 hasta el 9, como se ve en el esquema:


Para la programación y uso del teclado, utilizaremos la librería Keypad, la cual puede ser descargada desde el IDE de Arduino. Vamos a Programa > Incluir librería > Gestionar Librerías. Allí se nos abre el gestor de librerías, buscamos: "keypad" y seleccionamos instalar a la que se muestra en la siguiente captura:


Nuestro primer ejemplo consiste en probar el teclado. Se realiza un código sencillo que se encarga de leer la tecla presionada y luego mostrarla en el monitor serie. A veces sucede que las lecturas no coinciden con las teclas que se están presionando, esto pasa cuando se conectan las filas donde van las columnas y viceversa. La prueba del teclado luce así:


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=1iUhNE77gn6B86T7jlcLirlV1Yh56dw5E

Nuestro segundo ejemplo, consiste en utilizar el teclado matricial junto con una pantalla LCD 16x2 con el fin de escribir en ella texto, números y símbolos. La escritura es muy similar a la que se reaizaba en los antiguos celulares donde se presionaba una tecla varias veces para escribir la letra/número/símbolo que se deseaba.

En este ejemplo, no se utiliza ningún delay() ya que esa función "congela" el programa que está ejecutando el Arduino, por lo cual hubiese sido un problema ya que se debe verificar todo el tiempo si se ha presionado alguna tecla. Como reemplazo del delay() utilizamos la función millis(), que consiste en un contador que almacena el tiempo (en milisegundos) transcurrido desde que el Arduino empieza a ejecutar el programa. La función millis() puede comportarse como un delay() pero sin bloquear el programa.

El teclado se conecta a los mismos pines digitales del primer ejemplo, la pantalla LCD la conectaremos a los pines análogos ya que no tenemos más espacio entre los pines digitales. Los pines análogos pueden comportarse como pines digitales sin ningún problema. A pesar de que en los proyectos suelo utilizar un Arduino Mega en donde hay pines de sobra, este lo realicé teniendo en cuenta a las personas que tienen el Arduino UNO, por lo tanto, este proyecto sirve en ambas placas. El esquema de conexiones queda de la siguiente manera (UNO y Mega):


El proyecto en funcionamiento se ve así:


El código de este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=1imBjlPhJK8Fa2ceQ35OvLQcK8X5mlgCx

Comentarios

  1. Gracias por la información :) ahora si entiendo como hacerlo

    ResponderBorrar
  2. ESTA CONECTADO UN POTENCIÓMETRO DE QUÉ VALOR ES?

    ResponderBorrar
  3. Excelente proyecto. Hasta con el mismo teclado del computador se puede hacer.

    ResponderBorrar
    Respuestas
    1. me aparece error compilando el progama en arduino, debo descargar alguna libreria o algo asi

      Borrar
  4. mire ratún, su mierda de código no abre. SALUDOS.

    ResponderBorrar
  5. hola realice todos los pasos que indicas y el teclado me funciona bien, la pantalla energiza y enciende pero al escribir no se muestra nada en la pantalla podrías ayudarme ¿realice algo mal o me faltara algo por hacer?

    ResponderBorrar
    Respuestas
    1. puede ser la direccion fisica de la pantalla lcd(0x3F,16,2); o tambien con 0x27. prueba con eso

      Borrar
    2. ME SUCEDE LO MISMO NO SE EN QUE PARTE DEL CÓDIGO, DEBO CORREGIR :(

      Borrar
  6. ¿Qué tal? Estoy usando una pantalla 4x20, hice los cambios en lcd.begin, pero no funciona, ¿hay algo más que deba realizar?
    ¡Muchas gracias!

    ResponderBorrar
  7. Hola :) Tengo duda, como puedo ingresar un dato con teclado matricial, que se visualice en un lcd y que ese dato lo pueda guardar en una variable para después usarlo y después mostrarlo en la pantalla una vez que lo guarde?

    ResponderBorrar
  8. Hola! Tengo una pregunta, porque los teclado 4x4 vienen con el primer pin y el último vacío?

    ResponderBorrar
  9. hola buenas tardes, una pregunta... como tendría que hacerlo si tengo el lcd conectado a un módulo i2c?

    ResponderBorrar
  10. como podria hacerlo mostrando el mensaje en un DISPLAY MATRICIAL? no encunetro nada sobre eso :(

    ResponderBorrar
  11. como podria hacerlo mostrando el mensaje en un DISPLAY MATRICIAL? no encuentro nada sobre eso :(

    ResponderBorrar
  12. Que valor es la recistencia

    ResponderBorrar
  13. Que valor es la recistencia

    ResponderBorrar
  14. Que valor es la recistencia

    ResponderBorrar

Publicar un comentario