.. note::
¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con 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**: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones especiales.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo!
.. _1.3.1_py:
1.3.1 Motor
===============
Introducción
---------------
En este proyecto, aprenderemos cómo usar el L293D para conducir un motor de
corriente continua (DC) y hacerlo girar en sentido horario y antihorario.
Dado que el motor de DC necesita una corriente mayor, por razones de seguridad,
utilizamos el módulo de alimentación para suministrar energía a los motores.
Componentes Necesarios
--------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/list_1.3.1.png
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ARTÍCULOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los siguientes enlaces.
.. 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
------------------------
Conecta el módulo de alimentación a la placa de pruebas e inserta el
capuchón del puente en el pin de 5V, así se suministrará un voltaje de 5V.
Conecta el pin 1 del L293D al GPIO22 y configúralo como nivel alto. Conecta
el pin 2 al GPIO27 y el pin 7 al GPIO17, luego establece un pin en alto
mientras el otro en bajo. De esta manera, puedes cambiar la dirección de
rotación del motor.
.. image:: ../img/image336.png
**Procedimientos Experimentales**
**Paso 1:** Construye el circuito.
.. image:: ../img/image117.png
.. note::
El módulo de alimentación puede usar una batería de 9V con el conector de
batería de 9V incluido en el kit. Inserta el capuchón del puente del módulo
de alimentación en las tiras de bus de 5V de la placa de pruebas.
.. image:: ../img/image118.jpeg
**Paso 2:** Ingresa a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
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 por 5 segundos, después gira en sentido
antihorario durante 5 segundos y posteriormente se detiene por 5 segundos.
Esta serie de acciones se ejecutará repetidamente.
**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``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
# Set up pins
MotorPin1 = 17
MotorPin2 = 27
MotorEnable = 22
def setup():
# Set the GPIO modes to BCM Numbering
GPIO.setmode(GPIO.BCM)
# Set pins to output
GPIO.setup(MotorPin1, GPIO.OUT)
GPIO.setup(MotorPin2, GPIO.OUT)
GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW)
# Define a motor function to spin the motor
# direction should be
# 1(clockwise), 0(stop), -1(counterclockwise)
def motor(direction):
# Clockwise
if direction == 1:
# Set direction
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Enable the motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
# Counterclockwise
if direction == -1:
# Set direction
GPIO.output(MotorPin1, GPIO.LOW)
GPIO.output(MotorPin2, GPIO.HIGH)
# Enable the motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Counterclockwise")
# Stop
if direction == 0:
# Disable the motor
GPIO.output(MotorEnable, GPIO.LOW)
print ("Stop")
def main():
# Define a dictionary to make the script more readable
# CW as clockwise, CCW as counterclockwise, STOP as stop
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Clockwise
motor(directions['CW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
# Anticlockwise
motor(directions['CCW'])
time.sleep(5)
# Stop
motor(directions['STOP'])
time.sleep(5)
def destroy():
# Stop the motor
GPIO.output(MotorEnable, GPIO.LOW)
# Release resource
GPIO.cleanup()
# If run this script directly, do:
if __name__ == '__main__':
setup()
try:
main()
# When 'Ctrl+C' is pressed, the program
# destroy() will be executed.
except KeyboardInterrupt:
destroy()
**Explicación del Código**
.. code-block:: python
def motor(direction):
# Sentido horario
if direction == 1:
# Establecer dirección
GPIO.output(MotorPin1, GPIO.HIGH)
GPIO.output(MotorPin2, GPIO.LOW)
# Habilitar el motor
GPIO.output(MotorEnable, GPIO.HIGH)
print ("Clockwise")
...
Crear una función, ``motor()`` cuyo parámetro es direction. Si se cumple
la condición de que direction=1, el motor gira en sentido horario; cuando
direction=-1, el motor gira en sentido antihorario; y bajo la condición de que
direction=0, deja de girar.
.. code-block:: python
def main():
# Definir un diccionario para hacer el script más legible
# CW como sentido horario, CCW como sentido antihorario, STOP como detener
directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
while True:
# Sentido horario
motor(directions['CW'])
time.sleep(5)
# Detener
motor(directions['STOP'])
time.sleep(5)
# Sentido antihorario
motor(directions['CCW'])
time.sleep(5)
# Detener
motor(directions['STOP'])
time.sleep(5)
En la función main(), crea un diccionario, directions[], en el cual CW es
igual a 1, el valor de CCW es -1, y el número 0 se refiere a Stop.
Cuando se ejecuta el código, el motor primero gira en sentido horario
durante 5s y luego se detiene durante 5s, después de eso, gira en sentido
antihorario durante 5s; posteriormente, el motor se detiene durante 5s.
Esta serie de acciones se ejecutará repetidamente.
Ahora, deberías ver la hélice del motor girando.
Imagen del Fenómeno
---------------------------
.. image:: ../img/image119.jpeg