Sicherer Arduino-Türschloss ohne Schlüssel: Keypad, LCD & Relais
Komponenten und Materialien
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| 4×4 Tastenmatrix (LED-kompatibel, z. B. SparkFun Button Pad) | 1 |
| LCD 16×2 (Weiß auf Blau, z. B. Adafruit Standard) | 1 |
| Relais (generisch, für Türschloss-Ansteuerung) | 1 |
| 9 V Blockbatterie | 1 |
| Potentiometer 10 kΩ (Einsteller, für LCD-Kontrast) | 1 |
| Widerstand 10 kΩ | 1 |
| Widerstand 220 Ω (für LCD-Hintergrundbeleuchtung) | 1 |
Apps und Online-Dienste
- Arduino IDE
Projektbeschreibung
Von Ali Hamza
In diesem Projekt bauen wir ein schlüsselloses Türschloss-System mit 4×4-Keypad zur Codeeingabe und einem DC-Schloss zum Öffnen/Schließen der Tür. Ein 16×2-LCD dient zur Anzeige.
Funktionsweise
Bei Tastendruck werden die eingegebenen Ziffern mit dem im EEPROM gespeicherten Passwort verglichen. Stimmt das Passwort (Standard: „1234“), öffnet sich das Schloss. Bei Fehleingabe zeigt das LCD „Access Denied“ (Zugang verweigert).
Drückt man die #-Taste, fordert das System zur Eingabe des aktuellen Passworts auf. Nach korrekter Eingabe kann ein neues Passwort definiert werden, das dann im EEPROM gespeichert wird.
Schaltplan / Verdrahtung

Keypad-Anschluss
Die ersten sechs Pins des 4×4-Keypads verbinden mit Arduino A0–A5. Die letzten beiden Pins gehen an Digital-Pins 3 und 2.
LCD-Anschluss (Parallel, 4-Bit-Modus)
- LCD Pin 1 (VSS) → Arduino GND
- LCD Pin 2 (VDD) → Arduino 5 V
- LCD Pin 3 (V0, Kontrast) → Mittlerer Pin des 10 kΩ-Potentiometers; äußere Pins an 5 V und GND
- LCD Pin 4 (RS) → Arduino Pin 7
- LCD Pin 5 (R/W) → Arduino GND
- LCD Pin 6 (Enable) → Arduino Pin 6
- LCD Pins 11–14 (D4–D7) → Arduino Pins 5, 4, 3, 2
- LCD Pin 15 (Backlight +) → Arduino 5 V über 220 Ω Widerstand
- LCD Pin 16 (Backlight −) → Arduino GND
DC-Schloss-Anschluss
Das Schloss arbeitet mit 7–12 V und kann nicht direkt an den Arduino angeschlossen werden. Deshalb wird ein Relais und eine separate Batterie benötigt:
- Relais-Signalpin → Arduino Pin 10
- Schloss VCC/GND → Arduino 5 V / GND (nur Signalseite des Relais)
- Batterie − → Relais Common (COM)
- Relais NO (Normally Open) → eine Schloss-Seite
- Andere Schloss-Seite → Batterie +
Arduino-Code (Keyless Door Lock)
Das Standardpasswort ist 1234.
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4); // RS, E, D4, D5, D6, D7
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); // Schloss standardmäßig verriegelt (HIGH = aus, je nach Relais-Logik)
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); // Schloss öffnen
delay(2000);
lcd.setCursor(0, 1);
lcd.print("Press # 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("Press # 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);
}
Code-Erklärung
- Bibliotheken:
Keypad.h,LiquidCrystal.h,EEPROM.h(für nichtflüchtige Passwortspeicherung). Standardpasswort „1234“ wird beim ersten Start ins EEPROM geschrieben. - Loop: Tastendruck in
key_pressedspeichern. Bei ‚#‘ →change(). Eingegebene Ziffern inpassword-Array sammeln und auf LCD anzeigen. Nach 4 Ziffern Vergleich mit EEPROM-Inhalt. Bei Übereinstimmung: Relais schaltet (Schloss öffnet), „Pass Accepted“. Bei Fehlschlag: „Wrong Password“. - change(): Aktuelles Passwort abfragen. Bei Korrektheit: Neues Passwort eingeben, in EEPROM schreiben, „Pass Changed“ anzeigen.
Schaltplan (Alternative Darstellung)

Steuerung eines Solenoid-Türschlosses per Arduino mit korrekter Tastenkombination.
Tags
4x4 Keypad, Arduino, DC Lock, Keylock, Keypad, LCD, Lock
Herstellungsprozess
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
- 4x4x4 LED-Würfel mit Arduino Uno & 1Sheeld bauen – Interaktives LED-Projekt
- Hochgeschwindigkeits-Arduino-Drehzahlmesser (RPM) mit neuartigem Algorithmus
- Echtzeit-RFID-Anwesenheitssystem mit Arduino & Google Tabellen