Raspberry Pi - Toegangsdeur met Keypad Slot

Deze handleiding legt uit hoe u een deurslot-systeem maakt dat gebruik maakt van een Raspberry Pi, keypad, elektromagnetisch slot (solenoid lock) en een LCD-display.

Raspberry Pi Keypad Door Lock

Wanneer een gebruiker via het keypad het juiste wachtwoord invoert, schakelt de Raspberry Pi het elektromagnetische slot uit om de deur te ontgrendelen. De deur blijft een bepaalde tijd (bijvoorbeeld 20 seconden) ontgrendeld voordat deze automatisch weer vergrendelt. De Raspberry Pi-code ondersteunt het gebruik van meerdere wachtwoorden.

Om het overzichtelijk te houden, is de tutorial verdeeld in meerdere stappen, van eenvoudig naar moeilijk:

Hardware Benodigd

1×Raspberry Pi 5
1×Toetsenbord 3x4 en 4x4 Kit
1×Relais
1×Elektromagnetisch slot (Solenoid Lock)
1×12V Voeding adapter
1×DC-Stroomaansluiting
1×Jumper draden
1×(Optioneel) Elektromagnetisch slot
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

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 Solenoid Lock

Zowel het elektromagnetische slot als het solenoid slot worden gebruikt om de deur te vergrendelen/ontgrendelen. Ze verschillen vooral in mechanisch ontwerp. De bedrading naar de Raspberry Pi is vergelijkbaar, evenals de Raspberry Pi-code om deze te besturen.

Als u niet bekend bent met het keypad, elektromagnetisch slot of solenoid lock (pinout, werking, programmeren, etc.), kunnen de volgende tutorials u helpen:

Aansluitschema

  • Aansluitschema met Raspberry Pi, keypad en elektromagnetisch slot (solenoid lock)
Raspberry Pi, keypad, solenoid lock wiring diagram

This image is created using Fritzing. Click to enlarge image

  • Aansluitschema met Raspberry Pi, keypad en elektromagnetisch slot
Raspberry Pi, keypad, electromagnetic lock wiring diagram

This image is created using Fritzing. Click to enlarge image

Raspberry Pi Code - Keypad Deurslot

Snelle Stappen

  • Zorg dat u Raspbian of een ander Raspberry Pi-compatibel besturingssysteem op uw Pi hebt geïnstalleerd.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
  • Zorg dat uw Raspberry Pi verbinding heeft met internet indien u libraries moet installeren.
  • Als dit de eerste keer is dat u een Raspberry Pi gebruikt, zie dan hoe u de Raspberry Pi instelt
  • Verbind uw pc met de Raspberry Pi via SSH met de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows. Zie hoe u uw pc via SSH verbindt met Raspberry Pi.
  • Controleer of u de RPi.GPIO-library geïnstalleerd heeft. Zo niet, installeer deze dan met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python-scriptbestand aan met de naam keypad_lock.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-keypad-door-lock import RPi.GPIO as GPIO import time # Define keypad layout KEYPAD = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#'] ] # Define GPIO pins for rows, columns, and relay ROW_PINS = [17, 27, 22, 24] COL_PINS = [25, 8, 7] RELAY_PIN = 16 # Adjust this to the actual GPIO pin connected to the relay # Password to unlock PASSWORD = [1, 2, 3, 4] # Initialize GPIO GPIO.setmode(GPIO.BCM) # Set up row pins as inputs with pull-up resistors for row_pin in ROW_PINS: GPIO.setup(row_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set up column pins as outputs for col_pin in COL_PINS: GPIO.setup(col_pin, GPIO.OUT) GPIO.output(col_pin, GPIO.HIGH) # Set up relay pin as an output GPIO.setup(RELAY_PIN, GPIO.OUT) GPIO.output(RELAY_PIN, GPIO.LOW) # Initially, keep the relay off def get_key(): key = None # Scan each column for col_num, col_pin in enumerate(COL_PINS): GPIO.output(col_pin, GPIO.LOW) # Check each row for row_num, row_pin in enumerate(ROW_PINS): if GPIO.input(row_pin) == GPIO.LOW: key = KEYPAD[row_num][col_num] # Wait for key release while GPIO.input(row_pin) == GPIO.LOW: time.sleep(0.05) GPIO.output(col_pin, GPIO.HIGH) return key def check_password(input_password): return input_password == PASSWORD entered_keys = [] try: while True: pressed_key = get_key() if pressed_key is not None: print(f"Pressed: {pressed_key}") if pressed_key == '*': entered_keys = [] # reset the input password elif pressed_key == '#': if check_password(entered_keys): print("Password correct! Access granted.") GPIO.output(RELAY_PIN, GPIO.HIGH) # Activate the relay time.sleep(20) # Wait for 20 seconds GPIO.output(RELAY_PIN, GPIO.LOW) # Deactivate the relay break else: print("Incorrect password. Try again.") entered_keys = [] # reset the input password else: entered_keys.append(pressed_key) time.sleep(0.1) except KeyboardInterrupt: GPIO.cleanup()
  • Sla het bestand op en voer het Python-script uit door in de terminal het volgende commando te geven:
python3 keypad_lock.py
  • Typ 1111 en druk op #.
  • Typ daarna 1234 en druk op #.
  • Bekijk de staat van de vergrendelingspen (lock tongue) gedurende 20 seconden.
  • Bekijk het resultaat op de Serial Monitor.
PuTTY - Raspberry Pi
Incorrect password. Try again. Password correct! Access granted.

Het script draait continu in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

Code Uitleg

De geldige wachtwoorden zijn vooraf gedefinieerd in de Raspberry Pi-code. Er wordt een string gebruikt om het door gebruikers ingevoerde wachtwoord op te slaan, de zogenaamde input string. Op het keypad worden twee toetsen gebruikt voor speciale functies: * voor het wissen van de invoer en # om het wachtwoord in te dienen. Het systeem werkt als volgt:

  • Behalve deze twee speciale toetsen, wordt elke andere toets die wordt gedrukt toegevoegd aan de input string.
  • Als * wordt gedrukt, wordt de input string gewist. Dit kan gebruikt worden om te beginnen of opnieuw te beginnen met het invoeren van het wachtwoord.
  • Als # wordt gedrukt:
    • Vergelijkt de Raspberry Pi de input string met de vooraf gedefinieerde wachtwoorden. Als het overeenkomt met één van deze wachtwoorden, schakelt de Raspberry Pi het relais uit om de deur te ontgrendelen.
    • Ongeacht of het wachtwoord correct was, wordt de input string gewist voor de volgende invoer.

Raspberry Pi Code - Meerdere Wachtwoorden

# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-keypad-door-lock import RPi.GPIO as GPIO import time # Define keypad layout KEYPAD = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#'] ] # Define GPIO pins for rows, columns, and relay ROW_PINS = [17, 27, 22, 24] COL_PINS = [25, 8, 7] RELAY_PIN = 16 # Adjust this to the actual GPIO pin connected to the relay # Passwords to unlock PASSWORDS = [ [1, 2, 3, 4], # 1st password 1234 [5, 6, 7, 8], # 2nd password 5678 [9, 0, 1, 2] # 3rd password 9012 ] # Initialize GPIO GPIO.setmode(GPIO.BCM) # Set up row pins as inputs with pull-up resistors for row_pin in ROW_PINS: GPIO.setup(row_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set up column pins as outputs for col_pin in COL_PINS: GPIO.setup(col_pin, GPIO.OUT) GPIO.output(col_pin, GPIO.HIGH) # Set up relay pin as an output GPIO.setup(RELAY_PIN, GPIO.OUT) GPIO.output(RELAY_PIN, GPIO.LOW) # Initially, keep the relay off def get_key(): key = None # Scan each column for col_num, col_pin in enumerate(COL_PINS): GPIO.output(col_pin, GPIO.LOW) # Check each row for row_num, row_pin in enumerate(ROW_PINS): if GPIO.input(row_pin) == GPIO.LOW: key = KEYPAD[row_num][col_num] # Wait for key release while GPIO.input(row_pin) == GPIO.LOW: time.sleep(0.05) GPIO.output(col_pin, GPIO.HIGH) return key def check_password(input_password): return input_password in PASSWORDS entered_keys = [] try: while True: pressed_key = get_key() if pressed_key is not None: print(f"Pressed: {pressed_key}") if pressed_key == '*': entered_keys = [] # reset the input password elif pressed_key == '#': if check_password(entered_keys): print("Password correct! Access granted.") GPIO.output(RELAY_PIN, GPIO.HIGH) # Activate the relay time.sleep(20) # Wait for 20 seconds GPIO.output(RELAY_PIN, GPIO.LOW) # Deactivate the relay break else: print("Incorrect password. Try again.") entered_keys = [] # reset the input password else: entered_keys.append(pressed_key) time.sleep(0.1) except KeyboardInterrupt: GPIO.cleanup()

Een Deursensor toevoegen aan het Keypad Deurslot

In bovenstaande code vergrendelt de Raspberry Pi de deur na een time-out sinds het ontgrendelen. In praktische toepassingen wordt meestal een deursensor toegevoegd aan het systeem. Wanneer de Raspberry Pi detecteert dat de deur gesloten is, vergrendelt deze de deur direct zonder te wachten op de time-out.

Om u niet te overladen hebben we deze deursensor niet opgenomen in het aansluitschema en de code. We laten dit deel aan uw creativiteit over. U kunt de tutorials Raspberry Pi - Deursensor en Raspberry Pi - Deursensor met relais besturen raadplegen voor meer begeleiding.

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 stap voor stap met de bedrading en het programmeren.

※ 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!