使用指纹辨识模组

材料准备
  • 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通讯软体