Arduino--AS608指纹传感器

article/2025/10/21 12:50:36

(1)简介

如图所示为AS608指纹传感器,其可支持串口和USB通信
在这里插入图片描述
模块芯片上的管脚如下:
在这里插入图片描述

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

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

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

AS608UNO
Vi5V
Tx2
Rx3
GNDGND
在使用指纹传感器前需要先录入指纹,操作方式如下(按上表连接接口):

#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/85853535

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


http://chatgpt.dhexx.cn/article/bxfpIKoD.shtml

相关文章

指纹辨识传感器解决方案

随著个人信息产品对资料安全性的要求日益升高&#xff0c;再加上指纹辨识感测技术近几年来&#xff0c;无论是在尺寸、成本、或者是准确度等&#xff0c;各方面的发展都获得快速的进步&#xff0c;因此&#xff0c;相关业者便积极开发指纹辨识感测技术应用在个人可携式产品等出…

指纹识别传感器市场仍将持续上涨

市场分析公司MarketsandMarkets的一份研究报告称&#xff0c;未来几年指纹识别传感器市场整体仍将呈上涨趋势。 市场分析公司MarketsandMarkets的新报告称&#xff0c;尽管由于移动部门的利润缩水&#xff0c;多家指纹识别传感器专业公司在2017年面临巨大的市场压力&#xff0c…

php图片指纹获取,指纹识别是通过什么等物理传感器获取指纹图像

指纹识别是将识别对象的指纹进行分类比对从而进行判别。指纹识别技术作为生物体特征识别技术之一在新世纪逐渐成熟&#xff0c;进入了人类的生产生活领域。 (推荐学习&#xff1a;web前端视频教程) 指纹模式 指纹是人类手指末端由凹凸的皮肤所形成的纹路&#xff0c;在人类出生…

指纹识别

前言&#xff1a; 为了方便查看博客&#xff0c;特意申请了一个公众号&#xff0c;附上二维码&#xff0c;有兴趣的朋友可以关注&#xff0c;和我一起讨论学习&#xff0c;一起享受技术&#xff0c;一起成长。 1.概念 指纹是指手指末端正面皮肤上凹凸不平的纹路。这段纹路蕴含…

智能门锁:指纹识别概述

每个人的皮肤纹路在图案、断点、交叉点上各不相同&#xff0c;指纹识别技术依靠皮肤纹路的唯一性、稳定性&#xff0c;把个体身份同指纹对应起来&#xff0c;通过与预存指纹对比进行身份识别。在实现方式上&#xff0c;指纹识别技术主要分为&#xff1a;电容式、光学式、超声波…

指纹识别(一)—— 电容式、光学式、超声波式介绍

指纹系列文章: 指纹识别&#xff08;一&#xff09;—— 电容式、光学式、超声波式介绍 指纹识别&#xff08;二&#xff09;—— 光学指纹场景使用OLED HBM功能 1.电容式指纹识别 1.1 原理和优缺点 原理&#xff1a;手指作为一方极板&#xff0c;手指指肚是高低不平的(脊和谷…

指纹识别-传感器原理

我们了解过了指纹识别的大致流程后&#xff0c;这篇文章用来介绍指纹识别硬件中最重要的部分&#xff0c;传感器。其实传感器、芯片也要符合物理学的基本原理&#xff0c;他们都是物理学的原理的一种实现&#xff0c;我们可以从光、电、声、热、力这几个基本的物理研究领域中展…

舵机控制的机械爪

■ 背景 先驱威锋白超发送过来机械爪购买样品连接 机械爪子汇总机器人机械手臂配件大扭力舵机控制驱动板diy夹持器 。利用其中一种完成 双轴机械臂前端抓持机械结构。 ▲ 由舵机控制的各种机械爪 手边有一个从白超订购过来的平行机械爪&#xff0c;其中舵机来自于 海灵智电 提供…

一、智能车舵机控制

前言&#xff1a; 本文章主要是近期有关舵机知识的总结&#xff0c;将分别从舵机的控制原理&#xff0c;控制流程和代码实现流程几个方面作简要介绍&#xff0c;由于时间紧急&#xff0c;难免有疏漏错误之处&#xff0c;欢迎留言指正 一、舵机的控制原理&#xff1a; 我们本次智…

单片机PWM舵机控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、PWM是什么&#xff1f;二、如何控制舵机&#xff1f; 一、PWM是什么&#xff1f; PWM&#xff0c;英文名Pulse Width Modulation&#xff0c;是脉冲宽度调制缩…

快速学习Stm32舵机控制板控制多个舵机运动以及调速

本次分享stm32对多个舵机的控制&#xff0c;之前讲解过单个舵机的控制。以及控制原理&#xff0c;定时器的使用和pwm的输出来控制一个舵机的角度转向。这次就和大家分享一下多个舵机的控制以及调速。利用单片机实现对 8 个舵机的同时控制&#xff0c;掌握多个舵机控制程序实现方…

51单片机舵机控制

51单片机舵机控制系统 概述硬件设计程序设计PWM波的产生矩阵按键功能与数码管显示参数传递完整程序 外加模块 概述 在这篇博客中&#xff0c;将介绍一个基于51单片机的舵机控制系统&#xff0c;其可以通过矩阵按键输入角度&#xff0c;舵机打到预定角度&#xff0c;并在数码管…

Arduino基础入门篇28—舵机控制

舵机是一种位置「角度」伺服的驱动器&#xff0c;适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具、航模、机器人中已经得到普遍使用。舵机是一种俗称&#xff0c;其实是一种伺服马达。本篇通过官方驱动库来实现舵机控制。 1. 舵机介绍 结构组成 舵机实…

OpenMV输出PWM,实现对舵机控制

OpenMV的定时器官方函数介绍&#xff1a;Timer类 – 控制内部定时器 目录 OpenMV的PWM资源介绍 为什么要用OpenMV输出PWM OpenMV的PWM资源分配 资源 注意 建议 PWM输出代码 代码讲解 Timer Timer.channel tim.channel与Timer.channel区别 Timer.channel解析 OpenM…

舵机控制原理及常见问题

舵机控制 工作电压&#xff1a;3.5V/4,2V/4.8V —— 6V/6.8V/7.2V/8.4V(看具体型号参数) 切记&#xff1a;舵机不要接在电脑USB上调试&#xff0c;舵机启动瞬间大电流&#xff08;10-24倍工作电流&#xff09;可能会导致电脑死机 注意事项&#xff1a;PWM波形正确时&#xf…

第9章 舵机控制

有一种电机可以在程序的控制下&#xff0c;在一定范围内连续改变输出轴角度并且可以保持住。这种电机最早被用在航模和船模等遥控模型中&#xff0c;控制各种舵面的转动&#xff0c;这就是舵机。现在舵机除了运用在 遥控模型中&#xff0c;也大量的运用在各种机器人、机械臂的关…

Arduino入门001 - 舵机控制

Arduio基础入门篇001 - 舵机控制 一、舵机介绍 1&#xff0c;结构组成 一般来讲舵机主要由以下几个部分组成&#xff0c;舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等。舵机的输入线共有三条&#xff0c;如图1所示&#xff0c;红色中间&#xff0c;是电源线&…

舵机控制(STM32F103C8T6)

前言 本文是以STM32F103C8T6作为主控芯片&#xff0c;通过PB6端口输出PWM&#xff0c;实现控制180舵机。 一、舵机控制原理 &#xff08;一&#xff09;概述 舵机是一种位置伺服驱动器器&#xff0c;是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时&#xff0c;…

Java 源代码怎么执行的

许多 Java 虚拟机的执行引擎在执行 Java 代码的时候都是解释执行&#xff08;通过解释器执行&#xff09;和编译执行&#xff08;通过即时编译器产生本地代码执行&#xff09;混合运行。 大体流程为&#xff1a; 编写 java 文件源码通过 javac 编译器将 java 源码编译为字节码流…

Java基础-java程序代码截取字符串及判断字符串是否包含某个字符(串)

文章目录 有一串字符串&#xff0c;是一串拼接码&#xff0c;如何截取获取想要的字段&#xff1f;判断字符串是否包含某个字符&#xff08;串&#xff09;indexOf方法 有一串字符串&#xff0c;是一串拼接码&#xff0c;如何截取获取想要的字段&#xff1f; public class Inte…