(1)简介

如图所示为AS608指纹传感器,其可支持串口和USB通信

模块芯片上的管脚如下:

序号 名称 说明
1 Vi 模块电源正输入端
2 Tx 串行数据输出
3 Rx 串行数据输入
4 GND 信号地
5 WAK 感应信号输出,默认高电平有效
6 Vt 触摸感应电源输入,3.3V供电
7 U+ USB D+
8 U- USB D-

(2)调试(完整工程代码见文末链接)

本文基于串口开发(使用UNO中软件模拟串口(2,3),节约串口资源), 硬件接口如下:

AS608 UNO
Vi 5V
Tx 2
Rx 3
GND GND
在使用指纹传感器前需要先录入指纹,操作方式如下(按上表连接接口):

#include <Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3); // RX,TX(UNO)
//SoftwareSerial mySerial(10, 11); // RX,TX(MEGA2560)Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);uint8_t id;void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nAdafruit Fingerprint sensor enrollment");// set the data rate for the sensor serial portfinger.begin(57600);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor :(");while (1) { delay(1); }}
}uint8_t readnumber(void) {uint8_t num = 0;while (num == 0) {while (! Serial.available());num = Serial.parseInt();}return num;
}void loop()                     // run over and over again
{Serial.println("Ready to enroll a fingerprint!");Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");id = readnumber();if (id == 0) {// ID #0 not allowed, try again!return;}Serial.print("Enrolling ID #");Serial.println(id);while (!  getFingerprintEnroll() );
}uint8_t getFingerprintEnroll() {int p = -1;Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.println(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");break;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");break;default:Serial.println("Unknown error");break;}}// OK success!p = finger.image2Tz(1);switch (p) {case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}Serial.println("Remove finger");delay(2000);p = 0;while (p != FINGERPRINT_NOFINGER) {p = finger.getImage();}Serial.print("ID "); Serial.println(id);p = -1;Serial.println("Place same finger again");while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.print(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");break;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");break;default:Serial.println("Unknown error");break;}}// OK success!p = finger.image2Tz(2);switch (p) {case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}// OK converted!Serial.print("Creating model for #");  Serial.println(id);p = finger.createModel();if (p == FINGERPRINT_OK) {Serial.println("Prints matched!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_ENROLLMISMATCH) {Serial.println("Fingerprints did not match");return p;} else {Serial.println("Unknown error");return p;}   Serial.print("ID "); Serial.println(id);p = finger.storeModel(id);if (p == FINGERPRINT_OK) {Serial.println("Stored!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_BADLOCATION) {Serial.println("Could not store in that location");return p;} else if (p == FINGERPRINT_FLASHERR) {Serial.println("Error writing to flash");return p;} else {Serial.println("Unknown error");return p;}
}

代码下载后,打开串口调试助手,显示如下,一共可以127个指纹存储

录入指纹需要一个一个录入,首先第一个,在发送框汇总输入“1”,然后点击发送,显示如下


这时候就需要你把手指放入传感器上录入第1个指纹,录入后如下,提示你录入完成,需要移开手指,然后再录入一次(重复确认)

确认后即完成录入,显示如下,这时候便表示指纹录入成功

然后关闭串口助手,重新点开,重复上面的步骤依次录入第2、3……等等指纹

录入指纹后,识别指纹过程如下:(完整代码见文末链接)

接口连线不变
重新下载如下代码

void loop()                     // run over and over again
{getFingerprintIDez();delay(50);            //don't ned to run this at full speed.
}uint8_t getFingerprintID() {uint8_t p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.println("No finger detected");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");return p;default:Serial.println("Unknown error");return p;}// OK success!p = finger.image2Tz();switch (p) {case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}// OK converted!p = finger.fingerFastSearch();if (p == FINGERPRINT_OK) {Serial.println("Found a print match!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_NOTFOUND) {Serial.println("Did not find a match");return p;} else {Serial.println("Unknown error");return p;}   // found a match!Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID;
}// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {uint8_t p = finger.getImage();if (p != FINGERPRINT_OK)  return -1;p = finger.image2Tz();if (p != FINGERPRINT_OK)  return -1;p = finger.fingerFastSearch();if (p != FINGERPRINT_OK)  return -1;// found a match!Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence);return finger.fingerID;
}

下载成功后打开串口调试助手,
当对应的手指触按传感器时会有如下反馈,前面的序列号对应着指纹,后面的数值表示识别的匹配度,匹配度越高则数值越大
(只有之前录入的指纹库中有对应的指纹才会打印信息,库中没有则不会打印)

(3)附件完整代码工程链接

CSDN下载
https://download.csdn.net/download/u011816009/85107834

百度网盘下载
链接:https://pan.baidu.com/s/1HT-WKn8QawIugKFndscd1w
提取码:0ibw

Arduino--AS608指纹传感器相关推荐

  1. arduino+AS608的使用教程

    arduino+AS608的使用教程 解决 Adafruit Fingerprint sensor enrollment Did not find fingerprint sensor ? 的问题 器 ...

  2. 【雕爷学编程】Arduino动手做(141)---AS608光学指纹识别模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  3. arduino使用oled代码_Arduino指纹传感器模块使用方法(FPM10A)

    这篇文章是有关如何在Arduino上使用指纹传感器模块的入门指南.我们将向您展示如何注册新的指纹ID,以及如何找到指纹匹配项. 指纹传感器模块介绍 (如下图所示)使指纹识别更易于访问,并且易于添加到您 ...

  4. 基于Arduino开发板的光学指纹识别模块(FPM10A)

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

  5. 指纹传感器的测试软件,【Arduino】168种传感器系列实验(149)-AS608光学指纹识别模块-Arduino中文社区 - Powered by Discuz!...

    [mw_shl_code=arduino,true]/* [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验一百五十:AS608光学指纹识别模块+0.91寸OLED液晶屏显示 ...

  6. 基于Arduino和AS608模块的指纹门禁锁--舵机控制

    网上刷到很多视频,看见很多和我一样的大学生自己用单片机给自己宿舍安装指纹锁,我们宿舍经常忘带钥匙,而且随身携带钥匙也很麻烦,所以我选择像网上的一样自己给自己做一个指纹锁,刚好实验室有3D打印机,也正好 ...

  7. 0基础手把手教你弄寝室指纹识别开门装置(arduino uno,as608)

    就是闲的没事,看见某超级大佬也弄了一个,觉得挺好,然后自己也实践实践. 总共,大概花了一周时间吧. 自己 查考博客: https://blog.csdn.net/woshi_ziyu/article/ ...

  8. KVG制作-【Arduino指纹解锁 智能家居系列-01】DIY自制的智能门禁,AS608指纹解锁+红外线遥控解锁。附演示视频。

    DIY自制的智能门禁,指纹解锁+红外线遥控解锁. DIY自制的智能门禁,指纹解锁+红外线遥控解锁. 材料准备 库文件 代码 注册指纹的代码 **寻找指纹并解锁** 视频演示地址 DIY自制的智能门禁, ...

  9. 手把手教你用Arduino MEGA 2560+AS608指纹模块+舵机实现指纹锁,超详细,不要错过哦!

    相信很多小伙伴都想制作一个属于自己的指纹锁吧,看完这一篇博文就够了 (一)材料准备 主要材料: 其它材料: (二)库文件.软件下载 (三)指纹的录入 指纹与TTL转接口接线: 用软件录入指纹 (四)模 ...

最新文章

  1. Jobs added with no trigger must be durable
  2. java uuid静态方法_Java UUID toString()方法与示例
  3. Windows编程中的映射模式和坐标转换
  4. 安装ubuntu后需要做的事
  5. linux mysql可视化_常用的 7 款 MySQL 客户端工具,你值得拥有!
  6. win10下装win7双系统_电脑安装双系统win7+win10,安装顺序不同,使用会有什么不同?...
  7. oracle数据表通过使用SYS_GUID()自动生成唯一主键
  8. 最小堆实现优先队列:Python实现
  9. Linux CH340驱动安装
  10. C语言——简单三子棋
  11. 无线路由器打印机服务器设置,路由器 打印机服务器设置方法
  12. linux注册浏览器协议,在Linux系统上安装Beaker浏览器的方法
  13. Shell脚本介绍(资源)
  14. 减员云售前可降本增效
  15. python实现淘宝毫秒级秒杀 自动付款
  16. 妇女节手抄报Word电子小报
  17. 查看oracle数据库(database)的版本命令
  18. 实现Swap函数,将两个数交换
  19. 华为鸿蒙手机用大卡还是小卡,教你解决SIM卡剪卡导致华为P8手机不识卡的问题...
  20. Python用pydicom库读取dicom文件

热门文章

  1. asp.net性能优化
  2. python中csv模块读写文件
  3. Vue3入门笔记—2022年1月9日
  4. 【Python】 1055 集体照 (25 分)
  5. Devops (1)
  6. jupyter 显示全部数据
  7. 拯救者Y7000P 2020H款安装deepin20.5后资源空闲时经常出现风扇狂转现象
  8. 安装CM 6.3.1和CDH 6.3.2
  9. linux磁盘分区表解读:只占64字节
  10. Scala集合实现WordCount代码实现