.. note:: ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas. **¿Por qué unirse?** - **Soporte Experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprender y Compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y avances. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones Festivas y Sorteos**: Participa en sorteos y promociones navideñas. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy! 1.3.1 Motor ============= Introducción --------------- En esta lección, aprenderemos a utilizar el L293D para accionar un motor de corriente continua y hacerlo girar en sentido horario y antihorario. Dado que el motor de corriente continua necesita una corriente mayor, utilizaremos el módulo de alimentación para alimentar los motores por razones de seguridad. Componentes --------------- .. image:: img/list_1.3.1.png Principio ------------- **L293D** El L293D es un controlador de motor de 4 canales integrado en un chip que soporta alta tensión y alta corriente. Está diseñado para conectarse a niveles lógicos estándar DTL y TTL, y para accionar cargas inductivas (como bobinas de relé, motores de CC, motores paso a paso) y transistores de conmutación de potencia, entre otros. Los motores de corriente continua son dispositivos que convierten la energía eléctrica en corriente continua en energía mecánica. Se utilizan ampliamente en accionamientos eléctricos debido a su excelente rendimiento en la regulación de velocidad. A continuación se muestra la figura de los pines. El L293D tiene dos pines (Vcc1 y Vcc2) para la alimentación. Vcc2 se utiliza para alimentar el motor, mientras que Vcc1 alimenta el chip. Dado que aquí se utiliza un motor de corriente continua de pequeño tamaño, conectaremos ambos pines a +5V. .. image:: img/image111.png La siguiente figura muestra la estructura interna del L293D. El pin EN es un pin de habilitación que solo funciona con un nivel alto; A representa la entrada y Y la salida. Puedes ver la relación entre ellos en la parte inferior derecha. Cuando el pin EN está en nivel alto, si A está en alto, Y saldrá en nivel alto; si A está en bajo, Y saldrá en bajo. Cuando el pin EN está en bajo, el L293D no funcionará. .. image:: img/image334.png **Motor de Corriente Continua** .. image:: img/image114.jpeg Este es un motor de CC de 5V. Girará cuando se le dé a los dos terminales de la placa de cobre un nivel alto y uno bajo. Para mayor comodidad, puedes soldar los pines al motor. .. image:: img/image335.png **Módulo de Alimentación** En este experimento, se necesita una gran corriente para accionar el motor, especialmente al iniciar y detener, lo que interferirá severamente con el funcionamiento normal de la Raspberry Pi. Por lo tanto, alimentaremos el motor por separado con este módulo para que funcione de manera segura y estable. Puedes simplemente conectarlo en la placa de pruebas para suministrar energía. Proporciona voltajes de 3.3V y 5V, y puedes conectar cualquiera de ellos a través de un capuchón de puente incluido. .. image:: img/image115.png Diagrama Esquemático ----------------------- Conecta el módulo de alimentación en la placa de pruebas e inserta el capuchón de puente en el pin de 5V, luego saldrá un voltaje de 5V. Conecta el pin 1 del L293D a GPIO22 y configúralo en nivel alto. Conecta el pin 2 a GPIO27 y el pin 7 a GPIO17, luego establece un pin en alto y 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:** Construir el circuito. .. image:: img/1.3.1.png :width: 800 .. 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 de 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**: Acceder a la carpeta del código. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/1.3.1/ **Paso 3**: Compilar. .. raw:: html .. code-block:: gcc 1.3.1_Motor.c -lwiringPi **Paso 4**: Ejecutar el archivo ejecutable. .. raw:: html .. code-block:: sudo ./a.out Al ejecutar el código, el motor primero girará en sentido horario durante 5 segundos, luego se detendrá durante 5 segundos, después girará en sentido antihorario durante 5 segundos; posteriormente, el motor se detendrá durante 5 segundos. Esta serie de acciones se repetirá. .. note:: Si no funciona después de ejecutarlo, o aparece un mensaje de error: \"wiringPi.h: No such file or directory\", consulta :ref:`faq_c_nowork`. **Código** .. code-block:: c #include #include #define MotorPin1 0 #define MotorPin2 2 #define MotorEnable 3 int main(void){ int i; if(wiringPiSetup() == -1){ //si la inicialización de wiring falla, imprime un mensaje en pantalla printf("setup wiringPi failed !"); return 1; } pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorEnable, OUTPUT); while(1){ printf("Clockwise\n"); delay(100); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); delay(100); digitalWrite(MotorEnable, LOW); for(i=0;i<3;i++){ delay(1000); } printf("Anti-clockwise\n"); delay(100); digitalWrite(MotorEnable, HIGH); digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); for(i=0;i<3;i++){ delay(1000); } printf("Stop\n"); delay(100); 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 L239D. .. 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á en nivel alto. Establece un nivel bajo para 1A, luego 1Y saldrá en nivel bajo, y el motor girará. .. code-block:: c for(i=0;i<3;i++){ delay(1000); } Este bucle retrasa durante 3*1000 ms. .. code-block:: c digitalWrite(MotorEnable, LOW) Si 1,2EN (pin 1) está en nivel bajo, el L293D no funcionará. 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.