Arduino Keypad Deurslot met Gebruikerdefinieerbare Code
Onderdelen en Benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino UNO | 1 | |
| 4x4 Keypad Matrix | 1 | |
| Generieke drukknop | 1 | Voor openen vanaf binnen |
| LCD I²C | 1 | 16x2 met I²C-adapter |
| Lineaire solenoidslot | 1 | Elektronische slot |
| IRF510N MOSFET | 1 | Schakelaar voor solenoïd |
| 1-kanaals Relaismodule | 1 | Alternatief voor MOSFET |
Benodigde Tools en Machines
| Tool | Opmerking |
|---|---|
| Breadboard, 170 pins | Voor prototyping |
| 10-stuks Jumper Wire Kit, 5 cm | Korte verbindingsdraden |
Over dit Project
Hallo, welkom bij deze tutorial (ja, het is oud maar een klassieker). Vandaag maak ik een deurslotproject met een Arduino-board, keypad, LCD I²C-scherm, en voor het slot een solenoïd en een relais. Je kunt mijn tutorial over het vingerafdrukslotsysteem checken waar ik een DC-motorslot gebruikte - afhankelijk van je slotsysteem kies je de bedrading, code en pas dit aan.
NB: Voor een echt project raad ik af een solenoïd te gebruiken, maar raad aan een slot te hacken dat zowel elektronisch als mechanisch geopend kan worden en je project daarvoor aan te passen.
Onderdelen
We hebben deze componenten nodig, plus jumper wires en een 12V voeding (die ik hier niet toevoegde):







De drukknop is bedoeld om het slot van binnen te openen - je kunt hem weglaten als je wilt. De weerstand is voor debouncing.
Ik gebruik een 4x4 keypad; een 3x4 werkt ook maar vereist code-aanpassingen (bijv. bevestigingstoets 'A' wordt '*' of '#').
De solenoïd werkt op 12V externe voeding, aangestuurd door de IRF510N MOSFET-transistor. De transistor fungeert als schakelaar; een N-kanaal is beter. De IRF510N is populair met Arduino: leg je 5V over Gate en Source, dan sluit de transistor (Drain-Source geleidend). Geen weerstand nodig zoals bij bipolaire transistors. Zonder spanning op de Gate fungeert hij als open schakelaar. Zo besturen we de solenoïd.
Voor de relais-variant: 1-kanaals relaismodule, werkt op 3,3V. De ingang besturen werkt hetzelfde als de transistor, maar geïnverteerd (laag = aan, hoog = uit). Dit zien we in de code.
Algoritme Stroomdiagram

Dit is een overzicht, niet volledig gedetailleerd.
NB: Je kunt het relais gebruiken om elk elektrisch slot tot 250VAC te besturen, ook de solenoïd. De codes zijn identiek, alleen wissel je LOW/HIGH om het slot te openen.
Belangrijk bij eerste upload: Upload de code, wijzig de toegangscode, haal dan de commentaar weg bij bepaalde regels (zoek in setup - commentaar aangeeft welke) en upload opnieuw. Dit hoeft alleen de eerste keer.
Je kunt de codelengte aanpassen. Standaard 4 cijfers. Verander de standaardcode in de bron - je kunt niet zomaar een 4-cijfercode naar 6 cijfers maken zonder de initiële code aan te passen (ik gebruik sizeof(code) in plaats van hardcoded 4).
Test
Testresultaten in de onderstaande afbeeldingen:












Dit was de test - werkt identiek voor solenoïd of relais. De drukknop opent van binnen, of laat hem weg. Hopelijk nuttig! Vragen? Laat een reactie achter.
Code
Keypad_deurslot_solenoïd.ino (Arduino)
/* Werkt met 4x4 Keypad Matrix, LCD I2C, IRF510N transistor en drukknop
* Slot waar de transistor een solenoïd aandrijft, openbaar met juiste code
* of via drukknop van binnen
* Code wijzigbaar via keypad zonder her-upload
* Code opgeslagen in EEPROM
* Zie www.surtrtech.com voor details */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define Solenoid 11 // Echt de Gate van de transistor die de solenoïd bestuurt
#define O_Button 10 // Drukknop
#define I2C_ADDR 0x27 // I2C adres, scannen met I2C-scanner sketch (0x27 typisch)
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char keypressed;
char code[] = {'6','6','0','1'}; // Standaardcode - wijzig naar gewenste lengte
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;
byte rowPins[numRows] = {9,8,7,6}; // Rijen 0-3
byte colPins[numCols] = {5,4,3,2}; // Kolommen 0-3
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
lcd.print("Standby");
pinMode(Solenoid, OUTPUT);
pinMode(O_Button, INPUT);
// EERSTE UPLOAD: houd onderstaande gecommenteerd
// for(i=0; i
Keypad_deurslot_relais.ino (Arduino)
/* Werkt met 4x4 Keypad Matrix, LCD I2C, relaismodule en drukknop
* Slot waar relais een slot bestuurt, openbaar met code of drukknop
* Code wijzigbaar via keypad zonder her-upload
* Code opgeslagen in EEPROM
* Zie www.surtrtech.com voor details */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define Relay 11 // Bestuurt relais
#define O_Button 10 // Drukknop
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char keypressed;
char code[] = {'6','6','0','1'};
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;
byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols] = {5,4,3,2};
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
lcd.print("Standby");
pinMode(Relay, OUTPUT);
pinMode(O_Button, INPUT);
// for(i=0; i
Schema's


Productieproces
- Binnenkijken in bankkluizen: geschiedenis, ontwerp en toekomst van beveiliging
- Een Slimme Auto-vergrendelende Deur Bouwen met uw Smartphone's Bluetooth-bijnaheid
- Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
- MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
- 3D-Printer Brandpreventie: Slimme Sensor Veiligheidssysteem
- Veilig wachtwoord-gebaseerd deurkastje met Arduino, Keypad & Lineaire actuator
- Web-IoT Meter Bouwen met Arduino, Yaler en IFTTT
- Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
- Geavanceerde Remote-gecontrolleerde Gripper Robot voor Precisiehantering
- Geavanceerde Microcontroller Lab: ESP32, Arduino, PIC en Sensormodules
- CoroFence Thermische Detector: Geavanceerde PIR-sensor & IoT-integratie