Sensor de huellas dactilares DY50 con Arduino

El sensor óptico de huellas dactilares DY50 hace que agregar detección y verificación de huellas dactilares sea muy simple. Estos módulos se utilizan normalmente en cajas fuertes: hay un chip DSP de alta potencia que realiza la representación, el cálculo, la búsqueda de características y la búsqueda de imágenes. Se puede conectar a cualquier microcontrolador o sistema con TTL serial. También puede registrar nuevos dedos directamente: hasta 162 huellas dactilares se pueden almacenar en la memoria FLASH integrada.

Características

  • Supply voltage: 3.6 – 6.0VDC
  • Operating current: 120mA max
  • Peak current: 150mA max
  • Fingerprint imaging time: <1.0 seconds
  • Window area: 14mm x 18mm
  • Signature file: 256 bytes
  • Template file: 512 bytes
  • Storage capacity: 162 templates
  • Safety ratings (1-5 low to high safety)
  • False Acceptance Rate: <0.001% (Security level 3)
  • False Reject Rate: <1.0% (Security level 3)
  • Interface: TTL Serial
  • Baud rate: 9600, 19200, 28800, 38400, 57600 (default is 57600)
  • Working temperature rating: -20C to +50C
  • Working humidy: 40%-85% RH
  • Full Dimensions: 56 x 20 x 21.5mm
  • Exposed Dimensions (when placed in box): 21mm x 21mm x 21mm triangular
  • Weight: 20 grams

Pines del sensor

biometric_file.png
#include <Adafruit_Fingerprint.h>

//CONFIGURACIONES BIOMÉTRICO
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int id_finding;
int id;
int temp;
char resp;

void setup() {
  Serial.begin(9600);  
  while (!Serial);  // For Yun/Leo/Micro/Zero/...

  //SETUP BIOMÉTRICO
  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println("Sensor biometrico encontrado!");
  } else {
    Serial.println("No se encontro el sensor biometrico :(");
    while (1) { delay(1); }
  }
  delay(1000);
}

void loop() {
 //LOOP PARA BIOMéTRICO
  //mensaje = "";
  id_finding = getFingerprintIDez();
  if(id_finding==0){
      Serial.println("Usuario no identificado");
      finger.getTemplateCount();
      id = finger.templateCount +1;
      Serial.print("Desea registrar enn el ID: ");
      Serial.println(id);
      while(!Serial.available());
      if(Serial.readString()=="si"){
        Serial.println("Registrando");
        getFingerprintEnroll(id);
        return;
        }
      Serial.println("Continua");
      
  }else if(id_finding>0){
      Serial.println("Usuario identificado");
      Serial.println("ID: "+String(id_finding));
  }

  //Serial.println(id_finding);
  delay(50);      
}

//FUNCTION TO REGISTER A FINGERPRINT
uint8_t getFingerprintEnroll(int id_enroll) {
  int p = -1;
  //Serial.print("Registrando ID: "); 
  //Serial.println(id_enroll);
  Serial.println("Coloque su dedo");
  temp=0;
  while(temp<5000){
    temp++;
    //Serial.println(temp);
    p = finger.getImage();
    switch (p) {
      case FINGERPRINT_OK:
        Serial.println("Huella leida");
        break;
      default:
        //Serial.println("Unknown error 1");
        break;
    }
    if (p == FINGERPRINT_OK) {
      break;//termina el while
    }
  }
  if (temp>=5000){
    Serial.println("Termino el tiempo");
    return 0;
    }
  // OK success!

  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Imagen convertida");
      break;
    default:
      Serial.println("Error conviertiendo imagen");
      return p;
  }
  Serial.println("Retire el dedo");
  delay(2000);
  Serial.println("Coloque el dedo nuevamente");
  temp = 0;
  while (temp<5000) {
    temp++; 
    //Serial.println(temp);
    p = finger.getImage();
    if(p == FINGERPRINT_OK){
      Serial.println("Huella leida");
      break;
    }   
  }
  if (temp==5000){
    Serial.println("Termino el tiempo");
    return 0;
    }
  // OK success!
  p = finger.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Imagen convertida");
      break;
    default:
      Serial.println("Error convirtiendo imagen");
      return p;
  }
  // OK converted!
  Serial.print("Creando modelo para el ID: ");  
  Serial.println(id_enroll);
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("Modelo correcto!");
  } else {
    Serial.println("Error creando modelo");
    return p;
  }   
  
  p = finger.storeModel(id_enroll);
  if (p == FINGERPRINT_OK) {
    Serial.println("Guardado!");
  } else {
    Serial.println("Error guardando");
    return p;
  }
  return 1;   
}
//FUNCIONES PARA EL BIOMÉTRICO
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 0;
 
  return finger.fingerID; 
}