from machine import Pin, PWM
from time import sleep
# Initialize PWM on a GPIO pin (e.g., Pin 15)
servo = PWM(Pin(15))
servo.freq(50) # Set frequency to 50Hz for servo control
def set_angle(servo, angle):
"""
Set the angle of the servo motor.
Parameters:
servo: PWM object controlling the servo
angle: Desired angle (0 to 180 degrees)
"""
# Map angle (0-180 degrees) to duty cycle (500-2500 microseconds)
min_duty = 1000 # 1ms pulse corresponds to 0 degrees
max_duty = 9000 # 2ms pulse corresponds to 180 degrees
duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
servo.duty_u16(duty)
# Sweep the servo from 0 to 180 degrees and back
try:
while True:
for angle in range(0, 181, 10): # 0 to 180 degrees in steps of 10
set_angle(servo, angle)
sleep(0.1)
for angle in range(180, -1, -10): # 180 to 0 degrees in steps of 10
set_angle(servo, angle)
sleep(0.1)
except KeyboardInterrupt:
# Clean up and stop the servo
servo.deinit()
print("Program stopped.")