Arduino - Sistema de cerradura de puerta con contraseña

En este tutorial, aprendemos a hacer un sistema de bloqueo de puertas con contraseña. El tutorial incluye dos partes principales:

La pantalla LCD es opcional. Simplemente hace que el sistema sea un poco más cómodo.

Cuando la puerta se desbloquea con una contraseña correcta, mantiene la puerta desbloqueada durante 20 segundos y luego cierra la puerta automáticamente de nuevo. El código de Arduino admite varias contraseñas.

Acerca del teclado numérico y la cerradura electromagnética y la pantalla LCD

Si no conoces la cerradura electromagnética, el teclado numérico y la pantalla LCD (disposición de pines, cómo funciona, cómo programar...), infórmate sobre ellos en los siguientes tutoriales:

Cómo funciona el sistema de cerraduras de puertas

Las contraseñas válidas están predefinidas en el código de Arduino.

Una cadena se utiliza para almacenar la contraseña introducida por los usuarios, llamada cadena de entrada. En el teclado numérico, dos teclas (* y #) se utilizan para fines especiales: borrar la contraseña y finalizar la contraseña. El sistema funciona de la siguiente manera:

  • Excepto por dos teclas especiales, si se pulsa alguna otra tecla, se añade a la cadena de entrada
  • Si se pulsa *, cadena de entrada se borra. Puedes usarla para empezar a introducir la contraseña o reiniciar la entrada
  • Si se pulsa #:
    • La cadena de entrada se compara con las contraseñas predefinidas. Si coincide con alguna de las contraseñas predefinidas, la puerta se desbloquea.
    • No importa si la contraseña es correcta o no, la cadena de entrada se borra para la siguiente entrada

Diagrama de Cableado

  • Arduino - Sistema de cerradura de puerta con contraseña usando teclado, cerradura electromagnética
Diagrama de cableado del sistema de cerradura para Arduino

This image is created using Fritzing. Click to enlarge image

  • Arduino - Sistema de cierre de puertas con contraseña usando teclado numérico, cerradura electromagnética y LCD
Diagrama de cableado de la pantalla LCD para un sistema de cerradura con Arduino

This image is created using Fritzing. Click to enlarge image

Código de Arduino - Sistema de cierre de puerta con contraseña usando teclado numérico, cerradura electromagnética

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-door-lock-system-using-password */ #include <Keypad.h> const int RELAY_PIN = A0; // the Arduino pin, which connects to the IN pin of relay const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct, unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Pasos R\u00e1pidos

  • Conectar Arduino a la PC mediante cable USB
  • Abrir Arduino IDE, seleccionar la placa y el puerto correctos
  • Navega al ícono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “keypad”, luego encuentra la biblioteca keypad de Mark Stanley, Alexander Brevig
  • Haz clic en el botón Instalar para instalar la biblioteca keypad.
librería de keypad para Arduino
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código a Arduino
  • Coloca la placa de armadura cerca del electroimán.
  • Abre el Monitor Serial
  • Presiona las teclas 123456 y presiona #
  • Presiona las teclas 1234ABC y presiona #
  • Observa la atracción entre la placa de armadura y el electroimán durante 20 segundos.
  • Observa el resultado en el Monitor Serial
COM6
Send
The password is incorrect, try again The password is correct, unlocking the door in 20 seconds
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Código de Arduino - Sistema de bloqueo de puerta con contraseña usando teclado numérico, cerradura electromagnética y LCD

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-door-lock-system-using-password */ #include <Keypad.h> #include <LiquidCrystal_I2C.h> const int RELAY_PIN = A0; // the Arduino pin, which connects to the IN pin of relay const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // reset the input password lcd.clear(); } else if(key == '#') { lcd.clear(); if(input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("password is correct"); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("password is incorrect, try again"); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); } input_password = ""; // reset the input password } else { if(input_password.length() == 0) { lcd.clear(); } input_password += key; // append new character to input password string lcd.setCursor(input_password.length(), 0); // move cursor to new position lcd.print('*'); // print * key as hiden character } } }

※ Nota:

La dirección I2C del LCD puede variar según los fabricantes. En el código, usamos 0x27, que está especificado por el fabricante DIYables.

Pasos R\u00e1pidos

  • Navega al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “LiquidCrystal I2C”, luego localiza la biblioteca LiquidCrystal_I2C de Frank de Brabander
  • Haz clic en el botón Instalar para instalar la biblioteca LiquidCrystal_I2C.
Biblioteca LiquidCrystal I2C de Arduino
  • Copia el código anterior y ábrelo con el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para cargar el código en Arduino.
  • Coloca la placa de armadura cerca del electroimán.
  • Introduce una contraseña incorrecta y luego introduce una contraseña correcta.
  • Observa la atracción entre la placa de armadura y el electroimán durante 20 segundos.
  • Lee el texto en la pantalla LCD.

※ Nota:

  • En los códigos anteriores, para simplificar, usamos la función delay. Es mejor usar millis() en lugar de delay(). Vea Cómo usar millis() en lugar de delay()
  • Puede agregar un zumbador piezoeléctrico para hacer sonar un pitido cada vez que se presione el teclado.
  • En los códigos anteriores, la puerta se vuelve a bloquear después de 20 segundos. Puede reemplazarlo por un sensor de puerta. La puerta se bloquea cuando el sensor de la puerta detecta que la puerta ha sido cerrada por el usuario.
  • En el código anterior, las contraseñas están codificadas en el código. En la práctica, debería ser posible añadir/eliminar/cambiar contraseñas de forma dinámica mediante un modo especial. Si es así, las contraseñas deberían guardarse en la memoria EEPROM. El número de contraseñas que se pueden guardar depende del tamaño de la EEPROM. El código se volverá complejo. Si desea construir dicho sistema, ofrecemos un servicio de programación. No dude en ponerse en contacto con nosotros.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!