GPIO Project 11 - Beveiligingssysteem met Keypad

Beginner
30 Minuten
€ 169,90

In dit project leer je een eenvoudig beveiligingssysteem te bouwen met behulp van een 4x4 keypad, een RGB LED en de GPIO-pinnen van de Raspberry Pi. Dit project gebruikt Python en de Thonny IDE, standaard beschikbaar in Raspberry Pi OS.

Aansluitschema

Schakel de Raspberry Pi uit en haal de voeding los voordat je aansluit. Gebruik een RGB-led met gemeenschappelijke kathode en verbind die kathode met GND (fysieke pin 6). Verbind rood met GPIO 17, groen met GPIO 27 en blauw met GPIO 22. Plaats in elk van de drie verbindingen een eigen weerstand van 330 Ω. Sluit de vier rijen van het keypad aan op GPIO 5, 6, 13 en 19 en de kolommen op GPIO 12, 16, 20 en 21. Controleer de pinvolgorde van jouw keypad. Optionele buzzer: sluit die niet rechtstreeks op een GPIO aan. Gebruik een passende transistorschakeling en voeding met gemeenschappelijke massa en controleer de specificaties van de buzzer. Het project werkt ook zonder buzzer. De GPIO-pinnen zijn geschikt voor 3,3 V: zet er nooit 5 V op.

Pinout Referentie

Component

GPIO Pin

Physical Pin

RGB RoodGPIO 17Pin 11
RGB GroenGPIO 27Pin 13
RGB BlauwGPIO 22Pin 15
Keypad RijenGPIO 5, 6, 13, 19Pin 29, 31, 33, 35
Keypad KolommenGPIO 12, 16, 20, 21Pin 32, 36, 38, 40
Buzzer (optioneel)GPIO 18Pin 12

Python-code in Thonny

Op een Raspberry Pi 5 werkt de oorspronkelijke RPi.GPIO-bibliotheek niet. Installeer zo nodig de compatibele uitvoering met: sudo apt update && sudo apt install python3-rpi-lgpio. De oorspronkelijke rpi-gpio en rpi-lgpio kunnen niet tegelijk in dezelfde Python-omgeving staan. Controleer daarom je pakketbeheer en eventuele virtuele omgeving voordat je iets wijzigt. Open Thonny, maak een nieuw Python-bestand en voer de onderstaande code in. De werking hangt af van je OS-versie; dit project is niet op ieder model fysiek getest.

import RPi.GPIO as GPIO
from time import sleep

# Pin-definities
RED_PIN = 17
GREEN_PIN = 27
BLUE_PIN = 22
BUZZER_PIN = 18

ROWS = [5, 6, 13, 19]  # GPIO-pinnen voor rijen
COLS = [12, 16, 20, 21]  # GPIO-pinnen voor kolommen

# Keypad lay-out
KEYS = [
    ['1', '2', '3', 'A'],
    ['4', '5', '6', 'B'],
    ['7', '8', '9', 'C'],
    ['*', '0', '#', 'D']
]

PINCODE = "1234"  # Stel de gewenste pincode in

# GPIO setup
GPIO.setmode(GPIO.BCM)
GPIO.setup([RED_PIN, GREEN_PIN, BLUE_PIN, BUZZER_PIN], GPIO.OUT)

for row_pin in ROWS:
    GPIO.setup(row_pin, GPIO.OUT)
    GPIO.output(row_pin, GPIO.LOW)

for col_pin in COLS:
    GPIO.setup(col_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

def set_color(r, g, b):
    """Stelt de kleur van de RGB LED in."""
    GPIO.output(RED_PIN, r)
    GPIO.output(GREEN_PIN, g)
    GPIO.output(BLUE_PIN, b)

def read_key():
    """Leest een toets van het 4x4 Keypad."""
    for row_num, row_pin in enumerate(ROWS):
        GPIO.output(row_pin, GPIO.HIGH)
        for col_num, col_pin in enumerate(COLS):
            if GPIO.input(col_pin) == GPIO.HIGH:
                GPIO.output(row_pin, GPIO.LOW)
                return KEYS[row_num][col_num]
        GPIO.output(row_pin, GPIO.LOW)
    return None

try:
    while True:
        print("Voer de pincode in:")
        input_code = ""  # Variabele wordt hier correct gedefinieerd als lege string

        # Lees de pincode van het keypad
        while len(input_code) < len(PINCODE):
            key = read_key()
            if key:
                print(f"Toets ingedrukt: {key}")
                if key in ['*', '#', 'A', 'B', 'C', 'D']:
                    print("Speciale toets genegeerd.")
                    continue
                input_code += key  # Voeg de toets toe aan de pincode
                sleep(0.3)  # Voor debounce

        # Controleer de ingevoerde code
        if input_code == PINCODE:
            print("Correcte pincode!")
            set_color(0, 1, 0)  # Groen
        else:
            print("Foute pincode!")
            set_color(1, 0, 0)  # Rood
            GPIO.output(BUZZER_PIN, GPIO.HIGH)
            sleep(0.5)
            GPIO.output(BUZZER_PIN, GPIO.LOW)
        
        sleep(2)
        set_color(0, 0, 0)  # LED uit
except KeyboardInterrupt:
    print("Programma gestopt.")
finally:
    GPIO.cleanup()

Sla het bestand op: Klik op Bestand > Opslaan als en noem het bestand keypad_security.py.

Voer het script uit: Klik op de groene Run-knop (▶) bovenin de Thonny-interface.

 

Hoe werkt het?

  • Correcte pincode: De RGB LED licht groen op.
  • Foute pincode: De RGB LED licht rood op, en de buzzer (indien aanwezig) piept kort.

Input: Het systeem wacht op een invoer via het keypad en vergelijkt dit met de ingestelde pincode.

Resultaat

Als alles correct is aangesloten en de code draait, werkt het beveiligingssysteem als volgt:

  • Bij een correcte invoer licht de RGB LED groen op.
  • Bij een foute invoer licht de RGB LED rood op, en de buzzer waarschuwt.

Experimenteren

  1. Andere kleuren: Gebruik verschillende combinaties van de RGB LED om meer feedback te geven.
  2. Complexere pincode: Voeg extra logica toe om langere of complexe pincodes te ondersteunen.
  3. Extra alarm: Koppel een sirene of andere actuator voor een uitgebreider systeem.

Benodigde producten