0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Adafruit光学指纹传感器的使用教程

454398 来源:网络整理 作者:网络整理 2019-11-28 10:29 次阅读

概述

Adafruit光学指纹传感器的使用教程

使用生物识别技术保护您的项目-这种多功能的光学指纹传感器将使添加指纹检测和验证超级简单。这些模块通常用于保险柜中-有一个高性能的DSP芯片可以进行图像渲染,计算,特征查找和搜索。使用TTL串行连接到任何微控制器或系统,并发送数据包以拍照,检测打印,哈希和搜索。您也可以直接注册新手指-板载闪存中最多可以存储162个指纹。

我们喜欢这种特殊的传感器,因为它不仅是易于使用,它还带有相当简单的Windows软件,使模块的测试变得简单-您甚至可以使用该软件进行注册,并在计算机屏幕上查看指纹图像。但是,当然,我们不会给您数据表和“好运”! -我们编写了完整的Arduino库,因此您可以在10分钟内开始运行。该图书馆可以注册和搜索,因此非常适合任何项目。我们还编写了有关接线和使用的详细教程。这是迄今为止您可以获得的最好的指纹传感器。

电源电压: 3.6-6.0VDC

工作电流:最大120mA

峰值电流:最大150mA

指纹成像时间: 《1.0秒

窗口区域: 14mm x 18mm

签名文件: 256字节

模板文件: 512字节

存储容量: 162个模板

安全等级(1-5低到高安全性)

错误接受率: 《0.001%(安全级别3)

错误拒绝率: 《1.0%(安全级别3)

接口: TTL串行

波特率::9600、19200、28800、38400、57600(默认为57600)

工作温度等级: -20C至+ 50C

工作湿度:相对湿度40%-85%

完整尺寸: 56 x 20 x 21.5mm

暴露尺寸(放置在盒子中):21mm x 21mm x 21mm三角形

重量: 20克

注册与搜索

使用光学指纹传感器基本上有两个要求。首先,您需要注册指纹-这意味着为每个打印件分配ID号,以便以后查询。登记完所有打印件后,您可以轻松地“搜索”传感器,要求其识别当前正在拍摄的ID(如果有)。

您可以使用Windows软件进行登记(最简单,最简洁的方法是显示)

或使用Arduino草图(适合在没有Windows机器的情况下使用或在路上报名)。

使用Windows注册新用户

注册新指纹的最简单方法是使用Windows软件。不幸的是,该界面/测试软件仅用于Windows,但 您只需使用一次即可注册,以获取要存储在模块中的指纹。

首先向上,您将需要通过USB串行转换器将传感器连接到计算机。最简单的方法是将其直接连接到Arduino中的USB/串行转换器。为此,您需要上传一个“空白草图”,该草图对于“传统” Arduino(例如Uno和Mega)非常有效:

下载:Project Zip 或 blank.ino | 在Github上查看

复制代码

// this sketch will allow you to bypass the Atmega chip

// and connect the fingerprint sensor directly to the USB/Serial

// chip converter.

// Red connects to +5V

// Black connects to Ground

// White goes to Digital 0

// Green goes to Digital 1

void setup() {}

void loop() {}

// this sketch will allow you to bypass the Atmega chip

// and connect the fingerprint sensor directly to the USB/Serial

// chip converter.

// Red connects to +5V

// Black connects to Ground

// White goes to Digital 0

// Green goes to Digital 1

void setup() {}

void loop() {}

“空白”草图不适用于基于Leonard,Micro,Zero等基于“原生USB”的Arduino!如果您使用的是Leonardo,Micro,Yun,Zero或其他基于ATSAMD21或ATmega32U4的原生USB设备,请改用Leo_passthru草图!

控制器,请使用Leo_passthru草图而不是“空白”草图。

下载:Project Zip or Leo_passthru.ino | 在Github上查看

复制代码

//Leo_passthru

// Allows Leonardo to pass serial data between fingerprint reader and Windows.

//

// Red connects to +5V

// Black connects to Ground

// Green goes to Digital 0

// White goes to Digital 1

void setup() {

// put your setup code here, to run once:

Serial1.begin(57600);

Serial.begin(57600);

}

void loop() {

while (Serial.available())

Serial1.write(Serial.read());

while (Serial1.available())

Serial.write(Serial1.read());

} //Leo_passthru

// Allows Leonardo to pass serial data between fingerprint reader and Windows.

//

// Red connects to +5V

// Black connects to Ground

// Green goes to Digital 0

// White goes to Digital 1

void setup() {

// put your setup code here, to run once:

Serial1.begin(57600);

Serial.begin(57600);

}

void loop() {

while (Serial.available())

Serial1.write(Serial.read());

while (Serial1.available())

Serial.write(Serial1.read());

}

上传草图后,按照草图注释中的接线图连接传感器。由于传感器的导线太细又短,因此我们将导线剥开一点并熔化一些焊料,以使其接触更好,但如果接触不良,则可能需要将导线焊接到插头或类似的端子上。插入电源时,您可能会看到LED闪烁以指示传感器正在工作。

如果传感器具有所有相同颜色的导线,则从左起的第一根导线接地,然后是两个数据引脚,然后上电。

RX与白线相同

TX与绿线相同

如果传感器使用不同的电线,则首先从左起的导线应为黑线接地,然后是两个数据引脚,RX为白线,TX为绿线,然后为红色电源线。

启动SFGDemo软件,然后单击左下角的打开设备。选择Arduino使用的 COM端口

,然后按OK。您应该看到以下内容,并在底部角落显示蓝色成功消息和一些设备统计信息。您可以在左下角更改波特率,以及“安全级别”(它的敏感程度),但是我们建议您不要更改这些波特率,直到您一切正常并且想要尝试。它们应默认为57600波特和安全级别3,因此如果输入错误,请进行设置

如果打开设备时出现错误,请检查接线,并尝试交换传感器上的RX和TX线,这是常见的混合现象!

让我们注册一根新手指!点击预览复选框,然后按其旁边的 Enroll 按钮( Con Enroll 表示“连续”注册,如果您想要有很多手指可以注册)。出现对话框时,输入您要使用的ID#。您最多可以使用162个ID号。

软件将要求您将手指按到传感器上

然后,您可以查看指纹的预览(如果选中了预览复选框)。

然后您将不得不重复该过程,以获得一个第二次清洁打印。用同一根手指!

成功,您会收到通知。

,如果出现打印质量差或图像不好的问题,则必须再次进行操作。

使用软件进行搜索

一旦您注册了手指,最好进行一次快速测试以确保可以在数据库中找到它。单击右侧的搜索按钮。

系统提示时,将另一根/相同的手指按到传感器上。

如果是同一根手指,则应该与ID#

如果不是数据库中的手指,则会收到失败通知。

用于Arduino的接线

测试完传感器后,现在就可以在草图中使用它来验证指纹。我们需要重新连接传感器。断开绿线和白线的连接,然后将绿线插入数字 2 ,白线插入数字 3 。 (对于ESP8266,请使用 4 和 5 ,对于具有硬件UART的设备,请使用 0 和 1 )

传感器正常闪烁LED通电后很快就会消失,直到您开始向其请求数据

如果您的传感器使用不同的导线,则从左侧开始的第一根导线应为黑色导线接地,然后是两个数据引脚, RX是白线,TX是绿线,然后是红色电源线。您必须切割,剥皮和焊接导线。

如果传感器具有所有相同颜色的电线,则从左开始的第一根电线接地,然后是两个数据引脚,然后通电。

RX与白线相同

TX与绿线相同

Arduino UNO和兼容的布线

此示例草图使用引脚 2 和 3 进行软件串行(默认情况下在ATmega328P型板上)-并非所有板都支持软件所有引脚均为串行,请查阅电路板文档!例如在ESP8266上,我们使用 4 和 5

您可以通过 3.3V 或 5V为传感器供电

在下图中,我们显示了直接插入电线的电线。 Arduino的。但是,这不能很好地工作,因为电线太细并且它们没有接触。您应该将较粗的实芯线焊接到每根导线上,以实现良好的接触。注意:电缆的两端都插入指纹传感器-在切断任何东西之前,请确保已卸下其正确的一端。您的接线顺序应该与上面的图像匹配,并且指纹传感器朝上。

硬件序列接线

如果您的设备带有硬件串行,则应该改用该设备。通常是引脚#0和#1

下一步,您需要安装Adafruit指纹传感器库(也可以从github获得)。

打开Arduino库管理器:

键入指纹,直到出现 Adafruit指纹库为止!

点击“安装”!而已。现在您应该可以选择文件→示例→Adafruit_Fingerprint→指纹示例草图。

软和硬串行

默认情况下,草图使用软件串行(Arduino UNO和兼容版本)。如果您使用的是带有硬件串行的设备,例如没有USB串行转换器芯片,请改用它!通常这些位于针脚0和1

下载:文件

复制代码

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

//#include

//SoftwareSerial mySerial(2, 3); // 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

//#include

//SoftwareSerial mySerial(2, 3);

如有必要,取消注释/注释行以支持硬件串行

上传

照常将其上传到Arduino。以9600波特打开串行监视器,并在出现提示时将手指放在已经注册的传感器上。

您应该看到以下内容:

“信心”是一个分数(从0到255),表示得分印刷品的匹配度越高,越好。请注意,如果完全匹配,则意味着传感器非常有信心,因此除非对高安全性应用有意义,否则您不必注意信心数字。

当然,您必须拥有首先注册指纹!如果您使用Windows程序执行此操作,那就很好了。如果尚未打印,则至少应打印Found fingerprint sensor!。您可以继续进行下一步以注册指纹。

如果得到Did not find fingerprint sensor :(检查接线,则也许要交换RX和TX线,因为这是常见问题。

如果要拥有更详细的报告,请更改 loop()以运行 getFingerprintID(),而不是 getFingerprintIDez(),这将为您提供详细报告传感器在搜索过程中每个点正要检测的内容。

使用Arduino注册

我们确实整理了一个简单的草图,用于通过Arduino注册新手指-它不像Windows程序那样容易使用,但确实可以使用!

运行文件→示例→Adafruit_Fingerprint→注册草图并将其上传到Arduino,使用与上述相同的接线。

打开串行监视器时,它将要求您输入要注册的ID-在顶部的框中输入数字,然后单击发送。

然后按照指示完成注册过程。成功注册手指后,它将打印已存储!

完成注册以确保一切都很好时,别忘了进行搜索测试!

Python和CircuitPython

将光学指纹传感器与Python和CircuitPython以及Adafruit CircuitPython Fingerprint模块一起使用很容易。此模块可让您轻松编写读取,注册或删除指纹的Python代码。

由于使用了我们的CircuitPython- Adafruit_Blinka,您可以将此传感器与任何CircuitPython微控制器板或具有GPIO和Python的计算机一起使用。 for-Python兼容性库。

传感器接线

如果您的传感器有不同的电线,从左开始的第一根电线应该是黑线,然后是两个数据引脚,RX是白线,TX是绿线,然后是红色电源线。您必须将较粗的导线切割,剥皮并焊接到当前导线上。

如果传感器具有所有相同颜色的电线,则从左起的第一根电线接地,然后是两个数据引脚,然后通电。

RX与白线相同

TX与绿线相同

在下图中,我们显示了已插入的电线直接放入小饰品。但是,这不能很好地工作,因为电线太细并且它们没有接触。您应该将较粗的实芯线焊接到每根导线上,以实现良好的接触。注意:电缆的两端都插入指纹传感器-在切断任何东西之前,请确保已卸下其正确的一端。您的接线顺序应与上面的图像匹配,且指纹传感器朝下。

CircuitPython微控制器接线

首先,按照与Arduino前几页完全相同的方式将指纹传感器连接到板上。这是使用UART将小饰品M0接线到传感器的示例:

每个CircuitPython板都有一个硬件UART。检查产品页面或查找板上写的 RX 和 TX 。请记住,来自传感器的RX到达板上的TX!如果您遇到问题,请尝试交换它们,这是一个常见错误

Python计算机接线

由于有数十种Linux计算机/主板可以使用,因此我们将显示Raspberry的接线皮。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

在这里,您有两个选择:外部USB到串行转换器,或USB上的内置UART。 Pi的TX/RX引脚。下面是连接USB到串行转换器的示例:

传感器VCC(红线)到 USB 5V 或 3V (USB控制台电缆上的红线)

传感器GND(黑线)至 USB接地(黑线)

传感器RX(白线)到 USB TX (绿色线)

传感器TX (绿线)到 USB RX (白线)

以下是使用Pi的内置UART的示例:

Pi GND 至传感器GND(黑色k线)

Pi TX 到传感器RX(白线)

Pi RX 到传感器TX(绿线)

Pi 3.3v 到传感器VCC(红线)

如果要使用内置UART,则需要禁用串行控制台并启用 raspi-config 中的串行端口硬件。有关如何执行此操作的详细说明,请参见《 Raspberry Pi上CircuitPython指南》的“ UART/串行”部分。

注意Raspberry Pi以外的SBC板在I/O引脚上可能有或没有可用的硬件UART,或者可能已将它们永久映射到控制台等。请参考您的板的文档以查看是否存在是一个硬件UART,其位置,启用方式以及是否可用于除控制台以外的串行设备进行编程

CircuitPython指纹库安装

要使用指纹传感器,您需要安装Adafruit Circuitp板上的CircuitPython指纹库。

首先请确保您正在为板运行最新版本的Adafruit CircuitPython。

接下来,您需要安装必要的库才能使用硬件- -认真遵循他一步步从Adafruit的CircuitPython库捆绑包中查找和安装这些库。我们的简介指南上有一个很棒的页面,介绍了如何为快装板和非快装板安装库捆绑包。

将必要的文件从库捆绑包复制到《您的 lib 文件夹中strong》 CIRCUITPY 驱动器

adafruit_fingerprint.mpy

在继续之前,请确保主板的 lib 文件夹复制了 adafruit_fingerprint.mpy 文件。

下一步连接到开发板的串行REPL,因此您在CircuitPython上》》》 提示

指纹库的Python安装

您需要安装 Adafruit_Blinka 库,该库在Python中提供了CircuitPython支持。这可能还需要在您的平台上启用硬件UART(请参见上面的红色说明)并确认您正在运行Python3。由于每个平台都略有不同,并且Linux经常更改,请访问Linux上的CircuitPython指南以使您的计算机准备就绪!

完成后,从命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-fingerprint

如果您的默认设置Python是版本3,您可能需要运行‘pip’。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python的用法

为演示传感器的用法,我们将使用该库附带的示例python脚本。该传感器非常复杂,因此仅通过REPL很难运行。

CircuitPython微控制器用法

一旦安装了库,请运行此 code.py 在CircuitPython开发板上的示例。

使用Python的Linux/Computer/Raspberry Pi

如果您在Raspberry Pi(或任何计算机)上运行Fingerprint_simpletest.py,则必须进行一些更改。

在Raspberry Pi上,注释掉uart = busio.UART(。..)行,并取消注释相应的import serial和uart = serial.Serial(。..)行,具体取决于您使用的是USB串行还是硬件UART。现在,您可以使用以下命令运行该程序:

下载:文件

复制代码

python3 fingerprint_simpletest.py python3 fingerprint_simpletest.py

示例代码

下载:Project Zip 或 fingerprint_simpletest.py | 在Github上查看

复制代码

import time

import board

import busio

from digitalio import DigitalInOut, Direction

import adafruit_fingerprint

led = DigitalInOut(board.D13)

led.direction = Direction.OUTPUT

uart = busio.UART(board.TX, board.RX, baudrate=57600)

# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=57600, timeout=1)

# If using with Linux/Raspberry Pi and hardware UART:

#import serial

#uart = serial.Serial(“/dev/ttyS0”, baudrate=57600, timeout=1)

finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)

##################################################

def get_fingerprint():

“”“Get a finger print image, template it, and see if it matches!”“”

print(“Waiting for image.。.”)

while finger.get_image() != adafruit_fingerprint.OK:

pass

print(“Templating.。.”)

if finger.image_2_tz(1) != adafruit_fingerprint.OK:

return False

print(“Searching.。.”)

if finger.finger_fast_search() != adafruit_fingerprint.OK:

return False

return True

# pylint: disable=too-many-branches

def get_fingerprint_detail():

“”“Get a finger print image, template it, and see if it matches!

This time, print out each error instead of just returning on failure”“”

print(“Getting image.。.”, end=“”, flush=True)

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

else:

if i == adafruit_fingerprint.NOFINGER:

print(“No finger detected”)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(1)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

print(“Searching.。.”, end=“”, flush=True)

i = finger.finger_fast_search()

# pylint: disable=no-else-return

# This block needs to be refactored when it can be tested.

if i == adafruit_fingerprint.OK:

print(“Found fingerprint!”)

return True

else:

if i == adafruit_fingerprint.NOTFOUND:

print(“No match found”)

else:

print(“Other error”)

return False

# pylint: disable=too-many-statements

def enroll_finger(location):

“”“Take a 2 finger images and template it, then store in ‘location’”“”

for fingerimg in range(1, 3):

if fingerimg == 1:

print(“Place finger on sensor.。.”, end=“”, flush=True)

else:

print(“Place same finger again.。.”, end=“”, flush=True)

while True:

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

break

elif i == adafruit_fingerprint.NOFINGER:

print(“。”, end=“”, flush=True)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

return False

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(fingerimg)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

if fingerimg == 1:

print(“Remove finger”)

time.sleep(1)

while i != adafruit_fingerprint.NOFINGER:

i = finger.get_image()

print(“Creating model.。.”, end=“”, flush=True)

i = finger.create_model()

if i == adafruit_fingerprint.OK:

print(“Created”)

else:

if i == adafruit_fingerprint.ENROLLMISMATCH:

print(“Prints did not match”)

else:

print(“Other error”)

return False

print(“Storing model #%d.。.” % location, end=“”, flush=True)

i = finger.store_model(location)

if i == adafruit_fingerprint.OK:

print(“Stored”)

else:

if i == adafruit_fingerprint.BADLOCATION:

print(“Bad storage location”)

elif i == adafruit_fingerprint.FLASHERR:

print(“Flash storage error”)

else:

print(“Other error”)

return False

return True

##################################################

def get_num():

“”“Use input() to get a valid number from 1 to 127. Retry till success!”“”

i = 0

while (i 》 127) or (i 《 1):

try:

i = int(input(“Enter ID # from 1-127: ”))

except ValueError:

pass

return i

while True:

print(“----------------”)

if finger.read_templates() != adafruit_fingerprint.OK:

raise RuntimeError(‘Failed to read templates’)

print(“Fingerprint templates:”, finger.templates)

print(“e) enroll print”)

print(“f) find print”)

print(“d) delete print”)

print(“----------------”)

c = input(“》 ”)

if c == ‘e’:

enroll_finger(get_num())

if c == ‘f’:

if get_fingerprint():

print(“Detected #”, finger.finger_id, “with confidence”, finger.confidence)

else:

print(“Finger not found”)

if c == ‘d’:

if finger.delete_model(get_num()) == adafruit_fingerprint.OK:

print(“Deleted!”)

else:

print(“Failed to delete”)

import time

import board

import busio

from digitalio import DigitalInOut, Direction

import adafruit_fingerprint

led = DigitalInOut(board.D13)

led.direction = Direction.OUTPUT

uart = busio.UART(board.TX, board.RX, baudrate=57600)

# If using with a computer such as Linux/RaspberryPi, Mac, Windows with USB/serial converter:

#import serial

#uart = serial.Serial(“/dev/ttyUSB0”, baudrate=57600, timeout=1)

# If using with Linux/Raspberry Pi and hardware UART:

#import serial

#uart = serial.Serial(“/dev/ttyS0”, baudrate=57600, timeout=1)

finger = adafruit_fingerprint.Adafruit_Fingerprint(uart)

##################################################

def get_fingerprint():

“”“Get a finger print image, template it, and see if it matches!”“”

print(“Waiting for image.。.”)

while finger.get_image() != adafruit_fingerprint.OK:

pass

print(“Templating.。.”)

if finger.image_2_tz(1) != adafruit_fingerprint.OK:

return False

print(“Searching.。.”)

if finger.finger_fast_search() != adafruit_fingerprint.OK:

return False

return True

# pylint: disable=too-many-branches

def get_fingerprint_detail():

“”“Get a finger print image, template it, and see if it matches!

This time, print out each error instead of just returning on failure”“”

print(“Getting image.。.”, end=“”, flush=True)

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

else:

if i == adafruit_fingerprint.NOFINGER:

print(“No finger detected”)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(1)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

print(“Searching.。.”, end=“”, flush=True)

i = finger.finger_fast_search()

# pylint: disable=no-else-return

# This block needs to be refactored when it can be tested.

if i == adafruit_fingerprint.OK:

print(“Found fingerprint!”)

return True

else:

if i == adafruit_fingerprint.NOTFOUND:

print(“No match found”)

else:

print(“Other error”)

return False

# pylint: disable=too-many-statements

def enroll_finger(location):

“”“Take a 2 finger images and template it, then store in ‘location’”“”

for fingerimg in range(1, 3):

if fingerimg == 1:

print(“Place finger on sensor.。.”, end=“”, flush=True)

else:

print(“Place same finger again.。.”, end=“”, flush=True)

while True:

i = finger.get_image()

if i == adafruit_fingerprint.OK:

print(“Image taken”)

break

elif i == adafruit_fingerprint.NOFINGER:

print(“。”, end=“”, flush=True)

elif i == adafruit_fingerprint.IMAGEFAIL:

print(“Imaging error”)

return False

else:

print(“Other error”)

return False

print(“Templating.。.”, end=“”, flush=True)

i = finger.image_2_tz(fingerimg)

if i == adafruit_fingerprint.OK:

print(“Templated”)

else:

if i == adafruit_fingerprint.IMAGEMESS:

print(“Image too messy”)

elif i == adafruit_fingerprint.FEATUREFAIL:

print(“Could not identify features”)

elif i == adafruit_fingerprint.INVALIDIMAGE:

print(“Image invalid”)

else:

print(“Other error”)

return False

if fingerimg == 1:

print(“Remove finger”)

time.sleep(1)

while i != adafruit_fingerprint.NOFINGER:

i = finger.get_image()

print(“Creating model.。.”, end=“”, flush=True)

i = finger.create_model()

if i == adafruit_fingerprint.OK:

print(“Created”)

else:

if i == adafruit_fingerprint.ENROLLMISMATCH:

print(“Prints did not match”)

else:

print(“Other error”)

return False

print(“Storing model #%d.。.” % location, end=“”, flush=True)

i = finger.store_model(location)

if i == adafruit_fingerprint.OK:

print(“Stored”)

else:

if i == adafruit_fingerprint.BADLOCATION:

print(“Bad storage location”)

elif i == adafruit_fingerprint.FLASHERR:

print(“Flash storage error”)

else:

print(“Other error”)

return False

return True

##################################################

def get_num():

“”“Use input() to get a valid number from 1 to 127. Retry till success!”“”

i = 0

while (i 》 127) or (i 《 1):

try:

i = int(input(“Enter ID # from 1-127: ”))

except ValueError:

pass

return i

while True:

print(“----------------”)

if finger.read_templates() != adafruit_fingerprint.OK:

raise RuntimeError(‘Failed to read templates’)

print(“Fingerprint templates:”, finger.templates)

print(“e) enroll print”)

print(“f) find print”)

print(“d) delete print”)

print(“----------------”)

c = input(“》 ”)

if c == ‘e’:

enroll_finger(get_num())

if c == ‘f’:

if get_fingerprint():

print(“Detected #”, finger.finger_id, “with confidence”, finger.confidence)

else:

print(“Finger not found”)

if c == ‘d’:

if finger.delete_model(get_num()) == adafruit_fingerprint.OK:

print(“Deleted!”)

else:

print(“Failed to delete”)

虽然相当长,但是它可以帮助您设置和测试传感器!

首次启动时,您应该得到以下内容:

如果出现类似RuntimeError: Failed to read data from sensor的错误,则表明出现了问题-检查接线和波特率!

此菜单系统非常简单,您可以做三件事

注册打印-您将用手指拍摄图像并将模型“存储”在传感器中

查找打印-det确定是否知道并存储了指纹

删除打印-清除模型

注册指纹

注册指纹很容易。键入 e 开始该过程。您需要选择一个位置。该传感器最多可以存储127个打印位置。选择一个有效的数字,然后手指两次注册。

请注意,成功后,指纹模板:[。..] 打印输出将包括新的模板ID。

如果发生错误,传感器将为您提供一个错误,例如,如果两个打印件不匹配,或者存储或生成模型失败:

查找指纹

一旦您注册了指纹,就可以对其进行测试。运行 f ind命令,然后尝试各种手指!识别出指纹ID后,它会告诉您位置编号,在这种情况下为#5

删除指纹

如果输入有误,可以从数据库中删除指纹模型。例如,以下是删除#5的方法。请注意指纹模板:[。..] 打印输出更改!

下载

github上的Arduino接口库

用户手册

数据表(它并不是一个很好的数据表,

英文版的《用户手册》

“ SFGDemo”仅用于Windows的测试软件

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    指纹挂锁方案——采用ACH512或ACM32FP4指纹芯片和88*112传感器指纹识别速度快,BOM成本低

    方案概述指纹挂锁方案采用ACH512或ACM32FP4指纹芯片和88*112传感器指纹识别速度快,BOM成本低,非常适合挂锁、内门锁、箱包锁、箱柜锁等场景。方案特点• 主控+算法单芯
    发表于 03-12 11:46

    指纹传感器的定义 指纹传感器的应用

    指纹传感器的定义 指纹传感器的应用  指纹传感器是一种生物识别技术,通过检测和分析人体
    的头像 发表于 03-05 17:35 1666次阅读

    屏下指纹识别技术工作原理 屏下指纹识别技术的难题是什么

    光学指纹识别是在屏幕下方设置光学传感器,通过发出近红外光来识别用户的指纹纹路。而超声波式指纹
    发表于 10-13 12:28 881次阅读
    屏下<b class='flag-5'>指纹</b>识别技术工作原理 屏下<b class='flag-5'>指纹</b>识别技术的难题是什么

    光学传感器的主要类型

    光学传感器是一种常用的传感器技术,它利用光学原理来检测和测量光的属性。光学传感器广泛应用于各种领
    的头像 发表于 07-18 09:41 948次阅读

    使用光学传感器检测颗粒

    光学传感技术是许多精密仪器和监视器的基础,因为它们是非破坏性和非侵入性的。随着用于光电容积描记图(PPG)的集成光学传感器和模拟前端设备的普及,这些
    的头像 发表于 06-29 09:25 450次阅读
    使用<b class='flag-5'>光学</b><b class='flag-5'>传感器</b>检测颗粒

    快速了解固态光学传感器优劣势

    在当前的科技发展中,传感器技术在各个领域中起着至关重要的作用。其中,固态光学传感器作为一种新兴的传感器技术,具有许多优势和劣势。本文将对固态光学
    的头像 发表于 06-27 10:11 357次阅读
    快速了解固态<b class='flag-5'>光学</b>氧<b class='flag-5'>传感器</b>优劣势

    Arduino指纹传感器教程分享

    电子发烧友网站提供《Arduino指纹传感器教程分享.zip》资料免费下载
    发表于 06-20 09:43 0次下载
    Arduino<b class='flag-5'>指纹</b><b class='flag-5'>传感器</b>教程分享

    指纹识别技术的种类 指纹识别技术的原理

    目前,市场中应用的指纹图像的获取技术主要有4种类型:光学扫描设备、温差感应式指纹传感器、半导体指纹传感器
    发表于 06-16 15:18 1260次阅读
    <b class='flag-5'>指纹</b>识别技术的种类 <b class='flag-5'>指纹</b>识别技术的原理

    HARDWARIO IoT套件指纹传感器

    电子发烧友网站提供《HARDWARIO IoT套件指纹传感器.zip》资料免费下载
    发表于 06-16 10:02 0次下载
    HARDWARIO IoT套件<b class='flag-5'>指纹</b><b class='flag-5'>传感器</b>

    如何通过wifi传输传感器数据到mac?

    这是我所拥有的: Adafruit Huzzah Feather (esp8266) Hr-sc04 范围传感器 Arduino Uno 我或多或少没有使用 arduino 和编程的经验,也没有
    发表于 06-12 06:55

    汽车手势传感器如何克服光学串扰?

    本文为 MAX25205 和 MAX25405 手势传感器光学机械部分提供设计指南。基于红外(IR)技术的手势检测系统存在一个关键的设计问题,即 LED 到传感器之间的光学串扰(见图
    的头像 发表于 06-09 18:15 411次阅读
    汽车手势<b class='flag-5'>传感器</b>如何克服<b class='flag-5'>光学</b>串扰?

    红外光学雨量传感器的工作原理及应用

    红外光学雨量传感器是一种利用红外光学原理进行雨量测量的传感器,它是一种无线、无接触、高精度的雨量测量仪器,广泛应用于气象、水文、环境监测等领域。
    的头像 发表于 06-02 10:55 1546次阅读

    红外光学雨量传感器的场景应用

    红外光学雨量传感器的场景应用 红外光学雨量传感器是一种基于红外线技术的雨量监测设备,它可以通过检测雨滴的信号强度来确定降雨强度和降雨量。红外光学
    的头像 发表于 05-30 10:22 432次阅读
    红外<b class='flag-5'>光学</b>雨量<b class='flag-5'>传感器</b>的场景应用

    GPIO5当D1上的电路闭合时,指纹扫描仪 (Adafruit_fingerprint.h) 不会初始化怎么解决?

    或按钮检测门是打开还是关闭。 问题是当 D1 上的电路闭合时,指纹扫描仪 (Adafruit_fingerprint.h) 不会初始化。如果我在初始化期间打开开关然后关闭它,一切正常。 我应该期待这种行为吗?
    发表于 05-29 08:32

    红外光学雨量传感器的工作原理

    红外光学雨量传感器的工作原理 IFR02红外光学雨量传感器是一种非接触式的雨量监测装置,其工作原理基于红外光学测量技术。 红外
    的头像 发表于 05-25 11:19 777次阅读
    红外<b class='flag-5'>光学</b>雨量<b class='flag-5'>传感器</b>的工作原理