Lector huella biométrica Arduino

publicado en: blog | 0
lector-de-huella-dactilar-dsp-as606-sensor-biometrico-makerelectronico-8

Este lector de huella dactilar esta basado en el chip AS606, Además, internamente tiene un sensor óptico y un micro-procesador de 32 bits de alta velocidad que le permiten almacenar hasta 160 huellas dactilares diferentes en su memoria interna. Tambien, posee un algoritmo de reconocimiento y captura de alta velocidad que le permite procesar y almacenar datos en milésimas de segundos.

Gracias a su protocolo de comunicación Uart/Ttl se puede conectar a una gran variedad de Microcontroladores como arduino, pic, atmega, msp430 y otros. Así que, solo se necesita 4 lineas para poder controlar este lector biométrico: +5v, gnd, tx y rx. Esto, sin duda alguna, facilita la rápida elaboración y montaje de un circuito para probar este grandioso dispositivo.

En este tutorial vamos a éxplicar como conectar el lector de huellas dactilares a una placa Arduino Uno R3. Luego, para la elaboración de código, vamos a utilizar la librería que nos facilita nuestros amigos de adafruit. Por último, para poder visualizar todos los datos que se enviar y reciben se utilizará el terminal serie del arduino.

Librería arduino para lector biométrico

Código arduino – leer huella y grabarlo en memoria

#include <Adafruit_Fingerprint.h>
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup(){
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

  // set the data rate for the sensor serial port
  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }
}

void loop(){
  Serial.println("Ready to enroll a fingerprint!");
  Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
  id = readnumber();
  if (id == 0) {// ID #0 not allowed, try again!
    return;
  }
  Serial.print("Enrolling ID #");
  Serial.println(id);

  while (!  getFingerprintEnroll() );
}
uint8_t readnumber(void) {
  uint8_t num = 0;

  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();
  }
  return num;
}
uint8_t getFingerprintEnroll(void) {

  int p = -1;
  Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
  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");
  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");
  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");
      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!");
  } 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;
  }
}

Monitor serie – pasos para grabar huellas

dsp-as06-lector-huella-dactilar-arduino-makerelectronico-1
dsp-as06-lector-huella-dactilar-arduino-makerelectronico-2

Paso 1. Abrimos el Monitor serie de Arduino para empezar a grabar las huellas y seguimos las instrucciones. La primer huella la guardamos en la posición 1 y luego le damos enter y seguimos las instrucciones.

Si la huella se registro correctamente mostrara el mensaje “Huella dactilares SI coinciden!” , seguido de la posición donde se guardo y el mensaje “Registrado!”

Paso 2. Para guardar mas de una huella, el sensor permite hasta 162 huellas, volvemos a teclear ahora el numero de la siguiente posicion donde la queremos guardar, que en este ejemplo seria la posicion 2, tecleamos 2 y presionamos enter y seguimos de nuevo las mismas instrucciones hasta grabar todas las huellas necesarias, siempre indicando una posicion diferente para que no se sobreescriba una ya guardada.

Paso 3. Por ultimo cargamos el programa final que leera las huellas, si la huella leida coincide con una de las que estan almacenadas, se activara el led que esta conectado al Pin 13 del Arduino por 3 segundos.

COMPRA TU LECTOR BIOMÉTRICO AQUÍ

Deja una respuesta