指紋認証センサーでバイク盗難を防ぐ - Arduinoバイオメトリックセキュリティシステム
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Pro Mini (05) | 1 | 小型・低消費電力 |
| リレーモジュール | 1 | イグニッション/スターター遮断用 |
| 指紋認証センサー FPM10A | 1 | シリアル通信(TTL) |
| 電圧レギュレーターモジュール | 1 | バイク電源(12V)から5V/3.3V生成用 |
必要な工具
- はんだごて
- 鉛フリーはんだ
- 絶縁テープ
- ラジオペンチ
アプリとオンラインサービス
- Arduino Web Editor
プロジェクト概要
バイク盗難が多発する中、Arduino Pro Miniを用いて「指紋認証によるエンジン始動認証システム」を開発しました。登録済みの指紋のみでエンジンが始動するようにし、不正な始動を防ぎます。Canal Sandro Mesquita Roboticamenteによるプロジェクトです。
ソースコード
バイク防犯システム スケッチ
/***************************************************
* Adafruit光学式指紋センサー用スケッチ
* Adafruit BMP085 Breakout向けに設計
* TTLシリアル通信(2ピン必要)
* Written by Limor Fried/Ladyada for Adafruit Industries
* BSD license
***************************************************/
int chave = 0;
int verde = 5; // 緑LED
int azul = 4; // 青LED
int vermelho = 6; // 赤LED
int rele = 7; // リレー制御
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
// pin #2 = センサーからの入力 (緑線)
// pin #3 = Arduinoからセンサーへ出力 (白線)
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(rele, 1); // リレー初期状態: OFF(エンジン遮断)
delay(100);
digitalWrite(azul, 1); // 青LED点灯: 初期化中
finger.begin(57600); // センサー通信開始
// パスワード検証はコメントアウト済み
finger.getTemplateCount();
// Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
digitalWrite(azul, 0);
digitalWrite(vermelho, 1); // 赤LED点灯: 待機中(指紋未認証)
digitalWrite(verde, 0);
}
void loop() {
if (getFingerprintIDez() == 1) { // 指紋認証成功
chave = !chave; // トグル: ON↔OFF
delay(500);
}
digitalWrite(rele, !chave); // リレー制御(chave=1で導通=エンジン始動許可)
digitalWrite(verde, chave); // 緑LED: 認証済み表示
digitalWrite(vermelho, digitalRead(rele)); // 赤LED: 未認証表示
delay(50);
}
// 詳細版指紋取得関数(デバッグ用)
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK: break;
case FINGERPRINT_NOFINGER: return p;
case FINGERPRINT_PACKETRECIEVEERR: return p;
case FINGERPRINT_IMAGEFAIL: return p;
default: return p;
}
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK: break;
case FINGERPRINT_IMAGEMESS: return p;
case FINGERPRINT_PACKETRECIEVEERR: return p;
case FINGERPRINT_FEATUREFAIL: return p;
case FINGERPRINT_INVALIDIMAGE: return p;
default: return p;
}
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
// Serial.print("Found ID #"); Serial.print(finger.fingerID);
// Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
return p;
}
// 簡易版:認証成功でID返却、失敗で-1
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;
}
回路図
指紋センサーの緑線→Arduino D2、白線→D3。リレーでイグニッションラインまたはスターターモーター回路を遮断/接続します。電源はバイクの12Vからレギュレーターで降圧して供給します。
動作説明
- 青LED点灯: システム起動・初期化中
- 赤LED点灯: 待機中(指紋未登録/未認証) - リレーOFFでエンジン始動不可
- 緑LED点灯: 認証済み - リレーONでエンジン始動許可
- 指紋認証成功ごとに
chaveがトグルし、リレー状態が切り替わります(始動許可⇔遮断) - Adafruit Fingerprintライブラリを使用(テンプレート登録は別途PCソフト等で実施)
実装のポイント
- Arduino Pro Miniは小型でバイクの車体内に収納しやすい
- 電圧レギュレーターで安定した5V/3.3Vを確保
- リレーはノーマルオープン接点を使用し、通電時にイグニッション回路を接続する設計推奨
- 防水・防振対策を施して実車装着すること
製造プロセス
- TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- スマートホーム連携向けマルチポジション温度センサーシステム
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- ATtiny85ミニアーケード:スネークゲーム - 手のひらサイズOLEDゲーム機の製作
- ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)
- 銅メッキプロジェクト:Arduino UNOで作るスマート電気メッキシステム
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- Arduino Nano製ウェザーステーション:気圧・温湿度・UV・時計表示付き
- Arduinoシフトレジスタで美しい光のシーケンスを作成