.. 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.
- **Aprender y Compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Vistas Exclusivas**: Obtén acceso anticipado a anuncios de nuevos productos y adelantos.
- **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_c:
1.3.1 Motor
===================
Introducción
---------------
En este proyecto, aprenderemos cómo usar el L293D para controlar 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, usaremos 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 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
-------------------------
Conecta el módulo de alimentación en la placa de pruebas (breadboard) e inserta el jumper en
el pin de 5V, de esta forma se obtendrá 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 y el otro en bajo. Así podrás cambiar la dirección de rotación del motor.
.. image:: ../img/image336.png
**Procedimientos Experimentales**
**Paso 1:** Construye el circuito.
.. image:: ../img/1.3.1.png
.. note::
El módulo de alimentación puede utilizar una batería de 9V con el conector para
baterías de 9V incluido en el kit. Inserta el 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/c/1.3.1/
**Paso 3**: Compila.
.. raw:: html
.. code-block::
gcc 1.3.1_Motor.c -lwiringPi
**Paso 4**: Ejecuta el archivo compilado.
.. raw:: html
.. code-block::
sudo ./a.out
Mientras el código se ejecuta, el motor primero gira en sentido horario durante 5s,
luego se detiene durante 5s, después gira en sentido antihorario durante 5s; posteriormente,
el motor se detiene durante 5s. Esta serie de acciones se ejecutará repetidamente.
.. note::
Si no funciona después de ejecutarlo, o aparece un mensaje de error: \"wiringPi.h: No such file or directory\", por favor consulta :ref:`install_wiringpi`.
**Código**
.. code-block:: c
#include
#include
#define MotorPin1 0
#define MotorPin2 2
#define MotorEnable 3
int main(void){
int i;
if(wiringPiSetup() == -1){ //when initialize wiring failed, print messageto screen
printf("setup wiringPi failed !");
return 1;
}
pinMode(MotorPin1, OUTPUT);
pinMode(MotorPin2, OUTPUT);
pinMode(MotorEnable, OUTPUT);
while(1){
printf("Clockwise\n");
digitalWrite(MotorEnable, HIGH);
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
for(i=0;i<3;i++){
delay(1000);
}
printf("Stop\n");
digitalWrite(MotorEnable, LOW);
for(i=0;i<3;i++){
delay(1000);
}
printf("Anti-clockwise\n");
digitalWrite(MotorEnable, HIGH);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
for(i=0;i<3;i++){
delay(1000);
}
printf("Stop\n");
digitalWrite(MotorEnable, LOW);
for(i=0;i<3;i++){
delay(1000);
}
}
return 0;
}
**Explicación del Código**
.. code-block:: c
digitalWrite(MotorEnable, HIGH);
Habilita el L293D.
.. code-block:: c
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, LOW);
Establece un nivel alto para 2A (pin 7); dado que 1,2EN (pin 1) está en
nivel alto, 2Y saldrá con nivel alto.
Establece un nivel bajo para 1A, luego 1Y saldrá con nivel bajo, y
el motor girará.
.. code-block:: c
for(i=0;i<3;i++){
delay(1000);
}
Este bucle es para retrasar durante 3*1000ms.
.. code-block:: c
digitalWrite(MotorEnable, LOW)
Si 1,2EN (pin 1) está en nivel bajo, L293D no funciona. El motor deja de girar.
.. code-block:: c
digitalWrite(MotorPin1, LOW)
digitalWrite(MotorPin2, HIGH)
Invierte el flujo de corriente del motor, luego el motor girará en sentido inverso.
Imagen del Fenómeno
------------------------
.. image:: ../img/image119.jpeg