Modulo Seguridad usando Sensor de Huella Dactilar
Módulo de Seguridad usando Sensor de Huella
En este nuevo proyecto vamos un circuito que nos permita controlar el acceso o activación de un dispositivo electrónico usando un sensor de huella dactilar. Este módulo se desarrolló con el fin de ser aplicado en diferentes areas, en esta ocasión vamos a controlar el encendido de una computadora, algo sencillo pero un proyecto muy interesante que nos sirve para iniciar la prueba de nuestro modulo.
El circuito estará compuesto por 3 salidas, una de ellas de un relé con el cual podremos controlar cargas AC o DC de potencia y dos salidas de transistor MOSFET para control de cargas DC o realizar conmutaciones como es el caso de esta aplicación. El módulo contara 3 entradas de pulsadores con el cual podremos controlar la interfaz, para realizar registro de huellas o eliminar. Para visualizar lo estados del circuito utilizaremos una pantalla oled de 0.96 pulgadas y un diodo LED indicador.
/*
Este codigo ha sido creado por RAOM Eléctronica
Mas información en:
WWW.YOUTUBE.COM/RAOMELECTRONICA
*/
//#include <Wire.h>
//#include <LCD.h>
//#include <LiquidCrystal_I2C.h>
#include <Adafruit_Fingerprint.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
//LiquidCrystal_I2C lcd (0x27,2,1,0,4,5,6,7); //Direccion, E, RW, RS, D4, D5, D6, D7
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial);
uint8_t id;
int num1=0; //Conteo pulsación 1
int p1=7; //Digitos contraseña
int p2=10;
int p3=3;
int c1=0; //Memoria contraseña
int c2=0;
int c3=0;
int numID = 1; // Numero ID verificacicion ciclo for
int IN0Previo=1; //Valor previo pulsador
void setup()
{
u8g2.begin(); // On Display
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
//u8g2.drawStr(0,32,"Hello World 30123456!");
//u8g2.drawStr(0,42,"Hello World 40123456!");
//u8g2.drawStr(0,52,"Hello World 50123456!");
//u8g2.drawStr(0,62,"Hello World 60!123456");
//u8g2.sendBuffer();
//pinMode (D0,INPUT);
//pinMode (D1,INPUT);
pinMode (D10,INPUT);
pinMode (D9,INPUT);
pinMode (D8,INPUT);
pinMode (D0,OUTPUT);
digitalWrite(D0,HIGH);
pinMode (D1,OUTPUT);
digitalWrite(D1,HIGH);
pinMode (D2,OUTPUT);
digitalWrite(D2,LOW);
pinMode (D3,OUTPUT);
digitalWrite(D3,LOW);
// lcd.setBacklightPin(3,POSITIVE);
// lcd.setBacklight(HIGH);
// lcd.begin(16,2);
// lcd.clear();
//Serial.begin(57600);
finger.begin(57600);
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"BIENVENIDO");
u8g2.sendBuffer();
//lcd.setCursor(0,0);
//lcd.print("RAOM Electronica");
//lcd.setCursor(0,1);
//lcd.print("Bievenido");
delay(2000);
//lcd.clear();
u8g2.clearBuffer();
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"Fingerprint Encontrado");
u8g2.sendBuffer();
//lcd.setCursor(0,0);
//lcd.print("Foundfingerprint");
delay(2000);
} else {
u8g2.clearBuffer();
Serial.println("Did not find fingerprint sensor :(");
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"No fingerprint");
u8g2.sendBuffer();
//lcd.setCursor(0,0);
//lcd.print("No fingerprint");
delay(2000);
while (1) { delay(1); }
}
u8g2.clearBuffer();
//lcd.clear();
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
}
return num;
}
void loop()
{
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"Esperando...");
u8g2.sendBuffer();
//lcd.setCursor(0,0);
//lcd.print("Esperando:");
////////////////////////////////////////////////////////////////AGREGAR ID/////////////////////////////////////////////////////////////////////
if(digitalRead(D10)==0)
{
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"AGREGAR ID");
//u8g2.drawStr(0,62,"NUMERO ID");
u8g2.sendBuffer();
//lcd.setCursor(0,0);
//lcd.print("Agregar ID:");
//lcd.setCursor(0,1);
//lcd.print("Numero ID:");
delay(500);
while(c1!=p1 or c2!=p2 or c3!=p3 or digitalRead(D10)==1 ){
if (digitalRead(D9)!=1)
{c1=c1+1;}
if (digitalRead(D10)!=1)
{c2=c2+1;}
if (digitalRead(D8)!=1)
{c3=c3+1;}
u8g2.clearBuffer();
u8g2.drawStr(0,32,"*CONTRASENA*");
u8g2.drawStr(0,42,"C1=");
u8g2.setCursor(50,42);
u8g2.print(c1);
u8g2.drawStr(0,52,"C1=");
u8g2.setCursor(50,52);
u8g2.print(c2);
u8g2.drawStr(0,62,"C3=");
u8g2.setCursor(50,62);
u8g2.print(c3);
u8g2.sendBuffer();
}
while(digitalRead(D9)==1)
{
if (digitalRead(D8)!=1)
{num1=num1+1;}
delay(10);
//IN0Previo=digitalRead(D8);
u8g2.clearBuffer();
u8g2.drawStr(0,32,"AGREGAR ID");
u8g2.drawStr(0,62,"NUMERO ID");
u8g2.setCursor(90,62);
u8g2.print(num1);
u8g2.sendBuffer();
//lcd.setCursor(11,1);
//lcd.print(num1);
}
//lcd.setCursor(11,1);
//lcd.print("Numero ID:");
c1=0;// reinicio contraseña
c2=0;// reinicio contraseña
c3=0;// reinicio contraseña
id = num1;//readnumber();
num1=0; /////////////////////// reset de id
if (id == 0) {// ID #0 not allowed, try again!
return;
}
//Serial.print("Enrolling ID #");
//Serial.println(id);
while (! getFingerprintEnroll() );
}
//////////////////////////////////////////////////////////////LEER ID///////////////////////////////////////////////
else {
getFingerprintIDez();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//lcd.setCursor(0,0);
//lcd.print(" "); // Para borrar los datos que se actualizan y evitar el parpadeo de la pantalla.
//lcd.setCursor(12,1);
//lcd.print(" ");
//lcd.clear();
//delay(200);
///////////////////////////////////////////////////////getFingerprintEnroll//////////////////////////////////////////////////////
uint8_t getFingerprintEnroll() {
int p = -1;
//Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
digitalWrite(D3, HIGH); //////////////colocar dedo
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"COLOCAR HUELLA");
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("Colocar Huella ");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
Serial.println("Remove finger");
digitalWrite(D3, LOW); ////////////////// retirar dedo
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"RETIRAR HUELLA");
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("Retirar Huella ");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
digitalWrite(D3, HIGH); //////////////colocar dedo
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"COLOCAR HUELLA");
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("Colocar Huella ");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
digitalWrite(D3, LOW); ////////////////// retirar dedo
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"RETIRAR HUELLA");;
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("Retirar Huella ");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
Serial.print("Creating model for #"); Serial.println(id);
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
Serial.print("ID "); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"ID AGREGADO");
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("ID Agregado! ");
digitalWrite(D3, HIGH); ///////CONFIRMACION DE ID AGREGADO///////
delay(50);
digitalWrite(D3, LOW);
delay(50);
digitalWrite(D3, HIGH);
delay(50);
digitalWrite(D3, LOW);
delay(2000);
//lcd.clear();
u8g2.clearBuffer();
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.println("Unknown error");
return p;
}
return true;
}
//////////////////////////////////////////////////////////////getFingerprintID///////////////////////////////////////////////
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
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;
/////////// Encender moto ////////////////////////
for (numID; numID < 100; numID++) {
if(finger.fingerID == numID)
{
digitalWrite(D3, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D0, LOW);
digitalWrite(D1, LOW);
}
}
numID=0;
u8g2.clearBuffer();
u8g2.drawStr(0,32,"RAOM Electronica");
u8g2.drawStr(0,52,"ACCESO OK");
u8g2.sendBuffer();
//lcd.setCursor(0,1);
//lcd.print("ACCESO OK! ");
delay(1000);
//lcd.clear();
u8g2.clearBuffer();
digitalWrite(D3, LOW);
digitalWrite(D2, LOW);
digitalWrite(D0, HIGH);
digitalWrite(D1, HIGH);
return finger.fingerID;
}
Modulo Seguridad usando Sensor de Huella Dactilar
Project images are for reference only. Actual production is based on the manufacturing files on the project page.
Please review the designer's notes (e.g., PCB thickness) and select the appropriate options.
PCBWay is not responsible
for issues caused by unsuitable parameter selections.
For more important ordering information, please refer to
Read More
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(0)
- Likes(1)
-
Vedia30
Mar 06,2023
- 1 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-
2design
-
3usability
-
4creativity
-
5content
More by RAOM Electrónica
-
Modulo Seguridad usando Sensor de Huella Dactilar
Módulo de Seguridad usando Sensor de HuellaEn este nuevo proyecto vamos un circuito que nos permita ...
-
Barra de luz LED RGB GAMER
En este proyecto realizaremos un circuito de control para unas barra de luz LED RGB con micrófono ut...
-
Tiras LED Audio Rítmicas RGB
En este proyecto realizaremos el montaje de luces conocidas como Audio Rítmicas. El circuito utiliza...
-
RAYO CON LUCES PROGRAMABLES WS2812B
LUCES PROGRAMABLES WS2812B CON ARDUINO NANOEn este proyecto realizamos un dise?o enfocado en los apa...
-
MODULO RFID
Este modulo tiene como principal función brindar seguridad mediante el modulo RFID, este proyecto se...
-
Sensor óptico - Secador de manos
Sensor optico infrarro aplicado a un secador de manosEn este proyecto realizaremos un sesor óptico ...
-
Alarma Laser de Barrera
En el vídeo de hoy realizaremos este genial proyecto de una alarma, la cual cuenta con 4 diodos láse...
-
Modulo huella digital para moto
Como encender una moto con huella digital?Modulo PCB para encender moto por huellaEl circuito esta d...
-
Interruptor Infrarrojo ON-OFF 220 V AC
En el video de hoy les ense?aré a realizar un INTERRUPTOR OPTICO INFRARROJO , anteriormente habíamos...
-
Interruptor óptico - Apagado Automático - Proyecto de electrónica - I CAN SOLDER
Interruptor óptico con apagado Automático utilizando Sensores InfrarrojoHace mucho estaba interesad...
-
Programmable Mist Maker - XIAO / QT PY Extension
1408 2 1 -
RadioHAT - Raspberry Pi radio development platform
1187 0 3 -
QWIIC-VL53L4CD Time-of-Flight Distance Sensor Module
1395 0 1 -
-
-
-
ARPS-2 – Arduino-Compatible Robot Project Shield for Arduino UNO
3552 0 6 -
-
A Compact Charging Breakout Board For Waveshare ESP32-C3
4227 3 8 -
AI-driven LoRa & LLM-enabled Kiosk & Food Delivery System
4607 2 2







