今回は指紋認証モジュールのAS606を使います。製品の一部として指紋認証が組み込まれているイメージはありませんか?実は通販でもモジュールとして販売されています。
指紋認証で扉のロックを解除するとか、なんかわくわくしませんか??しかもArduino用のライブラリが整っているので、比較的簡単にArduinoで導入することが可能です。
ただし、いざやってみようとすると英語での情報ばかりで日本語の情報がほとんどなかったので今回詳しく解説していこうと思います。
動画にしても面白いかと思っているので、そのうちYoutubeにも
動画撮影してUPするかもしれません。
Youtubeで指紋認証してゲートを開けているショート動画を撮りました。
Arduinoで指紋認証モジュールを使いこなす方法が理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
今回使用した指紋認証モジュール
さてここで指紋認証モジュールの説明をしていきます。指紋認証モジュールにも世の中にそこそこ流通していますが、今回使用するのは、AS606というチップが載っている指紋認証モジュールです。
わたしはいつも秋月電子かAmazonでこういった類のものを購入していますが、この指紋認証モジュールはAmazonで購入しました。店舗に行かなくてもこういったモジュールが手に入るのは便利な世の中ですよね。いつも助かっています。
価格は購入時税込みで2,000円前後だったような気がします。この手のものは日々値段が変わっていくものなので、現在いくらなのかはご自分で確かめてみてください。
上の画像は起動した状態で、指を窓に載せると自動で認識が開始されます。
装置に埋め込んで使用したらセキュリティレベルを一気に上げることが可能です。何より近未来的でカッコ良くないですか??
機能的にも申し分ないのでそれを少しここで紹介しておきます。
ここで注目は、ストレージ容量1000個とか、誤受理率が0.0001%未満みたいな記述でしょうか。ほんとかな??という感じもしますが、もしほんとなら指紋は1000パターン保存できることになりますし、100万回に1回程度しか誤った判断をしないという性能ということになります。
結構2000円前後にしてはこれを使いこなせるといろんなことができそうですよね!?電子工作用のおもちゃとしてはなかなか優秀そうです。
実際に使うときに引っかかった点2つ紹介します
この指紋認証モジュールですが、どこかのデータシートを適当に確認すればすぐに使えるだろ…なんて思っていたのですが結構厄介でした。
具体的に難しかったポイントはこの2つです。
この2つを詳しく解説していきます。最後はしっかり応用例なんかもご紹介しますのでご安心ください。
配線が、同じAS606搭載のモジュールでも異なる。
AS606は指紋認証モジュールに多く使用されているICチップのようです。
現に、”AS606 fingerprint”とgoogleで検索すると無数の指紋認証モジュールがヒットします。
さらにAS608という後継機??なんかもあるようです。
ただ確認してみたところAS606のほうが高性能なスペック表しか出てこないんですよね…
まあとりあえずAS606を選択しておけば特に問題ないです。
さて、ここから配線のお話になりますが、
基本はモジュールとコネクタ、
そのコネクタから配線が付いた状態で商品が届きます。
この写真はコネクタに付属の配線付きコネクタを挿した状態です。
まあ赤が+DC5Vで、黒がGNDだろうなくらいの予想はつきますが、
さてRXとTXつまりRS232C通信用の線が2本どこかに隠れているはずなのです。
ですがどの線がRxか、Txかまあわからないですね…
そこで必死にGoogleの画像検索で似たようなモジュールでやっている人を探したところ…
日本人ではいませんでしたが、外国の方で写真をアップしていました。
それによると、黄色がTx、その隣の緑色がRxとのことでした。
そこでその情報を信じてArduinoに配線していった感じです。
AS606自体はもちろんピンの配置が決まっているわけですが、
それを汎用の基板に載せて別会社が実装するときにコネクタの何番ピンをGNDにするか、
+5VDCにするか?なんてのは各社さまざまあるわけですね。
ですから、似たような構成でも付属してくるコネクタについている配線の色が
全然違うものだったりするわけです。
わたしのものは赤(+5VDC)が一番端に来ているタイプですが、
インターネット上の情報なんかでは
GNDが一番端に来ているタイプも存在したりしていて、
ここは必ず確認が必要なところです。
配布されているライブラリに少々癖がある。
実際に指紋認証モジュールを使って、
例えば指紋を登録したり、置かれた指の指紋が登録されたものか?
なんかをArduinoで実行するわけですが、
一からスケッチを書く必要はありません。
ライブラリがすでに用意されていますので、
そちらを活用していきます。が…
インターネット上では、2通りのやり方が紹介されています。
どちらでもいいような気もするのですが、
情報が古くなっても更新されているという利点を考えると、
2番のArduinoIDE内のライブラリの管理からライブラリを追加する
方法をオススメしたいと思います。
具体的には、スケッチタブから、
こんな感じでライブラリの管理をクリックします。
その後、fingerprint
と打ち込みましょう。
するとこんな感じのライブラリが出てくるのでインストールします。
Ver.は最新のモノでいいと思います。
それでは癖があるというのがどういうことなのか。
早速インストール後、ArduinoIDEを再起動してこのように
スケッチ例からenrollを選択して開いてください。
ここで注目すべきは、ここですかね
そもそもpin#2は緑色の線で、pin#3は白だと言っています。が、
わたしの白色の線は明らかにNCです…さらに、Arduinoは0番pinと1番pinが
シリアル通信用のpinとなっていて、Rx,TxとArduino上に書いてあって
そこに指紋認証モジュールのTx,Rxを挿したくなるというトラップもあって、
何重にもトラップが仕掛けられているので
引っかからないように注意が必要です。
指紋認証モジュールをArduinoUNOと接続する。
それでは実際に使ってみるために、
ArduinoUNOと接続していきましょう。
配線図はこんな感じです。
配線の色はわたしの手持ちのモジュールに最初から付属されていた
配線の色そのままです。購入した時期によって異なる可能性もあるので
注意してください。
ちなみに、5VとGNDは赤と黒の線をつなげるのは何となくいいと思いますが、
黄色と緑色のTxとRxの線は、2番と3番にそれぞれつなぎます。
これは配布されているサンプルコードに合わせるためなので、
サンプルコードを書き替えてあげれば自由な位置で動作させることができます。
Arduinoで指紋認証モジュールを認識させてみる
さて、配線が完了したところで、
Arduinoのサンプルスケッチから指紋認証モジュールを認識させていきましょう。
先ほど開いた、サンプル例のenrollを使います。
enrollをArduinoUNOに書きこんで、シリアルの窓を開きましょう。
すると、このように表示されます。
もし、ここでこのように表示されたら接続がうまくいっていない状態です。
Did not find fingerprint sensor
と書かれている通り、認識できていない状態です。
接触不良も考えられるので、オススメはこちらの記事のように、
指紋認証モジュールから出ている配線の先を、
ジャンパーワイヤーのオス化する方法です。
そうすれば接触不良は防げます。
何かと便利なテクニックなので、道具も一緒にそろえてしまうのもアリです。
指紋認証モジュールが認識されたところで指紋の登録
ArduinoIDEのシリアル窓から、
指紋認証モジュールが認識されていると先ほど示したような画面になります。
もう一度載せておきますね。
こちらのように、enrollでは指紋の登録を行うスケッチになっています。
すべて英語ですが、その指示に従ってあげれば指紋の登録は比較的簡単にできます。
実際に指示された通りに指紋を登録していきましょう。
手順はこちらです。
それではやっていきましょう。
指紋を登録したいIDを入力
例えばこれから左の人差し指をID5番に登録したい場合、
このように5と打ち込みます。※半角です。
その後送信ボタンを押すと、
こんな感じで指を載せるの待ち状態に移行します。
このまま指を載せないとずっとこの黒い〇が永遠と出力されます。
落ち着いて登録したい指を指紋認証モジュールに載せましょう。
実際に指紋登録したい指を載せる
Arduino側で指が来るのを待っている状態なので、
登録したい指を載せます。
すると、シリアル窓が更新されてこのようになります。
指をいったん離して、もう一度同じ指を載せるように指示されます。
Remove finger⇒Place same finger again
という流れですね。簡単な英語なのでわかると思います。
指示されたらもう一度指を載せる
それでは指紋登録の仕上げです。
この状態で再度同じ指を載せてみましょう。
すると、
このような感じで、
Stored!
と表示されたらID5番に左の人差し指が無事に登録されました。
続けて異なるIDを登録することも可能です。
その場合はまた窓に半角の数字を打ちこんで送信ボタンで実行できます。
ちゃんと指紋が登録されたか確認する方法
指紋の登録はenrollのスケッチ例で行いましたが、
指紋がしっかり登録されているかのテストは
また別のスケッチを使用します。
それが、スケッチ例の中の、fingerprintを使用します。
何も変えずにArduinoに書き込みを行います。
その後シリアル窓を起動してみると、
正しく指紋認証モジュールが認識されているはずです。
この状態で指を載せないと、もちろん指がいないので、
このような表示になります。
No finger detectedなので、指がいないよと言われています。
さて、ここで先ほど登録した左手の人差し指を
指紋認証モジュールに載せてみましょう。
すると、
このように、指紋の認証が始まり、
無事ID#5と一致したと返ってきます。
つまりID#5の指だと認識されたわけですね。
confidenceの値、つまり精度も一緒に表示されます。
ここまでくれば応用は簡単そうですよね。
応用編:登録された指紋によって挙動を変える(LED点灯)
最後にこの指紋認証の仕組みを使って応用例を一つ作ってみます。
具体的にはこんな感じです。
基本的にスイッチって、LED1個につき1つ必要になりますよね?
ただ、指紋認証を行っているので、モジュールは1つで指紋で分岐させるので
複数のトリガーにできるという仕組みです。
今回はあらかじめ右手の薬指をID1に、右手の中指をID2に登録しています。
まずはイメージが大事なのでYoutubeに上げた動画をご覧ください。
このように指紋の種類によって分岐ができているのがわかると思います。
それでは配線からご紹介していきましょう。
指紋認証の応用編の配線
基本はLEDを追加するだけで済みます。
こんな感じにしましょう。
6番ピンの右のLEDを、7番ピンの左のLEDを接続しています。
スケッチ
ここからは、スケッチの解説です。
スケッチ例で解説されているところから何を追加すればいいのかですが、
以下2点の追加をfingerprintの中にしていきましょう。
では具体的にどこに何を追加すればよいか見ていきます。
6,7番ピンを出力指定(pinMode)
LEDの点灯をさせるときに忘れがちなpinModeですが、
必ず記載する必要があります。
fingerprintのsetupの中に記載しましょう。
void setup()
{
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
Serial.beginの前あたりに入れておけば大丈夫です。
読み取ったIDで分岐(if else)
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
if(finger.fingerID == 1)
{
digitalWrite(7,HIGH);
digitalWrite(6,LOW);
}
else if(finger.fingerID == 2)
{
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
正しく指紋が認証された場合は、finger.fingerIDの中に
該当するIDがint形式で格納されています。
ですから、そのIDで分岐させてあげるイメージです。
応用編の冒頭でご説明しましたが、ID#1には右手の薬指
ID#2には右手の中指をあらかじめenrollで登録しておいてください。
これで動画と同じことが再現可能です。
今回のまとめ
今回は指紋認証モジュールの使い方の解説と、
実際に応用してみる方法まで解説しました。
応用例ではIDによって分岐していますが、
実際使用するとなると、IDは関係なく登録されているかどうかで判定に
使用するかと思いますので、そこは工夫してやってみてください。
fingerprintをよく読めば、どのタイミングで認証が完了しているかわかると思います。
そこのタイミングをトリガーとして使ってあげると、
きっと思い通りの動作をさせることができると思います。
コメント
arduino を使ってボリュームのカーブ変更したいですBカーブしか持ち合わせ無いのですがCカーブもAカーブも使えるようにしたいです。ぜひブログでボリュームのカーブ変更記事書いて欲しいです。お願いします。
ふうとさん
コメントありがとうございます!
可変抵抗のお話のようですね。
BカーブをAカーブにもCカーブにもしたいということですが、物理的に抵抗を入れて擬似的に「っぽく」することは可能ですが、完全に変更するのは難しいですね。
データ上だけで良いのであれば、抵抗値から対数になるようにarduinoの中で計算してあげれば可能ですね。
データ上だけということでいいですかね??
それとも実際に抵抗値を変更したいということでしょうか??