Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Veilige Arduino-gebaseerde keyless deurvergrendeling met LCD en 4x4-keypad

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino UNO 1
4x4-keypad (LED-compatibel) 1
Adafruit Standard LCD 16x2 Wit op Blauw 1
Relais (generiek) 1
9V-batterij 1
Enkelvoudige potentiometer 10k ohm 1
Weerstand 10k ohm 1

Apps en online services

  • Arduino IDE

Over dit project

Arduino Keyless Deurvergrendelingssysteem met Keypad en LCD

Door Ali Hamza

In dit project bouwen we een keyless deurvergrendelingssysteem dat een 4x4-keypad gebruikt voor code-invoer en een DC-slot om de deur te openen/sluiten. Een 16x2 LCD dient als display.

Benodigde componenten

  • Arduino
  • 4x4-keypad
  • LCD
  • DC-slot
  • Relais
  • 9V-batterij
  • 10k-potentiometer
  • 220-ohm-weerstand

Hoe werkt het?

Wanneer toetsen worden ingedrukt, worden ze vergeleken met de opgeslagen code. Als de ingevoerde code overeenkomt met het initiële wachtwoord in de EEPROM ('1234'), opent het slot. Bij onjuist wachtwoord verschijnt "Access denied" op het LCD.

Als de '#'-toets wordt ingedrukt, vraagt het systeem om het huidige wachtwoord. Bij correcte invoer kan een nieuw wachtwoord worden ingesteld.

Schakelschema

4x4-keypad aansluiten

Verbind de eerste zes pinnen van het keypad met A0 tot A5 op de Arduino. De laatste twee pinnen gaan naar digitale pinnen 3 en 2.

LCD aansluiten

  • Pin 1 (VSS) → Arduino GND
  • Pin 2 (VDD) → Arduino 5V
  • Pin 3 (V0) → Middenpoot 10k-potentiometer (overige poten → 5V en GND) – voor contrastinstelling
  • Pin 4 (RS) → Arduino pin 7
  • Pin 5 (R/W) → Arduino GND
  • Pin 6 (Enable) → Arduino pin 6
  • Pinnen 11-14 (Data) → Arduino pinnen 5, 4, 3, 2
  • Pin 15 (Backlight +) → Arduino 5V via 220-ohm-weerstand
  • Pin 16 (Backlight -) → Arduino GND

DC-slot aansluiten

Het slot werkt op 7-12V, dus niet direct op de Arduino. Gebruik een relais en een batterij:

  • Relais signaalleiding → Arduino pin 10
  • Slot VCC en GND → Arduino 5V en GND
  • Batterij min → Relais common (COM)
  • Batterij plus → Een kant van het slot
  • Andere kant van slot → Relais NO (Normally Open)
Veilige Arduino-gebaseerde keyless deurvergrendeling met LCD en 4x4-keypad

Arduino Keypad Lock Code

Het initiële wachtwoord is 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); // Slot standaard gesloten (relais actief hoog?)
  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))) {
      // Correct wachtwoord
      lcd.clear();
      lcd.print("Pass Accepted");
      digitalWrite(relay_pin, LOW); // Slot open
      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 {
      // Fout wachtwoord
      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))) {
    // Huidig wachtwoord fout
    lcd.clear();
    lcd.print("Wrong Password");
    lcd.setCursor(0, 1);
    lcd.print("Try Again");
    delay(1000);
  } else {
    // Huidig wachtwoord correct → nieuw wachtwoord instellen
    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-uitleg

Eerst worden de benodigde bibliotheken ingeladen: Keypad.h, LiquidCrystal.h en EEPROM.h voor wachtwoordopslag. Het standaardwachtwoord in EEPROM is '1234'.

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

In de loop() wordt de ingedrukte toets opgeslagen in key_pressed. Is het '#', roept het de change()-functie aan.

key_pressed = keypad_key.getKey();
if(key_pressed == '#') change();

Ingedrukte toetsen worden in password opgeslagen en op het LCD getoond. Na 4 cijfers worden ze vergeleken met het EEPROM-wachtwoord. Bij match: "Pass Accepted", slot open (relais LOW), 2 seconden wachten, dan terug naar invoerscherm. Bij mismatch: "Wrong Password", slot blijft dicht.

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);
    delay(2000);
    // ...
  }
}

De change()-functie vraagt het huidige wachtwoord. Bij correcte invoer volgt de vraag om een nieuw wachtwoord, dat direct in EEPROM wordt geschreven.

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);
  // ... vergelijking en eventueel nieuw wachtwoord opslaan
}

Tags

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

Schema's

Gebruik een Arduino om een solenoïde-deurslot te besturen dat geopend kan worden met de juiste codecombinatie.

Veilige Arduino-gebaseerde keyless deurvergrendeling met LCD en 4x4-keypad

Productieproces

  1. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  2. Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
  3. DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
  4. Bouw Boeiende LCD Animaties & Games met Arduino UNO
  5. Unopad: Naadloze Arduino MIDI-controller voor Ableton Live
  6. Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
  7. Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
  8. Bouw een 4x4x4 LED-kubus met Arduino Uno & 1Sheeld – Interactief LED-project
  9. Hoge-Snelheid Arduino RPM Teller met Nieuw Algoritme
  10. Real-time RFID aanwezigheidssysteem met Arduino en Google Sheets
  11. Slimme Keyless Deurslot – Arduino & Android Bluetooth Wachtwoordsysteem