servo_sweep.py

Raspberry Pi 3 Model B (model-3b) · File : servo_sweep.py · Language : Python · Use case : Piloter un micro-servo (bras robotisé, caméra orientable) en PWM 50 Hz

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: Wi-Fi 2,4 GHz et Bluetooth intégrés ; alimentation micro-USB 5 V/2,5 A conseillée; power servos separately beyond two.

Hardware

A Raspberry Pi 3 Model B (quad-core BCM2837 at 1.2 GHz, 2.4/5 GHz Wi-Fi + Bluetooth 4.1, 4 USB ports, 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 ships gpiozero; otherwise sudo apt install python3-gpiozero. The 40-pin pinout is documented on the official Raspberry Pi site.

Variants

Use gpiozero Servo(angle) for a degree API; two servos make an XY tracker. Built-in 2.4 GHz Wi-Fi: configure wpa_supplicant or preseed it in Raspberry Pi Imager; 5 V/2.5 A advised.

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")

← Back to the board