Olá garagista, no tutorial de hoje irei ensinar a criar um controle de acesso completo via impressão digital de uma forma bem simples e fácil, esse é um tutorial bem aguardado.
Material utilizado:
1x Cabo USB MINI- B 1,80 metros
1x Scanner de Impressão Digital GT-511C1
2x Chave Tactil
2x Resistor 10K
1. Scanner de Impressão Digital GT-511C1
Figura 1- Scanner de Impressão Digital GT-511C1
Scanners de impressões digitais são impressionantes. Por que usar uma chave quando você tem uma bem na ponta do seu dedo? Infelizmente, eles são geralmente incertos ou de difícil implementação. Bem, não mais! Nós encontramos este grande módulo de impressão digital da ADH-Tech que se comunica através do Serial TTL, assim você pode facilmente implementa-lo em seu próximo projeto.
O módulo em si faz todo o trabalho pesado por trás da leitura e identificação das impressões digitais, com um sensor óptico on-board e CPU de 32 bits. Tudo o que você precisa fazer é enviar comandos simples. Para começar, basta registrar cada impressão digital que você deseja armazenar enviando o comando correspondente e pressionando o dedo contra o leitor três vezes. O Scanner de impressão digital pode armazenar até 20 impressões digitais diferentes e o banco de dados de impressões ainda pode ser baixado a partir da unidade e distribuído para outros módulos. Bem como a impressão digital "modelo", a versão analisada da impressão, você pode também recuperar a imagem de uma impressão digital e até mesmo puxar imagens brutas do sensor óptico! O módulo é pequeno e fácil de montar utilizando duas guias de montagem no lado do sensor. O conector JST-SH on-board tem quatro sinais: VCC, GND, Tx, Rx.
Características
• Alta Velocidade e Precisão na Identificação usando o Algoritmo SmackFinger 3.0
• Baixa as imagens de impressões digitais a partir do dispositivo.]
• Le e Escreve as impressões digitais tanto o modelo quanto as que estão armazenadas no bancos de dados
• Protocolo simples UART (padrão 115200 baud)
• Capaz de verificar 1:1 e Identificar 1: N
• Atua tanto em 3,3v como 5v dispensando o uso de divisor de tensão.
Nota :
Desligamentos inesperados podem causar podem causar defeito ao módulo.
Para prevenir isto, o dispositivo de controle deve desativar o módulo enquanto o mesmo estiver ocioso. O comando Close é usado para verificar se o módulo esta ocioso.
Para maiores detalhes clique aqui.
2. Montagem do hardware
Figura 2- Montagem completa
3. Funcionamento
Na montagem utilizamos a Mini Relay Shield responsável pela abertura da fechadura eletrônica e afins, já o display de LCD mostrará as mensagens pré determinadas por nós, ou seja, você pode personalizar o seu projeto de baixo custo, inserir nomes, mensagens de natal e muitas outras.
Lembrando que esse é um projeto com fins didáticos que você pode(e deve) alterar por segurança, pois o botão da esquerda é responsável pela gravação de digitais, você pressiona e espera a mensagem no LCD realizando os comandos conforme pedido. Já o botão da direita é responsável por apagar os dados armazenados ao registrar digitais, todos os dados serão removidos. Existem outros comandos,porém nesse tutorial iremos abordar apenas alguns e se você tiver alguma dúvida ou quiser executar outras funções acesse o manual de instruções.
OBS. Para esse tutorial iremos utilizar essa versão da biblioteca FPS_GT511C3, devido a constatantes atualizações recomendamos sempre verificar a ultima versão da biblioteca que pode ser encontrado no link a baixo, a skech desse tutorial pode não funcionar com versões mais atuais.
A sketch abaixo foi adaptada, corrigida e melhorada por nós, pois havia alguns erros e pequenos problemas. Os exemplos da bibliotecas podem conter alguns erros pois não foram alterados.
4. Sketch
/*
Josh Hawley, July 23rd 2013
Licensed for non-commercial use, must include this license message
TLDR; Wil Wheaton's Law
Essa sketch grava e identifica digitais
Alterado para a versão GT-511C1 e corrigido por Marco Silva by LDG
*/
int rec = 6;//Botao 1
int zero = 7;//Botao 2
int rele = 8;//Botao 2
int temp = 0;//Comparador
#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
// Hardware setup - FPS connected to:
// digital pin 4(arduino rx, fps tx)
// digital pin 5(arduino tx, fps rx)
LiquidCrystal lcd(2, 3, 9, 10, 11, 12); //Configura os pinos do Arduino para se comunicar com o LCD
FPS_GT511C3 fps(4, 5);//Configura os tx e rx scanner
void setup()
{
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
delay(100);
fps.Open();
fps.SetLED(true);
//Define pinos como entrada
pinMode(rec, INPUT);
pinMode(zero, INPUT);
pinMode(rele, OUTPUT);
}
void loop()
{
//Faz a leitura dos botoes e grava seus estados
int rec1 = digitalRead(rec);
int zero1 = digitalRead(zero);
//Requerindo o cadastro de novas digitais
if(rec1==0)
{
//Printa as informações no LCD
lcd.clear();// Limpa do buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Novo cadastro");
lcd.setCursor(0, 1);
lcd.print("Aguarde");
delay(2000);//Aguarda 2 segundos
lcd.clear();// Limpa do buffer do LCD
lcd.setCursor(0,0);
lcd.print("Posicione o dedo");
lcd.setCursor(0, 1);
lcd.print("no Scanner Cad.");
//Chama a função que faráos registros de novas digitais
Enroll();
}
//Zerando o registro de digitais
if(zero1==0)
{
fps.DeleteAll();// Apaga todo o registro de memoria de digitais
//Printa as informações no LCD
lcd.clear(); // Limpa do buffer do LCD
lcd.setCursor(0, 0);
lcd.print("O Registro foi");
lcd.setCursor(0, 1);
lcd.print("Apagado");
delay(2000);//Aguarda 2 segundos
}
// Identificando digitais
if (fps.IsPressFinger())
{
fps.CaptureFinger(false);//Realiza a leitura da digital no scanner
int id = fps.Identify1_N();//Salva na variavel id o codido de identificação da digital
if (id <20)//Compara se é menor que 20, no caso do modelo GT-511C1 voce consegue armazenar ate 20 digitais diferentes
// Ou seja se for menor é porque esta cadastrado
{
//Printa as informações no LCD se houver reconhecimento de dados
lcd.clear();// Limpa do buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Liberado ID:");
lcd.setCursor(13,0);
lcd.print(id);
lcd.setCursor(0, 1);
lcd.print("Bem Vindo");
digitalWrite(rele,1);
delay(1000);//Aguarda 1 segundos
digitalWrite(rele,0);
delay(1000);//Aguarda 1 segundos
}
else
{
//Printa as informações no LCD se nao houve reconhecimento de dados
lcd.clear();// Limpa do buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Nao reconhecido");
lcd.setCursor(0, 1);
lcd.print("ID Nao Cadast.");
delay(1500);//Aguarda 2 segundos
}
}
else
{
//Printa as informações no LCD se nao houve reconhecimento de dados
lcd.setCursor(0, 0);
lcd.print("Pressione o dedo");
lcd.setCursor(0, 1);
lcd.print("no Scanner ");
}
}
//Funcao responsavel por cadastar impressoes digitais
void Enroll()
{
int enrollid = 0;
//É verificado quantos digitais tem cadastradas, e selecionandoa proxima posição disponivel para armazenamento
//======================================================================================
bool usedid = true;
while (usedid == true)
{
usedid = fps.CheckEnrolled(enrollid);
if (usedid==true) enrollid++;
}
fps.EnrollStart(enrollid);
temp=enrollid;
//======================================================================================
//Aguarda até que o dedo seja retirado do scanner
while(fps.IsPressFinger() == false) delay(100);
bool bret = fps.CaptureFinger(true);
int iret = 0;
//Se conseguir realizar alguma leitura a variavel "bret" valerá 1
if (bret != false)
{
//Se for diferente de 0 irá printar a informação para que o dedo seja removido do scanner
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Remova o dedo");
fps.Enroll1();//Salva a primeira informacao da digital
//Aguarda até que o dedo seja retirado do scanner
while(fps.IsPressFinger() == true) delay(100);
lcd.clear();//Limpa o buffer do LCD
//Solicita que o dedo seja pressionado no scanner novamente
lcd.setCursor(0, 0);
lcd.print("Pressione o dedo");
lcd.setCursor(0, 1);
lcd.print("Novamente");
//Aguarda até que o dedo seja retirado do scanner
while(fps.IsPressFinger() == false) delay(100);
//Repete tudo por mais 2 vezes
//=====================================================================================
bret = fps.CaptureFinger(true);
if (bret != false)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Remova o dedo");
fps.Enroll2();
while(fps.IsPressFinger() == true) delay(100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pressione o dedo");
lcd.setCursor(0, 1);
lcd.print("Novamente");
while(fps.IsPressFinger() == false) delay(100);
//====================================================================================
//====================================================================================
bret = fps.CaptureFinger(true);
if (bret != false)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Remova o dedo");
iret = fps.Enroll3();
//===================================================================================
//Nessa parte é verificado se se o cadastro foi realizado com sucesso
enrollid=0;
usedid = true;
while (usedid == true)
{
usedid = fps.CheckEnrolled(enrollid);
if (usedid==true) enrollid++;
}
//Compara se o dedo foi pressionado 3 vezes e se a posição anterior da memoria é igualk a atual
if (iret == 0&&temp!=enrollid)
{
//Se for igual printará as informações no LCD e salva automaticamente na memória
lcd.clear();//Limpa o buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Cadastro feito");
lcd.setCursor(0, 1);
lcd.print("Com sucesso");
lcd.setCursor(13, 1);
lcd.print(enrollid);
delay(1000);//Aguarda 1 segundo
}
else
{
//Se não printará uma informação acusando falha
lcd.clear();//Limpa o buffer do LCD
lcd.setCursor(0, 0);
lcd.print("Cadastro falho");
lcd.setCursor(0, 1);
lcd.print("Tente novamente");
delay(1000);//Aguarda 1 segundo
}
}
// Se houver falhas durante a captura printará umas das 3 mensagens abaixo, de acordo com cada posição
//Erro 1
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Falha na captura");
lcd.setCursor(0, 1);
lcd.print("Do primeiro dedo");
delay(1000);
}
//====================================================================================
}
//Erro 2
else {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Falha na captura"); //Escreve no LCD "Olá Garagista!"
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Do segundo dedo");
delay(1000);
}
//=====================================================================================
}
//Erro 3
else {
lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Falha na captura"); //Escreve no LCD "Olá Garagista!"
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("Do terceiro dedo");
delay(1000);
}
//======================================================================================
}
Referências
https://www.youtube.com/watch?v=07RsKU6-oTo&list=UUqTTLZZB_YD1Zxyiw8qJJgA
http://labdegaragem.com/profiles/blogs/tutorial-lcd-com-arduino
Comentar
Bom dia,
Gostaria de saber se esse leitor de digital poderia armazenar as digitais em um arquivo (Excel), e de acordo com a digital informada ele consultar o banco de dados (planilha em Excel) e registrar o nome, horario e hora.
Obrigado.
Boa Tarde a todos!
preciso de ajuda, estou utilizando o Scanner GT-511c1, no meu projeto, mais ele esta aquecendo muito e mesmo com o Divisor de Tensão para comunicar com o Arduíno ele não esta ligando. O aquecimento é na CPU do mesmo.
Sera que Alguém pode me ajudar??
Gostaria de adquirir o kit garagino básico e o Scanner de Impressão Digital GT-511C1
citado nesse projeto, os demais itens necessários eu já tenho. Favor informar se há na loja e se possível preço dos itens.
Agradeço a atenção!
Olá,
Gostaria de saber como realizar esse projeto com o Arduino Mega.
Boa tarde!
Preciso de ajuda, estou no Nono Semestre de Engenharia Elétrica, portanto eu e meu grupo estamos elaborando nosso TCC. Escolhemos criar um controlador de Acesso utilizando como interface de comunicação e possibilidade de criar logicas, o Arduíno. Durante as pesquisas encontramos o tutorial aqui do Garagem que era exatamente oque queríamos, um controlador de acesso por Biometria que pudesse ser projetado utilizando o Arduíno. Como já possuíamos o Arduíno compramos apenas o Scanner, Agora não consigo fazer Funcional.
Fiz a montagem creio que corretamente, estou utilizando a Sketc deste tutorial, já fiz as alterações das entradas e saídas e add a biblioteca do Scanner no Arduíno, porem nada, nem o Scanner acende a luz azul e não indica informação alguma no LCD.
Gostaria de saber se alguém já utilizou esta Scanner com Arduíno Mega, ou teve esta mesma dificuldade que talvez tenha encontrado a solução e possa me ajudar?
Bom dia Rui!
Estou desenvolvendo um controlador de Acesso com base no projeto descrito acima, mais não utilizarei o Garagino, vou utilizar o Arduíno Mega.
Já solucionei algumas duvidas com Você na sala de Bate Papo.
Aguardo Desenho Orientativo.
Bom dia galera. Sou novo no fórum e estou com uma dificuldade referente a esses leitores biometricos mais arduino. Ja tenho uma base de dados oracle onde um dos dados armazenados é a biometria do paciente. Não a foto, mas a hash. E to querendo instalar uma catraca, onde eu nao precise cadastrar na catraca os usuários... até porque tenho 166 mil pessoas no cadastro... teria que ler a digital e enviar ela para algum lugar, que poderia ser um PHP ou com um YUN Shield que tenho para comparar essa hash com a da base de dados e posteriormente retornar um libera ou nao libera, talvez o nome, para o arduino imprimir no LCD da catraca. Alguem teve sorte integrando um abase de digitais remota?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Switch to the Mobile Optimized View
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)