Raspberry Pi - Servo Motor

Deze tutorial legt uit hoe u een Raspberry Pi kunt gebruiken om een servo motor aan te sturen. In detail leert u:

Hardware Benodigd

1×Raspberry Pi 5
1×Servomotor
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 de Servo Motor

Een servo motor is een component die zijn as kan draaien binnen een vooraf bepaalde bewegingshoek, meestal tussen 0 en 180 graden. Het wordt vaak gebruikt om de hoekpositie van een object nauwkeurig te regelen.

De Servo Motor Pinout

De servo motor heeft drie pinnen:

  • VCC pin (meestal rood) die verbonden moet worden met VCC (5V)
  • GND pin (typisch zwart of bruin) die verbonden moet worden met GND (0V)
  • Signaalpin (normaal geel of oranje) die het PWM-controlesignaal ontvangt van een Raspberry Pi pin.
servo motor pinout

Raspberry Pi - Servo Motor

Sommige pinnen op de Raspberry Pi kunnen geprogrammeerd worden om een PWM-signaal (Pulse Width Modulation) te genereren. We kunnen een servo motor aansturen door zijn signaalpin te verbinden met een van deze Raspberry Pi-pinnen en deze te programmeren om PWM-signalen te produceren.

Dankzij de Raspberry Pi Servo library is het aansturen van een servo motor eenvoudig. We hoeven niet te begrijpen hoe de servo motor precies werkt of hoe het PWM-signaal wordt gegenereerd. Alles wat we moeten leren is hoe we de library kunnen gebruiken.

Bedradingsschema

Raspberry Pi Servo Motor bedrading schema

This image is created using Fritzing. Click to enlarge image

Voor het eenvoudig houden van de dingen wordt het bovenstaande bedrading schema gebruikt voor testen en leren, en is geschikt voor een servo motor met een laag koppel. Wij raden sterk aan een externe voeding te gebruiken voor de servo motor. Het onderstaande bedrading schema laat zien hoe u de servo motor aansluit op een externe voeding.

Raspberry Pi servo motor externe voeding bedrading schema

This image is created using Fritzing. Click to enlarge image

Raspberry Pi Code

Snelle Stappen

  • Zorg dat u Raspbian of een ander Raspberry Pi compatibel besturingssysteem geïnstalleerd hebt op uw Raspberry Pi.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
  • Zorg dat uw Raspberry Pi verbinding heeft met het internet indien u bibliotheken moet installeren.
  • Als dit de eerste keer is dat u Raspberry Pi gebruikt, bekijk dan hoe u de Raspberry Pi instelt.
  • Verbind uw pc met de Raspberry Pi via SSH 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 geïnstalleerd hebt. Zo niet, installeer deze met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python-scriptbestand aan met de naam servo_motor.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-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) def set_servo_angle(angle): duty_cycle = (angle / 18) + 2.5 pwm.ChangeDutyCycle(duty_cycle) time.sleep(0.3) # Give the servo time to reach the desired angle try: while True: # Rotate the servo from 0 to 180 degrees for angle in range(0, 181, 10): set_servo_angle(angle) # Rotate the servo back from 180 to 0 degrees for angle in range(180, -1, -10): set_servo_angle(angle) except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()
  • Sla het bestand op en voer het Python-script uit door het volgende commando in de terminal te typen:
python3 servo_motor.py

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

  • Bekijk het resultaat: De servo motor draait langzaam zowel met de klok mee als tegen de klok in, tot 180°.

Code Uitleg

Bekijk de regel-voor-regel uitleg in de commentaren van de broncode!

Hoe de Snelheid van de Servo Motor te Controleren

# 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-servo-motor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define the GPIO pin connected to the servo motor SERVO_PIN = 18 # Set the servo pin as an output pin GPIO.setup(SERVO_PIN, GPIO.OUT) # Set up PWM pwm_frequency = 50 # Set PWM frequency to 50Hz (standard for most servos) pwm = GPIO.PWM(SERVO_PIN, pwm_frequency) pwm.start(0) MOVING_TIME = 3000 # moving time is 3 seconds angle_start = 30 # 30° angle_stop= 90 # 90° move_start_ms = int(round(time.time() * 1000)) # start moving in milliseconds try: while True: # Get the elapsed time since the movement started progress = int(round(time.time() * 1000)) - move_start_ms if progress <= MOVING_TIME: # Calculate the current angle based on the progress angle = angle_start + (angle_stop- angle_start) * progress / MOVING_TIME pwm.ChangeDutyCycle(2.5 + (angle / 18)) # Convert angle to duty cycle time.sleep(0.05) # Adjust this delay to control the speed/smoothness of movement except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration pwm.stop() GPIO.cleanup()

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 het proces gemakkelijker te maken.

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