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

Load Previous Comments
  • varley f rodrigues

    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!

  • Luciane Santos Martins

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

  • Raul Wagner Gonçalves da Costa

    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.