Arduino开发板连接GT511C3指纹传感器的方法

生物识别技术,作为一种高度可靠的验证系统,已经得到了长期的应用和认可。当前市场上涌现出众多复杂的生物识别系统,它们能够基于个体的心跳模式、甚至DNA信息来准确识别身份。而在这些识别技术中,语音识别、人脸识别、虹膜扫描和指纹识别等方法尤为突出。特别是指纹识别,由于其便捷性和准确性,已广泛应用于各个领域,从基础的考勤系统到智能手机解锁,再到安全检查等,都能看到它的身影。

在本文中,我们将探讨如何利用Arduino开发板和流行的GT511C3指纹传感器(FPS)来实现指纹识别功能。虽然指纹传感器市场上有多种型号,但GT511C3以其高精度和快速的响应速度脱颖而出。因此,我们将详细介绍如何在Arduino开发板上集成这款传感器,学习如何注册指纹信息,并在需要时快速、准确地识别指纹。接下来,就让我们一起开始这次有趣的探索之旅吧。

所需的组件

●    Arduino Nano / UNO

●    GT511C3指纹传感器

●    1602液晶屏

●    按钮

●    连接线

●    面包板

GT511C3指纹传感器(FPS)模块

在开始深入探索这个项目之前,让我们先揭开GT511C3指纹传感器模块的神秘面纱,并理解它的工作原理。与智能手机中常见的电容式或超声波指纹传感器不同,GT511C3是一款采用光学技术的指纹传感器。它依赖的不是电子信号的变化,而是通过捕获指纹的图像来进行识别。是的,你没有听错,这款传感器内部其实配备了一个摄像头,它能够捕捉到指纹的详细图像。随后,这些图像会被传感器内集成的强大ARM Cortex M3 IC进行高效处理。下面,我们将通过图示展示这款传感器的正反面以及它的引脚布局,以便更直观地了解它的结构。

如您所见,传感器有一个由蓝色LED环绕的摄像头(黑点),这些LED必须点亮才能拍出清晰的指纹图像。然后使用与EEPROM配合的ARM微控制器处理这些图像并将其转换为二进制值。该模块还有一个绿色SMD LED指示电源。每个指纹图像为202×258像素,分辨率为450dpi。传感器最多可以注册200个指纹,每个指纹模板都会分配0到199的ID格式。然后在检测过程中,它会自动将扫描的指纹与所有200个模板进行比较,如果找到匹配,则会给出该特定的ID号。 ARM微控制器上使用Smack Finger 3.0算法的指纹。传感器可以在3.3V至6V的电压下工作,并通过9600的串行通信进行通信。通信引脚(Rx和Tx)据说只能承受3.3V的电压,但是数据表没有详细说明。 GT511C3 FPS的引脚输出如下所示。

除了串行通信之外,模块还可以使用上一张图片中所示的引脚通过USB连接直接连接到计算机。连接到计算机后,可以使用SDK_DEMO.exe应用程序控制模块,该应用程序可以从链接下载。该应用程序允许用户注册/验证/删除指纹以及识别指纹。该软件还可以帮助您读取传感器捕获的图像,值得一试。或者,即使传感器与Arduino连接,您也可以使用此软件,我们将在本文后面讨论。

关于传感器的另一个有趣特征是传感区域周围的金属外壳。正如我之前所说,必须打开蓝色LED才能让传感器工作。但在传感器应主动等待指纹的应用中,不可能始终保持LED开启,因为它会加热传感器并因此损坏传感器。因此,在这些情况下,金属外壳可以连接到MCU的电容式触摸输入引脚,以检测它是否被触摸。如果是,则可以打开LED并且可以开始感测过程。此方法未在此处演示,因为它超出了本文的范围。

传感器在3.3V下工作时,消耗约130mA电流。注册手指需要将近3秒,识别它需要1秒。但是,如果登记的模板计数较少,则识别速度将很高。有关传感器的更多详细信息,请参阅ADH-Tech的数据表,该数据表是该模块的官方制造商。

将GT511C3指纹传感器与Arduino连接

GT511C3 FPS有两个电源引脚,可以通过Arduino的+ 5V引脚和两个通信引脚Rx和Tx供电,可以连接到Arduino的任何数字引脚进行串行通信。此外,我们还添加了一个按钮和一个LCD来显示传感器状态。 GT511C3 FPS与Arduino连接的完整电路图如下所示。

由于Rx和Tx引脚是3.3V电平,我们在Rx侧使用了一个分压器将5V转换为3.3V。 10k电阻和22k电阻将来自Arduino Tx引脚的5V信号转换为3.3V,然后到达FPS的Rx引脚。传感器也可以通过3.3V供电,但要确保您的Arduino可以为传感器提供足够的电流。我们已将4位模式的LCD连接到由Arduino的5V引脚供电。按钮连接到引脚D2,当按下该按钮时,程序将进入注册模式,用户可以在其中注册新手指。注册后,程序将保持扫描模式,扫描任何触摸传感器的手指。

Arduino与GT511C3

如前所述,GT511C3 FPS通过串行通信进行通信,传感器理解十六进制代码,并且对于每个十六进制代码执行特定操作。如果您感兴趣,可以查看数据表以了解所有十六进制值及其相应的功能。但是,幸运的是我们bboyho已经创建了一个库,可以直接与Arduino一起使用来注册和检测指纹。可以从以下链接下载GT511C3 FPS的Github库:GT511C3 Arduino Library

该链接将下载ZIP文件,然后您必须按照Sketch  – > Include Library  – > Add .ZIP Library命令将其添加到Arduino IDE中。添加库后重新启动IDE,您应该能够在File  – > Example  – > Fingerprint Scanner TTL下找到GT511C3 FSP的示例程序,如下所示

您应该看到四个示例程序,闪烁程序将闪烁FPS上的蓝色LED,注册和ID指针程序可用于相应地注册和识别手指。请注意,即使已关闭电源,一旦注册了手指,模块将始终记住该手指。

Serial Pass-through程序可以上传到Arduino以使用我们在本文前面讨论过的Demo_SDK.exe应用程序。要删除任何指纹模板或在计算机上保存副本,可以使用此SDK应用程序。

为GT511C3指纹传感器编程Arduino

我们的目标是编写一个程序,当按下按钮时,该程序将注册一个手指,并显示已注册的手指的ID号。我们还应该能够在LCD上显示所有信息,以使项目成为独立的项目。完成相同操作的完整代码在本页底部给出。在这里,我们拆成小片段,以帮助您更好地理解。

我们一如既往地通过包含所需的库来开始程序,在这里我们将需要FPS_GT511C3库用于FPS模块,SoftwareSerial库用于使用D4和D5进行串行通信,Liquid crystal库用于连接LCD。然后我们需要提到FPS和LCD连接到哪些引脚。如果按照电路图,则FPS为4和5,LCD为D6至D11。代码如下所示

#include "FPS_GT511C3.h" //Get library from https://github.com/sparkfun/Fingerprint_Scanner-TTL
#include "SoftwareSerial.h" //Software serial library
#include <LiquidCrystal.h> //Library for LCD

FPS_GT511C3 fps(4, 5); //FPS connected to D4 and D5

const int rs = 6, en = 7, d4 = 8, d5 = 9, d6 = 10, d7 = 11; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//Initialize LCD method

setup()函数中,我们在LCD上显示一些介绍性消息,然后初始化FPS模块。命令fps.SetLED(true)将打开传感器上的蓝色LED,您可以在不需要时将其关闭fps.SetLED(false),因为如果连续打开传感器会加热传感器。我们还将引脚D2作为输入引脚并将其连接到内部上拉电阻,以便将按钮连接到引脚。

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2); //Initialise 16*2 LCD
  lcd.print("GT511C3 FPS"); //Intro Message line 1
  lcd.setCursor(0, 1);
  lcd.print("with Arduino"); //Intro Message line 2
  delay(2000);
  lcd.clear();

  fps.Open();         //send serial command to initialize fp
  fps.SetLED(true);   //turn on LED so fps can see fingerprint

  pinMode(2,INPUT_PULLUP); //Connect to internal pull up resistor as input pin
}

void loop函数内部,我们必须检查按钮是否被按下,如果按下,我们将注册一个新的手指并使用注册enroll函数将其模板与ID号一起保存。 如果不是,我们将继续等待在传感器中按下手指。 如果按下,我们将通过使用1:N方法将指纹与所有登记的指纹模板进行比较来识别指纹。 一旦发现ID,我们将显示欢迎信息,然后显示ID。 如果指纹与任何已登记的手指不匹配,则id计数将为200,在这种情况下,我们将显示welcome unknown。

 if (digitalRead(2))//If button pressed
  {
  Enroll(); //Enroll a fingerprint
  }

// Identify fingerprint test
  if (fps.IsPressFinger())
  {
    fps.CaptureFinger(false);
    int id = fps.Identify1_N();
      lcd.clear();
      lcd.print("Welcome:");
      if (id==200) lcd.print("Unkown  "); //If not recognised
      lcd.print(id);
      delay(1000);
  }

enroll()函数必须采用三个样本输入才能成功注册一个手指。 一旦注册,将创建该特定手指的模板,除非用户通过HEX命令强制它,否则不会删除该模板。 注册手指的代码如下所示。 IsPressFinger方法用于检查是否检测到手指,如果是,则使用CaptureFinger捕获图像,最后使用Enroll1、Enroll2和Enroll3三个不同的样本成功注册一根手指。 如果成功注册,LCD将显示手指的ID号,否则将显示带代码的失败消息。 代码1表示未完全捕获指纹,因此您必须再次尝试。 代码2是内存故障指示,代码3是指示手指已经注册。

void Enroll() //Enrol function from library exmaple program
{
  int enrollid = 0;
  bool usedid = true;
  while (usedid == true)
  {
    usedid = fps.CheckEnrolled(enrollid);
    if (usedid==true) enrollid++;
  }
  fps.EnrollStart(enrollid);
  // enroll
  lcd.print("Enroll #");
  lcd.print(enrollid);
  while(fps.IsPressFinger() == false) delay(100);
  bool bret = fps.CaptureFinger(true);
  int iret = 0;
  if (bret != false)
  {
    lcd.clear();
    lcd.print("Remove finger");
    fps.Enroll1();
    while(fps.IsPressFinger() == true) delay(100);
    lcd.clear(); lcd.print("Press again");
    while(fps.IsPressFinger() == false) delay(100);
    bret = fps.CaptureFinger(true);
    if (bret != false)
    {
      lcd.clear(); lcd.print("Remove finger");
      fps.Enroll2();
      while(fps.IsPressFinger() == true) delay(100);
      lcd.clear(); lcd.print("Press yet again");
      while(fps.IsPressFinger() == false) delay(100);
      bret = fps.CaptureFinger(true);
      if (bret != false)
      {
        lcd.clear(); lcd.print("Remove finger");
        iret = fps.Enroll3();
        if (iret == 0)
        {
          lcd.clear(); lcd.print("Enrolling Success");
        }
        else
        {
          lcd.clear();
          lcd.print("Enroll Failed:");
          lcd.print(iret);
        }
      }
      else lcd.print("Failed 1");
    }
    else lcd.print("Failed 2");
  }
  else lcd.print("Failed 3");
}

使用Arduino处理GT511C3指纹传感器

现在我们的硬件和代码已准备就绪,现在是时候测试我们的项目了。将代码上传到Arduino并启动它,我只是使用micro-usb端口为项目供电。在启动时,我们应该在LCD上看到介绍消息然后它应该显示“Hi!..”。这意味着FPS已准备好扫描手指,如果按下任何已注册的手指,它将显示“Welcome”,然后是该手指的ID号,如下所示。

如果必须注册新手指,我们可以使用按钮进入注册模式并按照LCD指令注册手指。注册过程完成后,LCD将再次显示“Hi!..”,表示已读取该符号以再次识别手指。

从本文中,您可以使用指纹传感器模块在此基础上开发许多有趣的东西。希望您理解本教程并喜欢构建有用的东西,如果您有任何问题,请在本帖下面进行回复。

Similar Posts

Leave a Reply