Nota
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
¿Por qué unirse?
Soporte Experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Avances Exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
Descuentos Especiales: Aprovecha descuentos exclusivos en nuestros productos más recientes.
Promociones Festivas y Sorteos: Participa en sorteos y promociones especiales.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
1.3.2 Servo
Introducción
En este proyecto, aprenderemos cómo hacer que el servo gire.
Componentes Necesarios
Para este proyecto, necesitamos los siguientes componentes.

Diagrama de Conexiones

Procedimientos del Experimento
Paso 1: Construye el circuito.

Paso 2: Accede al directorio del código.
cd ~/davinci-kit-for-raspberry-pi/python-pi5
Paso 3: Ejecuta el archivo.
sudo python3 1.3.2_Servo.py
Al ejecutar el programa, el servo girará de 0 grados a 90, luego a 180 grados, y después volverá de 180 grados a 90 y finalmente a 0 grados, en un ciclo continuo.
Advertencia
Si aparece el mensaje de error RuntimeError: Cannot determine SOC peripheral base address
, consulta Si gpiozero no funciona.
Código
Nota
Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Antes de eso, asegúrate de estar en la ruta del código fuente, como davinci-kit-for-raspberry-pi/python-pi5
. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
#!/usr/bin/env python3
from gpiozero import Servo
from time import sleep
# Configura el número de pin GPIO al que está conectado el servo
myGPIO = 18
# Define un factor de corrección para ajustar la anchura del pulso del servo
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000 # Calcula la anchura de pulso máxima
minPW = (1.0 - myCorrection) / 1000 # Calcula la anchura de pulso mínima
# Inicializa el objeto Servo con anchuras de pulso personalizadas
servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
try:
while True:
# Posiciona el servo en el centro y espera
servo.mid()
print("mid") # Indica la posición actual
sleep(0.5) # Pausa breve de 0.5 segundos
# Mueve el servo a su posición mínima y espera
servo.min()
print("min") # Indica la posición actual
sleep(1) # Mantiene la posición durante 1 segundo
# Devuelve el servo a la posición central y espera
servo.mid()
print("mid") # Indica la posición actual
sleep(0.5) # Pausa breve de 0.5 segundos
# Mueve el servo a su posición máxima y espera
servo.max()
print("max") # Indica la posición actual
sleep(1) # Mantiene la posición durante 1 segundo
except KeyboardInterrupt:
# Termina el script de forma segura en una interrupción de teclado (Ctrl+C)
pass
Explicación del Código
Estas instrucciones de importación traen la clase
Servo
para el control del servo y la funciónsleep
para temporización.#!/usr/bin/env python3 from gpiozero import Servo from time import sleep
Configura el pin GPIO número 18 para conectar el servo motor.
# Configura el número de pin GPIO al que está conectado el servo myGPIO = 18
Estas líneas definen un factor de corrección y lo usan para calcular las anchuras de pulso máxima y mínima del servo, ajustando su rango de movimiento.
# Define un factor de corrección para ajustar la anchura del pulso del servo myCorrection = 0.45 maxPW = (2.0 + myCorrection) / 1000 # Calcula la anchura de pulso máxima minPW = (1.0 - myCorrection) / 1000 # Calcula la anchura de pulso mínima
Inicializa el objeto Servo con el pin GPIO especificado y anchuras de pulso personalizadas.
# Inicializa el objeto Servo con anchuras de pulso personalizadas servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
El bloque try contiene un bucle while True para mover el servo continuamente. El servo se posiciona en los puntos central, mínimo y máximo, con cada posición impresa y mantenida durante una duración específica.
try: while True: # Posiciona el servo en el centro y espera servo.mid() print("mid") # Indica la posición actual sleep(0.5) # Pausa breve de 0.5 segundos # Mueve el servo a su posición mínima y espera servo.min() print("min") # Indica la posición actual sleep(1) # Mantiene la posición durante 1 segundo # Devuelve el servo a la posición central y espera servo.mid() print("mid") # Indica la posición actual sleep(0.5) # Pausa breve de 0.5 segundos # Mueve el servo a su posición máxima y espera servo.max() print("max") # Indica la posición actual sleep(1) # Mantiene la posición durante 1 segundo except KeyboardInterrupt: # Termina el script de forma segura en una interrupción de teclado (Ctrl+C) pass