¿Qué es un teclado matricial y cómo funciona un teclado matricial?
El teclado matricial o keypad en inglés es un dispositivo de entrada de datos formado por 16 teclas o botones dispuestos en forma de 4 filas por 4 columnas.
Si vamos a la hoja del fabricante (datasheet) podemos observar la matriz de conexiones del keypad.
Con el esquema anterior podemos entender la forma en la que nuestra placa compatible con Arduino detecta qué botón se ha pulsado.
La placa introducirá 5V de forma secuencial para las filas (8, 7, 6, 5) y luego para cada fila hacemos la lectura de las columnas (4, 3, 2, 1) para ver si hay alguna en HIGH al pulsarse el botón.
Por ejemplo, para la primera fila:
Pondríamos 5V en la fila número 8 y entonces leeríamos las columnas para ver si alguna está en HIGH. Y así de manera secuencial para cada fila.
En nuestro caso las conexiones las realizamos como se indica en la siguiente tabla:
Filas y columnas | Pin |
Fila 1 | 9 |
Fila 2 | 8 |
Fila 3 | 7 |
Fila 4 | 6 |
Columna 1 | 5 |
Columna 2 | 4 |
Columna 3 | 3 |
Columna 4 | 2 |
Esquema de montaje del teclado matricial con Arduino:
La señal de entrada a la placa compatible con Arduino vendrá dada por cada una de las teclas de teclado matricial.
El hecho de que sea matricial significa que el teclado estará organizado por filas y por columnas de tal manera que cada par de valores (Xi , Yj) referentes a cada fila y columna, estará asociado a cada una de las teclas.
Esta relación de cada par de valores ( Xi , Yj ) con cada tecla la realizaremos mediante la librería keypad, vamos a estudiar esto más en detalle en el siguiente apartado dedicado a la programación.
PROGRAMACIÓN DE UN TECLADO MATRICIAL CON ARDUINO:
Acabamos de ver cómo funciona un teclado matricial así como su diagrama de conexión. Para entender cómo vamos a programarlo simplemente recordar que entendíamos dicho teclado como una matriz donde al detectar la pulsación en la columna X y la fila Y sabíamos que se había pulsado la tecla (X , Y).
Existe la posibilidad de realizar la programación sin librería, pero nosotros vamos a hacerlo utilizando la libería keypad, ya que esto nos simplifica mucho el código y es lo más habitual.
Para hacerlo práctico, vamos a trabajar en base al siguiente ejemplo:
Cómo intercambiar la posición de un servo SG90 al introducir un “password” en el teclado matricial.
Esto lo podríamos utilizar en un proyecto como cerrojo con código de una caja fuerte, donde el servo SG90 nos haría el papel de cerradura al moverse alternativamente entre dos posiciones, abierto-cerrado.
Lo primero: Instalar las librerías.
¿Cómo las instalamos? Vamos a
Herramientas > Administar bibliotecas
Aparecerá el gestor de Librerías.
Escribimos en la búsqueda “Keypad” y luego “Servo”. Las buscamos y las instalamos.
Y ahora sí, vamos a estudiar el código:
Programa teclado matricial (Programa IDE Arduino):
Las explicaciones de cada línea de código estan tras la doble barra / / (esto hace transparente al IDE estas aclaraciones, por tanto puedes copiar y pegar así el código 😉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
/*InputMakers Proyecto de la caja fuerte: controlaremos la apertura y cierre de la caja fuerte con el teclado matricial, introduciendo el password: 1 A. El servo SG90 hará la función de cerradura al variar su posición. */ #include <Keypad.h> // Incluimos la librería Keypad. #include <Servo.h> // Incluimos la librería Servo. const byte FILAS = 4; // Número de filas del keypad. const byte COLUMNAS = 4; // Número de columnas del keypad. /* Mediante un array de 2 dimensiones definimos los símbolos que corresponden a cada posición de las teclas. */ char teclado[FILAS][COLUMNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte pinFilas[FILAS] = {9, 8, 7, 6}; // Array de una dimensión para definir los pines en los que estan conectadas las filas. byte pinColumnas[COLUMNAS] = {5, 4, 3, 2}; // Array de una dimensión para definir los pines en los que estan conectadas las columnas. /* A continuación creamos una instancia de tipo Keypad que llamamos keypad1 y le asignamos las teclas del array teclado. Le indicamos que hemos conectado las FILAS del keypad a los números de los pines que hemos indicado en el array pinFilas y las COLUMNAS del keypad a los números de los pines que hemos indicado en el array pin Columnas. */ Keypad keypad1 = Keypad( makeKeymap(teclado), pinFilas, pinColumnas, FILAS, COLUMNAS ); // Creamos el servomotor con el nombre servo1. Servo servo1; // Variable para guardar la posición del servo. int posicion = 0; void setup() { // Asignamos el pin 10 al servomotor. servo1.attach(10); // Posicionamos el servo al conectar la placa a su posición 0 (puerta cerrada). servo1.write(0); } void loop() { // Leemos la tecla pulsada de keypad. char key = keypad1.getKey(); if (key == '1'){ // Si pulsamos la tecla '1', buscamos la confirmación A. do{ key = keypad1.getKey(); } while(key != 'A'); // Si la posición es 0 (puerta cerrada) entonces abrimos la puerta. if(posicion == 0){ servo1.write(65); posicion = 65; } // Si la posición es 65 (puerta abierta) entonces cerramos la puerta. else if(posicion == 65){ servo1.write(0); posicion = 0; } delay(300); } } |
Podéis adquirir el proyecto CAJA FUERTE relacionado con este post, que te servirá para ampliar tus conocimientos sobre manejo del teclado matricial y el servo SG90, si te ha gustado este post NO TE LO PIERDAS!!
IMPORTANTE: OFRECEMOS GRANDES DESCUENTOS PARA CENTROS EDUCATIVOS! SI ERES UN CENTRO EDUCATIVO PIDE PRESUPUESTO PERSONALIZADO AQUÍ
[product_page id=”267″]
Saludos del equipo de InputMakers y ¡sigue siempre aprendiendo!
No olvides compartir si te ha gustado: