I. OBJETIVOS
Armaremos el lector de huella programado por arduino.
II. MATERIALES
Lector de huellas
Arduino 1
III. INTRODUCCION
¿Qué es ARDUINO?
Por lo tanto:
Para poder utilizar el dispositivo es necesario guardar las huellas en la base de datos
del mismo. Estas huellas se les asigna un ID. Posteriormente se puede iniciar la
secuencia de lectura y comparación para verificar las huellas de los usuarios y así
poder discernir y ejecutar acciones en base al resultado.
Para utilizar el código de ejemplo es necesario primero tomar en cuenta que los
cables del dispositivo no tienen acoplado ningún conector por lo que se recomienda
soldar pines macho o pines hembra, ya que los headers de arduino o de un
protoboard no hacen bien contacto y son motivo de que el dispositivo no funcione
correctamente.
Lector de huella digital
IV. PROCEDIMIENTO
Para la elaboración necesitaremos de una librería para poder realizar el código en
ARDUINO.
La librería a utilizar es:
Ardafruit_fingerprint.h
La cual es la siguiente:
#ifndef ADAFRUIT_FINGERPRINT_H
#define ADAFRUIT_FINGERPRINT_H
#include "Arduino.h"
#if defined(__AVR__) || defined(ESP8266)
#include <SoftwareSerial.h>
#elif defined(FREEDOM_E300_HIFIVE1)
#include <SoftwareSerial32.h>
#define SoftwareSerial SoftwareSerial32
#endif
//#define FINGERPRINT_DEBUG
uint8_t emptyDatabase(void);
uint8_t storeModel(uint16_t id);
uint8_t loadModel(uint16_t id);
uint8_t getModel(void);
uint8_t deleteModel(uint16_t id);
uint8_t fingerFastSearch(void);
uint8_t getTemplateCount(void);
uint8_t setPassword(uint32_t password);
void writeStructuredPacket(const
Adafruit_Fingerprint_Packet & p);
uint8_t
getStructuredPacket(Adafruit_Fingerprint_Packet * p,
uint16_t timeout=DEFAULTTIMEOUT);
private:
uint8_t checkPassword(void);
uint32_t thePassword;
uint32_t theAddress;
uint8_t recvPacket[20];
Stream *mySerial;
#if defined(__AVR__) || defined(ESP8266) ||
defined(FREEDOM_E300_HIFIVE1)
SoftwareSerial *swSerial;
#endif
HardwareSerial *hwSerial;
};
#endif
#include <SoftwareSerial.h>
uint8_t id;
void setup()
{
Serial.begin(9600);
while (!Serial);
delay(100);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Sensor encontrado!");
//Se mostrara este mensaje si el software reconoce el dispositivo en este caso el lector
de huella
} else {
Serial.println("Sensor NO encontrado");
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
return num;
}
void loop() //la acción se repetirá
id = readnumber();
return;
Serial.print("Registrando huella");
Serial.println(id);
while (! getFingerprintEnroll() );
uint8_t getFingerprintEnroll() {
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(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Error de imagen");
break;
default:
Serial.println("Error desconocido");
break;
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Imagen convertida");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Imagen no clara");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Error");
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
Serial.println("Error desconocido");
return p;
Serial.println("Retire el dedo");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
p = -1;
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image tomada");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Error de imagen");
break;
default:
Serial.println("Error desconocido");
break;
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image convertida");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Imagen no clara");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Error");
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
Serial.println("Error desconocido");
return p;
p = finger.createModel();
if (p == FINGERPRINT_OK) {
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
return p;
} else {
Serial.println("Error desconocido");
return p;
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Almacenado");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
return p;
} else if (p == FINGERPRINT_FLASHERR) {
return p;
} else {
Serial.println("error desconocido");
return p;
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
void setup()
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
Serial.begin(9600);
delay(100);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Sensor encontrado");
} else {
Serial.println("Sensor no encontrado");
finger.getTemplateCount();
getFingerprintIDez();
delay(50); //don't ned to run this at full speed.
digitalWrite(5,HIGH);
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
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:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
return p;
} else {
Serial.println("Unknown error");
return p;
// found a match!
return finger.fingerID;
uint8_t p = finger.getImage();
p = finger.image2Tz();
p = finger.fingerFastSearch();
// found a match!
digitalWrite(5,LOW);
digitalWrite(4,HIGH);
delay(1000);
digitalWrite(4,LOW);
return finger.fingerID;
}
Detector de huella