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