Utilizar el teclado matricial 4×4 con Arduino

Teclado matricial 4x4
Teclado matricial 4×4

Hola a todos, en esta ocasión realizaremos una practica muy sencilla pero a partir de esta iremos desarrollando un grupo de proyectos con el teclado matricial 4×4 y la placa arduino que utilizaremos hoy.

Objetivo: Aprender que es un teclado matricial 4×4, como conectarlo a la tarjeta Arduino y por ultimo como realizar la programación para la visualización de los caracteres del teclado en el monitor serial del Software Arduino.

Materiales:

  • 1 Arduino Uno (puedes realizar esta practica con cualquier tipo de Arduino, incluso Arduinos Genericos)
  • 1 Teclado matricial 4×4
  • 8 Jumpers o cables para realizar las conexiones
  • y por su puesto una computadora

NOTA: Si quieres desarrollar esta practica o un proyecto parecido y no cuentas con los materiales, recuerda que puedes adquirirlos en nuestra tienda oficial: ElectronicaStore.

Softwares y librerías necesarias para este proyecto:

  • Se requiere del software oficial de Arduino el cual se encuentra en su pagina oficial: Software Arduino
  • Se requiere la librería para usar el teclado matricial, puedes descargarla en el siguiente link: keypad
  • En caso de querer realizar la practica con un Arduino Generico, si nunca has usado uno y no te lo reconoce el software de Arduino, deja en los comentarios tu duda para que te pasemos el controlador para Arduinos Genéricos.

NOTA 2: Este articulo estará dividido en 4 secciones las cuales son: Información de los materiales, Armado de la practica, Desarrollo de la programación para Arduino y por ultimo Pruebas y conclusiones

barra-separadora

Información de los materiales

Arduino Uno: Un Arduino Uno es una placa encargada de adquirí datos y procesarlos según la programación que se encuentre en su microcontrolador, existen muchos tipos de Arduino y para realizar esta practica se puede utilizar cualquiera de las placas disponibles en la marca Arduino.

Arduino Uno

Esta practica fue realizada con un Arduino Generico debido a que estos son más baratos y cuentan con las mismas funciones que un Arduino Original.

Teclado matricial 4×4: Un teclado matricial no es más que una matriz de botones, los teclados comunes poseen los valores 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #, A, B, C, D, estos caracteres ocupan las 16 teclas de un teclado 4×4, para que estos teclados realicen la función de una matriz, cada casilla es asignada a una fila o a una columna, esto para que el software Arduino reconozca las teclas presionadas gracias a la libreria Keypad.

teclado matricial 4x4 filas y columnas

Como se puede ver en la imagen superior de lado derecho se aprecian las filas y columnas así como la asignación de cada tecla.

barra-separadora

Armado de la practica

El teclado matricial cuanta con 8 puntos de conexion, debido a la libreria de Arduino esta conexión resulta muy fácil al no requerir resistencias u otros elementos aparte claro de cables o jumpers. Tal y como se ve en la siguiente imagen la conexión del primer pin del teclado se conecta a la entra digital numero 2 de Arduino, despues de eso todo se conecta en una fila seguida

Conexiones:

  • El pin 1 del teclado va conectado a la entra digital 2 del Arduino
  • El pin 2 del teclado va conectado a la entra digital 3 del Arduino
  • El pin 3 del teclado va conectado a la entra digital 4 del Arduino
  • El pin 4 del teclado va conectado a la entra digital 5 del Arduino
  • El pin 5 del teclado va conectado a la entra digital 6 del Arduino
  • El pin 6 del teclado va conectado a la entra digital 7 del Arduino
  • El pin 7 del teclado va conectado a la entra digital 8 del Arduino
  • El pin 8 del teclado va conectado a la entra digital 9 del Arduino
Conexión de Arduino uno y Teclado matricial 4x4
Conexión de Arduino uno y Teclado matricial 4×4

barra-separadora

Desarrollo de la programación para Arduino

Tal y como ya hemos realizado en otros proyectos de Arduino, el desarrollo de la programación lo aremos por pasos y después de explicarla dejaremos la programación completa y el proyecto compilado para el software Arduino.

PASO 1: Primero que nada deberemos tener la Liberia keypad en nuestro software de Arduino (si no tienes la librería recuerda que la puedes descargar al principio de este articulo), cuando la tengamos lo primero que debemos hacer es declarar la libreria:

#include<Keypad.h>

Anuncio

PASO 2: Ahora deberemos declarar las filas y columnas que posee nuestro teclado

const byte filas = 4;  //Con esto definimos que utilizaremos las 4 filas de nuestro teclado
const byte columnas = 4;  //Con esto definimos que utilizaremos las 4 columnas de nuestro teclado
byte pinesF[filas] = {9,8,7,6};  //Ahora definiremos los pines de Arduno a los que estarán conectadas las filas de nuestra matriz (para referirnos a estas conexiones en la programación usaremos “pinesF
byte pinesC[columnas] = {5,4,3,2};  //Ahora definiremos los pines de Arduno a los que estarán conectadas las columnas de nuestra matriz (para referirnos a estas conexiones en la programación usaremos “pinesC

char teclas[filas][columnas] = { //Ahora declaramos las teclas que conforman nuestra matriz, es muy importante ponerlas en el siguiente orden

{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};

Keypad teclado = Keypad(makeKeymap(teclas), pinesF, pinesC, filas, columnas); //Esta instrución sirve para realizar el mapeo de nuestro teclado matricial

char tecla; // ahora deberemos definir la variable tecla, como su nombre lo indica es la tecla que se mostrara al presionarla en el teclado

void setup() { // abrimos el siclo void setup
Serial.begin(9600); // el valor de 9600 es predefinido cuando se utiliza la comunicación serial
}

void loop() {
tecla = teclado.getKey(); // con esta instrucción le decimos a nuestro progrma que el caracter de tecla que se registre sera el caracter presionado de nuestro teclado
if (tecla != 0) // casi para terminar abrimos un ciclo if para preguntar si tecla es diferente que 0
Serial.print(tecla); // y ahora si por ultimo le pedimos al programa que imprima el valor de tecla en el monitor serial del software arduino
}

Programación completa

#include<Keypad.h>
const byte filas = 4;
const byte columnas = 4;
byte pinesF[filas] = {9,8,7,6};
byte pinesC[columnas] = {5,4,3,2};

char teclas[filas][columnas] = {

 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};

Keypad teclado = Keypad(makeKeymap(teclas), pinesF, pinesC, filas, columnas);

char tecla;

void setup() {
 Serial.begin(9600);
}
void loop() {
 tecla = teclado.getKey();
 if (tecla != 0)
 Serial.print(tecla);
}

Eso es todo lo que debemos saber de la programación, en caso de cualquier duda se puede dejar en los comentarios y la intentare responder.

Archivo del Proyecto: Proyecto del teclado matricial con arduino

barra-separadora

Pruebas y conclusiones

Tras la carga de la programación a Arduino pudimos comprobar que la programación funcionaba correctamente, al abrir el monitor serial de Arduino y presionar una tecla en el teclado matricial, el carácter se imprimía correctamente en el monitor como se ve a continuación:

monitor serial de arduino

NOTA importante: Los números y signos que se muestran en el monitor serial son caracteres, para Arduino no son considerados como cifras con algún valor, en el siguiente proyecto veremos como darle valor a las cifras para que sean tomados como números reales. Este proyecto fue realizado únicamente con el fin de aprender como se conecta y se programa un teclado matricial en Arduino para que así en futuras practicas este tema sea el de referencia para que no debamos repetir todo el procedimiento nuevamente.

El proyecto final no requirió de mucho armado como ya se dijo solo había que conectar el Arduino y el teclado con jumpers macho-macho para darle una mejor estética, al finalizar el armado así quedo el proyecto:

Conexion de Arduino y teclado matricial 4x4
Conexion de Arduino y teclado matricial 4×4

 

Conclusión: Este proyecto es de nivel basico sirve para demostrar como es que funciona un teclado matricial 4×4 al utilizarlo con Arduino, al realizar el proyecto me di cuenta de la gran ventana de oportunidades que se abren al juntar estos 2 elementos, desde un simple menú, hasta una calculadora, la imaginación es el limite.

Si tienes dudas del proyecto o sugerencias recuerda que puedes dejar un comentario para que así sigamos mejorando en la pagina, saludos.

Nombre del autor: Luis Antonio De La Cruz Reyes.
Rango en el Staff: Administrador y fundador
Descripción: Mi nombre es Luis, un egresado de la carrera de Ingeniería Electrónica, el motivo por el cual funde y cree esta página, fue para formar un sitio que recopilara todo lo que se va a prendiendo durante la carrera, con el fin de que este conocimiento no se perdiera y sea de utilidad para las futuras generaciones.

Artículos Relacionados

Deja una respuesta

12 Comments

  1. buen dia , muy lindo articulo , me ayudo mucho a ver omo conectar el teclado al arduino. Ahora empeze un proyecto que necesito utilizar un teclado y que permita digitar numeros hasta 9999 , como hacer la programacion ?

    Gracias

    1. Hola, pudiera ayudarte si me dieras más detalles de tu proyecto ya que no entiendo si lo quieres es que solo se pueda agregar números inferiores a 9999 (cumpliendo con colocar las 4 cifras) o ingresar un numero como 100 y posteriormente darle a un botón del teclado para que ese numero se mantenga en una linea y puedas escribir otro.

  2. hola, gracias por el tutorial esta excelente. Sin embargo tengo una pregunta. Como hago para que me salga en el monitor serial un numero de 2 o 3 dígitos? ya que el código que colocas como ejemplo es para colocar un numero o letra de uno en uno. Saludos

    1. Hola, debes declarar una variable global, esta es la que va a contener al número, y que será inicialmente 0. El tipo de variable será byte int o long dependiendo del valor máximo que vaya a aceptar dicho número. Por ejemplo, para cuatro cifras, será suficiente con int.

      Entonces, cada vez que pulses un número multiplicas por diez el valor de la variable y le sumas la nueva cifra.

      Por ejemplo, iniciamos con num=0:
      pulso 1: num=0*10+1 = 1;
      pulso 4: num=1*10+4 =14;
      pulso 9: num= 14*10+9 = 149;
      pulso #: devuelvo num, y vuelvo a ponerlo a cero para poder teclear otro número. Por supuesto, habrá que poner mecanismos de control, como que si num>=1000 no deje teclear más cifras.

      Si esta explicación no resuelve tu duda, entonces en unos días creare un proyecto como el que indicas para ejemplificar, saludos.

  3. Hola que tal, gracias por tu tutorial, me interesa hacer con esto una conexión para que al presionar un numero en el teclado del 0 al 9 me haga encender los segmentos de un display numerico de led y muestre el numero digitado en el teclado. tienes algun tutorial similar a esto opuedes orientarme para realizarlo??

    Mil gracias, saludos

    1. Hola quieres que esta practica se realice con Arduino?, avísame para hacer unas cuantas pruebas y postear el tutorial en la web cuando lo tenga listo, saludos

  4. Hola. Muy bien explicado todo, gran tutorial. Quería hacerte una pregunta, revisando la librería del keypad he visto que hay una función que se llama “begin(makeKeymap(userKeymap))”, donde se indica que se usa para inicializar el mareo interno para que sea igual al creado por el usuario. Sin embargo, tú no has usado esa función, y cuando la he visto usar es para mapear múltiples instancias del teclado. ¿Me puedes explicar por qué se hace esto así y cómo influye el poner o no poner esta función en un programa? Muchísimas gracias por adelantado. Un saludo.

    David.

    1. Hola, disculpa por la tardanza en la respuesta.

      Hay varios metodos para realizar el mapeo de teclas después de la inicialización del teclado, el que realice en la programación de este artículo es para transformar el arreglo de teclas 2d en un mapa de teclas que la librería puede entender, la sintaxis que se utilizo fue esta:

      keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

      y la sintaxis original es esta: Keypad(userKeymap, row, col, rows, cols)

      En el caso de la función que tu expones: void begin(makeKeymap(userKeymap))

      es básicamente lo mismo, ya que solamente indica que el mapeo comenzara cuando se compruebe a userKeymap (la teclas que el usuario este presionando en el rango de filas y columnas.

  5. Disculpa comprobe tu codigo pero nose porque no me quiso tomar los valores del 4,5, 6, B… Pero cuando abro otro proyecto si me los toma, no sabes a que se debe?

  6. Hola Luis:
    Estoy empezando don el tema de Arduino, ( Un compañero me dio un Arduino Leonardo ), y la verdad que es muy interesante.

    Yo soy aficionado a los simuladores de vuelo, y me gustaria hacer un panel con botones que simularan las teclas o la combinacion de teclas de un teclado normal de pc ( ejem “R” baja o sube el tren de aterrizaje ), el problema que vi es que yo no tengo tantas i/o para poder simular la infinada de procesos que yo podria usar.
    Buscando por internet encontre como poner 10 pulsadores en una misma salida (analogica / digital ), y la verdad es que lo p0bre y funciona, lo que no se es como adjudicar cada pulsador a una telca en concreto, ( ejem. pulsador 1 que corresponda a la tecla “R”).

    Me podrias Ayudar ?

    te mando el código que he usada para tal fin.
    /*
    Ejemplo de utilización de una función de lectura del Teclado analógico
    Lee el estado de un teclado compuesto por un divisor de tensión,
    cuyas resistencias son puenteadas a masa o a 5 voltios.
    El programa mostrará mediante pulsaciones de un led colocado entre el pin
    13 y masa, la tecla pulsada.

    El circuito:
    * Salida de “Teclado analógico” (cable azul) conectada a la entrada analógica 0
    * Cable rojo de “Teclado analógico” a 5v
    * Cable negro de “Teclado analógico” a masa. (GND)
    * the other side pin to +5V
    * Anodo del LED (pata larga) conectada a la salida digital 13
    * Cátodo del LED (pata corta) conectada a masa

    * Nota: como la mayoría de Aduinos ya incorporan un LED conectado
    al pin 13 en la placa, este led es opcional.

    Creado por Iñigo Zuluaga
    20-Jul-2010

    http://txapuzas.blogspot.com

    */

    int TecladoPin = 0; // Selecciona la entrada para el teclado
    int ledPin = 13; // Selecciona el pin del LED
    int TecladoValor = 0; // Variable para almacenar el valor analógico del teclado
    int Pulsador=99; // Variable que indica el pulsador accionado

    void setup() {
    // declara ledPin como SALIDA:
    pinMode(ledPin, OUTPUT);
    }

    void loop() {
    // lee el valor analógico del teclado:
    Pulsador=LeerTeclado(); // Va a la función de lectura del teclado
    if (Pulsador != 99) { // Si se ha pulsado una tecla …
    for (int cont=0; cont 938) {
    Pulsador=4;
    }
    else if (TecladoValor>792) {
    Pulsador=3;
    }
    else if (TecladoValor>685) {
    Pulsador=2;
    }
    else if (TecladoValor>614) {
    Pulsador=1;
    }
    else if (TecladoValor>521) {
    Pulsador=10;
    }
    else if (TecladoValor>500) {
    Pulsador=99;
    }
    else if (TecladoValor>418) {
    Pulsador=5;
    }
    else if (TecladoValor>337) {
    Pulsador=6;
    }
    else if (TecladoValor>230) {
    Pulsador=7;
    }
    else if (TecladoValor>84) {
    Pulsador=8;
    }
    else if (TecladoValor>0) {
    Pulsador=9;
    }
    return Pulsador;
    }

  7. hola muy buen tutorial, muy bien explicado, pero me gustaría que me ayudases en una duda y es que me gustaria hacer que al pulsar dos o 3 botones me salga en el serial una frase, he conseguido que me saliera pero solo si pulso numero de un solo digito, me gustaria poder de hacer de mas digitos ejm:
    al presionar 1 y luego el 3 formando un 13 o mas bien que se guarde el primer dato y asi formar mas numeros saliera en el serial hola…
    muchas gracias 😀

  8. Excelente tutorial! Me gustaría saber si podría hacer un tutorial para aprender a representar en un display de 7 segmentos de 4 dígitos, numeros del 0 al 9999 controlado por Arduino y un teclado matricial. Como para usarlo en un banco o negocio para indicar que cliente es el siguiente pero sin ser un contador secuencial. Saludos!

Deja un comentario

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies