Arduino - Teclado numérico - Cerradura electromagnética

En este tutorial, vamos a aprender a usar un teclado numérico, una cerradura electromagnética y Arduino juntos. En detalle, si un usuario introduce correctamente la contraseña en el teclado, Arduino activa la cerradura electromagnética.

El tutorial también proporciona el código que enciende una cerradura electromagnética durante un periodo de tiempo y luego se apaga sin usar la función delay(). El código de Arduino también admite varias contraseñas.

Cerradura electromagnética con teclado para Arduino

Acerca del teclado numérico y de la cerradura electromagnética.

Si no sabes sobre el teclado numérico y la cerradura electromagnética (pinout, cómo funciona, cómo programarla...), aprende sobre ellos en los tutoriales siguientes:

Diagrama de Cableado

Diagrama de cableado de Arduino, teclado numérico y cerradura electromagnética

This image is created using Fritzing. Click to enlarge image

Código de Arduino: activar la cerradura electromagnética si la contraseña es correcta

Los códigos a continuación activan una cerradura electromagnética si la contraseña es correcta.

/* * 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-electromagnetic-lock */ #include <Keypad.h> #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; 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}; //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 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the electromagnetic lock } 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 => unlock"); digitalWrite(RELAY_PIN, LOW); } 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

  • Conecta Arduino a la PC mediante un cable USB.
  • Abre Arduino IDE, selecciona la placa correcta y el puerto correcto.
  • Navega al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “keypad”, luego encuentra la biblioteca keypad de Mark Stanley y Alexander Brevig.
  • Haz clic en el botón Instalar para instalar la biblioteca keypad.
Biblioteca de teclado para Arduino
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir de Arduino IDE para subir el código a Arduino
Código de subida del IDE de Arduino
  • Pulsa las teclas 8123 y pulsa #
  • Pulsa las teclas 1234 y pulsa #
  • Ver el resultado en el Monitor Serial y el estado de la cerradura electromagnética
COM6
Send
The password is incorrect, try again The password is correct => unlock
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explicación del código

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

Una cadena se utiliza para almacenar la contraseña ingresada 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 terminar la contraseña. Cuando se pulsa una tecla en el teclado:

  • Si la tecla pulsada no es una de dos teclas especiales, se añade a la cadena de entrada.
  • Si la tecla pulsada es *, cadena de entrada se borra. Puedes usarla para empezar a introducir la contraseña o reiniciarla.
  • Si la tecla pulsada es #:
    • La cadena de entrada se compara con las contraseñas predefinidas. Si coincide con alguna de las contraseñas predefinidas, la cerradura electromagnética se activa.
    • No importa si la contraseña es correcta o no, la cadena de entrada se borra para la siguiente entrada.

Código de Arduino - encender una cerradura electromagnética durante un período de tiempo si la contraseña es correcta

El código que se muestra a continuación enciende la cerradura electromagnética durante 5 segundos si la contraseña es correcta. Después de 5 segundos, la cerradura electromagnética se apaga.

/* * 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-electromagnetic-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // in milliseconds #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; 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}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed relay.high(); // lock the electromagnetic lock } void loop() { relay.loop(); // MUST call the loop() function first 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 => unlock"); relay.high(); // set high before making a low pulse relay.pulse(UNLOCK_TIME); // deactivate the electromagnetic lock during UNLOCK_TIME duration } 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 } } }

Por favor, tenga en cuenta que el código anterior utiliza la biblioteca ezOutput, lo que facilita la gestión del tiempo de forma no bloqueante. Puede consultar Guía de instalación de la biblioteca ezOutput.

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!