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
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
- Comments(0)
- Likes(1)
- Vedia30 Mar 06,2023
- 0 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
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...
-
Build a Walking Robot: Theo Jansen Style 3D Printed Octopod
142 0 4 -
-
-
kmMiniSchield MIDI I/O - IN/OUT/THROUGH MIDI extension for kmMidiMini
141 0 0 -
DIY Laser Power Meter with Arduino
217 0 2 -
-
-
Box & Bolt, 3D Printed Cardboard Crafting Tools
187 0 2