使用指紋辨識模組

材料準備
  • Ameba x 1
  • AS606指紋辨識模組 x 1

範例說明

這個範例裡使用指紋辨識模組來儲存指紋,並且辨識之。本模組採用SYNOCHIP AS606晶片,可以保存的指紋多達1000組,我們需要的library有:

https://github.com/ambiot/amb1_arduino/raw/master/Arduino_libraries/AmebaFingerprint.zip

安裝library的方式請參考Arduino官方網站的教學文章將zip檔的library加入Ameba:

https://www.arduino.cc/en/Guide/Libraries#toc4

本模組使用UART與AMEBA 溝通,除了VCC(3.3V)和GND,還有使用UART TX和RX線,我們把模組翻至背面,其RTL8195範例接線如下:

1

RTL8710範例接線如下:

1

我們打開範例 “File” -> “Examples” -> “AmebaFingerprint” -> “enroll”, 編譯並上傳至Ameba之後按下Reset按鈕,此時打開終端機,應可看到能找到指紋辨識模組的訊息:

1

接著按照console提示的訊息,我們在鍵盤上鍵入一個字母’a’

1

Console印出”waiting for valid finger to enroll”訊息,此時即可將手指放置至模組窗口上

1

如模組有正確採集到指紋,接著會要求移開指紋後,再將相同的手指放置於窗口上

1

如指紋採集無誤,console會提printfs matched,並將指紋儲存,接下來您可以嘗試多採集不同手指的指紋

接著我們要來測試指紋辨識模組能否把剛儲存的指紋辨識成功,我們打開範例 “File” -> “Examples” -> “AmebaFingerprint” -> “fingerprint”, 編譯並上傳至Ameba之後按下Reset按鈕,此時打開終端機,應可看到能找到指紋辨識模組的訊息:

1

並提示正在等待驗證指紋,此時將剛採樣的同一根手指放置於指紋辨識窗口

1

Console會顯示出”Found ID #x with confidence of xx”的訊息,即代表辨識成功

程式碼說明

Enroll.ino

指紋採樣主要分成四個程序,分別是採樣GenImg,圖像特徵生成Img2Tz,特徵模版合成RegModel及存儲模版Store,因為AS606指紋辨識模組採用UART溝通,因此程式一開始即全域宣告了:

SoftwareSerial mySerial(17, 5);

代表使用D17(RX)和D5(TX)

setup()裡作初始化過程

finger.begin(57600);

包括設定sensor的data rate

finger.verifyPassword();

及進行驗證sensor UART通訊必須進行的handshake loop()裡

while (true) {	//等待user輸入一字元,並由此作為指紋採樣的編號
    while (! Serial.available());
    char c = Serial.read();
    if (! isdigit(c)) break;
    id *= 10;
    id += c - '0';
  }

while (!  getFingerprintEnroll(id) );  //開始進行指紋採樣的程序

p = finger.getImage(); //當把手指放上sensor窗口,並且sensor感測採樣時,將會回傳採樣結果

p = finger.image2Tz(1); //當回傳FINGERPRINT_OK後,即會進入圖像特徵生成程序 回傳FINGERPRINT_OK後代表圖像採樣無誤,會提示移開手指,準備再從頭進行一次圖樣採集程序,當作完了兩次image2Tz時,會將採集兩次的圖樣作比對,之後進行圖像特徵模版合成的程序:

p = finger.createModel();

//當回傳FINGERPRINT_OK代表比對成功,之後再將合成後的圖像模組儲存起來,即完成指紋採樣的過程:

p = finger.storeModel(id);

Fingerprint.ino

指紋辨識過程分幾個部份,分別是採樣GenImg,圖像特徵生成Img2Tz及圖像特徵搜尋fingerFastSearch
setup()裡作初始化過程,跟enroll.ino的初始程序是一樣的,我們直接進入loop()裡:

getFingerprintIDez();裡開始進行指紋辨識程序
uint8_t p = finger.getImage(); //把手指放上sensor窗口,並且sensor感測採樣
p = finger.image2Tz();//當回傳FINGERPRINT_OK後,即會進入圖像特徵生成程序
p = finger.fingerFastSearch(); //進行圖像特徵搜尋,當回傳FINGERPRINT_OK即代表指紋辨識成功
請先確認已安裝QQ通訊軟體