Test Program of GT-511C3 / GT-511C31 Fingerprint reader module.
GT-511-C31 指紋スキャンモジュールを mbed で動かしてみる
年末に大阪日本橋にあるデジットに行くと,指紋スキャンモジュールを販売していました.
値段は少しお高め(三千円〜八千円超え)ですが,使えると色々と応用が出来そうなので,GT-511-C31を購入して mbed で動かしてみました.
使い方とか
このページにある GT511C3test をそのままプログラムとしてインポートして下さい.
クラスライブラリ化していますので,クラスライブラリを使う場合は,以下からインポートして下さい. ドキュメントが追いついていなくてすみません.テストプログラムを参考にして頂けたらと思います...
Import libraryGT511C3
Class library of fingerprint reader module "GT-511C3 / GT-511C31"
テストプログラムでは,mbed と p28,p27 でシリアル通信します.Vin と GND はそのまま mbed の 3.3V と GND が使えます.
finger.Enroll(11,progress); この関数の呼び出しで,ID番号11番に指紋を登録します.同じ指紋を3回あてると登録できます.
その後,finger.Identify(); の呼び出しで指紋があたっていれば認識して,同じ指紋であればID番号11番を返すはずです. それ以外の指紋があたっていると -1 を返します.
注意点として,指紋の登録あるいは認識をする場合は,必ず CmosLed を点灯させて下さい.点灯させると指紋検出面が青く光ります.これが消灯していると,指紋の検出が出来ないようです.
雑感
指紋の認識は,感覚的にですが1秒ほどで認識します.10本の指それぞれで色々な角度であててみましたが,誤認識無く,登録した指紋があたるとIDが返ります.説明書によると,「違う指紋を同じ指紋として誤る確率:0.001%未満」と言うことなので,10万回に1回の確率で間違えそうですが,実用レベルだと感じます.
うまく使うと,mbed で生体認証チックな事ができそうですね.
指紋認証器モドキ(自動ログインのデモ)
これは,青mbed ではなく,lpclcd と指紋スキャンモジュールを組み合わせて,指紋認証器モドキを作って Mac に自動ログインするプロトタイプです.
lpclcd は mbed と同じように USBKeyboard の様に振る舞わせることが出来ますので,登録された指紋があたると,lpclcd で USBKeyboard::printf("パスワード\n"); を実行してあたかもパスワードがUSB Keyboard で打ち込まれたかの様に動作させています.
この指紋認証器モドキのメリットは,PCから見ればUSBキーボードの様に見えるので,特別なドライバを必要としないことです.要するに「登録された指紋があたれば事前にプログラムされた文字列を lpclcd が代わりにタイプしてくれる」だけです.
実用を考えた時,セキュリティ強度は 強くはないでしょう.このテストプログラムは,パスワードを生文字列で抱き込んでいるので,バイナリレベルで解析すればすぐに生文字列が分かってしまいます.なので指紋認証器モドキです.
GT511C3.h
- Committer:
- tosihisa
- Date:
- 2014-01-03
- Revision:
- 4:3dd0f98e6f09
- Parent:
- 3:459a4f985a45
- Child:
- 5:d3ebe6d1ed92
File content as of revision 4:3dd0f98e6f09:
/** * @section LICENSE * * Copyright (c) 2013 @tosihisa, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * @section DESCRIPTION * * Fingerprint reader module "GT-511C3" class. * * http://www.adh-tech.com.tw/?22,gt-511c3-gt-511c31 * http://www.adh-tech.com.tw/files/GT-511C3_datasheet_V1%201_20131127[1].pdf * https://www.sparkfun.com/products/11792 * https://github.com/sparkfun/Fingerprint_Scanner-TTL/ * http://blog.digit-parts.com/archives/51894096.html */ #ifndef __GT511C3_H #define __GT511C3_H #include "mbed.h" class GT511C3 : public Serial { public: enum Command { CMD_Open = 0x01, // 01 Open Initialization CMD_Close = 0x02, // 02 Close Termination CMD_UsbInternalCheck = 0x03, // 03 UsbInternalCheck Check if the connected USB device is valid CMD_ChangeBaudrate = 0x04, // 04 ChangeBaudrate Change UART baud rate CMD_SetIAPMode = 0x05, // 05 SetIAPMode Enter IAP Mode In this mode, FW Upgrade is available CMD_CmosLed = 0x12, // 12 CmosLed Control CMOS LED CMD_GetEnrollCount = 0x20, // 20 GetEnrollCount Get enrolled fingerprint count CMD_CheckEnrolled = 0x21, // 21 CheckEnrolled Check whether the specified ID is already enrolled CMD_EnrollStart = 0x22, // 22 EnrollStart Start an enrollment CMD_Enroll1 = 0x23, // 23 Enroll1 Make 1st template for an enrollment CMD_Enroll2 = 0x24, // 24 Enroll2 Make 2nd template for an enrollment CMD_Enroll3 = 0x25, // 25 Enroll3 Make 3rd template for an enrollment, merge three templates into one template, save merged template to the database CMD_IsPressFinger = 0x26, // 26 IsPressFinger Check if a finger is placed on the sensor CMD_DeleteID = 0x40, // 40 DeleteID Delete the fingerprint with the specified ID CMD_DeleteAll = 0x41, // 41 DeleteAll Delete all fingerprints from the database CMD_Verify = 0x50, // 50 Verify 1:1 Verification of the capture fingerprint image with the specified ID CMD_Identify = 0x51, // 51 Identify 1:N Identification of the capture fingerprint image with the database CMD_VerifyTemplate = 0x52, // 52 VerifyTemplate 1:1 Verification of a fingerprint template with the specified ID CMD_IdentifyTemplate = 0x53, // 53 IdentifyTemplate 1:N Identification of a fingerprint template with the database CMD_CaptureFinger = 0x60, // 60 CaptureFinger Capture a fingerprint image(256x256) from the sensor CMD_MakeTemplate = 0x61, // 61 MakeTemplate Make template for transmission CMD_GetImage = 0x62, // 62 GetImage Download the captured fingerprint image(256x256) CMD_GetRawImage = 0x63, // 63 GetRawImage Capture & Download raw fingerprint image(320x240) CMD_GetTemplate = 0x70, // 70 GetTemplate Download the template of the specified ID CMD_SetTemplate = 0x71, // 71 SetTemplate Upload the template of the specified ID CMD_GetDatabaseStart = 0x72, // 72 GetDatabaseStart Start database download, obsolete CMD_GetDatabaseEnd = 0x73, // 73 GetDatabaseEnd End database download, obsolete CMD_UpgradeFirmware = 0x80, // 80 UpgradeFirmware Not supported CMD_UpgradeISOCDImage = 0x81, // 81 UpgradeISOCDImage Not supported CMD_Ack = 0x30, // 30 Ack Acknowledge. CMD_Nack = 0x31, // 31 Nack Non-acknowledge. }; enum Error { NACK_TIMEOUT = 0x1001, // NACK_TIMEOUT 0x1001 Obsolete, capture timeout NACK_INVALID_BAUDRATE = 0x1002, // NACK_INVALID_BAUDRATE 0x1002 Obsolete, Invalid serial baud rate NACK_INVALID_POS = 0x1003, // NACK_INVALID_POS 0x1003 The specified ID is not between 0~199 NACK_IS_NOT_USED = 0x1004, // NACK_IS_NOT_USED 0x1004 The specified ID is not used NACK_IS_ALREADY_USED = 0x1005, // NACK_IS_ALREADY_USED 0x1005 The specified ID is already used NACK_COMM_ERR = 0x1006, // NACK_COMM_ERR 0x1006 Communication Error NACK_VERIFY_FAILED = 0x1007, // NACK_VERIFY_FAILED 0x1007 1:1 Verification Failure NACK_IDENTIFY_FAILED = 0x1008, // NACK_IDENTIFY_FAILED 0x1008 1:N Identification Failure NACK_DB_IS_FULL = 0x1009, // NACK_DB_IS_FULL 0x1009 The database is full NACK_DB_IS_EMPTY = 0x100A, // NACK_DB_IS_EMPTY 0x100A The database is empty NACK_TURN_ERR = 0x100B, // NACK_TURN_ERR 0x100B Obsolete, Invalid order of the enrollment (The order was not as: EnrollStart -> Enroll1 -> Enroll2 -> Enroll3) NACK_BAD_FINGER = 0x100C, // NACK_BAD_FINGER 0x100C Too bad fingerprint NACK_ENROLL_FAILED = 0x100D, // NACK_ENROLL_FAILED 0x100D Enrollment Failure NACK_IS_NOT_SUPPORTED = 0x100E, // NACK_IS_NOT_SUPPORTED 0x100E The specified command is not supported NACK_DEV_ERR = 0x100F, // NACK_DEV_ERR 0x100F Device Error, especially if Crypto-Chip is trouble NACK_CAPTURE_CANCELED = 0x1010, // NACK_CAPTURE_CANCELED 0x1010 Obsolete, The capturing is canceled NACK_INVALID_PARAM = 0x1011, // NACK_INVALID_PARAM 0x1011 Invalid parameter NACK_FINGER_IS_NOT_PRESSED = 0x1012, // NACK_FINGER_IS_NOT_PRESSED 0x1012 Finger is not pressed NACK_IO_ERR = 0xF000, // ORIGINAL ERROR CODE. Serial line error. }; unsigned long LastError; unsigned long FirmwareVersion; unsigned long IsoAreaMaxSize; unsigned char DeviceSerialNumber[16]; GT511C3(PinName _tx, PinName _rx) : Serial(_tx,_rx) , LastError(0) {} int Init(void); int SendCommand(unsigned long Parameter,unsigned short Command); int RecvResponse(unsigned long *Parameter,unsigned short *Response); int RecvData(unsigned char *data,unsigned long size); int SendRecv(unsigned short Command,unsigned long *Parameter,unsigned short *Response); int ClearLine(void); int Open(void); int WaitPress(int press); int CmosLed(int onoff); int IsPress(void); int Capture(int best); int Enroll_N(int N); int Identify(void); }; #endif //__GT511C3_H