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.

../_images/1.3.2_servo_list.png

Diagrama de Conexiones

../_images/image337.png

Procedimientos del Experimento

Paso 1: Construye el circuito.

../_images/image125.png

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

  1. Estas instrucciones de importación traen la clase Servo para el control del servo y la función sleep para temporización.

    #!/usr/bin/env python3
    from gpiozero import Servo
    from time import sleep
    
  2. 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
    
  3. 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
    
  4. 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)
    
  5. 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