.. note:: ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas post-venta 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**: Obtén acceso anticipado a nuevos anuncios de productos y avances exclusivos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo! .. _1.3.1_py_pi5: 1.3.1 Motor =============== Introducción ------------------- En este proyecto, aprenderemos a utilizar el L293D para controlar un motor de corriente continua (DC) y hacer que gire en sentido horario y antihorario. Dado que el motor de corriente continua necesita una corriente mayor, por razones de seguridad, utilizaremos el Módulo de Alimentación para suministrar energía a los motores. Componentes Necesarios ------------------------------ En este proyecto, necesitaremos los siguientes componentes. .. image:: ../python_pi5/img/1.3.1_motor_list.png Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ELEMENTOS EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DE COMPONENTES - ENLACE DE COMPRA * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_power_module` - \- * - :ref:`cpn_l293d` - \- * - :ref:`cpn_motor` - |link_motor_buy| Diagrama Esquemático ----------------------- .. image:: ../python_pi5/img/1.3.1_motor_schematic.png Procedimientos Experimentales ----------------------------------- **Paso 1:** Construye el circuito. .. image:: ../python_pi5/img/1.3.1_motor_circuit.png .. note:: El módulo de alimentación puede aplicar una batería de 9V con el conector de batería de 9V en el kit. Inserta el capuchón del módulo de alimentación en las tiras de bus de 5V de la placa de pruebas. .. image:: ../python_pi5/img/1.3.1_motor_battery.jpeg **Paso 2:** Entra en la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecuta. .. raw:: html .. code-block:: sudo python3 1.3.1_Motor_zero.py Cuando el código se ejecute, el motor primero girará en sentido horario durante 5s, luego se detendrá durante 5s. Después, girará en sentido antihorario durante 5s; posteriormente, el motor se detendrá durante 5s. Esta serie de acciones se ejecutará repetidamente. .. warning:: Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc` **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python-pi5``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import Motor from time import sleep # Inicializar el Motor con GPIO Zero, especificando los pines GPIO para control hacia adelante (17), hacia atrás (27) y habilitación (22) motor = Motor(forward=17, backward=27, enable=22) try: # Función principal para controlar la dirección y el movimiento del motor. # Alterna la rotación del motor entre sentido horario y antihorario con paradas intermedias. actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop} # Definir acciones del motor para mayor legibilidad while True: # Iterar a través de las acciones definidas para controlar la dirección del motor for action in ['CW', 'STOP', 'CCW', 'STOP']: actions[action]() # Ejecutar la acción actual (adelante, detener, atrás, detener) print(f"{action}") # Mostrar la acción actual en la consola sleep(5) # Pausar durante 5 segundos antes de proceder a la siguiente acción except KeyboardInterrupt: # Manejar de manera adecuada una interrupción de teclado (por ejemplo, Ctrl+C) para detener el programa pass **Explicación del Código** #. Estas declaraciones de importación traen la clase ``Motor`` de la biblioteca ``gpiozero`` y la función ``sleep`` del módulo ``time``. .. code-block:: python #!/usr/bin/env python3 from gpiozero import Motor from time import sleep #. Esta línea inicializa un objeto ``Motor``, especificando los pines GPIO para control hacia adelante (17), hacia atrás (27) y habilitación (22). .. code-block:: python # Inicializar el Motor con GPIO Zero, especificando los pines GPIO para control hacia adelante (17), hacia atrás (27) y habilitación (22) motor = Motor(forward=17, backward=27, enable=22) #. Las acciones para el control del motor se definen en un diccionario para mayor legibilidad. Un bucle infinito (`while True`) itera a través de estas acciones, ejecutando cada una durante 5 segundos. .. code-block:: python try: # Función principal para controlar la dirección y el movimiento del motor. # Alterna la rotación del motor entre sentido horario y antihorario con paradas intermedias. actions = {'CW': motor.forward, 'CCW': motor.backward, 'STOP': motor.stop} # Definir acciones del motor para mayor legibilidad while True: # Iterar a través de las acciones definidas para controlar la dirección del motor for action in ['CW', 'STOP', 'CCW', 'STOP']: actions[action]() # Ejecutar la acción actual (adelante, detener, atrás, detener) print(f"{action}") # Mostrar la acción actual en la consola sleep(5) # Pausar durante 5 segundos antes de proceder a la siguiente acción #. Este segmento permite que el programa se termine de manera segura usando una interrupción de teclado (Ctrl+C) sin causar errores. .. code-block:: python except KeyboardInterrupt: # Manejar de manera adecuada una interrupción de teclado (por ejemplo, Ctrl+C) para detener el programa pass