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

Arduinoベースのキーレスドアロック - LCD&4×4キーパッド付き

部品と材料

部品数量
Arduino UNO1
4×4キーパッド (LED対応タイプ推奨、SparkFun等)1
LCD 16×2 (白文字/青背景、Adafruit標準等)1
リレー (汎用、DCロック駆動用)1
9V電池 (ロック駆動用)1
単回転ポテンショメータ 10kΩ (LCDコントラスト調整用)1
抵抗 10kΩ1
抵抗 220Ω (LCDバックライト用)1

アプリとオンラインサービス

プロジェクト概要

作成者: Ali Hamza

4×4キーパッドでパスワードを入力し、DCロックでドアを開閉するキーレスドアロックシステムを作ります。16×2 LCDで状態を表示します。

必要な部品

動作原理

押されたキーを内部に保存されたパスワードと照合します。初期パスワードはEEPROMに「1234」として格納されています。一致すればロックが解除され、不一致ならLCDに「Access Denied」と表示されます。

「#」キーを押すと、現在のパスワード入力を求められ、正しければ新しいパスワードの入力を促し、パスワードを変更できます。

回路図

キーパッド接続

4×4キーパッドの最初の6ピンをArduinoのA0〜A5に、最後の2ピンをデジタルピン3と2に接続します。

LCD接続

DCロック接続

ロックは7〜12Vで動作するため、Arduinoから直接駆動できません。リレーと電池を使用します。

Arduinoベースのキーレスドアロック - LCD&4×4キーパッド付き

Arduinoキーパッドロックコード

初期パスワードは 1234 です。

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
char password[4];
char initial_password[4], new_password[4];
int i = 0;
int relay_pin = 10;
char key_pressed = 0;

const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {A4, A5, 3, 2};

Keypad keypad_key = Keypad(makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

void setup() {
  pinMode(relay_pin, OUTPUT);
  lcd.begin(16, 2);
  lcd.print(" DIYhacking.com");
  lcd.setCursor(0, 1);
  lcd.print("Electronic Lock ");
  delay(2000);
  lcd.clear();
  lcd.print("Enter Password");
  lcd.setCursor(0, 1);
  initialpassword();
}

void loop() {
  digitalWrite(relay_pin, HIGH); // ロック状態 (HIGH=施錠)
  key_pressed = keypad_key.getKey();
  if (key_pressed == '#') change();

  if (key_pressed) {
    password[i++] = key_pressed;
    lcd.print(key_pressed);
  }

  if (i == 4) {
    delay(200);
    for (int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j);
    if (!(strncmp(password, initial_password, 4))) {
      // パスワード一致
      lcd.clear();
      lcd.print("Pass Accepted");
      digitalWrite(relay_pin, LOW); // ロック解除 (LOW=開錠)
      delay(2000);
      lcd.setCursor(0, 1);
      lcd.print("Pres # to change");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
      i = 0;
    } else {
      // パスワード不一致
      digitalWrite(relay_pin, HIGH);
      lcd.clear();
      lcd.print("Wrong Password");
      lcd.setCursor(0, 1);
      lcd.print("Pres # to Change");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Password");
      lcd.setCursor(0, 1);
      i = 0;
    }
  }
}

void change() {
  int j = 0;
  lcd.clear();
  lcd.print("Current Password");
  lcd.setCursor(0, 1);
  while (j < 4) {
    char key = keypad_key.getKey();
    if (key) {
      new_password[j++] = key;
      lcd.print(key);
    }
    key = 0;
  }
  delay(500);
  if (strncmp(new_password, initial_password, 4)) {
    // 現在パスワード不一致
    lcd.clear();
    lcd.print("Wrong Password");
    lcd.setCursor(0, 1);
    lcd.print("Try Again");
    delay(1000);
  } else {
    // 新パスワード入力
    j = 0;
    lcd.clear();
    lcd.print("New Password:");
    lcd.setCursor(0, 1);
    while (j < 4) {
      char key = keypad_key.getKey();
      if (key) {
        initial_password[j] = key;
        lcd.print(key);
        EEPROM.write(j, key);
        j++;
      }
    }
    lcd.print("Pass Changed");
    delay(1000);
  }
  lcd.clear();
  lcd.print("Enter Password");
  lcd.setCursor(0, 1);
  key_pressed = 0;
}

void initialpassword() {
  for (int j = 0; j < 4; j++) EEPROM.write(j, j + 49); // '1','2','3','4' を書き込み
  for (int j = 0; j < 4; j++) initial_password[j] = EEPROM.read(j);
}

コード解説

  1. ライブラリ読み込み: Keypad、LiquidCrystal、EEPROMライブラリをインクルード。EEPROMでパスワードを不揮発保存。
  2. メインループ: キー入力を password 配列に格納しLCD表示。4桁入力後にEEPROMの initial_password と strncmp で比較。一致ならリレーをLOWにしてロック解除、不一致ならエラー表示。
  3. パスワード変更 (#キー): change() 関数で現在パスワードを確認し、正しければ新パスワードをEEPROMに書き込み。

回路図 (追加)

ソレノイドドアロックをArduinoで制御し、正しいキーコンビネーションで開錠する回路。

Arduinoベースのキーレスドアロック - LCD&4×4キーパッド付き

タグ: 4x4 Keypad, Arduino, DC Lock, Keylock, Keypad, LCD, Lock

製造プロセス

  1. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  2. Python連携で信頼性向上: Arduino RFID勤怠管理システム
  3. DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
  4. Arduino UNOで作るLCDアニメーション&ゲーム入門
  5. Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
  6. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  7. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  8. Arduino Unoと1Sheeldで作る4x4x4 LEDキューブ – インタラクティブLEDプロジェクト
  9. Arduinoで高速・高精度RPM測定 – レーザーとIRセンサーによる新アルゴリズム
  10. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  11. スマートキーレスドアロック:ArduinoとAndroid Bluetoothでパスワード制御