• Autor de la entrada:
  • Categoría de la entrada:Arduino

Los sistemas de control de acceso nos permiten controlar el acceso de las personas de nuestro entorno a ciertos sitios, por ejemplo una habitación, una oficina, un laboratorio, un sin fin de sitios. Normalmente este tipo de sistemas tienen varias formas de autenticar a los usuarios: pin de acceso, tarjetas de chip, tarjetas RFID, incluso los más potentes cuentan con control biométrico, es decir, que aparte de un código el sistema comprueba tu huella dactilar.

En algún tutorial anterior hemos visto como realizar un control de accesos por RFID, en este vamos a aprender a realizarlo con un teclado matricial y un pin de 4 dígitos. Como no puede ser de otra manera el pin será «1234» ya que a ningún ladrón se le ocurriría usarlo y arriesgarse a bloquear la puerta, o sí.

El funcionamiento es muy sencillo, tenemos un teclado matricial con el cual el usuario puede introducir el pin que desbloquea la puerta y el botón de confirmar. Antes de empezar a teclear el código, en pantalla aparece el mensaje de bienvenida y nos invita a introducir el código de apertura.

Cuando empezamos a pulsar botones, el sistema nos informa de que se están introduciendo datos y en la segunda línea de la pantalla aparecen tantos asteriscos como números hemos pulsado.

Por último solo nos quedará pulsar el botón de confirmar que en este caso es la tecla ‘A’.

Si el código es correcto, se activa el relé durante 4 segundos quedando desbloqueada la puerta durante el mismo tiempo.

Si el código es incorrecto el sistema activa el zumbador durante 500 milisegundos y muestra un mensaje de error.

Materiales y componentes

Para montar nuestro sistema necesitamos:

  • Arduino
  • Teclado matricial
  • Relé con su respectivo sistema de transistor y diodo antiparalelo
  • Un zumbador
  • Una LCD o una LCD keypad Shield. Gracias a los compañeros de GearBest por Shield.
LCD shield usada en el control de acceso
LCD shield usada en el control de acceso

El esquema de conexionado es algo como el siguiente para el sistema de control de acceso:

Conexionado del relé y el zumbador
Conexionado del relé y el zumbador

Tanto el zumbador como el relé lo conectaremos a dos pines digitales de salida de Arduino.

La shield LCD la pinchamos directamente sobre la placa Arduino.

El teclado matricial lo conectamos a entradas y salidas digitales. Los pines del keypad deberemos configurarlos en el código que carguemos a Arduino.

¿Usamos librerías?

En este caso, puesto que tratamos con una pantalla LCD de caracteres y con un teclado matricial o keypad matricial, el uso de librerías para su control es casi necesario. Nos ahorrará mucho trabajo de código.

No te olvides que puedes descargar las librerías desde aquí:

  • Liberia Keypad
  • LiquidCrystal: Revisa el IDE, viene por defecto al instalar el IDE de Arduino

Control de acceso con teclado | RincónIngenieril con GearBest

El código para Arduino del control de accesos

#include <LiquidCrystal.h>
#include <Keypad.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char pin[5];
int posicion = 0;
byte rowPins[ROWS] = {52, 50, 48, 46};
byte colPins[COLS] = {53, 51, 49, 47};

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

void setup(){
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Bienvenido ");
lcd.setCursor(0,1);
lcd.print("Introduce tu pin");
pinMode(22,OUTPUT);
pinMode(43,OUTPUT);
digitalWrite(22,HIGH);
}

void loop(){
pin[posicion] = teclado.getKey();

if (pin[posicion]){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Introduciendo");
for(int i = 0; i <= posicion; i++){
lcd.setCursor(i,1);
lcd.print("*");
}
posicion++;
if(posicion == 5) posicion = 0;
}

if(pin[4] == 'A'){
pin[4] = 'a';
if(pin[0] == '1' && pin[1] == '2' && pin[2] == '3' && pin[3] == '4'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pin correcto ");
lcd.setCursor(0,1);
lcd.print("Empuje la puerta ");
digitalWrite(22,LOW);
delay(4000);
digitalWrite(22,HIGH);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pin incorrecto ");
digitalWrite(43,HIGH);
delay(500);
digitalWrite(43,LOW);
delay(1500);

}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Bienvenido ");
lcd.setCursor(0,1);
lcd.print("Introduce tu pin");
}

delay(10);
}

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en www.enriquegomez.me