Arduino - Deurslot Systeem met Wachtwoord

In deze tutorial leert u hoe u een deurslot systeem maakt met een wachtwoord. De tutorial bestaat uit twee hoofdonderdelen:

Het LCD is optioneel en maakt het systeem iets gebruiksvriendelijker.

Wanneer de deur wordt ontgrendeld met het juiste wachtwoord, blijft de deur 20 seconden open en vergrendelt daarna automatisch weer. De Arduino-code ondersteunt meerdere wachtwoorden.

Benodigde Hardware

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Toetsenbord 3x4 en 4x4 Kit
1×(Alternatief) Keypad 3x4
1×(Alternatief) Keypad 4x4
1×Relais
1×12V Voedingsadapter
1×DC Voedingsconnector
1×Elektromagnetisch Slot
1×Jumperdraden
1×(Optioneel) LCD I2C
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Keypad, Elektromagnetisch Slot en LCD

Als u niet bekend bent met elektromagnetisch slot, keypad en LCD (pinout, werking, programmering...), kunt u hierover leren in de volgende tutorials:

Hoe het Deurslot Systeem Werkt

Geldige wachtwoorden zijn vooraf gedefinieerd in de Arduino-code.

Er wordt een string gebruikt om het ingevoerde wachtwoord van de gebruiker op te slaan, de zogenaamde input string. Op het keypad worden twee toetsen (* en #) gebruikt voor speciale functies: wachtwoord wissen en wachtwoord bevestigen. Het systeem werkt als volgt:

  • Behalve de twee speciale toetsen, wordt elke andere toets die wordt ingedrukt toegevoegd aan de input string.
  • Als * wordt ingedrukt, wordt de input string gewist. U kunt dit gebruiken om het invoeren van het wachtwoord te starten of opnieuw te starten.
  • Als # wordt ingedrukt:
    • Wordt de input string vergeleken met de vooraf gedefinieerde wachtwoorden. Als er een match is, wordt de deur ontgrendeld.
    • Ongeacht of het wachtwoord correct is of niet, wordt de input string gewist voor de volgende invoer.

Verbindingsschema

  • Arduino - Deurslot systeem met wachtwoord via keypad en elektromagnetisch slot
Arduino deurslot systeem verbindingsschema

This image is created using Fritzing. Click to enlarge image

  • Arduino - Deurslot systeem met wachtwoord via keypad, elektromagnetisch slot en LCD
Arduino deurslot systeem LCD verbindingsschema

This image is created using Fritzing. Click to enlarge image

Arduino Code - Deurslot systeem met wachtwoord via keypad, elektromagnetisch slot

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-door-lock-system-using-password */ #include <Keypad.h> const int RELAY_PIN = A0; // the Arduino pin, which connects to the IN pin of relay const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct, unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Snelle Stappen

  • Verbind de Arduino met de PC via USB-kabel
  • Open de Arduino IDE, selecteer het juiste bord en poort
  • Ga in de Arduino IDE naar het Libraries pictogram aan de linkerkant
  • Zoek op “keypad” en selecteer de keypad library van Mark Stanley en Alexander Brevig
  • Klik op de Installeren knop om de keypad library te installeren
Arduino keypad library
  • Kopieer bovenstaande code en open deze in de Arduino IDE
  • Klik op de Uploaden knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Breng de ankerplaat dicht bij de elektromagneet
  • Open de Seriële Monitor
  • Druk op 123456 toetsen en druk op #
  • Druk op 1234ABC toetsen en druk op #
  • Zie de aantrekkingskracht tussen ankerplaat en elektromagneet gedurende 20 seconden
  • Bekijk het resultaat in de Seriële Monitor
COM6
Send
The password is incorrect, try again The password is correct, unlocking the door in 20 seconds
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino Code - Deurslot systeem met wachtwoord via keypad, elektromagnetisch slot en LCD

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-door-lock-system-using-password */ #include <Keypad.h> #include <LiquidCrystal_I2C.h> const int RELAY_PIN = A0; // the Arduino pin, which connects to the IN pin of relay const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // reset the input password lcd.clear(); } else if(key == '#') { lcd.clear(); if(input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("password is correct"); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("password is incorrect, try again"); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); } input_password = ""; // reset the input password } else { if(input_password.length() == 0) { lcd.clear(); } input_password += key; // append new character to input password string lcd.setCursor(input_password.length(), 0); // move cursor to new position lcd.print('*'); // print * key as hiden character } } }

※ Notiz:

Het I2C-adres van het LCD kan variëren afhankelijk van de fabrikant. In deze code gebruiken we 0x27, gespecificeerd door de fabrikant DIYables

Snelle Stappen

  • Ga in de Arduino IDE naar het Libraries pictogram aan de linkerkant
  • Zoek op “LiquidCrystal I2C” en selecteer de LiquidCrystal_I2C library van Frank de Brabander
  • Klik op de Installeren knop om de LiquidCrystal_I2C library te installeren
Arduino LiquidCrystal I2C library
  • Kopieer bovenstaande code en open deze in de Arduino IDE
  • Klik op de Uploaden knop om de code naar Arduino te uploaden
  • Breng de ankerplaat dicht bij de elektromagneet
  • Voer een fout wachtwoord in, en vervolgens een correct wachtwoord
  • Zie de aantrekkingskracht tussen ankerplaat en elektromagneet gedurende 20 seconden
  • Bekijk de tekst op het LCD

※ Notiz:

  • In de bovenstaande codes gebruiken we voor eenvoud de delay() functie. Het is beter om millis() te gebruiken in plaats van delay(). Bekijk Hoe millis() te gebruiken in plaats van delay()
  • U kunt een piezo buzzer toevoegen om een piepje te laten klinken elke keer als een toets wordt ingedrukt.
  • In bovenstaande codes wordt de deur na 20 seconden automatisch weer vergrendeld. U kunt dit vervangen door een deursensor. De deur wordt dan vergrendeld zodra de sensor detecteert dat de deur door de gebruiker is gesloten.
  • De wachtwoorden zijn hardcoded in de code. In de praktijk zou u wachtwoorden dynamisch moeten kunnen toevoegen/verwijderen/wijzigen via een speciale modus. In dat geval moeten de wachtwoorden opgeslagen worden in het EEPROM-geheugen. Het aantal wachtwoorden dat opslags is hangt af van de grootte van het EEPROM. De code wordt dan complexer. Als u zo’n systeem wilt bouwen, bieden wij een programmeerservice aan. Neem gerust contact met ons op.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u om het deurslot systeem met wachtwoord snel werkend te krijgen.

Opmerkingen

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!