概述
使用生物識別技術保護您的項目-這種多功能的光學指紋傳感器將使添加指紋檢測和驗證超級簡單。這些模塊通常用于保險柜中-有一個高性能的DSP芯片可以進行圖像渲染,計算,特征查找和搜索。使用TTL串行連接到任何微控制器或系統,并發送數據包以拍照,檢測打印,哈希和搜索。您也可以直接注冊新手指-板載閃存中最多可以存儲162個指紋。
我們喜歡這種特殊的傳感器,因為它不僅是易于使用,它還帶有相當簡單的Windows軟件,使模塊的測試變得簡單-您甚至可以使用該軟件進行注冊,并在計算機屏幕上查看指紋圖像。但是,當然,我們不會給您數據表和“好運”! -我們編寫了完整的Arduino庫,因此您可以在10分鐘內開始運行。該圖書館可以注冊和搜索,因此非常適合任何項目。我們還編寫了有關接線和使用的詳細教程。這是迄今為止您可以獲得的最好的指紋傳感器。
工作電流:最大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
-
光學指紋傳感器
+關注
關注
0文章
12瀏覽量
5928
發布評論請先 登錄
探秘MEMS光學傳感器:微觀世界里的光影魔法師
光學傳感器的工作原理與應用
激光位移傳感器精度如何提高
夏克-哈特曼波前傳感器
EE-325:將Atmel指紋傳感器AT77C104B與Blackfin處理器連接

光電傳感器與其他傳感器的區別
使用MSP430掃描接口和光學傳感器進行旋轉和線性運動檢測

氣敏傳感器是用來檢測什么的傳感器
使用MSP430 MCU簡化溫度、濕度和光學I2C傳感器

評論