Raspberry Pi - Keypad - Servo Motor

Deze handleiding legt uit hoe u een Raspberry Pi en een keypad gebruikt om een servo motor te besturen. In detail:

De code voor de Raspberry Pi maakt het ook mogelijk om meerdere wachtwoorden te gebruiken.

Hardware benodigd

1×Raspberry Pi 5
1×Toetsenbord
1×Servomotor
1×5V Voedingsadapter
1×DC Voedingsconnector
1×Jumperdraden
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 en Servo Motor

Als u niet vertrouwd bent met het keypad en servo motor (inclusief pinout, functionaliteit, programmeren, enzovoort), kunnen de volgende tutorials u helpen:

Aansluitschema

Raspberry Pi keypad servo motor wiring diagram

This image is created using Fritzing. Click to enlarge image

Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

Raspberry Pi Schroevenklemaansluiting-Shield

Let op dat het hierboven getoonde aansluitschema alleen geschikt is voor een servo motor met laag koppel. Als de motor trilt in plaats van draait, moet u een externe voedingsbron gebruiken om meer stroom te leveren aan de servo motor. Hieronder wordt het aansluitschema getoond met een externe voedingsbron voor de servo motor.

TO BE ADD IMAGE

Vergeet niet om de GND van de externe voeding te verbinden met de GND van de Raspberry Pi.

Raspberry Pi Code - draait Servo Motor bij correct wachtwoord

Als het wachtwoord correct is, zal de servo motor worden ingesteld op 90° gedurende 5 seconden. Na deze 5 seconden wordt de servo motor teruggezet naar 0°.

Snelle stappen

  • Zorg dat u Raspbian of een ander Raspberry Pi compatibel besturingssysteem hebt geïnstalleerd op uw Pi.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
  • Zorg dat uw Raspberry Pi verbonden is met het internet als u bibliotheken moet installeren.
  • Als dit de eerste keer is dat u een Raspberry Pi gebruikt, zie hoe u de Raspberry Pi instelt
  • Verbind uw pc via SSH met de Raspberry Pi met behulp van de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows. Zie hoe u uw pc verbindt met Raspberry Pi via SSH.
  • Zorg dat u de RPi.GPIO bibliotheek hebt geïnstalleerd. Zo niet, installeer deze met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python scriptbestand keypad_servo.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-servo-motor 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 servo motor ROW_PINS = [17, 27, 22, 24] COL_PINS = [25, 8, 7] SERVO_PIN = 16 # Adjust this to the actual GPIO pin connected to the servo motor # 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 servo pin as an output GPIO.setup(SERVO_PIN, GPIO.OUT) servo = GPIO.PWM(SERVO_PIN, 50) # 50 Hz frequency # Function to move servo to a specified angle def move_servo(angle): duty_cycle = (angle / 18) + 2.5 servo.ChangeDutyCycle(duty_cycle) time.sleep(1) # Adjust this sleep duration based on servo response time 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.") move_servo(90) time.sleep(20) # Wait for 20 seconds move_servo(0) 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 start het Python-script door het volgende commando in de terminal uit te voeren:
python3 keypad_servo.py

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

  • Druk op 12345#
  • Voer in 5642B#
  • Bekijk het resultaat op de Serial Monitor en de positie van de servo motor.
PuTTY - Raspberry Pi
The incorrect password! try again The correct password! Rotating Servo Motor to 90° Rotating Servo Motor to 0°

Uitleg code

De geldige wachtwoorden zijn vooraf gedefinieerd in de Raspberry Pi code. Een string, genaamd input_password, wordt gebruikt om het door de gebruiker ingevoerde wachtwoord op te slaan. Op het keypad worden twee toetsen (* en #) gebruikt voor speciale functies: het wissen van het wachtwoord en het beëindigen van de invoer. Wanneer een toets op het keypad wordt ingedrukt:

  • Als de ingedrukte toets geen van de twee speciale toetsen is, wordt deze toegevoegd aan het input_password.
  • Als de ingedrukte toets * is, wordt het input_password gewist. Dit kan worden gebruikt om opnieuw te beginnen met het invoeren van het wachtwoord.
  • Als de ingedrukte toets # is:
    • Controleert de Raspberry Pi of het input_password overeenkomt met een van de vooraf gedefinieerde wachtwoorden, en zal de servo motor draaien naar 90°.
    • Ongeacht of het wachtwoord correct is, wordt het input_password gewist voor de volgende invoer.
    • Na een bepaalde tijd draait de Raspberry Pi de servo motor terug naar 0°.

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 het project stap voor stap te voltooien.

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