servo_sweep.py
An SG90-class servo is driven with 50 Hz PWM on GPIO18 (pin 12) via gpiozero PWMOutputDevice: value=0 means 0 degrees, value=1 means 180. The script sweeps continuously. Mind the power budget: USB-C 5 V/3 A obligatoire pour les deux ports USB 3 ; Wi-Fi 5 GHz, BT 5.0; power servos separately beyond two.
Hardware
A Raspberry Pi 4 Model B (quad-core BCM2711 at 1.5 GHz, USB-C 5 V/3 A, dual micro-HDMI, 5 GHz Wi-Fi, 40-pin GPIO). One SG90 micro-servo (or similar), an external 5 V supply recommended, dupont wires.
Wiring
Orange/yellow signal wire to GPIO18 (pin 12), brown/red to 5 V, black/yellow to GND shared with the board.
How it works
PWMOutputDevice emits a 50 Hz pulse train, 0.5–2.5 ms wide; the servo angles its horn with the pulse width.
Running it
Copy the script to the board (scp), then run it with python3 (or bash). Raspberry Pi OS Bookworm ships gpiozero; otherwise sudo apt install python3-gpiozero. Use a 5 V/3 A USB-C supply to avoid undervoltage throttling.
Variants
Use gpiozero Servo(angle) for a degree API; two servos make an XY tracker. Use the official 5 V/3 A USB-C supply: otherwise the USB 3 ports are throttled.
servo_sweep.py
# servo_sweep.py — balaie un micro-servo (SG90) de 0 a 180 degres.
# Deps: sudo apt install python3-gpiozero
from gpiozero import PWMOutputDevice
from time import sleep
servo = PWMOutputDevice(18, frequency=50, pulse_width=0.001)
print("Balayage servo, Ctrl+C pour sortir")
try:
while True:
for deg in range(0, 181, 15):
servo.value = deg / 180.0
sleep(0.05)
for deg in range(180, -1, -15):
servo.value = deg / 180.0
sleep(0.05)
except KeyboardInterrupt:
servo.off()
print("Arret")