指紋認証センサー(AS608)を使ってみた‼後編(実用/Arduino編)
こんにちは!
本日は、前回の続編、登録した指紋を使って実用的な物を作ってみたいと思います。
例えば、登録している指紋が見つかったらLEDが光る‼ とかです。
これができればセンサーやモータを取り付けることも容易くなると思うので、
「今回は登録している指紋が見つかったらLEDが光る‼」を目標にしたいと思います‼
指紋登録、指紋登録の確認はがお済でない方は前回の記事をご覧ください↓
・「仕様」
・動作電圧:3.3V
・動作電流:<60mA
・解像度:500dpi
・チップ:AS608
・指紋入力時間:1秒
・通信インターフェイス:USB/UART
このセンサーは、光学式で指紋を認証します。
①「部品追加」
前回使用した部品に加え新たにLEDを追加します。
・抵抗内蔵LED
電子工作ステーション 17円(500円以上で送料無料)
※LEDに指定はありませんが、抵抗内蔵LEDを使うと抵抗無しに直接電源を引けるので回路がコンパクトになりとても楽です。
以降は前回用意した物です。
・指紋認証センサーモジュール (AS606)
電子工作ステーション 1990円(送料無料)
・Arduino Uno
今回は使い勝手が良いType-CモデルのArduinoUnoを使っていますが、それ以外でも勿論問題ありません。
電子工作ステーション 1170円(送料無料)(互換ボード)(Type-C)
※UNO以外、Nanoとかでも大丈夫です。
・ジャンパーワイヤー(オス・オス)(10cm)(4本)
電子工作ステーション 110円(500円以上で送料無料)
(Arduinoとセンサーを繋ぐために使います。)
・Type-Cケーブル(持っていなければ)
電子工作ステーション 330円
(ArduinoとPCを繋ぐためのケーブルとなります。持ってない方は必要となります。)
②「回路」
前回と同様の回路LEDを付け加えただけです。
指紋認証センサー(AS608)
|
Arduino Uno | LED |
V+(赤線) | 3.3V | |
TX(黄線) | D2 | |
RX(白線) | D3 | |
GND(黒線) | GND | - |
TCH(青線) | ||
VA(緑線) | ||
D7 | + |
※抵抗内蔵EDを使わない場合は抵抗を忘れずに。
③「プログラム」
前回右手の人差し指の指紋をID付けしました。
そのデータを引き継ぎ、指紋7番(右手の人差し指)が認証できたらLEDを光らせるというプログラムを、
「fingerprint」サンプルプログラムに付け加えてみました‼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
#include <Adafruit_Fingerprint.h> #if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__) // 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) // Set up the serial port to use softwareserial.. SoftwareSerial mySerial(2, 3); #endif //事前に登録しといた指のIDを入れます。 int RegistrationFingerID = 7; Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); void setup() { Serial.begin(9600); finger.begin(57600); finger.getParameters(); finger.getTemplateCount(); //LEDを光らせるピンナンバーを指定。 pinMode(7, OUTPUT); } void loop() { //指紋識別 getFingerprintID(); // found a match! Serial.println(finger.fingerID); //事前に登録した指と一致したら7番ピンのLEDを光らせます。 if (finger.fingerID == RegistrationFingerID) { digitalWrite(7, HIGH); } else if (finger.fingerID == 0) { digitalWrite(7, LOW); } delay(100); } uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER://違う指だったらfingerIDを0にする。 Serial.println("No finger detected"); finger.fingerID = 0; 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.fingerSearch(); 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; } |
細かなところも少しいじりましたが、主に付け加えた部分はこれですね↓
1 2 3 4 5 6 |
//事前に登録した指と一致したら7番ピンのLEDを光らせます。 if (finger.fingerID == RegistrationFingerID) { digitalWrite(7, HIGH); } else if (finger.fingerID == 0) { digitalWrite(7, LOW); } |
見ての通り、めちゃくちゃ簡単なプログラムです‼
④「結果」
プログラムを書き終わると、シリアルモニターにこんな感じで表示されます。
事前に登録した指を当てるとこのように、登録したID番号が表示され、LEDが光ります‼
再び指を離すと、0に変わり、LEDが消えます。
こんな感じに応用していけば、ちょっとした金庫など、いろんな物に応用できる様になります^^
ちなみに、指紋センサーに登録した指をずっと当てればLEDはずっと光りますが、やや強く当てないと上手く認識しなくなります(-_-;)
以上、ご閲覧ありがとうございました^^