一板网电子技术论坛

风筝
发表于: 2018-4-27 23:17:07 | 显示全部楼层

本篇文章主要介绍如何在Arduino开发板上使用指纹传感器模块FPM10A。我们将向您介绍如何注册新的指纹ID,以及如何查找匹配的指纹。


指纹传感器模块简介

通过使用下图所示的指纹传感器模块可以使指纹识别更易于实现,并且易于添加到您的项目中。这意味着指纹采集、注册、比较和搜索是非常容易实现的。

fingerprint-sensor-module-f.jpg


这些模块带有FLASH存储器,用于存储指纹,并可与TTL串行接口的任何微控制器或系统一起使用。这些模块可以添加到安全系统、门锁、考勤系统等等。


产品规格

以下是我们使用的指纹传感器模块的规格(您应该检查供应商提供的传感器数据手册或规格书 - 它们的参数应该差别太大):

●    工作电源:DC 3.6至6.0V

●    电流:<120mA

●    背光颜色:绿色

●    接口:UART

●    波特率:9600

●    安全等级:五级(从低到高:1、2、3、4、5)

●    错误接受率(FAR):<0.001%(安全级别3)

●    错误拒绝率(FRR):<1.0%(安全级别3)

●    能够存储127个不同的指纹


传感器模块引脚

传感器模块有六个引脚,如下图所示。

arduino-fingerprint-pins-labeled-1.jpg


这个项目中使用的指纹传感器模块带有颜色相同的导线,因此需要焊接易于区分的导线。我们建议根据引脚功能使用不同的颜色。在我们的示例中:

●    DNC - 白线

●    VCC - 红线

●    TX - 蓝线

●    RX - 绿线

●    GND - 黑线

wires-soldered.jpg


下表显示了传感器与Arduino的连接方式。

指纹传感器
Arduino
VCC
5V(它也适用于3.3V)
TX
RX(数字引脚2,串行)
RX
TX(数字引脚3,串行)
GND
GND

安装Adafruit指纹传感器库

使用Arduino控制指纹传感器模块的最简单方法是使用该传感器的Adafruit库。按照下面的说明安装库:

1.  首先下载Adafruit指纹传感器库。下载完成后,您将得到一个.zip文件;

2.  解压缩.zip文件,你会看到一个Adafruit-Fingerprint-Sensor-Library-master文件夹;

3.  将Adafruit-Fingerprint-Sensor-Library-master文件夹重命名为Adafruit_Fingerprint_Sensor_Library文件夹;

4.  将文件夹移动到您的Arduino IDE安装库文件夹;

5.  最后,重新打开Arduino IDE。


注册一个新的指纹

将指纹传感器模块连接到Arduino,请按照下面的步骤注册新的指纹。确保您之前安装了Adafruit指纹传感器库。

1.  在Arduino IDE中,转到File > Examples > Adafruit Fingerprint Sensor Library > Enroll

2.  上传代码到Arduino开发板,并以9600的波特率打开串行监视器。

3.  这时您应该输入指纹的ID。由于这是您的第一个指纹,请在左上角输入1,然后单击Send按钮。

enroll-serial-monitor.jpg

4.将手指放在扫描仪上,然后按照串行监视器上的说明进行操作。

enroll-finger.jpg

系统会要求您将同一根手指放在扫描仪上两次。如果您收到“Prints matched!”消息,如下所示,您的指纹已成功存储。如果没有,重复这个过程,直到你成功。

enroll-serial-monitor-match-f.jpg

使用此方法存储您想要的指纹。


找到一个匹配的指纹

你现在应该保存有几个不同ID的指纹。要找到与指纹传感器匹配的指纹,请按照下面的说明进行操作。

1.  在Arduino IDE中,转到File > Examples > Adafruit Fingerprint Sensor Library > Fingerprint ,然后将代码上传到Arduino开发板。

2.  以9600的波特率打开串行监视器。您应该会看到以下消息:

fingerprint-match-1.jpg

3.  在扫描仪中放置要识别的手指。

4.  在串行监视器上,您可以看到与指纹匹配的ID。同时它也显示了信心值 - 信心值越高,表示该指纹与存储的指纹越相似。

fingerprint-match-2.jpg


项目示例 - 在OLED显示屏上显示匹配的指纹

在这个项目的例子中,我们将从两个不同的人注册两个指纹。然后,我们会在OLED显示屏上显示相应的匹配问候消息。


所需的组件

对于这个例子,你需要以下几部分:

parts-required.jpg

●    Arduino UNO 开发板

●    指纹传感器模块

●    0.96英寸的OLED显示屏

●    面包板

●    跳线


原理图

下面是这个项目制作电路的接线图。

fingerprint_OLED_schematic_bb.png


安装0.96英寸OLED库

要控制OLED显示屏,您需要使用“Adafruit_GFX.h”库和“Adafruit_SSD1306.h”库。按照下面的步骤安装这些库:


安装Adafruit_GFX库

1.  点击此处下载Adafruit GFX库。下载完成后,您将得到一个.zip文件;

2.  解压缩此.zip文件,您会看到一个Adafruit-GFX-Library-master文件夹;

3.  将Adafruit-GFX-Library-master文件夹重命名为Adafruit_GFX_Library(确实需要用“_”替换那些“ - ”);

4.  将Adafruit_GFX_Library文件夹移至Arduino IDE安装库文件夹;

5.  最后,重新打开你的Arduino IDE。


安装adafruit_SSD1306库

1.  点击此处下载Adafruit_SSD1306库。下载完成后,您将得到一个.zip文件;

2.  解压缩此.zip文件,您会看到一个Adafruit_SSD1306-master文件夹;

3.  将Adafruit_SSD1306-master文件夹重命名为Adafruit_SSD1306;

4.  将Adafruit_SSD1306文件夹移至Arduino IDE安装库文件夹;

5.  最后,重新打开你的Arduino IDE。


代码

在上传代码之前,您需要注册来自不同人员的不同指纹。转到上面的“注册一个新的指纹”部分,上传给定的代码并按照说明注册两个指纹。然后,修改代码,使指纹ID与登记人员的姓名一致。最后,你可以上传提供的代码。


导入库

代码首先导入所需的库以写入OLED显示屏,然后创建一个名为display的Adafruit_SSD1306对象。

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #define OLED_RESET 4
  5. Adafruit_SSD1306 display(OLED_RESET);
复制代码

我们还需要导入指纹传感器所需的库:Adafruit_Fingerprint.hSoftwareSerial.h

  1. #include <Adafruit_Fingerprint.h>
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial mySerial(2, 3);
复制代码

以下行设置引脚2和3上的串行接口。引脚2为RX,引脚3为TX。

  1. SoftwareSerial mySerial(2, 3);
复制代码

然后,我们在之前设置的串行引脚上创建一个名为finger的Adafruit_Fingerprint对象。

  1. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
复制代码

接下来的两行创建变量来保存指纹ID和IDname。

  1. int fingerprintID = 0;
  2. String IDname;
复制代码

setup()函数

在setup()中,指纹传感器和OLED显示器都被初始化。我们还在串口监视器上打印一条消息,以便我们知道指纹传感器是否成功找到。

  1. void setup(){
  2. //Fingerprint sensor module setup
  3. Serial.begin(9600);
  4. // set the data rate for the sensor serial port
  5. finger.begin(57600);

  6. if (finger.verifyPassword()) {
  7.    Serial.println("Found fingerprint sensor!");
  8. }
  9. else {
  10.    Serial.println("Did not find fingerprint sensor :(");
  11.    while (1) { delay(1); }
  12. }

  13. //OLED display setup
  14. Wire.begin();
  15. display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  16. //displays main screen
  17. displayMainScreen();
  18. }
复制代码

loop()函数

loop()中,代码在OLED显示屏上显示主屏幕 - 这是在displayMainScreen()函数中完成的。然后,代码不断检查传入的指纹。如果传感器找到保存的指纹,则Arduino将相应的ID保存在fingerprintID变量中。

然后,代码有一个if / else语句来检查指纹所对应的ID。您应该使用相应的ID和名称编辑以下代码行。

  1. if(fingerprintID == 1 || fingerprintID == 3 || fingerprintID == 4 || fingerprintID == 5){
  2.   IDname = "Sara";
  3.   displayUserGreeting(IDname);
  4. }
  5. else if(fingerprintID == 2){
  6.   IDname = "Rui";
复制代码

有时,如果传感器以不同的ID保存多次,传感器会更好地识别指纹。识别ID名称后,OLED会显示一个问候语 - 这是在displayUserGreeting()函数中完成的,


演示程序

现在,当保存指纹的人将手指放在传感器上时,它会显示一条问候消息。

demonstration.jpg


总结

在本篇文章中,我们向您展示了如何使用指纹传感器模块:注册指纹并找到匹配的指纹。


有时,如果您的手指没有像保存时那样放置手指的话,特别是女性的指纹(我们不知道为什么会发生这种情况),传感器很难识别指纹。我们注意到,如果您将手指缓慢放在扫描仪上,传感器效果会更好。


在我们看来,指纹传感器模块工作得很好,并且它是将生物识别技术识别添加到项目中的最经济实惠的方式。如果在遇到任何问题,欢迎在本帖下面进行回复。

跳转到指定楼层
Sky316
发表于: 2018-11-27 20:04:26 | 显示全部楼层

您好,有完整代码吗?
回复

使用道具 举报

Sky316
发表于: 2018-11-27 20:36:28 | 显示全部楼层

您好,很希望能做成您这个实验,但是对displayMainScreen()函数和displayUserGreeting()函数理解得不透彻,您能进一步解释一下吗,非常感谢呀!
回复

使用道具 举报

Sky316
发表于: 2018-11-27 20:38:45 | 显示全部楼层

大神呀,拜托您啦!!
回复

使用道具 举报

Sky316
发表于: 2018-11-27 20:41:00 | 显示全部楼层

希望您看到以后回复一下呀
回复

使用道具 举报

风筝
发表于: 2018-11-28 19:55:48 | 显示全部楼层

本篇文章的完整代码如下所示: Fingerprint_oled.rar (966 Bytes, 下载次数: 7)

回复

使用道具 举报

xllr
发表于: 2018-11-29 16:35:31 | 显示全部楼层

您好,我运行你的代码出现Did not find fingerprint sensor怎么回事,能讲一下finger.verifyPassword()这个代码是怎么运行的吗?谢谢
回复

使用道具 举报

xllr
发表于: 2018-11-29 20:10:56 | 显示全部楼层

希望你有时间可以回复一下,谢谢
回复

使用道具 举报

风筝
发表于: 2018-11-29 22:24:15 | 显示全部楼层

xllr 发表于 2018-11-29 16:35
您好,我运行你的代码出现Did not find fingerprint sensor怎么回事,能讲一下finger.verifyPassword()这 ...

verifyPassword()函数位于Adafruit-Fingerprint-Sensor-Library库中,源代码可以参考github上的链接。

  1. /**************************************************************************/
  2. /*!
  3.     @brief  Verifies the sensors' access password (default password is 0x0000000). A good way to also check if the sensors is active and responding
  4.     @returns True if password is correct
  5. */
  6. /**************************************************************************/
  7. boolean Adafruit_Fingerprint::verifyPassword(void) {
  8.   return checkPassword() == FINGERPRINT_OK;
  9. }

  10. uint8_t Adafruit_Fingerprint::checkPassword(void) {
  11.   GET_CMD_PACKET(FINGERPRINT_VERIFYPASSWORD,
  12.                   (uint8_t)(thePassword >> 24), (uint8_t)(thePassword >> 16),
  13.                   (uint8_t)(thePassword >> 8), (uint8_t)(thePassword & 0xFF));
  14.   if (packet.data[0] == FINGERPRINT_OK)
  15.     return FINGERPRINT_OK;
  16.   else
  17.     return FINGERPRINT_PACKETRECIEVEERR;
  18. }
复制代码

提示“Did not find fingerprint sensor”是因为verifyPassword()返回值为非零。


回复

使用道具 举报

xllr
发表于: 2018-12-4 09:44:54 | 显示全部楼层

大神,我都代码中Did not find fingerprint sensor错误还是没改成功,是我的arduino识别不了我的指纹识别模块吗,还是代码的哪部分有问题,可以给我详细指出应该改的代码部分吗?谢谢!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 185 | 回复: 307



Archiver|手机版|小黑屋|

GMT+8, 2018-12-19 05:07 , Processed in 0.046876 second(s), 29 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表