ESTUDANDO O MUNDO ARDUINO:E ANTECIPANDO O FUTURO:

SENSOR BIOMÉTRICO DE IMPRESSÃO DIGITAL

acessar com  www.ebanataw.com.br/arduino/expbiometrico.htm

O sensor de impressão digital é um sensor óptico de impressão digital, que "lê" a impressão do dedo, compara com as impressões guardadas na sua memória e indica para o Arduíno se a impressão lida  é igual a uma das impressões guardadas na memória.

A capacidade de armazenamento na memória é de cerca de 120 impressões.

Um LED acende indicando o estado de leitura.

Constituído por seis fios, o Leitor Biométrico utiliza somente quatro destes para realizar o seu funcionamento, no qual temos um fio que corresponde ao GND, VCC, TX e RX, observe a relação de cores:

– Preto:      GND;
– Branco:    RX;
– Verde:      TX;
– Vermelho: VCC.

O funcionamento do sensor Biométrico é feito em 2 etapas, uma para o cadastramento das impressões e outro para a identificação.

Antes de darmos início à programação do Leitor Biométrico, entre no link abaixo e realize o Download da biblioteca necessária para o desenvolvimento da montagem.

LINK PARA DOWNLOAD  (http://blog.usinainfo.com.br/wp-content/uploads/2016/07/Sensor-Biométrico.zip)

Feito o download, descompacte a pasta “Sensor Biométrico” na pasta exemplos do Arduino e a pasta “Sensor Biométrico Library-master” na pasta Library do Arduino.

1° PASSO

Neste primeiro momento vamos realizar a conexão do nosso equipamento junto ao Arduino para realizar a leitura e o cadastramento das digitais, processo o qual será melhor detalhado no transcorrer do projeto em um passo-a-passo ilustrativo e de fácil compreensão.

OBS: O pino Amarela e Azul contido no cabo do produto não será utilizado em nosso projeto.

PROGRAMA-1 ENROL.INO:

// Programa para teste de funcionamento do Leitor Biometrico

// Traduzido e adaptado por Usinainfo

 

#include <Adafruit_Fingerprint.h>

#include <SoftwareSerial.h>

 

uint8_t id;

 

uint8_t getFingerprintEnroll();

 

SoftwareSerial mySerial(2, 3); // Pino 2 como entrada do sensor (fio Verde)

                               // Pino 3 como saída do sendor (fio Branco)

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

 

void setup()  {

  Serial.begin(9600);

  Serial.println("Procurando Leitor Biometrico ...");

 

  finger.begin(57600);   // Define a taxa de dados para a porta serial do sensor

 

  if (finger.verifyPassword()) {

    Serial.println("Leitor Biometrico encontrado");

  }

  else {

    Serial.println("Leitor Biometrico nao encontrado");

    while (1);

  }

}

 

uint8_t readnumber(void) {

  uint8_t num = 0;

  boolean validnum = false;

  while (1) {

    while (! Serial.available());

    char c = Serial.read();

    if (isdigit(c)) {

      num *= 10;

      num += c - '0';

      validnum = true;

    } else if (validnum) {

      return num;

    }

  }

}

 

void loop()   {

  Serial.println("Pronto para Cadastrar Dados! Indique o ID# o qual deve ser salvo");

  id = readnumber();

  Serial.print("Inscrever ID#");

  Serial.println(id);

 

  while (!  getFingerprintEnroll() );

}

 

uint8_t getFingerprintEnroll() {

 

  int p = -1;

  Serial.print("Esperando digital para inscrever #");

  Serial.println(id);

  while (p != FINGERPRINT_OK) {

    p = finger.getImage();

    switch (p) {

      case FINGERPRINT_OK:

        Serial.println("Imagem Capturada");

        break;

      case FINGERPRINT_NOFINGER:

        Serial.println(".");

        break;

      case FINGERPRINT_PACKETRECIEVEERR:

        Serial.println("Erro ao se Comunicar");

        break;

      case FINGERPRINT_IMAGEFAIL:

        Serial.println("Erro ao Capturar Imagem");

        break;

      default:

        Serial.println("Erro Desconhecido");

        break;

    }

  }

 

  // OK success!

 

  p = finger.image2Tz(1);

  switch (p) {

    case FINGERPRINT_OK:

      Serial.println("Imagem convertida");

      break;

    case FINGERPRINT_IMAGEMESS:

      Serial.println("Imagem muito Confusa");

      return p;

    case FINGERPRINT_PACKETRECIEVEERR:

      Serial.println("Erro ao se Comunicar");

      return p;

    case FINGERPRINT_FEATUREFAIL:

      Serial.println("Impossivel encontrar caracteristicas da digital");

      return p;

    case FINGERPRINT_INVALIDIMAGE:

      Serial.println("Impossível encontrar características da digital");

      return p;

    default:

      Serial.println("Erro Desconhecido");

      return p;

  }

 

  Serial.println("Retire o dedo");

  delay(2000);

  p = 0;

  while (p != FINGERPRINT_NOFINGER) {

    p = finger.getImage();

  }

  Serial.print("ID ");

  Serial.println(id);

  p = -1;

  Serial.println("Coloque o mesmo dedo novamente");

  while (p != FINGERPRINT_OK) {

    p = finger.getImage();

    switch (p) {

      case FINGERPRINT_OK:

        Serial.println("Imagem Capturada");

        break;

      case FINGERPRINT_NOFINGER:

        Serial.print(".");

        break;

      case FINGERPRINT_PACKETRECIEVEERR:

        Serial.println("Erro ao se Comunicar");

        break;

      case FINGERPRINT_IMAGEFAIL:

        Serial.println("Erro ao Capturar Imagem");

        break;

      default:

        Serial.println("Erro Desconhecido");

        break;

    }

  }

 

  // OK success!

 

  p = finger.image2Tz(2);

  switch (p) {

    case FINGERPRINT_OK:

      Serial.println("Imagem Convertida");

      break;

    case FINGERPRINT_IMAGEMESS:

      Serial.println("Imagem muito Confusa");

      return p;

    case FINGERPRINT_PACKETRECIEVEERR:

      Serial.println("Erro ao se comunicar");

      return p;

    case FINGERPRINT_FEATUREFAIL:

      Serial.println("Nao foi possível encontrar características da impressao digital");

      return p;

    case FINGERPRINT_INVALIDIMAGE:

      Serial.println("Nao foi possível encontrar características da impressao digital");

      return p;

    default:

      Serial.println("Erro Desconhecido");

      return p;

  }

 

  // OK converted!

  Serial.print("Criando cadastro para #");

  Serial.println(id);

 

  p = finger.createModel();

  if (p == FINGERPRINT_OK) {

    Serial.println("Digital Combinada");

  }

  else if (p == FINGERPRINT_PACKETRECIEVEERR) {

    Serial.println("Erro ao se Comunicar");

    return p;

  }

  else if (p == FINGERPRINT_ENROLLMISMATCH) {

    Serial.println("Digital nao corresponde");

    return p;

  }

  else {

    Serial.println("Erro Desconhecido");

    return p;

  }

 

  Serial.print("ID ");

  Serial.println(id);

  p = finger.storeModel(id);

  if (p == FINGERPRINT_OK) {

    Serial.println("Armazenado!");

  }

  else if (p == FINGERPRINT_PACKETRECIEVEERR) {

    Serial.println("Erro ao se Comunicar");

    return p;

  }

  else if (p == FINGERPRINT_BADLOCATION) {

    Serial.println("Impossível Armazenar Dados");

    return p;

  }

  else if (p == FINGERPRINT_FLASHERR) {

    Serial.println("Erro ao salvar na memoria");

    return p;

  }

  else {

    Serial.println("Erro Desconhecido");

    return p;

  }

}

 

PROGRAMA-2 FINGERPRINT.INO: 

// Programa para teste de funcionamento do Leitor Biometrico

// Traduzido e adaptado por Usinainfo

 

#include <Adafruit_Fingerprint.h>

#include <SoftwareSerial.h>

 

int getFingerprintIDez();

 

SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

 

void setup()  { 

  Serial.begin(9600);

  Serial.println("Iniciando Leitor Biometrico");

  pinMode(11, OUTPUT);

  pinMode(12, OUTPUT);

 

  finger.begin(57600);

 

  if (finger.verifyPassword()) {

    Serial.println("Leitor Biometrico Encontrado");

  } else {

    Serial.println("Leitor Biometrico nao encontrada");

    while (1);

  }

  Serial.println("Esperando Dedo para Verificar");

}

 

void loop()                  

{

  getFingerprintIDez();

  digitalWrite(12, HIGH);

  delay(50);         

}

 

uint8_t getFingerprintID() {

  uint8_t p = finger.getImage();

  switch (p) {

    case FINGERPRINT_OK:

      Serial.println("Imagem Capturada");

      break;

    case FINGERPRINT_NOFINGER:

      Serial.println("Dedo nao Localizado");

      return p;

    case FINGERPRINT_PACKETRECIEVEERR:

      Serial.println("Erro ao se comunicar");

      return p;

    case FINGERPRINT_IMAGEFAIL:

      Serial.println("Erro ao Capturar");

      return p;

    default:

      Serial.println("Erro desconhecido");

      return p;

  }

 

  p = finger.image2Tz();

  switch (p) {

    case FINGERPRINT_OK:

      Serial.println("Imagem Convertida");

      break;

    case FINGERPRINT_IMAGEMESS:

      Serial.println("Imagem muito confusa");

      return p;

    case FINGERPRINT_PACKETRECIEVEERR:

      Serial.println("Erro ao se comunicar");

      return p;

    case FINGERPRINT_FEATUREFAIL:

      Serial.println("Impossivel localizar Digital");

      return p;

    case FINGERPRINT_INVALIDIMAGE:

      Serial.println("Impossivel Localizar Digital");

      return p;

    default:

      Serial.println("Erro Desconhecido");

      return p;

  }

 

  p = finger.fingerFastSearch();

  if (p == FINGERPRINT_OK) {

    Serial.println("Digital Encontrada");

  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {

    Serial.println("Erro ao se comunicar");

    return p;

  } else if (p == FINGERPRINT_NOTFOUND) {

    Serial.println("Digital Desconhecida");

    return p;

  } else {

    Serial.println("Erro Desconhecido");

    return p;

  }  

 

  Serial.print("ID # Encontrado");

  Serial.print(finger.fingerID);

  Serial.print(" com precisao de ");

  Serial.println(finger.confidence);

}

 

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;

 

  digitalWrite(12, LOW);

  digitalWrite(11, HIGH);

  delay(1000);

  digitalWrite(11, LOW);

  delay(1000);

  digitalWrite(12, HIGH);

  Serial.print("ID # Encontrado");

  Serial.print(finger.fingerID);

  Serial.print(" com precisao de ");

  Serial.println(finger.confidence);

  return finger.fingerID;

}

 

DIMENSÕES DO SENSOR PARA VOCÊ FAZER O SEU PROJETO: 

Veja dois exemplos práticos de porta cuja fechadura é controlada por um Sensor Biométrico de Impressão Digital.

 

 

 

NOTA: Este site é mantido pela equipe do engenheiro Roberto Massaru Watanabe e se destina principalmente para adolecentes e estudantes. Pelo caráter pedagógico do site, seu conteúdo pode ser livremente copiado, impresso e distribuido. Só não pode piratear, isto é, copiar e depois divulgar como se fosse de sua autoria.


ET-18\RMW\arduino\biometrico.htm em 24/03/2018, atualizado em 03/01/2020 .