Subido por Petar Marinov

prgec mio 1

Anuncio
#include <ESP8266WiFi.h>
#include <Keypad.h>
#include <Adafruit_Fingerprint.h>
#include <LiquidCrystal_I2C.h>
// Inicializa los componentes
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1);
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ajusta los parámetros según tu pantalla LCD
// Pines para el teclado 4x4
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // Conecta a los pines de fila del teclado
byte pin_column[COL_NUM] = {5, 4, 3, 2}; // Conecta a los pines de columna del teclado
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COL_NUM);
// Pin para la cerradura
const int LOCK_PIN = 10; // Conecta a un pin de salida que controlará el relé de la cerradura
void setup() {
// Configura el WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
// Inicializa el lector de huellas dactilares
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Lector de huellas dactilares encontrado");
} else {
Serial.println("No se encuentra el lector de huellas dactilares");
}
// Inicializa la pantalla LCD
lcd.init();
lcd.backlight();
// Configura el pin de la cerradura como salida
pinMode(LOCK_PIN, OUTPUT);
}
void loop() {
char key = keypad.getKey();
if (key) {
// Si se presiona '#', agrega un nuevo usuario
if (key == '#') {
addUser();
}
// Si se presiona '*', elimina un usuario
else if (key == '*') {
deleteUser();
}
}
// Comprueba si hay una huella dactilar
int result = getFingerprintID();
if (result >= 0) {
// Si la huella dactilar es reconocida, abre la cerradura, saluda al usuario y muestra su ID en el LCD
abrirCerradura();
saludarUsuario();
lcd.clear();
lcd.print("Usuario ");
lcd.print(result);
lcd.print(" reconocido");
}
}
int getFingerprintID() {
uint8_t id = finger.getImage();
if (id != FINGERPRINT_OK) return -1;
id = finger.image2Tz();
if (id != FINGERPRINT_OK) return -1;
id = finger.fingerFastSearch();
if (id != FINGERPRINT_OK) return -1;
// Si todo va bien, devuelve la ID de la huella dactilar
return finger.fingerID;
}
void addUser() {
int id = getID(); // Obtén un ID para el nuevo usuario
if (id == -1) {
Serial.println("No se pudo obtener un ID para el nuevo usuario.");
return;
}
Serial.print("Coloca el dedo en el lector de huellas...");
int p = -1;
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Imagen tomada");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No se detectó ningún dedo.");
delay(200);
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Error de comunicación");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Error al tomar la imagen");
break;
default:
Serial.println("Error desconocido");
break;
}
}
// Convierte la imagen de la huella en un modelo de características
p = finger.image2Tz(1);
if (p != FINGERPRINT_OK) {
Serial.println("Error al convertir la imagen.");
return;
}
// Crea una nueva plantilla de huella dactilar
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Huella dactilar registrada!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Error de comunicación");
return;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Las huellas no coinciden");
return;
} else {
Serial.println("Error desconocido");
return;
}
// Almacena la plantilla de la huella dactilar
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Huella dactilar almacenada!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Error de comunicación");
return;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Error de ubicación");
return;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error de escritura flash");
return;
} else {
Serial.println("Error desconocido");
return;
}
}
void deleteUser() {
int id = getID(); // Obtén el ID del usuario a eliminar
if (id == -1) {
Serial.println("No se pudo obtener un ID para el usuario a eliminar.");
return;
}
int p = finger.deleteModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Usuario eliminado!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Error de comunicación");
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("No se pudo encontrar ese ID en la memoria");
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error al borrar la memoria flash");
} else {
Serial.println("Error desconocido");
}
}
void abrirCerradura() {
// Aquí puedes usar un pin de salida para controlar un relé que a su vez controle la cerradura
digitalWrite(LOCK_PIN, HIGH);
delay(5000); // Mantén la cerradura abierta durante 5 segundos
digitalWrite(LOCK_PIN, LOW);
}
void saludarUsuario() {
// Puedes usar una biblioteca de texto a voz para hacer que el Arduino hable
myTTS.speak("¡Hola, bienvenido!");
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Para hacer que tu Arduino hable, necesitarás un módulo de voz o un escudo de voz. Estos dispositivos
pueden generar voz a partir de texto (TTS, Text-to-Speech) y se pueden conectar a tu Arduino.
Una vez que tengas un módulo de voz, puedes usar una biblioteca de Arduino para controlarlo. Por
ejemplo, si tienes un módulo de voz Elechouse, puedes usar la biblioteca Elechouse_Voice_Module para
hacer que tu Arduino hable.
Aquí tienes un ejemplo de cómo podrías hacer que tu Arduino diga “Hola”:
#include <Elechouse_Voice_Module.h>
VOICE_MODULE vModule;
void setup() {
vModule.init(); // Inicializa el módulo de voz
}
void loop() {
vModule.say("Hola"); // Haz que el Arduino diga "Hola"
delay(5000); // Espera 5 segundos antes de repetir
}
Por favor, ten en cuenta que este es solo un ejemplo y puede que necesites adaptarlo a tus necesidades
específicas. También necesitarás instalar y configurar las bibliotecas adecuadas para tu módulo de voz.
¡Buena suerte con tu proyecto! 😊
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Descargar