import machine
# Cargar el módulo de tiempo para los retrasos
import time
# Crea un objeto GPIO p2 regular
servo_pin = machine.Pin(2, machine.Pin.OUT)
# Creación de otro objeto llamado 'pwm' para conectar el controlador pwm a
# ese pin
pwm = machine.PWM(servo_pin)
# Establecer un pulso cada 20ms
pwm.freq(50)
# Establecer inicialmente el ciclo de trabajo ('duty cycle') a cero, para
# apagar el pulso
pwm.duty(0)
# Creación de una función para mapear los 0 a 180 grados a 20 a 120 valores
# de 'duty cycle' pwm
def map(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# Creación de otra función para girar el servo según el ángulo de entrada
def servo(pwm_pin, angle):
pwm_pin.duty(map(angle, 0, 180, 20, 120))
# Habrá que tener cuidado, es posible que el servo no pueda moverse
# completamente de 0 a 180 grados. Algunos servos de prueba solo pueden
# moverse con seguridad de 20 a 170 grados.
# Para girar el servomotor a 20 grados
servo(pwm, 0)
time.sleep(1)
# Para girar el servomotor a 90 grados
servo(pwm, 90)
time.sleep(1)
# Para girar el servomotor a 170 grados
servo(pwm, 170)
time.sleep(1)
while True:
# Para rotar el servo de 20 a 170 grados
# en incrementos de 10 grados
for i in range(0, 170, 10):
print("20 a 170, etapa ", i)
servo(pwm, i)
time.sleep(0.5)
# Para rotar el servo de 170 a 20 grados
# en decrementos de 10 grados
for i in range(170, 0, -10):
print("170 a 20, etapa ", i)
servo(pwm, i)
time.sleep(0.5)