Biometria e Arduino

Neste post vou mostrar pra vocês como construir um controle de acesso Biométrico Utilizando uma Placa Arduino e um leitor Biométrico.

PARA TUTORIAIS EM VÍDEO, INSCREVA-SE NO CANAL DO YOUTUBE, BASTA CLICAR NO BOTÃO ABAIXO:

inscreva-se

Materiais:
Arduíno, qualquer modelo ;

Modulo Relé de um canal;

Leitor Biométrico FPM10A;

Fecho eletromagnético;

Fonte de alimentação de 9 a 12 Volts;

Fios Jumper;

Visor LCD com Modulo Serial i2c (Opcional).

As Bibliotecas e códigos de programação usados neste post podem ser baixadas clicando no botão abaixo:

Antes de começar informamos que a ligação errada dos componentes pode danificar as peças, por este motivo siga este tutorial com muita atenção, o sensor biométrico modelo “FPM10A” tem capacidade para cadastramento de 127 biometrias, isso mesmo a biometria fica salva no próprio dispositivo e desta forma os dados biométricos não serão perdidos em caso de queda de energia ou desligamento do conjunto.

O projeto foi montado numa caixinha de papelão e coberto com EVA, mas para testar você pode montar tudo numa protoboard e depois montar o projeto onde quiser, seja numa caixa de papelão, num recipiente plastico ou em algo impresso em impressora 3D;

Sistema de Acesso por Biometria by NK

Depois que você reunir todos os matérias  siga o esquema de montagem abaixo:

Esquema de Montagem do Projeto

Alguns leitores biométricos deste mesmo modelo vem com as cores dos fios iguais, neste caso você vai precisar das imagens abaixo para auxiliar na ligação correta:

Neste projeto a presença do Visor LCD pode ser descartada!

Note que no esquema de ligação existe um modulo rele que quando ativado vai liberar tensão vinda da saída “VIN” do arduino, desta forma incitando o fecho elétrico e assim liberando acesso.

Depois que você terminar de montar tudo, chegou a hora de enviar o primeiro código do projeto para o Arduíno, este código serve para cadastramento da biometria no leitor. Nesta etapa você pode copiar o código logo abaixo e colar na IDE do Arduíno ou então você pode abrir o código de cadastramento disponível no pacote de arquivos do projeto apresentado no começo deste artigo.

#include <Adafruit_Fingerprint.h></pre>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
// comment these two lines if using hardware serial
#include <SoftwareSerial.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("Sensor Biometrico Encontrado!");
} else {
Serial.println("Sensor Biometrico Não Encontrado :(");
while (1) { delay(1); }
}
}

uint8_t readnumber(void) {
uint8_t num = 0;

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

void loop() // run over and over again
{
Serial.println("Ready to enroll a fingerprint!");
Serial.println("Por favor escolha o ID do usuario seguido de # (Pode ser um numero entre 1 e 127) ...");
id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
return;
}
Serial.print("Gravando ID #");
Serial.println(id);

while (! getFingerprintEnroll() );
}

uint8_t getFingerprintEnroll() {

int p = -1;
Serial.print("Esperando dedo para gravacao"); 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 de Comunicacao");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Erro de 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("Imagen confusa");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Erro de Comunicacao");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Não foi possível encontrar recursos de impressão digital");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Não foi possível encontrar recursos de impressão digital");
return p;
default:
Serial.println("Erro Desconhecido");
return p;
}

Serial.println("Remova 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 de Comunicacao");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Erro de 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 confusa");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Erro de Comunicacao");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Não foi possível encontrar recursos de impressão digital");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Não foi possível encontrar recursos de impressão digital");
return p;
default:
Serial.println("Unknown error");
return p;
}

// OK converted!
Serial.print("Criando Modelo para #"); Serial.println(id);

p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Impressoes combinadas!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Erro de comunicacao");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Biometrias nao conferem");
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 de Comunicacao");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Não pode armazenar neste local");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Erro de Escrita em Flash");
return p;
} else {
Serial.println("Erro Desconhecido");
return p;
}
}

Depois que você enviar o código acima utilizando a IDE do Arduíno abra o Serial monitor:

Se tudo correr bem você vai perceber que o programa vai começar a ser executado conforme a imagem abaixo:

Dai basta você digitar no próprio Serial Monitor o ID para salvar os dados biométricos, podendo ser qualquer numero de 1 a 127, sempre seguido de #, por exemplo:

Logo quando você atribuir um ID de usuário basta seguir as instruções para cadastramento, colocando e e removendo o dedo.

Note que assim que a biometria for armazenada, você já pode cadastrar outro ID, pode acontecer de o programa ficar em loop pedindo para você colocar o dedo infinitamente, caso isso aconteça você pode fechar o Serial Monitor, a ID atribuída já terá sido gravada e você pode gravar outra.

Depois que você gravar todas as biometrias que desejar, chegou a hora de enviar o programa abaixo para de fato executar a liberação do acesso:

// Programa para teste de funcionamento do Leitor Biometrico
// Traduzido e adaptado por Usinainfo

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);

int getFingerprintIDez();

SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Liberar Acesso?");
lcd.setCursor(1,1);
lcd.print("Insira o Dedo!");
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
finger.begin(57600);

}

void loop()
{
getFingerprintIDez();
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
delay(50);
}

uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:

break;
case FINGERPRINT_NOFINGER:

return p;
case FINGERPRINT_PACKETRECIEVEERR:
return p;
case FINGERPRINT_IMAGEFAIL:

return p;
default:

return p;
}

p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:

break;
case FINGERPRINT_IMAGEMESS:

return p;
case FINGERPRINT_PACKETRECIEVEERR:

return p;
case FINGERPRINT_FEATUREFAIL:

return p;
case FINGERPRINT_INVALIDIMAGE:

return p;
default:

return p;
}

p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

return p;
} else if (p == FINGERPRINT_NOTFOUND) {

return p;
} else {

return p;
}

}

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(11, LOW);
digitalWrite(12, HIGH);
lcd.setCursor(0,0);
lcd.print("Acesso Liberado!");
lcd.setCursor(0,1);
lcd.print("Acesso Liberado!");
delay(500);
digitalWrite(12, LOW);
delay(500);
digitalWrite(11, HIGH);
lcd.clear();
lcd.print("Liberar Acesso?");
lcd.setCursor(1,1);
lcd.print("Insira o Dedo!");
return finger.fingerID;
}

No caso do código acima temos um exemplo com o uso do Visor LCD Serial, caso você tenha tirado este item do projeto você pode utilizar os outros códigos que estão no pacote de download disponibilizado no inicio deste artigo.

Depois que você enviar este ultimo código seu sistema de controle de acesso por biometria já vai estar funcionado!

Se quiser mais detalhes do projeto assista o vídeo abaixo e aproveita pra se inscrever no canal NerdKing!

Referencia:
https://blog.usinainfo.com.br/leitor-biometrico-arduino-sistema-de-cadastramento-e-leitura-de-digitais/

O post termina aqui, deixe sua duvida ou sugestão aqui nos comentários e compartilhe a iniciativa NerdKing com seus amigos, tudo de bom pra vocês e até a próxima… 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Receba Algo Incrível Preencha seus dados

Preencha seus dados e receba algo incrível.
Não fique fora dessa!