使用指紋辨識模組
- 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範例接線如下:
RTL8710範例接線如下:
我們打開範例 “File” -> “Examples” -> “AmebaFingerprint” -> “enroll”, 編譯並上傳至Ameba之後按下Reset按鈕,此時打開終端機,應可看到能找到指紋辨識模組的訊息:
接著按照console提示的訊息,我們在鍵盤上鍵入一個字母’a’
Console印出”waiting for valid finger to enroll”訊息,此時即可將手指放置至模組窗口上
如模組有正確採集到指紋,接著會要求移開指紋後,再將相同的手指放置於窗口上
如指紋採集無誤,console會提printfs matched,並將指紋儲存,接下來您可以嘗試多採集不同手指的指紋
接著我們要來測試指紋辨識模組能否把剛儲存的指紋辨識成功,我們打開範例 “File” -> “Examples” -> “AmebaFingerprint” -> “fingerprint”, 編譯並上傳至Ameba之後按下Reset按鈕,此時打開終端機,應可看到能找到指紋辨識模組的訊息:
並提示正在等待驗證指紋,此時將剛採樣的同一根手指放置於指紋辨識窗口
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即代表指紋辨識成功