日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arduino--AS608指纹传感器

發布時間:2024/10/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arduino--AS608指纹传感器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

百度網盤下載
鏈接:https://pan.baidu.com/s/1HT-WKn8QawIugKFndscd1w
提取碼:0ibw

總結

以上是生活随笔為你收集整理的Arduino--AS608指纹传感器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。