Publicado por el 28 septiembre, 2015 Deja tus dudas en los comentarios
Dificultad bajaComplejidad baja
CC BY-SA 4.0

Los sistemas de control de acceso nos permiten como su propio nombre indica controlar el acceso de las personas de nuestro entorno a ciertos sitios, por ejemplo una habitación, una caja fuerte, una oficina, un laboratorio y 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 (y más caros) cuentan con control biométrico, es decir, que aparte de un código el sistema comprueba tu huella dactilar o incluso un poco más a lo James Bond, la pupila del ojo o las características faciales, y si al contrario de lo que puedas pensar estos sistemas también tienen vulnerabilidades y formas de «engañarlos».



En algún tutorial anterior hemos visto como realizar un control de accesos por RFID y 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» (a ningún ladrón se le ocurriría usarlo y arriesgarse a bloquear la puerta, o si).

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’. Lo hemos configurado de esta manera en el código del microcontrolador.

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 y por último 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, ya que 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


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);
}

Sobre el autor
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 enrique.rinconingenieril.es
¿Quién colabora?
Artículos relacionados
Deja un comentario