Arduinoベースのキーレスドアロック - LCD&4×4キーパッド付き
部品と材料
| 部品 | 数量 |
|---|---|
| Arduino UNO | 1 |
| 4×4キーパッド (LED対応タイプ推奨、SparkFun等) | 1 |
| LCD 16×2 (白文字/青背景、Adafruit標準等) | 1 |
| リレー (汎用、DCロック駆動用) | 1 |
| 9V電池 (ロック駆動用) | 1 |
| 単回転ポテンショメータ 10kΩ (LCDコントラスト調整用) | 1 |
| 抵抗 10kΩ | 1 |
| 抵抗 220Ω (LCDバックライト用) | 1 |
アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
作成者: Ali Hamza
4×4キーパッドでパスワードを入力し、DCロックでドアを開閉するキーレスドアロックシステムを作ります。16×2 LCDで状態を表示します。
必要な部品
- Arduino
- 4×4キーパッド
- LCD
- DCロック
- リレー
- 9V電池
- 10kΩポテンショメータ
- 220Ω抵抗
動作原理
押されたキーを内部に保存されたパスワードと照合します。初期パスワードはEEPROMに「1234」として格納されています。一致すればロックが解除され、不一致ならLCDに「Access Denied」と表示されます。
「#」キーを押すと、現在のパスワード入力を求められ、正しければ新しいパスワードの入力を促し、パスワードを変更できます。
回路図
キーパッド接続
4×4キーパッドの最初の6ピンをArduinoのA0〜A5に、最後の2ピンをデジタルピン3と2に接続します。
LCD接続
- LCDピン1 (VSS) → Arduino GND
- LCDピン2 (VDD) → Arduino 5V
- LCDピン3 (V0) → 10kΩポテンショメータ中央端子 (両端を5VとGNDに接続、コントラスト調整用)
- LCDピン4 (RS) → Arduino D7
- LCDピン5 (R/W) → Arduino GND
- LCDピン6 (Enable) → Arduino D6
- LCDピン11〜14 (データ) → Arduino D5, D4, D3, D2
- LCDピン15 (バックライト+) → 220Ω抵抗経由でArduino 5V
- LCDピン16 (バックライト-) → Arduino GND
DCロック接続
ロックは7〜12Vで動作するため、Arduinoから直接駆動できません。リレーと電池を使用します。
- リレー信号ピン → Arduino D10
- ロックVCC/GND → Arduino 5V/GND (リレー駆動用)
- リレーのコモン端子 → 9V電池マイナス
- リレーのNO (常開) 端子 → ロック片側
- ロックもう片側 → 9V電池プラス

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);
}
コード解説
- ライブラリ読み込み: Keypad、LiquidCrystal、EEPROMライブラリをインクルード。EEPROMでパスワードを不揮発保存。
- メインループ: キー入力を
password配列に格納しLCD表示。4桁入力後にEEPROMのinitial_passwordとstrncmpで比較。一致ならリレーをLOWにしてロック解除、不一致ならエラー表示。 - パスワード変更 (#キー):
change()関数で現在パスワードを確認し、正しければ新パスワードをEEPROMに書き込み。
回路図 (追加)
ソレノイドドアロックをArduinoで制御し、正しいキーコンビネーションで開錠する回路。

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