Código de búsqueda

Lección 95: Uso de un escudo de motor de CC L293D de 4 motores | Curso de Arduino Paso a Paso

Lección 95: Uso de un escudo de motor de CC L293D de 4 motores | Curso de Arduino Paso a Paso

En este tutorial, exploraremos cómo controlar cuatro motores de corriente continua utilizando el escudo de motor L293D con Arduino. Esta configuración es particularmente útil para aplicaciones de robótica, como la construcción de un coche robot, donde el control preciso del motor es esencial. Al final de esta lección, tendrás un modelo funcional que puede operar múltiples motores simultáneamente.

El escudo de motor L293D simplifica el proceso de cableado y te permite controlar los motores con solo unas pocas conexiones. Aprenderás cómo cablear el escudo al Arduino, configurar el código y ejecutar comandos de control del motor de manera efectiva. Para una explicación más visual, puedes consultar el video en marcas de tiempo específicas para detalles de cableado y codificación (en el video en mm:ss).

Hardware Explicado

El componente principal de este proyecto es el escudo de motor L293D, que es un controlador de motor de medio puente H cuádruple. Esto significa que puede controlar dos motores en ambas direcciones, lo que permite un control total sobre la rotación del motor. El escudo se conecta directamente al Arduino, lo que facilita la gestión de la energía y las señales de control sin un cableado desordenado.

Cada chip L293D puede manejar hasta 600 mA de corriente por canal y opera a voltajes que oscilan entre 4.5V y 36V. Este rango lo hace adecuado para una variedad de motores de corriente continua. Además, el escudo cuenta con un puente que te permite alimentar tanto los motores como el Arduino desde una única fuente de alimentación externa.

Detalles de la hoja de datos

Fabricante Texas Instruments
Número de pieza L293D
Voltaje de lógica/IO 5 V
Tensión de alimentación 4.5 - 36 V
Corriente de salida (por canal) 600 mA
Corriente pico (por canal) 1.2 A
Guía de frecuencia de PWM 1 kHz - 20 kHz
Umbrales de lógica de entrada 2 V min (alto), 0.8 V max (bajo)
Caída de voltaje / RDS(on)/ saturación 1.5 V max
Límites térmicos 150 °C
Paquete 16-DIP
Notas / variantes Configuración de puente H dual

  • Asegúrese de que los motores no superen los 600 mA para evitar daños.
  • Utilice un disipador de calor adecuado para aplicaciones de alta corriente.
  • Conecta la alimentación externa antes de encender el Arduino.
  • Verifica la colocación de los puentes para alimentar el escudo y el Arduino.
  • Pruebe la dirección del motor intercambiando las conexiones si es necesario.

Instrucciones de cableado

L293d_Shield_wiring

Comienza conectando el escudo de motor L293D a tu Arduino Uno o Mega. Alinea los pines del escudo con los conectores del Arduino y presiona firmemente. A continuación, conecta tus motores de corriente continua a los terminales etiquetadosM1,M2,M3, yM4en el escudo. Cada motor requerirá dos terminales, así que asegúrate de conectarlos correctamente para la dirección de rotación adecuada.

Para la alimentación, conecta una batería externa o una fuente de alimentación a los terminales de entrada de alimentación del escudo, asegurándote de que el voltaje esté dentro del rango de 4.5V a 36V. No olvides conectar el jumper en el escudo para permitir que la energía fluya hacia el Arduino. Finalmente, conecta la tierra de la fuente de alimentación al pin de tierra del Arduino para completar el circuito.

Instala la biblioteca requerida

haz clic en el icono de Biblioteca y busca:Adafruit Motor Sheild Libraryy haz clic en Instalar para instalarlo.

Ejemplos de código y guía paso a paso

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

En el código, inicializamos cuatro objetos de motor:motor1,motor2,motor3, ymotor4Cada motor se asigna un número de canal que corresponde a las conexiones de terminal del escudo del motor. Esto nos permite controlar cada motor de forma individual.

void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
  Serial.println("Robojax L293D Example");
}

Elsetup()La función inicializa la comunicación serial, permitiéndonos enviar y recibir mensajes desde el Arduino IDE. Esto es útil para depurar y monitorear el proceso de control del motor.

motor1.setSpeed(speed(50)); //set speed for motor 1 at 50%
motor1.run(FORWARD); //send motor 1 to Forward rotation

Para controlar los motores, establecemos la velocidad usando elsetSpeed()método, que toma un valor entre 0 y 255. Elrun()método luego inicia el motor en la dirección especificada, comoFORWARDoBACKWARDLa velocidad se puede ajustar dinámicamente según sea necesario.

Demostración / Qué Esperar

Una vez que todo esté cableado y el código esté cargado, deberías ver los motores girar de acuerdo con los comandos en el código. Inicialmente, un motor se encenderá, seguido por los otros en secuencia, cada uno funcionando durante una duración establecida. Si los motores no funcionan como se esperaba, verifica tu cableado, asegúrate de que el conector esté conectado y verifica que la fuente de poder sea adecuada (en el video a mm:ss).

Marcas de Tiempo del Video

  • 00:00 Introducción
  • 03:00 Hoja de datos para L293D
  • 03:56 Explicación del cableado
  • 07:21 Código y biblioteca
  • 13:51 Demostración controlando 4 motores

Imágenes

L293D-Sheild-1
L293D-Sheild-1
L293D-Sheild-2
L293D-Sheild-2
L293D-Sheild-3
L293D-Sheild-3
L293d_sheild_main
L293d_sheild_main
L293d_Shield_wiring
L293d_Shield_wiring
439-Lesson 95: Using L293D 4 DC Motor Shield | Arduino Step-by-Step Course
Idioma: C++
/* 
* Lesson 95: Control 4 DC Motors for a Smart Car using a Motor Shield 
* This code works with Arduino UNO and Arduino Mega. 
* Wiring diagram and how to wire and connect the power supply is shown in the video.
 
  Watch full video instruction:  https://youtu.be/0XihwdulmDQ
 * Download this code from: http://robojax.com
 * 
* Written by Ahmad Shamshiri for Robojax.com on Jan 09, 2022
 * in Ajax, Ontario, Canada
  
This video is part of an Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8
 

If you found this tutorial helpful, please support me so I can continue creating content like this
and make a donation using PayPal http://robojax.com/L/?id=64
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 
 *  Library location: https://github.com/adafruit/Adafruit-Motor-Shield-library
 Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
*/

#include <AFMotor.h>

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
  Serial.begin(9600); // set up Serial library at 9600 bps
  Serial.println("Robojax L293D Example");
}

void loop() {

  motor1.setSpeed( speed(50) ); //set speed for motor 1 at 50%
  motor1.run(FORWARD);//send motor 1 to Foarward rotation

  delay(2000);//wait for 2 seconds
  motor2.setSpeed( speed(100) );//set speed for motor 2 at 100%
  motor2.run(BACKWARD);//send motor 2 to Foarward rotation

  delay(2000);
  motor3.setSpeed( speed(70) );
  motor3.run(FORWARD);
  
  delay(2000);
  motor4.setSpeed( speed(90) );
  motor4.run(FORWARD);

    
  delay(2000);
  
  motor1.run(BRAKE);
  motor2.run(RELEASE);  
  motor3.run(RELEASE);
  motor4.run(RELEASE);   
  delay(2000);

  
  motor1.setSpeed(speed(100));
  motor1.run(BACKWARD);
  delay(2000);
  
  motor1.run(RELEASE);

  delay(1000);
}

/*
 * speed percent to speed converter
 * receives value between 0 to 100 and converts it to value between
 * 0 to 255 which are 8 bits Arduino PWM value
 * www.Robojax.com
 Watch full video instruction:  https://youtu.be/0XihwdulmDQ
 */
int  speed(int percent)
{
  return map(percent, 0, 100, 0, 255);
}

Recursos y referencias

Archivos📁

No hay archivos disponibles.