Arduino--AS608指纹传感器
(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指纹传感器相关推荐
- arduino+AS608的使用教程
arduino+AS608的使用教程 解决 Adafruit Fingerprint sensor enrollment Did not find fingerprint sensor ? 的问题 器 ...
- 【雕爷学编程】Arduino动手做(141)---AS608光学指纹识别模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...
- arduino使用oled代码_Arduino指纹传感器模块使用方法(FPM10A)
这篇文章是有关如何在Arduino上使用指纹传感器模块的入门指南.我们将向您展示如何注册新的指纹ID,以及如何找到指纹匹配项. 指纹传感器模块介绍 (如下图所示)使指纹识别更易于访问,并且易于添加到您 ...
- 基于Arduino开发板的光学指纹识别模块(FPM10A)
本篇文章主要介绍如何在Arduino开发板上使用指纹传感器模块FPM10A.我们将向您介绍如何注册新的指纹ID,以及如何查找匹配的指纹. 所需的硬件 Arduino UNO开发板 指纹传感器模块 跳线 ...
- 指纹传感器的测试软件,【Arduino】168种传感器系列实验(149)-AS608光学指纹识别模块-Arduino中文社区 - Powered by Discuz!...
[mw_shl_code=arduino,true]/* [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验一百五十:AS608光学指纹识别模块+0.91寸OLED液晶屏显示 ...
- 基于Arduino和AS608模块的指纹门禁锁--舵机控制
网上刷到很多视频,看见很多和我一样的大学生自己用单片机给自己宿舍安装指纹锁,我们宿舍经常忘带钥匙,而且随身携带钥匙也很麻烦,所以我选择像网上的一样自己给自己做一个指纹锁,刚好实验室有3D打印机,也正好 ...
- 0基础手把手教你弄寝室指纹识别开门装置(arduino uno,as608)
就是闲的没事,看见某超级大佬也弄了一个,觉得挺好,然后自己也实践实践. 总共,大概花了一周时间吧. 自己 查考博客: https://blog.csdn.net/woshi_ziyu/article/ ...
- KVG制作-【Arduino指纹解锁 智能家居系列-01】DIY自制的智能门禁,AS608指纹解锁+红外线遥控解锁。附演示视频。
DIY自制的智能门禁,指纹解锁+红外线遥控解锁. DIY自制的智能门禁,指纹解锁+红外线遥控解锁. 材料准备 库文件 代码 注册指纹的代码 **寻找指纹并解锁** 视频演示地址 DIY自制的智能门禁, ...
- 手把手教你用Arduino MEGA 2560+AS608指纹模块+舵机实现指纹锁,超详细,不要错过哦!
相信很多小伙伴都想制作一个属于自己的指纹锁吧,看完这一篇博文就够了 (一)材料准备 主要材料: 其它材料: (二)库文件.软件下载 (三)指纹的录入 指纹与TTL转接口接线: 用软件录入指纹 (四)模 ...
最新文章
- Jobs added with no trigger must be durable
- java uuid静态方法_Java UUID toString()方法与示例
- Windows编程中的映射模式和坐标转换
- 安装ubuntu后需要做的事
- linux mysql可视化_常用的 7 款 MySQL 客户端工具,你值得拥有!
- win10下装win7双系统_电脑安装双系统win7+win10,安装顺序不同,使用会有什么不同?...
- oracle数据表通过使用SYS_GUID()自动生成唯一主键
- 最小堆实现优先队列:Python实现
- Linux CH340驱动安装
- C语言——简单三子棋
- 无线路由器打印机服务器设置,路由器 打印机服务器设置方法
- linux注册浏览器协议,在Linux系统上安装Beaker浏览器的方法
- Shell脚本介绍(资源)
- 减员云售前可降本增效
- python实现淘宝毫秒级秒杀 自动付款
- 妇女节手抄报Word电子小报
- 查看oracle数据库(database)的版本命令
- 实现Swap函数,将两个数交换
- 华为鸿蒙手机用大卡还是小卡,教你解决SIM卡剪卡导致华为P8手机不识卡的问题...
- Python用pydicom库读取dicom文件