servomotor.py
1 |
import RPi.GPIO as GPIO |
---|---|
2 |
import time |
3 |
|
4 |
# Configuración del GPIO
|
5 |
GPIO.setmode(GPIO.BCM) # Usar la numeración BCM
|
6 |
GPIO.setup(9, GPIO.OUT) # Configurar GPIO 9 como salida (ajustar el pin si es necesario) |
7 |
|
8 |
# Configurar PWM en el pin 9 con una frecuencia de 50 Hz
|
9 |
pwm = GPIO.PWM(9, 50) |
10 |
pwm.start(0) # Iniciar PWM con ciclo de trabajo 0% |
11 |
|
12 |
def set_angle(angle): |
13 |
"""Configura el ángulo del servo (0 a 180 grados)."""
|
14 |
duty_cycle = 2 + (angle / 18) # Mapear ángulo a ciclo de trabajo |
15 |
pwm.ChangeDutyCycle(duty_cycle) # Cambiar ciclo de trabajo para ajustar el ángulo
|
16 |
time.sleep(0.5) # Espera para que el servo se mueva |
17 |
|
18 |
def rotate_servo(): |
19 |
"""Gira el servomotor durante 4 segundos y luego lo detiene."""
|
20 |
start_time = time.time() # Registrar el tiempo de inicio
|
21 |
while time.time() - start_time < 4: # Hacerlo durante 4 segundos |
22 |
# Movimiento de ida y vuelta (0 a 180 y luego 180 a 0)
|
23 |
for angle in range(0, 181): # Mover el servo de 0 a 180 grados |
24 |
set_angle(angle) |
25 |
if time.time() - start_time >= 4: |
26 |
return # Si han pasado 4 segundos, detener el servo |
27 |
for angle in range(180, -1, -1): # Mover el servo de 180 a 0 grados |
28 |
set_angle(angle) |
29 |
if time.time() - start_time >= 4: |
30 |
return # Si han pasado 4 segundos, detener el servo |
31 |
|
32 |
# Iniciar el movimiento del servo
|
33 |
try:
|
34 |
rotate_servo() # Girar el servo durante 4 segundos
|
35 |
finally:
|
36 |
pwm.stop() # Detener el PWM
|
37 |
GPIO.cleanup() # Limpiar la configuración de los GPIO
|