Arduino - Cerradura de Puerta con Teclado Numérico

En este tutorial, aprendemos cómo crear un sistema de cerradura para puertas con contraseña usando un teclado numérico y una cerradura de solenoide.

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

Acerca de la cerradura de teclado y solenoide

Si no conoces la cerradura de solenoide y el botón (disposición de pines, cómo funciona, cómo programarlos), aprende sobre ellos en los siguientes tutoriales:

Diagrama de Cableado

  • Arduino - Cerradura de puerta con teclado numérico y cerradura de solenoide
Diagrama de cableado de Arduino, teclado numérico y cerradura de solenoide

This image is created using Fritzing. Click to enlarge image

Código de Arduino - Sistema de cerradura con contraseña utilizando un teclado numérico y cerradura de solenoide

/* * 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-keypad-door-lock */ #include <Keypad.h> const int RELAY_PIN = A5; // 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 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // 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, HIGH); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, LOW); // 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 } } }

※ Nota:

La dirección I2C del LCD puede variar según los fabricantes. En el código, usamos 0x27, tal como lo indica el fabricante DIYables.

Pasos R\u00e1pidos

  • Conecta Arduino a la PC mediante un cable USB
  • Abre Arduino IDE, selecciona la placa correcta y el puerto correcto
  • Navega hasta el icono Bibliotecas en la barra izquierda del Arduino IDE.
  • 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 teclado para 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.
  • Abre el Monitor Serial.
  • Presiona las teclas 12345 y presiona #.
  • Presiona las teclas 1234ABC y presiona #.
  • Mira el estado de la lengüeta de la cerradura durante 20 segundos.
  • Mira 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  

Explicación del código

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

Se utiliza una cadena 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 entrada de la contraseña. El sistema funciona de la siguiente manera:

  • Excepto dos teclas especiales, si se pulsa otra tecla, se añade a la cadena de entrada
  • Si se pulsa *, la cadena de entrada se borra. Puedes usarla para empezar o reiniciar la introducción de la contraseña
  • Si se pulsa #:
    • La cadena de entrada se compara con las contraseñas predefinidas. Si coincide con alguna de las contraseñas predefinidas, controla el relé para abrir la puerta.
    • Independientemente de si la contraseña es correcta o no, la cadena de entrada se borra para la siguiente entrada.

    ※ Nota:

    • En el código anterior, para simplificarlo, usamos la función delay. Es mejor usar millis() en lugar de delay(). Consulte Cómo usar millis() en lugar de delay()
    • Puede agregar un zumbador piezoeléctrico para que se oiga un pitido cada vez que se presione el teclado.
    • En los códigos anteriores, la puerta se bloquea de nuevo después de 20 segundos. Puedes reemplazarlo por un sensor de puerta. La puerta se bloquea cuando el sensor de la puerta detecta que está cerrada por el usuario.
    • En el código anterior, las contraseñas están codificadas de forma fija. En la práctica, debería ser posible añadir/eliminar/cambiar contraseñas dinámicamente mediante un modo especial. Si es así, las contraseñas deben guardarse en la memoria EEPROM. El número de contraseñas que se guarden dependerá del tamaño de la EEPROM. El código se volverá más complicado. Si quieres construir un sistema así, 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!