Sicheres Passwort-Türschloss mit Arduino, Keypad & Linearaktuator
Komponenten und Materialien
| Arduino UNO | 1 Stück |
| Membran-Tastenfeld 4×4 | 1 Stück |
| L293D Dual H-Bridge Motortreiber (Texas Instruments) | 1 Stück |
| Linearaktuator 12 V | 1 Stück |
Projektbeschreibung
Ein klassisches Tastatur-basiertes Türschloss: Der Benutzer gibt einen 4-stelligen Code ein, bei Übereinstimmung fährt der Linearaktuator ein (Tür öffnet). Der Autor erklärt detailliert die Funktionsweise des Matrix-Keypads und stellt zwei eigene Code-Varianten bereit (ohne Library), um das Prinzip verständlich zu machen.
Funktionsweise des 4×4-Membran-Keypads
- 16 Taster, intern als 4 Zeilen × 4 Spalten verschaltet.
- Drückt man „1“, verbinden sich Zeile 1 und Spalte 1.
- Scanning: Alle Zeilen als Ausgänge (nacheinander LOW), alle Spalten als Eingänge mit Pull-Up. Wird eine Spalte LOW gelesen, während eine bestimmte Zeile LOW ist, ist die Taste identifiziert.
- Durch schnelles Multiplexen (Zeilen nacheinander LOW) werden auch kurze Tastendrücke erfasst.
Code 1: Tastenscan & Serielle Ausgabe
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); // für Aktuator später
}
char readkey(void) {
// Zeile 0 LOW, andere HIGH
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';}
// Zeile 1 LOW
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';}
// Zeile 2 LOW
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';}
// Zeile 3 LOW
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'; // keine Taste
}
char nfunc(void) {
char key='o';
while(key=='o') key=readkey();
return key;
}
void loop() {
char key1 = nfunc();
if(key1) Serial.print(key1);
}
Code 2: Passwortprüfung & Aktuatorsteuerung
char password[5]="1234"; // festes Passwort
char typed[5];
int count=0;
// ... setup() und readkey()/nfunc() wie oben ...
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); // L293D Input 1
digitalWrite(12, LOW); // L293D Input 2
delay(250); // Aktuator fährt ein
digitalWrite(11, LOW); // Stop
} else {
Serial.println(" intruder");
}
count = 0;
}
}
Hardware-Anbindung
- L293D an 12 V Versorgung (Pin 8).
- Arduino Pins 11 & 12 steuern die L293D-Eingänge für den Aktuator.
- Im Normalzustand ist der Aktuator ausgefahren (Tür verriegelt). Bei korrektem Passwort fährt er ein (Tür öffnet).
Hinweis: Der Code verwendet bewusst keine Keypad-Library, um den Scan-Algorithmus transparent zu machen. Für produktive Nutzung wird die Library empfohlen (Beispiel CustomKeypad).
Herstellungsprozess
- Banktresore: Geschichte, Design und Zukunft der Sicherheit
- Drehtüren: Design, Geschichte und energiesparende Vorteile
- Kanäle & Schleusen: Technik, Geschichte und Zukunft des US-Wassertransports
- Die Evolution und Fertigung moderner Stiftschloss-Zylinderschlösser
- DIY Solar-betriebene Wetterstation mit Raspberry Pi
- Smartes Auto-Lock-Türschloss per Smartphone-Bluetooth-Nähe bauen
- Sichere Gesichtserkennungs-Tür mit Windows IoT und Raspberry Pi bauen
- Echtzeit-Zelluläre Automaten auf Arduino mit 128x64 OLED-Display
- WLAN-Türschloss mit Arduino & ESP8266 – Per Smartphone entsperren
- Motorkonfiguration: Umfassender Leitfaden zu Typen und Merkmalen