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

スマートキーレスドアロック:ArduinoとAndroid Bluetoothでパスワード制御

必要な部品と材料

部品数量備考
Arduino UNO1メイン制御
HC-05 Bluetoothモジュール1スマホと通信
サーボモーター(Tower Pro MG996R)1デッドボルト駆動用、高トルク推奨

必要な工具

使用するソフトウェア

プロジェクト概要

鍵を持ち歩く必要のない、Bluetooth経由でスマートフォンから施錠・解錠できるスマートドアロックを自作します。ロック本体はドア内側に設置するため、外部から物理的に破壊されにくい構造です。Androidアプリでパスワードを入力し「開錠/施錠」ボタンをすと、コマンド+パスワードがBluetoothで送信され、Arduino側でパスワード照合後、サーボモーターでデッドボルトを駆動します。結果(開錠/施錠/パスワード誤り)はアプリにフィードバック表示されます。

3Dプリント筐体

すべての構造パーツは3Dプリントで製作します。Thingiverseユーザーridercz氏の設計(Thing #2350856)をベースに、Rack_Holder.stl以外を使用。LT版(軽量版)でも強度十分です。Anet A8等で出力後、ネジ4本でしっかり固定して組み立てます。

Arduinoプログラムの仕組み

アプリから送信される文字列はOPEN=パスワードまたはCLOSE=パスワードの形式。=を区切り文字としてコマンドとパスワードを分離し、事前設定パスワード(デフォルトarduPi)と照合。一致すればコマンドに応じてサーボを駆動(開錠: 0度、施錠: 65度)し、結果をシリアル(Bluetooth経由でアプリへ)返信します。

回路図・配線

ドアへの取り付け

  1. 組み立て済みロックユニットをドア内側にネジ4本で固定
  2. HC-05をロック筐体の所定位置にホットグルーで固定
  3. Arduino基板をロック下部に配置し、配線接続
  4. 5V 1A以上のACアダプターで給電

Androidアプリ開発(MIT App Inventor 2)

基本版アプリ作成手順

  1. App InventorにGoogleアカウントでログイン
  2. 新規プロジェクト「BluetoothControlDoorLock」作成(スペース不可)
  3. デザイナーで以下を配置:
    • ListPicker: 「Connect to Bluetooth Device」
    • Label: 「Enter Password」
    • TextBox (Passwordモード): パスワード入力
    • Button: 「Open Door」
    • Button: 「Close Door」
    • BluetoothClient(非表示コンポーネント)
  4. ブロックエディターでロジック構築:
    • ListPicker.BeforePicking → BluetoothClient.AddressesAndNames設定
    • ListPicker.AfterPicking → BluetoothClient.Connect実行
    • Open Doorボタン.Click → "OPEN=" + TextBox.TextをBluetoothClient.SendTextで送信
    • Close Doorボタン.Click → "CLOSE=" + TextBox.Textを送信
    • BluetoothClient.DataReceived → 受信テキストで「OPEN」「CLOSE」「WRONG」を判定し、Notifierでダイアログ表示
  5. メニュー「Build」→「App (save .apk to my computer)」でAPK生成・インストール

高機能版アプリ(BTcontrol)

基本版に以下の機能を追加した完成版アプリを提供しています:

ダウンロード:

Arduinoスケッチ

#include <Servo.h>
Servo myservo;

String inputString = "";
String command = "";
String value = "";
String password = "arduPi";  // 任意のパスワードに変更可能
boolean stringComplete = false;

void setup() {
  Serial.begin(9600);
  inputString.reserve(50);
  command.reserve(50);
  value.reserve(50);
  myservo.attach(9);
}

void loop() {
  if (stringComplete) {
    delay(100);
    int pos = inputString.indexOf('=');
    if (pos > -1) {
      command = inputString.substring(0, pos);
      value = inputString.substring(pos + 1, inputString.length() - 1);
      
      if (!password.compareTo(value) && (command == "OPEN")) {
        openDoor();
        Serial.println(" OPEN");
        delay(100);
      } else if (!password.compareTo(value) && (command == "CLOSE")) {
        closeDoor();
        Serial.println(" CLOSE");
        delay(100);
      } else if (password.compareTo(value)) {
        Serial.println(" WRONG");
        delay(100);
      }
    }
    inputString = "";
    stringComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n' || inChar == '\r') {
      stringComplete = true;
    }
  }
}

void openDoor() {
  myservo.write(0);
  delay(100);
}

void closeDoor() {
  myservo.write(65);
  delay(100);
}

セキュリティ考慮事項と改善案

参考リンク

製造プロセス

  1. 銀行金庫の中身:歴史、設計、セキュリティの未来
  2. 運河と閘門:米国水上輸送のエンジニアリング、歴史、そして未来
  3. Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
  4. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  5. Arduino UNOで作るLCDアニメーション&ゲーム入門
  6. ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
  7. Arduino、キーパッド、リニアアクチュエーターで作るパスワード式ドアロック
  8. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
  9. Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
  10. Arduinoで高速・高精度RPM測定 – レーザーとIRセンサーによる新アルゴリズム
  11. ArduinoとESP8266で作るWi-Fi対応スマートドアロック — スマホで解錠