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

Arduino、キーパッド、リニアアクチュエーターで作るパスワード式ドアロック

必要な部品と材料

部品数量備考
Arduino UNO1
メンブレンキーパッド(4×4マトリックス)1
L293D デュアルHブリッジ モータードライバー1Texas Instruments製
リニアアクチュエーター(12V)1ドアの施錠/解錠用

プロジェクト概要

キーパッド入力でパスワード認証し、正しければリニアアクチュエーターを駆動してドアを開けるシステム。ネット上に類似プロジェクトは多数あるが、動作原理をわかりやすく解説することを目的としています。

キーパッドの仕組み

4×4マトリックスキーパッドは内部で行(Row)と列(Column)に配線されています。キーを押すと対応する行と列が短絡。Arduino側では列をプルアップ入力、行を出力に設定し、行を順番にLowにして列の状態を読み取る「スキャン」方式でどのキーが押されたかを判定します。

スキャンの流れ

  1. 全行をHighに設定
  2. Row 0のみLowにし、Column 0-3を読み取り → Lowならキー'1','2','3','A'のいずれか
  3. Row 1をLowにし、同様に読み取り → '4','5','6','B'
  4. Row 2をLow → '7','8','9','C'
  5. Row 3をLow → '*','0','#','D'
  6. これを高速で繰り返すことで、短時間の押下も検出可能

コード1: キーパッドスキャンのみ(ライブラリ不使用)

STM32等でライブラリが使えない場合にも対応できるよう、スキャンロジックを自前で実装した版。シリアルモニターに押されたキーを表示します。

int rows = 4; int columns = 4;
#define c3 9 #define c2 8 #define c1 7 #define c0 6
#define r3 5 #define r2 4 #define r1 3 #define r0 2

void setup() {
  Serial.begin(9600);
  pinMode(c0, INPUT_PULLUP); pinMode(c1, INPUT_PULLUP);
  pinMode(c2, INPUT_PULLUP); pinMode(c3, INPUT_PULLUP);
  pinMode(r0, OUTPUT); pinMode(r1, OUTPUT);
  pinMode(r2, OUTPUT); pinMode(r3, OUTPUT);
  pinMode(11, OUTPUT); pinMode(12, OUTPUT); // アクチュエーター制御用
}

char readkey(void) {
  // Row 0 スキャン
  digitalWrite(r0, LOW); digitalWrite(r1, HIGH); digitalWrite(r2, HIGH); digitalWrite(r3, HIGH);
  if (digitalRead(c0) == LOW) { delay(500); return '1'; }
  else if (digitalRead(c1) == LOW) { delay(500); return '2'; }
  else if (digitalRead(c2) == LOW) { delay(500); return '3'; }
  else if (digitalRead(c3) == LOW) { delay(500); return 'A'; }
  // Row 1 スキャン
  digitalWrite(r0, HIGH); digitalWrite(r1, LOW); digitalWrite(r2, HIGH); digitalWrite(r3, HIGH);
  if (digitalRead(c0) == LOW) { delay(500); return '4'; }
  else if (digitalRead(c1) == LOW) { delay(500); return '5'; }
  else if (digitalRead(c2) == LOW) { delay(500); return '6'; }
  else if (digitalRead(c3) == LOW) { delay(500); return 'B'; }
  // Row 2 スキャン
  digitalWrite(r0, HIGH); digitalWrite(r1, HIGH); digitalWrite(r2, LOW); digitalWrite(r3, HIGH);
  if (digitalRead(c0) == LOW) { delay(500); return '7'; }
  else if (digitalRead(c1) == LOW) { delay(500); return '8'; }
  else if (digitalRead(c2) == LOW) { delay(500); return '9'; }
  else if (digitalRead(c3) == LOW) { delay(500); return 'C'; }
  // Row 3 スキャン
  digitalWrite(r0, HIGH); digitalWrite(r1, HIGH); digitalWrite(r2, HIGH); digitalWrite(r3, LOW);
  if (digitalRead(c0) == LOW) { delay(500); return '*'; }
  else if (digitalRead(c1) == LOW) { delay(500); return '0'; }
  else if (digitalRead(c2) == LOW) { delay(500); return '#'; }
  else if (digitalRead(c3) == LOW) { delay(500); return 'D'; }
  return 'o'; // 押下なし
}

char nfunc(void) {
  char key = 'o';
  while (key == 'o') key = readkey();
  return key;
}

void loop() {
  char key1 = nfunc();
  if (key1) Serial.print(key1);
}

コード2: パスワード認証付き

入力された4桁を配列に蓄積し、設定パスワード「1234」と比較。一致ならD11 High / D12 Lowでアクチュエーターを引き込み(ドア開)、不一致なら「intruder」表示。


char password[5] = "1234";
char typed[5];
int count = 0;

void loop() {
  char key1 = nfunc();
  if (key1) {
    typed[count] = key1;
    count++;
    Serial.print(key1);
  }
  if (count == 4) {
    if (strcmp(typed, password) == 0) {
      Serial.println(" correct");
      digitalWrite(11, HIGH);
      digitalWrite(12, LOW);
      delay(250); // アクチュエーター駆動時間
      digitalWrite(11, LOW); // 停止
    } else {
      Serial.println(" intruder");
    }
    count = 0;
  }
}

リニアアクチュエーターの駆動

L293Dは12V電源で駆動し、Arduinoの5Vロジックで制御可能。入力ピン(D11, D12)のHigh/Low組み合わせで正転/逆転/停止を制御。パスワード正解時はD11=High, D12=Lowでアクチュエーターを引き込み(ドア開)。通常時は逆極性で突き出し状態(施錠)にしておきます。

回路図と動画

回路図ではアクチュエーターをモーター接続位置に、L293DのPin 8に12Vを接続。動画でキースキャン表示、パスワード正解時のLED点灯、アクチュエーター動作を確認できます。

発展のヒント

製造プロセス

  1. 銀行金庫の中身:歴史、設計、セキュリティの未来
  2. 回転ドア:設計、歴史、省エネ効果
  3. 運河と閘門:米国水上輸送のエンジニアリング、歴史、そして未来
  4. 現代ピンタンブラー錠の進化と製造
  5. ダイヤル式南京錠:設計、製造、歴史的進化
  6. Raspberry Pi搭載DIYソーラー駆動気象ステーション
  7. スマートフォンのBluetooth近接検知でスマートオートロックドアを構築
  8. Windows IoTとRaspberry Piで作るセキュアな顔認証ドアロック
  9. Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
  10. ArduinoとESP8266で作るWi-Fi対応スマートドアロック — スマホで解錠
  11. エンジン配置・構成の総合ガイド:タイプと特徴