指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| HC-05 Bluetoothシリアルモジュール | 1 | デバイスとのペアリング用 |
| Arduino Nano R3 | 1 | メインマイコン |
| R301T半導体指紋認証モジュール | 1 | シリアル通信対応 |
| 5mm RGB 4ピンLED | 1 | ステータス表示用 |
使用アプリ・オンラインサービス
- Arduino IDE
プロジェクト概要
スマートデバイスの利用が増える中、チャット履歴、連絡先、画像、メモなどプライベートなデータを守るためロック機能は必須です。しかし、自室で作業中など安全な環境では、毎回ロック解除するのは煩わしいものです。
そこで、指紋認証で作動する小型ガジェット「セーフゾーン」を作成します。指紋認証が成功するとBluetoothが有効になり、ペアリング済みのデバイス(Android、iOS、Windows 10)が自動的にロック解除されます。ガジェットが近くにある間はロック解除状態が維持されます。

R301T指紋認証モジュール
R301TはArduino等のマイコンとシリアル通信でデータをやり取りします。まず指紋を登録し、ArduinoのTx/Rxピンに接続。HC-05 Bluetoothモジュールを各デバイスと1回ペアリングしておき、指紋認証成功時にBluetoothをオンにするプログラムをArduinoに書き込みます。

回路図

プログラムコード
Adafruit_Fingerprintライブラリが必要です。初回のArduino使用時は以下の手順で進めてください。
- Arduino公式サイトからOS対応版をダウンロード・インストール
- Arduino IDEを起動し、エディタをクリアして以下のコードを貼り付け
- ツール→ボードで使用ボードを選択
- ArduinoをPCに接続し、ツール→ポートでCOMポートを設定
- アップロードボタン(矢印アイコン)を押下
#include "Adafruit_Fingerprint.h"
#include "SoftwareSerial.h"
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int cc = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
delay(100);
Serial.println("\n\nAdafruit finger detect test");
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) {
pinMode(13, OUTPUT); digitalWrite(13, LOW);
pinMode(9, OUTPUT); digitalWrite(9, HIGH);
}
}
finger.getTemplateCount();
Serial.print("Sensor contains ");
Serial.print(finger.templateCount);
Serial.println(" templates");
Serial.println("Waiting for valid finger...");
}
void loop() {
getFingerprintIDez();
delay(50);
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK: Serial.println("Image taken"); break;
case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); 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;
}
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;
}
p = finger.fingerFastSearch();
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;
}
Serial.print("Found ID #");
Serial.print(finger.fingerID);
Serial.print(" with confidence of ");
Serial.println(finger.confidence);
for (int i = 255; i > 1; i--) {
analogWrite(9, i);
delay(10);
}
if (cc % 2 == 0) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
cc++;
return finger.fingerID;
}
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;
Serial.print("Found ID #");
Serial.print(finger.fingerID);
Serial.print(" with confidence of ");
Serial.println(finger.confidence);
return finger.fingerID;
}
組み立てとデバイスペアリング設定

各OSでのペアリング手順
- Windows 10:設定→サインインオプション→ダイナミックロックを有効化し、BTモジュールをペアリング
- Android:設定→画面ロック→スマートロックを有効化し、BTデバイスを追加
- iOS:設定→Touch IDとパスコード→スマートロック設定
自動ペアリングされない場合は、初回ペアリング時に文字を送信するトリックで解決できることがあります。
今後の拡張アイデア
- 特定の場所でのみ反応するようGPS連携を追加
- 他のユーザー向けに制限付きアクセス権限を設定
ライブラリ
指紋センサー用ライブラリ(Adafruit_Fingerprint)はダウンロード専用です。
製造プロセス
- Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- 学校向けスマート体温監視システム: 正確、リアルタイム、安全
- Arduino用8ビットI/Oポートライブラリ:デジタル制御を拡張
- iOS/AndroidアプリからWi-Fi/イーサネットでArduinoのLEDを制御 – Evothings Studio活用
- Arduino 64キー プロトタイピング キーボードマトリックス: シフトレジスタで自作キーボード
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- Arduino Nano用 高性能2.8インチTFTシールド - 320×240 SPIディスプレイ
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- Arduino向けスマート屋内ナビゲーションロボットキット
- ダイレクトウォーターポンプが水伝送効率を高める仕組み