Teclado Matricial con arduino

Teclado Matricial 4×4 con arduino

Introducción

En este tutorial aprenderemos como funciona un teclado matricial y a implementarlo en la plataforma arduino.

Se implementara un tipo de cerradura electrónica que puede servir para varias aplicaciones.

El sistema consiste en teclear una contraseña en nuestro Teclado Matricial, arduino evaluara si la contraseña es correcta y posteriormente encenderá o apagará un led, que a su vez, puede ser un relay, una cerradura electrónica o  cualquier otro actuador que deseemos.

 

Material

  • Teclado matricial
  • Arduino UNO
  • Protoboard
  • Cables macho-macho

En la tienda virtual de HeTPro puedes encontrar todos los materiales:

www.hetpro-store.com

¿Cómo funciona un teclado matricial?

Al conectar un pulsador en la plataforma arduino, requerimos de una entrada digital. Si nuestro proyecto requiere de varios pulsadores, vamos a tener el problema de que los pines digitales se nos van a terminar y no podremos conectar más dispositivos al arduino.

Es por esto que se utiliza un arreglo de pulsadores en forma matricial, permitiéndonos así, conectar varios pulsadores utilizando menos pines digitales en nuestro arduino.

Por ejemplo, si nuestro proyecto requiere de 16 pulsadores, tendremos que utilizar 16 pines de nuestro arduino por lo que nos dejará sin poder conectar otros dispositivos, pero, si en cambio utilizamos un teclado matricial de 4×4, tendremos 16 pulsadores, pero solo utilizaríamos 8 pines (4 filas y 4 columnas) en vez de 16.

Esta disposición se puede apreciar en la siguiente imagen.

imagen1: conexión de pulsadores en forma de matriz

imagen1: conexión de pulsadores en forma de matriz

Funciona de esta manera:

  1. Primero se energiza la primera fila, después se evalúa si hay señal en alguna de las columnas, si aparece señal, significa que una tecla de la primera fila y correspondiente a la columna detectada, se presionó.
  2. Después se pasa a energizar la segunda fila y desconectar la primera, se evalúa si hay señal en alguna de las columnas, si aparece señal, significa que una tecla de la segunda fila y correspondiente a la columna detectada, se presionó.
  3. Se hace el mismo procedimiento para las filas 3 y 4.
  4. Volvemos a comenzar con la fila 1 y el ciclo se repite infinitamente.

Para hacer esto posible también tenemos que hacer algo de programación extra, teniendo así un código un poco más complejo. Pero eso no nos debe de preocupar ya que arduino tiene varias librerías externas para controlar estos dispositivos.

La librería que utilizaremos se llama Keypad.h y las descargaremos en este link http://playground.arduino.cc/code/Keypad

Después de descargar e instalar la librería procedemos a conectar nuestro circuito.

Conexiones

En la siguiente imagen se muestra como conectar el teclado matricial al arduino.

imagen2: Conexiones entre arduino y el teclado matricial

imagen2: Conexiones entre arduino y el teclado matricial

Las primeras 4 líneas del teclado matricial que corresponden a las filas las conectamos del pin9 al pin6 del arduino respectivamente, las 4 líneas restantes del teclado matricial que corresponden a las columnas las conectamos del pin5 al pin2 respectivamente. Los pines 0 y 1 del arduino que corresponden al puerto serial, los dejamos libres para poder visualizar en la terminal el carácter que corresponde a cada botón presionado.

DSCF1826

imagen3: Pines del teclado matricial, de izquierda a derecha (F1,F2,F3,F4,C1,C2,C3,C4)

Código

A continuación se muestra el código utilizado, cada línea tiene su explicación y funcionamiento a modo de comentario y su funcionamiento es el siguiente: al presionar un código de 4 dígitos y si este es correcto, se enciende el led del pin 13, para volverlo a apagar se tienen que teclear la contraseña correcta de nuevo. A su vez en la terminal se muestra el carácter del botón presionado.

#include <Keypad.h> //llama a la librería Keypad.h

char contrasena[]="2222";  //aquí escribimos la contraseña de 4 dígitos
char codigo[4];            //Cadena donde se guardaran los caracteres de las teclas presionadas
int cont=0;          //variable que se incrementara al presionar las teclas

const byte ROWS = 4; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando

char hexaKeys[ROWS][COLS] =  //Aquí pondremos la disposición de los caracteres tal cual están en nuestro teclado
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6}; //Seleccionamos los pines en el arduino donde iran conectadas las filas
byte colPins[COLS] = {5, 4, 3, 2}; //Seleccionamos los pines en el arduino donde iran conectadas las filas

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado

void setup()
{
  pinMode(13, OUTPUT); //Pin 13 como salida
  Serial.begin(9600); //inicializar puerto serie
}

void loop()
{
  char customKey = customKeypad.getKey(); //se guarda en la variable customKey el caracter de la tecla presionada
  if (customKey != NO_KEY)         //se evalúa si se presionó una tecla
  {
    codigo[cont]=customKey;          //se guarda caracter por caracter en el arreglo codigo[]
    Serial.println(codigo[cont]);    //se imprime en el puerto serie la tecla presionada
    cont=cont+1;              //incrementamos la variable cont
    if(cont==4)          //si ya fueron presionadas 4 teclas se evalúa si la contraseña es correcta
    {
      if(codigo[0]==contrasena[0]&&codigo[1]==contrasena[1]&&codigo[2]==contrasena[2]&&codigo[3]==contrasena[3])
      {
        digitalWrite(13,!digitalRead(13));        //si la contraseña fué correcta se enciende o se apaga el led del pin13
      }
      cont=0;  //resetear a 0 la variable cont
    }
  }
}

Resultados

A continuación se muestra que al teclear la contraseña de 4 dígitos que es 2222 se enciende el led del pin 13, al presionar otra combinación no ocurre nada, y al volver a teclear la combinación correcta el led se apaga. Todo lo que tecleemos se va mostrando en la terminal.

termial1

imagen4: mostrando en la terminal la contraseña tecleada

 

 

imagen5: led del pin 13 del arduino encendido

imagen5: led del pin 13 del arduino encendido

 

imagen6: mostrando en la terminal la contraseña tecleada

imagen6: mostrando en la terminal una contraseña incorrecta

 

 

imagen7: mostrando en la terminal la contraseña tecleada

imagen7: mostrando en la terminal la contraseña correcta de nuevo

 

imagen8: led del pin 13 del arduino apagado

imagen8: led del pin 13 del arduino apagado

 

Deja un comentario

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

  1. buenas tardes …. ustedes venden los articulos para fabricar el bus de conexion flexible que sale del teclado matricial ?? … requiero desarrollar este componente para un exoesqueleto robotico de mano. Gracias

  2. hola estoy haciendo un menu con el uso del teclado matricial la cuestiom o problema es el siguiente yo necesito presionar dos veces el teclado la primera vez es para acceder a unos de los dos metodos del menu (ingreso, eliminacion de usuario) y por ejemplo si yo presiono la tecla * llego al metodo de ingresar usuario y luego que estoy dentro de ese metodo necesito ingresar otro dato que es un valor numerico (id), pero al realizar estos pasos no se me cumplen, yo cargo el codigo presiono la tecla * entro al metodo de nuevo usuario me sale el mensaje que ingrese un id para el nuevo usuario pero presiono y no se me ingresada nada, asi mmismo si presiono la tecla # ingreso al metodo de eliminacion me pide un id para eliminar a un usuario presiono el teclado y no se muestra o ingrese nada

    • Hola buen dia no podemos saber donde se encuentre el error pero puedes verificar las condificones en tu codigo para ver donde y en que momento debe cumplirlas