Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

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

Sicherer Arduino-Türschloss ohne Schlüssel: Keypad, LCD & Relais

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)

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:

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

  1. Bibliotheken: Keypad.h, LiquidCrystal.h, EEPROM.h (für nichtflüchtige Passwortspeicherung). Standardpasswort „1234“ wird beim ersten Start ins EEPROM geschrieben.
  2. Loop: Tastendruck in key_pressed speichern. Bei ‚#‘ → change(). Eingegebene Ziffern in password-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“.
  3. change(): Aktuelles Passwort abfragen. Bei Korrektheit: Neues Passwort eingeben, in EEPROM schreiben, „Pass Changed“ anzeigen.

Schaltplan (Alternative Darstellung)

Sicherer Arduino-Türschloss ohne Schlüssel: Keypad, LCD & Relais

Steuerung eines Solenoid-Türschlosses per Arduino mit korrekter Tastenkombination.

Tags

4x4 Keypad, Arduino, DC Lock, Keylock, Keypad, LCD, Lock

Herstellungsprozess

  1. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  2. RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
  3. DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
  4. LCD-Animationen & Spiele mit Arduino UNO erstellen
  5. Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
  6. Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
  7. Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
  8. 4x4x4 LED-Würfel mit Arduino Uno & 1Sheeld bauen – Interaktives LED-Projekt
  9. Hochgeschwindigkeits-Arduino-Drehzahlmesser (RPM) mit neuartigem Algorithmus
  10. Echtzeit-RFID-Anwesenheitssystem mit Arduino & Google Tabellen