Tutorial: Controle de acesso através do Scanner de Impressão Digital GT-511C1 e o Garagino Rev 1

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 Kit Garagino Rev 1 Básico

1x Cabo USB MINI- B 1,80 metros

1x Scanner de Impressão Digital GT-511C1

1x Display LCD 16x2

1x Mini Relay Shield

1x Potenciômetro Mini 10k

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-acionando-lampada-com-mini-relay-shield-e-interruptor-pa

http://labdegaragem.com/profiles/blogs/tutorial-lcd-com-arduino

https://www.sparkfun.com/products/retired/11836

Exibições: 20145

Comentar

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)

Comentário de Raul Wagner Gonçalves da Costa em 16 outubro 2017 às 11:25

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.

Comentário de Luciane Santos Martins em 5 junho 2016 às 14:54

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??

Comentário de varley f rodrigues em 26 janeiro 2016 às 9:31

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!

Comentário de Paulo Adriano da Silva em 8 dezembro 2015 às 19:19

Boa noite, 

Fiz meu projeto trabalho de relatório de estagio com a Blackboard, similar a placa do Arduíno uno e fiz um diagrama de ligação e gostaria que vocês dessem uma olhada e analisassem se esta certo. 

Obrigado.

Comentário de Rafael da Silva em 30 outubro 2015 às 23:59

Olá,

Gostaria de saber como realizar esse projeto com o Arduino Mega.

Comentário de Cleber Roberto Movio em 7 outubro 2015 às 21:42
Gostaria de saber se é possível obter as digitais e sente ter ficar armazenando no leitor, estou tentando utilizar em meu TCC e eu precisaria das digitais para guardar em uma base de dados, nesse caso eu faria a validação se o hash gerado é valido, tem como?
Comentário de Luciane Santos Martins em 7 outubro 2015 às 15:20

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?

Comentário de mineirin RV em 1 outubro 2015 às 12:42

Oi LSM, bom dia,

fiz este desenho para tentar adaptar o Mega no lugar do garagino.

Por favor de uma conferida nas ligações.

Rui

Comentário de Luciane Santos Martins em 1 outubro 2015 às 12:30

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.

Comentário de Vitor Hugo Becker em 8 maio 2015 às 13:03

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?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço