- 所需材料
- GT511C3指纹传感器(FPS)模块
- 将GT511C3指纹传感器与Arduino连接
- 带有GT511C3的Arduino
- 为GT511C3指纹传感器编程Arduino
- GT511C3指纹传感器与Arduino的配合使用
长期以来,生物识别技术已用作可靠的身份验证系统。如今,存在着复杂的生物特征识别系统,可以通过一个人的心律或DNA来识别一个人。其他可行的方法包括语音识别,面部识别,虹膜扫描和指纹扫描。指纹识别是最广泛使用的方法,从简单的考勤系统到智能手机,再到安全检查等等,我们可以找到它。
在本教程中,我们将学习如何将流行的GT511C3指纹传感器(FPS)与Arduino结合使用。有很多FPS可用,我们已经学习了如何使用它们来构建考勤系统,投票机,安全系统等设计。但是GT511C3更加先进,具有高精度和更快的响应时间,因此我们将学习如何使用它使用Arduino在其上注册指纹,然后在需要时检测指纹。因此,让我们开始吧。
所需材料
- Arduino Nano / UNO
- GT511C3指纹传感器
- 16x2液晶屏
- 电位器– 10k和1k,10k,22k电阻
- 按钮
- 连接线
- 面包板
GT511C3指纹传感器(FPS)模块
在深入研究项目之前,让我们了解GT511C3指纹传感器模块及其工作原理。该传感器与智能手机中常用的电容式和超声波指纹传感器大不相同。所述GT511C3是光学指纹传感器,这意味着它依赖于指纹识别其图案的图像。是的,您没看错,传感器内部实际上有一个摄像头,可以为您的指纹拍照,然后使用功能强大的内置ARM Cortex M3 IC处理这些图像。下图显示了带有引脚分配的传感器的正面和背面。
如您所见,传感器的相机(黑点)被蓝色的LED包围,这些LED必须点亮以拍摄清晰的指纹图像。然后使用ARM微控制器和EEPROM将这些图像处理并转换为二进制值。该模块还具有绿色的SMD LED指示电源。每个指纹图像均为202x258像素,分辨率为450dpi。该传感器最多可以注册200个指纹,并且为每个指纹模板分配一个ID格式0至199。然后在检测过程中,它可以自动将扫描的指纹与所有200个模板进行比较,如果找到匹配项,则使用Smack Finger 3.0给出特定指纹的ID号。ARM微控制器上的算法。该传感器可在3.3V至6V的电压范围内工作,并通过9600的串行通信进行通信。据说通信引脚(Rx和Tx)只能承受3.3V的电压,但是数据手册中对此没有太多说明。 GT511C3 FPS的引脚排列如下所示。
除了串行通讯之外,该模块还可以使用上图所示的针脚通过USB连接直接连接到计算机。连接到计算机后,可以使用SDK_DEMO.exe应用程序控制该模块,该应用程序可以从链接下载。该应用程序允许用户注册/验证/删除指纹,也可以识别指纹。该软件还可以帮助您读取传感器捕获的图像,值得一试。另外,即使传感器与Arduino连接,您也可以使用此软件,我们将在本文后面对此进行讨论。
关于传感器的另一个有趣的功能是传感区域周围的金属外壳。正如我之前所说,必须打开蓝色LED才能使传感器正常工作。但是在传感器应主动等待指纹的应用中,由于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信号转换为FPS的Rx引脚之前的3.3V。传感器也可以由3.3V供电,但是请确保您的Arduino可以为传感器提供足够的电流。我们已经以Arduino的5V引脚供电的4位模式连接了LCD。一个按钮连接到引脚D2,按下该按钮会将程序置于注册模式,用户可以在其中注册新手指。注册后,程序将保持扫描模式,以扫描是否有任何手指触摸传感器。
带有GT511C3的Arduino
如前所述,GT511C3 FPS通过串行通信进行通信,传感器可以识别十六进制代码,并且对于每个十六进制代码都执行特定的操作。如果您有兴趣,可以查看数据表以了解所有十六进制值及其对应的功能。但是,对我们 来说 幸运的是, bboyho 已经创建了一个库,可以直接与Arduino一起使用来注册和检测指纹。可以从下面的链接下载GT511C3 FPS的Github库
GT511C3 Arduino库
该链接将下载一个ZIP文件,然后您必须按照命令 Sketch-> Include Library- > Add.ZIP Library将其添加到Arduino IDE。添加库后,重新启动IDE,您应该能够在File-> Example-> Fingerprint Scanner TTL下找到GT511C3 FSP的示例程序,如下所示
您应该看到四个示例程序,闪烁程序将使FPS上的蓝色指示灯闪烁,可以使用注册和ID手指程序来相应地注册和识别手指。请注意,即使已断电,手指也始终会被模块记住。
可以将串行传递程序上载到Arduino,以使用我们在本文前面讨论的 Demo_SDK.exe 应用程序。要删除任何指纹模板或将副本保存到您的计算机上,可以使用此SDK应用程序。
为GT511C3指纹传感器编程Arduino
我们的目标是编写一个程序,该程序将在按下按钮时注册一个手指,并显示已经注册的手指的ID号。我们还应该能够在LCD上显示所有信息,以使该项目成为独立的项目。完成此操作的完整代码在本页底部。在这里,我将这些内容分解为小片段,以帮助您更好地理解。
像往常一样,我们通过包含所需的库来开始程序,在这里我们将需要FPS模块的FPS_GT511C3库,在串行通信中使用D4和D5的软件串行以及用于LCD接口的液晶。然后我们需要提及FPS和LCD连接到哪个引脚。如果您遵循了这样的电路图,那么FPS为4和5,LCD为D6至D11。相同的代码如下所示
#include“ FPS_GT511C3.h” //从https://github.com/sparkfun/Fingerprint_Scanner-TTL获取库 #include“ SoftwareSerial.h” //软件串行库 #include
在 设置 功能内部,我们在LCD上显示一些介绍性信息,然后初始化FPS模块。命令fps.SetLED(true)将打开传感器上的蓝色LED,不需要时可以通过fps.SetLED(false)将其关闭,因为如果持续打开该按钮会加热传感器。我们也将D2引脚作为输入引脚,并将其连接到内部上拉电阻,以便将按钮连接到该引脚。
void setup() { Serial.begin(9600); lcd.begin(16,2); //初始化16 * 2 LCD lcd.print(“ GT511C3 FPS”); //简介消息行1 lcd.setCursor(0,1); lcd.print(“ with Arduino”); // Intro Message line 2 delay(2000); lcd.clear(); fps.Open(); //发送串行命令以初始化fp fps.SetLED(true); //打开LED,以便fps可以看到指纹 pinMode(2,INPUT_PULLUP); //连接到内部上拉电阻作为输入引脚 }
在 void循环 函数内部,我们必须检查是否按下了按钮,如果按下了,我们将注册一个新手指,并使用enroll函数将其模板保存为ID号。如果没有,我们将继续等待手指被压入传感器。如果按下,我们将通过使用1:N方法将其与所有已注册的指纹模板进行比较来识别指纹。一旦找到ID号,我们将显示欢迎信息,然后显示ID号。如果指纹与任何已注册的手指都不匹配,则ID计数将为200,在这种情况下,我们将显示“欢迎未知”。
如果(digitalRead(2))//如果按下了按钮 { Enroll(); //注册指纹 } //识别指纹测试 是否(fps.IsPressFinger()) { fps.CaptureFinger(false); int id = fps.Identify1_N(); lcd.clear(); lcd.print(“ Welcome:”); 如果(id == 200)lcd.print(“ Unkown”); //如果无法识别 lcd.print(id); 延迟(1000); }
该 登记 功能将不得不采取三个采样输入注册成功一个手指。一旦注册,将创建该特定手指的模板,除非用户通过HEX命令强行将其删除,否则不会删除该模板。注册手指的代码如下所示。该方法 IsPressFinger 被使用,以检查是否是该图像,然后使用所拍摄的,如果检测到手指 CaptureFinger 然后最后将Enroll1,Enroll2和Enroll3用于三个不同的样本,以成功地注册一根手指。如果注册成功,LCD会显示手指的ID号,否则会显示带有代码的失败消息。代码1表示没有清晰捕获指纹,因此您必须重试。代码2是内存故障指示,代码3是指示手指已经被注册。
void Enroll()//从库 示例程序中注册函数{ int enrollid = 0; bool usedid = true; while(usedid == true) { usedid = fps.CheckEnrolled(enrollid); 如果(usedid == true)enrollid ++; } fps.EnrollStart(enrollid); //注册 lcd.print(“注册#”); lcd.print(enrollid); while(fps.IsPressFinger()== false)delay(100); bool bret = fps.CaptureFinger(true); int iret = 0; if(bret!= false) { lcd.clear(); lcd.print(“移开手指”); fps.Enroll1(); while(fps.IsPressFinger()== true)delay(100); lcd.clear(); lcd.print(“再次按下”); while(fps.IsPressFinger()== false)delay(100); bret = fps.CaptureFinger(true); if(bret!= false) { lcd.clear(); lcd.print(“移开手指”); fps.Enroll2(); while(fps.IsPressFinger()== true)delay(100); lcd.clear(); lcd.print(“再按一次”); while(fps.IsPressFinger()== false)delay(100); bret = fps.CaptureFinger(true); if(bret!= false) { lcd.clear(); lcd.print(“移开手指”); iret = fps.Enroll3(); 如果(iret == 0) { lcd.clear(); lcd.print(“注册成功”); } 其他 { lcd.clear(); lcd.print(“注册失败:”); lcd.print(iret); } } else lcd.print(“失败1”); } else lcd.print(“失败2”); } else lcd.print(“ Failed 3”); }
GT511C3指纹传感器与Arduino的配合使用
现在我们的硬件和代码已经准备就绪,是时候测试我们的项目了。将代码上传到Arduino并打开电源,我只是使用micro-usb端口为项目供电。在启动时,我们应该在LCD上看到介绍信息,然后显示“ Hi!..”。这意味着FPS已准备好扫描手指,如果按下任何已注册的手指,则会显示“ Welcome”(欢迎),然后显示该手指的ID号,如下所示。
如果必须注册新手指,则可以使用按钮进入注册模式,然后按照LCD指令注册手指。在注册过程完成之后,LCD将再次显示“ Hi!..”,表明已读取该信息以再次识别手指。在完整的工作可以在下面链接的视频中找到。
在这里,您可以使用指纹传感器模块在此基础上开发许多有趣的东西。希望您理解本教程并喜欢构建有用的东西,如果您有任何疑问,请将其留在评论部分,或将论坛用于其他技术问题。