Raspberry Pi - Serrure de porte à clavier

Ce tutoriel vous explique comment créer un système de verrouillage de porte par mot de passe utilisant un Raspberry Pi, un clavier, une serrure à solénoïde ou une serrure électromagnétique, et un écran LCD.

Serrure de porte à clavier Raspberry Pi

Lorsqu'un utilisateur saisit un mot de passe correct via le clavier, le Raspberry Pi désactive la serrure à solénoïde pour déverrouiller la porte. La porte reste déverrouillée pendant une durée spécifique (par exemple, 20 secondes) avant de se verrouiller automatiquement à nouveau. Le code du Raspberry Pi permet l'utilisation de plusieurs mots de passe.

Pour simplifier, le tutoriel est divisé en plusieurs étapes, de la plus facile à la plus difficile :

Préparation du matériel

1×Raspberry Pi 4 Model B
1×Keypad 3x4 and 4x4 Kit
1×Relay
1×Solenoid Lock
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Electromagnetic Lock
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du clavier, de la serrure à solénoïde et de la serrure électromagnétique

La serrure à solénoïde et la serrure électromagnétique sont utilisées pour verrouiller/déverrouiller la porte. Elles diffèrent principalement l'une de l'autre en termes de conception mécanique. Leur câblage vers le Raspberry Pi est similaire. Le code Raspberry Pi pour les contrôler est le même.

Si vous n'êtes pas familier avec le clavier, la serrure à solénoïde et la serrure électromagnétique (brochage, fonctionnement, programmation ...), les tutoriels suivants peuvent vous aider à apprendre :

Diagramme de câblage

  • Schéma de câblage avec Raspberry Pi, clavier et serrure à solénoïde
Schéma de câblage pour Raspberry Pi, clavier, serrure à solénoïde

This image is created using Fritzing. Click to enlarge image

  • Diagramme de câblage avec Raspberry Pi, clavier et serrure électromagnétique
Raspberry Pi, clavier, schéma de câblage de la serrure électromagnétique

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

Code Raspberry Pi - Verrouillage de Porte avec Clavier

Étapes rapides

  • Assurez-vous d'avoir Raspbian ou tout autre système d'exploitation compatible avec Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous avez besoin d'installer des bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, voir Installation du logiciel - Raspberry Pi..
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Voir comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que vous avez la bibliothèque RPi.GPIO installée. Si ce n'est pas le cas, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Créez un fichier de script Python keypad_lock.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/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()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 keypad_lock.py
  • Tapez 1111 et appuyez sur #.
  • Puis tapez 1234 et appuyez sur #.
  • Vérifiez l'état de la languette du verrou pendant 20 secondes.
  • Vérifiez le résultat sur le moniteur série.
PuTTY - Raspberry Pi
Incorrect password. Try again. Password correct! Access granted.

Le script s'exécute en boucle infinie jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

Explication du Code

Les mots de passe valides sont prédéfinis dans le code du Raspberry Pi. Une chaîne de caractères est utilisée pour stocker le mot de passe saisi par les utilisateurs, appelée chaîne d'entrée. Sur le clavier, deux touches (* et #) sont utilisées pour des fonctions spéciales : effacer le mot de passe et terminer le mot de passe. Le système fonctionne de la manière suivante :

  • À part les deux touches spéciales, si une autre touche est pressée, elle est ajoutée à la chaîne d'entrée.
  • Si * est pressée, la chaîne d'entrée est effacée. Cela peut être utilisé pour commencer ou recommencer la saisie du mot de passe.
  • Si # est pressée :
    • Raspberry Pi compare la chaîne d'entrée aux mots de passe prédéfinis. Si elle correspond à l'un des mots de passe prédéfinis, Raspberry Pi désactive le relais pour déverrouiller la porte.
    • Que le mot de passe soit correct ou non, Raspberry Pi efface la chaîne d'entrée pour la prochaine saisie.

Code Raspberry Pi - Plusieurs clés

# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/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()

Ajout d'un capteur de porte à la serrure à clavier

Dans le code mentionné précédemment, le Raspberry Pi verrouille la porte après un délai depuis le déverrouillage. Cependant, dans les applications pratiques, un capteur de porte est généralement ajouté au système. Si le Raspberry Pi détecte que la porte est fermée, il verrouille la porte immédiatement au lieu d'attendre le délai.

Pour éviter de vous submerger, nous n'avons pas inclus le capteur de porte dans le schéma de câblage et le code. Au lieu de cela, nous vous laissons cette partie à votre créativité. Vous pouvez consulter les tutoriels Raspberry Pi - Capteur de porte. et Raspberry Pi - Capteur de porte - Relais. pour plus d'orientation.

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!