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;
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 .