工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作

必要な部品と材料

部品数量備考
HC-05 Bluetoothシリアルモジュール1デバイスとのペアリング用
Arduino Nano R31メインマイコン
R301T半導体指紋認証モジュール1シリアル通信対応
5mm RGB 4ピンLED1ステータス表示用

使用アプリ・オンラインサービス

プロジェクト概要

スマートデバイスの利用が増える中、チャット履歴、連絡先、画像、メモなどプライベートなデータを守るためロック機能は必須です。しかし、自室で作業中など安全な環境では、毎回ロック解除するのは煩わしいものです。

そこで、指紋認証で作動する小型ガジェット「セーフゾーン」を作成します。指紋認証が成功するとBluetoothが有効になり、ペアリング済みのデバイス(Android、iOS、Windows 10)が自動的にロック解除されます。ガジェットが近くにある間はロック解除状態が維持されます。

指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作

R301T指紋認証モジュール

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

指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作

回路図

指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作

プログラムコード

Adafruit_Fingerprintライブラリが必要です。初回のArduino使用時は以下の手順で進めてください。

  1. Arduino公式サイトからOS対応版をダウンロード・インストール
  2. Arduino IDEを起動し、エディタをクリアして以下のコードを貼り付け
  3. ツール→ボードで使用ボードを選択
  4. ArduinoをPCに接続し、ツール→ポートでCOMポートを設定
  5. アップロードボタン(矢印アイコン)を押下
#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;
}

組み立てとデバイスペアリング設定

指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作

各OSでのペアリング手順

自動ペアリングされない場合は、初回ペアリング時に文字を送信するトリックで解決できることがあります。

今後の拡張アイデア

ライブラリ

指紋センサー用ライブラリ(Adafruit_Fingerprint)はダウンロード専用です。

製造プロセス

  1. Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
  2. Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
  3. 学校向けスマート体温監視システム: 正確、リアルタイム、安全
  4. Arduino用8ビットI/Oポートライブラリ:デジタル制御を拡張
  5. iOS/AndroidアプリからWi-Fi/イーサネットでArduinoのLEDを制御 – Evothings Studio活用
  6. Arduino 64キー プロトタイピング キーボードマトリックス: シフトレジスタで自作キーボード
  7. Arduinoで楽器演奏:音階生成のステップバイステップガイド
  8. Arduino Nano用 高性能2.8インチTFTシールド - 320×240 SPIディスプレイ
  9. Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
  10. Arduino向けスマート屋内ナビゲーションロボットキット
  11. ダイレクトウォーターポンプが水伝送効率を高める仕組み