利用GT511C3指纹传感器模块的指纹扫描仪设计

今日头条

1144人已加入

描述

本项目利用GT511C3指纹传感器(FPS)模块,在Aduino开发板上实现了一个高精度、快速响应的指纹扫描仪。项目通过Arduino录入指纹,在需要的时候检测、验证指纹,还可通过硬姐智造PCBA一站式服务将项目从DIY拓展到新兴的生物识别市场。

所需的组件:
Arduino UNO开发板
GT511C3指纹传感器模块
162A LCD显示屏
1K电阻
2K电阻
10K电位器
按钮
连接跳线
面包板


了解GT511C3指纹传感器模块


与电容式、超声波指纹传感器模块不同,GT511C3指纹传感器模块采用光学技术。该模块内置一个摄像头,可以拍摄指纹图案,再由内部HOLTEK ARM Cortex M3 MCU处理这些指纹图案。该扫描仪模块最多可保存200次指纹扫描,并为每个指纹分配一个从0到199的ID。

该光学传感器模块外形小巧,可轻松集成到具有串行UART接口的应用中。模块有四根线:两根线用于TX和RX,两根线用于电源。传感器可在3.3-6V电压范围内工作,通信引脚(Rx和Tx)可承受3.3V电压。

GT511C3模块可通过USB直接与计算机连接。使用USB连接时,可使用SDK_DEMO.exe应用程序控制此模块。此应用程序允许用户录/验证/删除指纹。

 

扫描仪

 

GT511C3模块的特性和规格:
工作电压:3.3-6VDC
工作电流:<130mA
工作温度:~20°C ~ +60°C
CPU:ARM Cortex M3内核(Holtek HT32F2755)
最大指纹数:200个指纹
传感器:光学传感器
串行通信:UART(默认:9600波特)和USB v1.1
错误接受率 (FAR):< 0.001%
错误拒绝率 (FRR): < 0.01%
注册时间 < 3 秒(3个指纹)
识别时间:<1.0秒(200个指纹)

GT511C3指纹传感器模块有4个引脚,红色线是VCC,黑色是GND,绿色线是Rx,白色线是Tx。


GT511C3 SDK演示软件
 

GT511C3 SDK是一套快速入门套件。使用时,首先将指纹传感器连接到USB转TTL模块,将红色线连接到VCC,黑色线连接到GND,绿色线连接到Tx,白色线连接到Rx。

 

扫描仪USB转TTL FTDI模块与GT511C3指纹传感器的UART连接

 

接下来,按以下操作在电脑上使用SDK:
1. 下载 SDK_DEMO.exe
2. 解压文件夹。
3. 进入解压后的目录
4. 打开 SDK_DEMO.exe 可执行文件。
5. 在“串行端口号”下拉菜单中选择FTDI枚举的COM端口。
6. 在波特率的下拉菜单中选择9600。
7. 单击打开按钮。

 

扫描仪

 

连接正确后,将显示固件版本和设备序列号,以及其他选项,例如录取、验证、识别、获取图像、删除、获取数据库等。如果要删除指纹,只需单击“全部删除”选项即可完成。


将GT511C3模块与Arduino连接


根据线路图,将指纹传感器与Arduino连接起来。

 

扫描仪

 

由于传感器UART引脚仅承受3.3V电压,本项目使用了一个由2K电阻和1K电阻组成的分压器网络,将绿色线(Rx)连接到Arduino开发板的D5引脚,将白色线(Tx)连接到Arduino开发板的D4引脚。

 

扫描仪GT511C3 Arduino库

 

现在要做的,就是把GT511C3 Arduino库上传到Arduino IDE。该库由Sparkfun编写,已经在其他类型的指纹传感器上进行了测试。

以下是指纹录入代码:


#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

FPS_GT511C3 fps(4, 5);          //    digital pin 5(arduino Tx, fps Rx)
                               //    digital pin 4(arduino Rx, fps Tx)
void setup()
{
 Serial.begin(9600);           //default baud rate
 delay(100);
 fps.Open();
 fps.SetLED(true);

 Enroll();
}


void Enroll()
{
 int enrollid = 0;             // find open enroll id
 bool okid = true;
 while (okid == true)
 {
   okid = fps.CheckEnrolled(enrollid);
   if (okid==true) enrollid++;
 }
 fps.EnrollStart(enrollid);   // enroll

 
 Serial.print("Press finger to Enroll #"); 
 Serial.println(enrollid);
 while(fps.IsPressFinger() == false) delay(100);
 bool bret = fps.CaptureFinger(true);
 int iret = 0;
 if (bret != false)
 {
   Serial.println("Remove finger");
   fps.Enroll1(); 
   while(fps.IsPressFinger() == true) delay(100);
   Serial.println("Press same finger again");
   while(fps.IsPressFinger() == false) delay(100);
   bret = fps.CaptureFinger(true);
   if (bret != false)
   {
     Serial.println("Remove finger");
     fps.Enroll2();
     while(fps.IsPressFinger() == true) delay(100);
     Serial.println("Press same finger yet again");
     while(fps.IsPressFinger() == false) delay(100);
     bret = fps.CaptureFinger(true);
     if (bret != false)
     {
       Serial.println("Remove finger");
       iret = fps.Enroll3();
       if (iret == 0)
       {
         Serial.println("Enrolling Successfull");
       }
       else
       {
         Serial.print("Enrolling Failed with error code:");
         Serial.println(iret);
       }
     }
     else Serial.println("Failed to capture third finger");
   }
   else Serial.println("Failed to capture second finger");
 }
 else Serial.println("Failed to capture first finger");
}


void loop()
{
 delay(100);
}

上传代码后,打开串口监视器,系统将要求你放置一个手指,进行录入并注册。

 

扫描仪

 

以下是读取指纹的代码:


#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

FPS_GT511C3 fps(4, 5);          //    digital pin 5(arduino Tx, fps Rx)
                               //    digital pin 4(arduino Rx, fps Tx)
void setup()
{
 Serial.begin(9600);           //default baud rate
 delay(100);
 fps.Open();
 fps.SetLED(true);
}

void loop()
{

 // Identify fingerprint test
 if (fps.IsPressFinger())
 {
   fps.CaptureFinger(false);
   int id = fps.Identify1_N();
   if (id <200)
   {
     Serial.print("Verified ID:");
     Serial.println(id);
   }
   else
   {
     Serial.println("Finger not found");
   }
 }
 else
 {
   Serial.println("Please press finger");
 }
 delay(100);
}

 

扫描仪


再次上传代码并进行测试。上传代码后,打开串口监视器,系统将请求放置手指进行验证。你可以放置刚刚注册的手指,也可以随意放一个指头上去,让设备自己读取你的指纹并进行验证对比。


采用Arduino和LCD屏的便携式指纹扫描仪


经过对GT511C3的了解和使用,我们在上述电路图中再添加一个LCD显示屏,就构成了一个简单的便携式指纹扫描仪。

 

扫描仪GT511C3指纹传感器、LCD显示屏与Arduino开发板的连接电路图

 

这里,我们通过一个按钮开关,将GT511C3连接到Arduino数字引脚2。按下按钮时,传感器将进入指纹录入模式。新添加的16x2字符LCD显示屏,用来显示用户与指纹传感器交互时的实时数据。

增加了LCD显示屏后,组合了指纹录入、验证和LCD显示库的完整代码如下:


#include 
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

FPS_GT511C3 fps(4, 5);          //    digital pin 5(arduino Tx, fps Rx)

void setup()
{
 Serial.begin(9600);           //default baud rate
 lcd.begin(16, 2);
 delay(100);
 fps.Open();
 fps.SetLED(true);

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

 lcd.setCursor(4, 0);
 lcd.print("GT511C3");
 lcd.setCursor(3, 1);
 lcd.print("FPS Sensor");
 delay(2500);
}


void loop()
{
 read_fps();

 if (digitalRead(2) == 0) //If button pressed
 {
   Enroll(); //Enroll a fingerprint
 }
 delay(100);
}



void Enroll()
{
 int enrollid = 0;             // find open enroll id
 bool okid = true;
 while (okid == true)
 {
   okid = fps.CheckEnrolled(enrollid);
   if (okid == true) enrollid++;
 }
 fps.EnrollStart(enrollid);   // enroll


 Serial.print("Press finger to Enroll #");
 Serial.println(enrollid);

 lcd.setCursor(0, 0);
 lcd.print("Put Finger to");
 lcd.setCursor(0, 1);
 lcd.print("Enroll: #");
 lcd.print(enrollid);

 while (fps.IsPressFinger() == false)
   delay(100);
 bool bret = fps.CaptureFinger(true);
 int iret = 0;
 if (bret != false)
 {
   Serial.println("Remove finger");
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Remove finger");

   fps.Enroll1();
   while (fps.IsPressFinger() == true)
     delay(100);

   Serial.println("Press same finger again");
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Put same finger");
   lcd.setCursor(0, 1);
   lcd.print("again");

   while (fps.IsPressFinger() == false)
     delay(100);
   bret = fps.CaptureFinger(true);
   if (bret != false)
   {
     Serial.println("Remove finger");
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Remove finger");


     fps.Enroll2();
     while (fps.IsPressFinger() == true)
       delay(100);
     Serial.println("Press same finger yet again");
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Put same finger");
     lcd.setCursor(0, 1);
     lcd.print("yet again");


     while (fps.IsPressFinger() == false)
       delay(100);
     bret = fps.CaptureFinger(true);
     if (bret != false)
     {
       Serial.println("Remove finger");
       iret = fps.Enroll3();
       if (iret == 0)
       {
         Serial.println("Enrolling Successfull");
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Enrolling");
         lcd.setCursor(0, 1);
         lcd.print("Successfull");

       }
       else
       {
         Serial.print("Enrolling Failed with error code:");
         Serial.println(iret);
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Enrolling Failed");
         lcd.setCursor(0, 1);
         lcd.print(iret);
       }
     }
     else
       Serial.println("Failed to capture third finger");
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Failed Capturing");
     lcd.setCursor(0, 1);
     lcd.print("third finger");
   }
   else
     Serial.println("Failed to capture second finger");
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Failed Capturing");
   lcd.setCursor(0, 1);
   lcd.print("second finger");
 }
 else
   Serial.println("Failed to capture first finger");
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Failed Capturing");
 lcd.setCursor(0, 1);
 lcd.print("first finger");
}


void read_fps()
{
 // Identify fingerprint test
 if (fps.IsPressFinger())
 {
   fps.CaptureFinger(false);
   int id = fps.Identify1_N();
   if (id < 200)
   {
     Serial.print("Verified ID:");
     Serial.println(id);

     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Verified ID:");
     lcd.setCursor(0, 1);
     lcd.print(id);
   }
   else
   {
     Serial.println("Finger not found");
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Finger Not Found");
   }
 }
 else
 {
   Serial.println("Please press finger");
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Please Put ");
   lcd.setCursor(0, 1);
   lcd.print("Finger");
 }
 delay(100);
}

选择Arduino Nano开发板型号和COM端口并上传。代码上传完成后,LCD显示屏会提示放置手指,同时,指纹模块中的蓝色LED将会点亮。

如果要录入指纹,请按下按钮,然后扫描手指3次。完成后,指纹录取完毕。

要验证指纹,请将同一根手指放在指纹模块上。

上面就是一个便携式指纹扫描仪模型的制作全过程了。如果你觉得这个项目非常好,还想进行小批量生产,就需要将其中的面包板换成PCB板。这里的PCB打样很简单,硬姐智造PCBA一站式“打样+批量”服务可满足创客的各种定制需求,把项目从DIY拓展到指纹锁、POS机等生物识别领域。
 

 审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分