Cerradura electrónica con clave
- publicado por Ing. Jesús Martínez
- Fecha agosto 22, 2023
Contenido:
Material:
- Arduino UNO
- Keypad 4×4
- Micro Servomotor sg90
- Buzzer 5v
Introducción:
En una época en la que la tecnología redefine constantemente nuestras vidas, es esencial abordar la seguridad y la comodidad con una perspectiva fresca y moderna. Imagina una cerradura que no requiere llaves, sino que te da acceso con tan solo un toque en un teclado numérico. En este emocionante proyecto, vamos a sumergirnos en la creación de una cerradura electrónica utilizando algunos componentes básicos pero poderosos: un buzzer de 5V para retroalimentación audible, un Arduino UNO como el cerebro, un servomotor SG90 para el mecanismo de bloqueo y desbloqueo, y un keypad 4×4 para la interacción intuitiva.
Este proyecto no solo trata sobre la construcción de una cerradura electrónica funcional, sino que también te llevará a un viaje de aprendizaje donde descubriremos cómo se entrelazan la electrónica, la programación y la seguridad en este innovador sistema. A medida que desentrañamos los entresijos del diseño y la programación, también exploraremos cómo estos componentes trabajan en conjunto para brindar una solución de seguridad efectiva y de vanguardia.
Nuestro objetivo final es claro: no solo queremos construir una cerradura electrónica; queremos empoderarte con conocimientos en electrónica y programación, brindándote la confianza para explorar proyectos similares y comprender la importancia de la seguridad en los sistemas modernos. Así que, únete a nosotros en este emocionante viaje mientras desglosamos los detalles, superamos desafíos y damos vida a este excelente proyecto. ¡Comencemos a construir juntos!
Desarrollo:
Comencemos primeramente por el diagrama del proyecto, no te preocupes si el proyecto se ve desafiante. Realiza las conexiones tal cual se te presentan y te aseguro que todo saldrá excelente.
Perfecto, una vez que ya tienes todo el hardware armado y cableado, es momento de proceder a la escritura del código, es decir, escribir todas las instrucciones necesarias para que nuestro hardware se comporte como una cerradura. Así que abre tu IDE de Arduino o tu sesión en Tinkercad y comencemos.
Primero que todo, comenzaremos importando las librerías que utilizaremos, en este caso Keypad.h y Servo.h
#include <Keypad.h>
#include <Servo.h>
Ahora definiremos las contantes y variables con las cuales estaremos trabajando
const byte longitud = 9; //longitud de la contraseña, solo requeriremos 8 caracteres
const byte ROWS = 4; //filas del keypad
const byte COLS = 4; // columnas del keypad
const byte buzzer = 13; //pin del buzzer
//definición del arreglo de char donde almacenaremos las teclas presionadas
char datos[longitud];
char contrasena[] = "123456A#"; //Contraseña definida
byte conteo = 0; // Variable que nos indicará el total de teclas presionadas
//Distribución de las teclas y sus valores en el keypad
char teclas[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
//Asignación de pines para el funcionamiento del keypad
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Ahora crearemos instancias de la clase Keypad y Servo
Keypad customKeypad = Keypad(makeKeymap(teclas), rowPins, colPins, ROWS, COLS);
Servo seguro;
Excelente, ahora debemos de asignar el pin con el cual funcionará nuestro servo, inicializarlo en 0 grados, también definiremos el pin del buzzer como salida e inicializaremos la comunicación serial a 9600 Baudios. Todo esto se realizará dentro del setup.
void setup(){
seguro.attach(11);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
seguro.write(0);
}
En este punto ya podemos comenzar a darle funcionalidad a nuestro proyecto, así que definiremos nuestro loop en el cual se repetirán sus instrucciones una y otra vez. Comencemos leyendo la tecla presionada y almacenándola en el arreglo datos.
void loop()
{
char tecla = customKeypad.getKey(); // Lectura de la tecla presionada
// si tecla tiene valor y conteo es menor a 8, almacenar el dato y aumentar conteo en 1
if (tecla && conteo < 8)
{
datos[conteo] = tecla; // almacenamos el valor de tecla en datos
conteo++; // aumentamos el conteo en 1
}
}
Ahora complementaremos esta estructura if con un else if que nos ayudará a realizar otras instrucciones cuando el conteo sea igual a 8. Las instrucciones a realizar son la comparación de las dos cadenas mediante la función strcmp, la cual recibe las 2 cadenas a comparar. Y además en base al resultado de strcmp, realizaremos la apertura de la cerradura y el buzzer emitirá un tono.
void loop()
{
char tecla = customKeypad.getKey();
if (tecla && conteo < 8)
{
datos[conteo] = tecla;
conteo++;
}
else if (conteo == 8) // si el conteo llegó a 8
{
if (!strcmp(datos, contrasena)) // comparamos datos y contrasena, y negamos su salida
{
Serial.println("Contrasena correcta, bienvenido");
seguro.write(90); // colocamos el eje del servo a 90 grados para abrir
tone(buzzer, 1000); // el buzzer vibra a 1000hz
delay(2000); //pausamos la ejecución durante 2 segundos
seguro.write(0); // ponemos el eje del servo a 0 grados para cerrar nuevamente
noTone(buzzer); // detenemos la ejecución del tono en el buzzer
}
else //si no coinciden las contraseñas
{
Serial.println("Contrasena incorrecta, vuelva a intentarlo");
tone(buzzer, 100); // el buzzer emite un tono a 100hz
delay(2000); // detenemos la ejecución 2 segundos
noTone(buzzer); // el buzzer deja de sonar
}
}
}
Ahora solo nos resta reiniciar el contador para que el usuario pueda ingresar nuevamente la contraseña y además vaciar el arreglo datos para que pueda almacenar los datos de las teclas presionadas por el usuario.
void setup(){
seguro.attach(11);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
seguro.write(0);
}
void loop()
{
char tecla = customKeypad.getKey();
if (tecla && conteo < 8)
{
datos[conteo] = tecla;
conteo++;
}
else if (conteo == 8)
{
if (!strcmp(datos, contrasena))
{
Serial.println("Contrasena correcta, bienvenido");
seguro.write(90);
tone(buzzer, 1000);
delay(2000);
seguro.write(0);
noTone(buzzer);
}
else
{
Serial.println("Contrasena incorrecta, vuelva a intentarlo");
tone(buzzer, 100);
delay(2000);
noTone(buzzer);
}
conteo = 0; // reiniciamos el contador a 0
memset(datos, 0, sizeof(datos)); // llenamos el arreglo con ceros
}
}
Resultados:
Enhorabuena, si has llegado hasta este punto es porque ya tienes funcionando tu cerradura electrónica con clave, ya sea en Tinkercad o en físico, o por qué no, en los dos. Podemos observar cómo al ingresar una clave correcta, el servomotor se coloca perfectamente a 90 grados, simulando la apertura de la cerradura y se mantiene ahí durante 2 segundos, para 2 segundos después volver a bloquear la cerradura. Pero si por el contrario la contraseña es incorrecta, el servomotor no realizará ningún movimiento y se quedará en su posición inicial, la cual simula la cerradura bloqueada.
Si por alguna razón el código se te complicó en la fase final y no pudiste seguirlo, no te preocupes, podrás encontrarlo todo completo en el simulador que te dejo a continuación, además de que podrás revisar el funcionamiento de todo el sistema, la clave es 123456A#.
Algunos navegadores tienen problemas para cargar el simulador Tinkercad, así que te comparto el enlace directo: Simulador
Conclusión:
Podemos ver como de sencillo se ha tornado la construcción y programación de sistemas de seguridad o cualquier otro sistema electrónico, en la era actual tenemos mucha información a nuestro alcance y recursos relativamente económicos. En esta ocasión has desarrollado una cerradura electrónica sencilla, pero quiero pensar que no la dejarás así, si no que le implementarás aun más cosas, como apertura mediante una app, wifi, tal vez agregar huella digital y porqué no, montar todo esto en una PCB diseñada para ello. Las opciones y aplicaciones son muchas, ya sea que estés aprendiendo para hobby, para abrir tu propia empresa o para mejorar en tu trabajo. Espero encontrarte en otro tutorial más y en alguno de nuestros cursos. Saludos y nos vemos en clase.
Etiqueta:Arduino
Soy un apasionado por la innovación tecnológica, el desarrollo y el emprendimiento. Durante mi educación superior me enfoqué en la programación de software para visión artificial e inteligencia artificial. Poco después al graduarme tuve la oportunidad de aplicar estos conocimientos en el desarrollo de soluciones para empresas como General Motors, Ford, Harley-Davidson, Mack, Tesla y unas cuantas empresas más del ramo automotriz.