Hola controleros y controleras en el día de hoy vamos a aprender a usar el Teclado Matricial con ARDUINO, y veremos cómo podremos emplear lo aprendido en cualquier tipo de teclado, por ejemplo un teclado matricial 4×4 o un teclado matricial 4×3 Arduino.
Antes de comenzar, te hago la invitación para que veas nuestro CURSO GRATIS DE ARDUINO.
Teclado Matricial Arduino
El teclado matricial es un dispositivo bastante común en proyectos con sistemas microcontrolados como el Arduino y está conformado básicamente por un arreglo de pulsadores distribuidos en forma de matriz, que puede ser leído utilizando pocos pines del Arduino, utilizando el concepto de la multiplexación (el mismo que vimos en la entrada del Display 7 Segmentos con Arduino).
En el mercado podemos encontrar Teclados matriciales de diferentes tamaños, como el teclado matricial 4×4, 3×3, 4×3, entre otros. Estos teclados pueden tener una estructura de membrana o una estructura rigida.
Incorporar Teclados Matriciales a nuestros proyectos con Arduino es bastnate interesante debido a que puede ser empleado en proyectos que requieran la inserción de datos por parte del usuario, como por ejemplo hacer una calculadora con arduino y teclado matricial, pedir una contraseña con arduino, mover un servo con teclado matricial, usar teclas de dirección para un robot, cnc, solicitar parámetros numéricos para nuestros proyectos, solicitar información específica, entre otros.
Funcionamiento del Teclado de Arduino
Para ingresar valores con un teclado matricial en Arduino seguiremos los siguientes pasos.
Por la configuración en matriz que presentan los pulsadores dentro de un teclado matricial, se puede establecer cual botón dentro del arreglo está siendo presionado de la siguiente forma:
Vamos primero a suponer que tenemos un arreglo Matricial 4×3 o teclado arduino 4×3 (el funcionamiento es el mismo para otro tipo de teclado). Donde internamente la distribución de los botones es así:
Para programar el Teclado o Keypad en Arduino o en cualquier otro microcontrolador, basta con seguir en orden la siguiente secuencia:
- Inicialmente conectamos el teclado matricial en los PINES DIGITALES del ARDUINO. Para eso será importante poder identificar cuales son las columnas y las filas del teclado.
- Las Filas del Teclado estarán conectadas en PINES DIGITALES configurados como SALIDAS.
- Las Columnas del Teclado estarán conectadas en PINES DIGITALES configurados como ENTRADAS y con el PULLUP activado (por lo tanto, estas entradas siempre estarán recibiendo un 1 lógico, si ningún botón es presionado).
- Configuramos TODAS las SALIDAS (Filas) en 1 lógico o 5v, es decir vamos a dejarlas encendidas.
- Aplicamos el concepto de la MULTIPLEXACIÓN: Aquí vamos a mandar un 0 lógico por cada fila y vamos a leer todas las columnas, si se detecta que alguna columna recibió el cero lógico, indica que el botón que comparte la fila y la columna fue presionado, en caso contrario vuelvo a colocar la fila en 1 lógico y verifico la siguiente fila.
En la siguiente animación podemos ver como se establece el presionado de un botón sobre el keypad. Notarás más adelante, que cuando se programa el teclado sin librería, basicamente usamos el teclado matricial con for (ciclo) para poder preguntar por las columnas del teclado.
Librería Keypad de Arduino
Una forma rápida de usar un Teclado con Arduino, es valernos de su librería Keypad, bastante sencilla de entender, para el caso de un teclado matricial 4×4 (KEYPAD 4×4) tenemos:
- Incluimos la librería en nuestro proyecto:
#include <Keypad.h>
- Establecemos 2 constantes que determinan el número de filas y columnas del teclado matricial
const byte rowsCount = 4; const byte columsCount = 4;
- Establecemos el Arreglo que nos dará los caracteres de cada uno de los botones del teclado matricial.
char keys[rowsCount][columsCount] = { { '1','2','3', 'A' }, { '4','5','6', 'B' }, { '7','8','9', 'C' }, { '#','0','*', 'D' } };
- Creamos dos vectores donde colocaremos los Pines del Arduino asociados a las Filas y Columnas del teclado matricial:
const byte rowPins[rowsCount] = { 11, 10, 9, 8 }; const byte columnPins[columsCount] = { 7, 6, 5, 4 };
- Creamos el objeto de la instancia Keypad con las variables creadas en el paso 2 y 3
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);
NOTA: No es necesario configurar los pines conectados al teclado usando el pinMode, porque ya la propia librería del Keypad lo hace internamente.
Para leer cual tecla fue presionada usamos la siguiente instrucción:
char key = keypad.getKey();
Ejemplo del Teclado Matricial Arduino
Es hora de comenzar a realizar proyectos de teclado matricial con Arduino, y una vez finalices este proyecto estarás en la capacidad por ejemplo de crear otro proyecto usando un menu con teclado matricial y Arduino.
Vamos a ver como utilizar este periferico con Arduino, de dos formas, una será programando el Arduino y la otra será utilizando la librería Keypad
Vamos a ingresar valores con el teclado matricial y Arduino para visualizar las teclas presionadas por el puerto Serial, usando el siguiente circuito:
>> DESCARGAR COMPILADOS Y ARCHIVO PROTEUS 8 <<
Librería
#include <Keypad.h> const byte filas = 4; const byte columnas = 4; byte pinesFilas[] = {9,8,7,6}; byte pinesColumnas[] = {5,4,3,2}; char teclas[4][4] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; Keypad teclado1 = Keypad( makeKeymap(teclas), pinesFilas, pinesColumnas, filas, columnas); void setup() { Serial.begin(9600); Serial.println("Teclado 4x4 con Biblioteca Keypad"); Serial.println(); } void loop() { //Verifica si alguna tecla fue presionada char tecla_presionada = teclado1.getKey(); //Monitor Serial if (tecla_presionada) { Serial.print("Tecla: "); Serial.println(tecla_presionada); } }
Sin Librería
byte pinesFilas[] = {9,8,7,6}; byte pinesColumnas[] = {5,4,3,2}; char teclas[4][4] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; void setup() { for (int nL = 0; nL <= 3; nL++) { pinMode(pinesFilas[nL], OUTPUT); digitalWrite(pinesFilas[nL], HIGH); } for (int nC = 0; nC <= 3; nC++) { pinMode(pinesColumnas[nC], INPUT_PULLUP); } Serial.begin(9600); Serial.println("Teclado 4x4"); Serial.println(); } void loop() { //Barrido por las filas for (int nL = 0; nL <= 3; nL++) { digitalWrite(pinesFilas[nL], LOW); //Barrido en columnas buscando un LOW for (int nC = 0; nC <= 3; nC++) { if (digitalRead(pinesColumnas[nC]) == LOW) { Serial.print("Tecla: "); Serial.println(teclas[nL][nC]); while(digitalRead(pinesColumnas[nC]) == LOW){} } } digitalWrite(pinesFilas[nL], HIGH); } delay(10); }
Eso es todo
por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo
nuevo. Si te ha servido el contenido de esta entrada, de los videos y los
códigos de implementación y deseas apoyar mi trabajo invitandome a un café
super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.