Este prototipo de circuito para una cerradura electromagnética controlada principalmente por un sensor de huella dactilar, surgió en el año 2023 por los estudiantes de 5°D a partir de una charla de seguridad de la institución escolar, y se pensó con la intención de registrar la entrada de los estudiantes en la escuela. Inicio el proyecto ese mismo año el estudiante Valentín Quiroga, pero por diferentes circunstancias no pudo terminar el proyecto aquel año.
El siguiente año este proyecto sin acabar pasaría a manos de los estudiantes Facundo Chávez y Benjamín González, que terminarían el primer prototipo que vamos a comentar.
En primera instancia se registran los usuarios en la memoria del sensor de huella, luego se aplica el segundo código que ejecuta las acciones deseadas a través del el sensor. Cuando el sensor detecta una huella valida manda una señal al Arduino, este manda a su vez una señal al relé, activándolo, haciendo que se cierre el circuito en serie de la fuente y la cerradura, abriendo esta misma. En ese instante se activa la bocina y la pantalla lcd, la pantalla avisa que puedes colocar el dedo en el sensor, una vez aprueba el dedo, da la bienvenida al usuario y lo menciona según el numero con el que este registrado. En cuanto a la bocina se mantiene activada mientras la cerradura lo este, q es de un tiempo aproximado de cinco segundos.
COMPONENTES DEL CIRCUITO
Cerradura eléctrica:
A diferencia de una cerradura convencional, funciona con un bobinado interno que atrae dos bolitas metálicas para q permitan el recorrido de la cerradura. Mientras el dispositivo no reciba energía eléctrica estará cerrado.
Bocina:
Funciona como alarma que nos avisa la apertura de la cerradura.
Este componente nos sirve como intermediario entre el Arduino y la cerradura, ya que a través del control de del Arduino podemos manejar la apertura de la cerradura.
Esta pantalla nos muestra los mensajes del sensor como la espera para que coloques el dedo y la comprobación de la huella. El modelo utilizado viene con I2C.
Arduino uno:
Es el cerebro del dispositivo, el que controla y ejecuta todas las instrucciones del código a través de las entradas y salidas del mismo.
Esquema de conexión:
CODIGO DEL LECTOR DE HUELLA-CERRADURA
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Fingerprint.h>
#define bosina 4
#define RELAY_PIN 5 // Pin del relé para controlar la cerradura
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
LiquidCrystal_I2C dis(0x27, 16, 2);
const int MAX_USERS = 10; // Máximo número de usuarios permitidos
byte userIDs[MAX_USERS]; // Arreglo para almacenar IDs de usuarios
int userCount = 0; // Contador de usuarios registrados
bool Switch = true;
void setup() {
Serial.begin(9600);
dis.init();
dis.backlight();
pinMode(bosina, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(bosina, LOW);
digitalWrite(RELAY_PIN, LOW); // Inicialmente apagar el relé
while (!Serial); // Para Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nPrueba de detección de huella Adafruit");
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("¡Sensor de huella dactilar encontrado!");
} else {
Serial.println("No se encontró el sensor de huella dactilar :(");
while (1) {
delay(1);
}
}
finger.getParameters();
finger.getTemplateCount();
if (finger.templateCount == 0) {
Serial.print("El sensor no contiene datos de huella dactilar. Por favor, ejecute el ejemplo 'enroll'.");
}
else {
Serial.println("Esperando un dedo válido...");
Serial.print("El sensor contiene "); Serial.print(finger.templateCount); Serial.println(" plantillas");
// Cargar los IDs de las huellas dactilares ya registradas
userCount = finger.templateCount;
for (int i = 0; i < userCount; ++i) {
userIDs[i] = i;
}
}
}
void loop() {
int value = getFingerprintIDez();
if (value != -1) {
bool identified = false;
for (int i = 0; i < userCount; ++i) {
if (value == userIDs[i]) {
identified = true;
break;
}
}
if (identified) {
dis.clear();
dis.setCursor(0, 0);
dis.print("Bienvenido");
dis.setCursor(0, 1);
dis.print("Usuario n*");
dis.print(value);
digitalWrite(RELAY_PIN, HIGH); // Activar el relé para abrir la cerradura
digitalWrite(bosina, HIGH);
delay(4000);
digitalWrite(RELAY_PIN, LOW); // Desactivar el relé después de un tiempo
digitalWrite(bosina, LOW);
dis.clear();
} else {
dis.clear();
dis.setCursor(0, 0);
dis.print("Acceso denegado");
delay(5000);
}
} else {
dis.setCursor(0, 0);
dis.print("Coloque el dedo ");
digitalWrite(RELAY_PIN, LOW); // Asegurarse de que el relé esté apagado
}
dis.setCursor(0, 1);
dis.print(" ");
delay(50);
}
// Retorna -1 si falla, de lo contrario retorna el ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
return finger.fingerID;
}