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.1 Motor

Introducción

En este proyecto, aprenderemos a usar el L293D para controlar un motor de corriente continua (DC) y hacerlo girar en sentido horario y antihorario. Dado que el motor de corriente continua requiere una corriente más alta, usaremos el Módulo de Alimentación para proporcionar energía de manera segura al motor.

Componentes Necesarios

Para este proyecto, necesitamos los siguientes componentes.

../_images/1.3.1_motor_list.png

Diagrama de Conexiones

../_images/1.3.1_motor_schematic.png

Procedimientos del Experimento

Paso 1: Construye el circuito.

../_images/1.3.1_motor_circuit.png

Nota

El módulo de alimentación puede usar una batería de 9V con el conector para batería de 9V incluido en el kit. Inserta el capuchón del módulo de alimentación en las tiras de bus de 5V de la protoboard.

../_images/1.3.1_motor_battery.jpeg

Paso 2: Ve al directorio del código.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Paso 3: Ejecuta el código.

sudo python3 1.3.1_Motor.py

Al ejecutar el código, el motor primero gira en sentido horario durante 5 segundos, luego se detiene durante 5 segundos, después gira en sentido antihorario durante 5 segundos y posteriormente se detiene nuevamente por 5 segundos. Esta serie de acciones se repetirá continuamente.

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 Motor
from time import sleep

# Inicializa el Motor con GPIO Zero, especificando los pines GPIO para control de avance (17), retroceso (27) y habilitación (22)
motor = Motor(forward=17, backward=27, enable=22)

try:
    # Función principal para controlar la dirección y movimiento del motor.
    # Alterna la rotación del motor entre horario y antihorario con pausas intermedias.
    actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop}  # Define las acciones del motor para facilitar la lectura

    while True:
        # Recorre las acciones definidas para controlar la dirección del motor
        for action in ['CW', 'STOP', 'CCW', 'STOP']:
            actions[action]()  # Ejecuta la acción actual (avanzar, parar, retroceder, parar)
            print(f"{action}")  # Muestra la acción actual en la consola
            sleep(5)  # Pausa de 5 segundos antes de proceder a la siguiente acción

except KeyboardInterrupt:
    # Maneja de forma segura una interrupción de teclado (Ctrl+C) para detener el programa
    pass

Explicación del Código

  1. Estas declaraciones de importación incorporan la clase Motor de la librería gpiozero y la función sleep del módulo time para manejar pausas.

    #!/usr/bin/env python3
    from gpiozero import Motor
    from time import sleep
    
  2. Esta línea inicializa un objeto Motor, especificando los pines GPIO para el control de avance (17), retroceso (27) y habilitación (22).

    # Inicializa el Motor con GPIO Zero, especificando los pines GPIO para control de avance (17), retroceso (27) y habilitación (22)
    motor = Motor(forward=17, backward=27, enable=22)
    
  3. Las acciones de control del motor se definen en un diccionario para facilitar la lectura. Un bucle infinito (while True) recorre estas acciones, ejecutando cada una durante 5 segundos.

    try:
        # Función principal para controlar la dirección y movimiento del motor.
        # Alterna la rotación del motor entre horario y antihorario con pausas intermedias.
        actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop}  # Define las acciones del motor para facilitar la lectura
    
        while True:
            # Recorre las acciones definidas para controlar la dirección del motor
            for action in ['CW', 'STOP', 'CCW', 'STOP']:
                actions[action]()  # Ejecuta la acción actual (avanzar, parar, retroceder, parar)
                print(f"{action}")  # Muestra la acción actual en la consola
                sleep(5)  # Pausa de 5 segundos antes de proceder a la siguiente acción
    
  4. Este segmento permite que el programa se termine de manera segura utilizando una interrupción de teclado (Ctrl+C) sin causar errores.

    except KeyboardInterrupt:
    # Maneja de forma segura una interrupción de teclado (Ctrl+C) para detener el programa
    pass