'''
Código para hacer girar un servo en su
rango de trabajo (0º~180º)
Fuente: https://peppe8o.com/sg90-servo-motor-with-raspberry-pi-pico-and-micropython/
'''
from utime import sleep
from machine import Pin, PWM
#Pin setup
servo_pin = PWM(Pin(22))
servo_pin.freq(50)
#A partir del ángulo que se quiere se calcula el output necesario
#para que el servo se mueva correctamente
def servo(degrees):
'''
Función para pasar el ángulo de giro deseado al servo como PWM equivalente
Fuente: https://peppe8o.com/sg90-servo-motor-with-raspberry-pi-pico-and-micropython/
'''
#Checkear si el ángulo buscado está dentro del rango de trabajo
if degrees > 180: degrees=180
if degrees < 0: degrees=0
#Valores min y max del duty cycle
maxDuty=9000
minDuty=1000
#Fórmula para pasar de grados a PWM/duty cycle
#Duty Cycle = minimo + rango * proporción de ángulo
newDuty=minDuty+(maxDuty-minDuty)*(degrees/180)
#Pasar el valor de duty al servo
servo_pin.duty_u16(int(newDuty))
#Loop que hace girar el servo en todo su rango
while True:
for degree in range(0,180,1):
servo(degree)
sleep(0.001)
print("increasing -- "+str(degree))
for degree in range(180, 0, -1):
servo(degree)
sleep(0.001)
print("decreasing -- "+str(degree))