Código y video de Arduino: Controlador de motor de CC L293D (sin control de velocidad)
Este tutorial explica cómo usar el controlador de motor L293D con un Arduino para controlar un motor de corriente continua. El L293D permite girar el motor tanto en sentido horario como en sentido antihorario. Siguiendo esta guía, aprenderás a cablear los componentes y a programar el Arduino para lograr el control del motor deseado.
En este proyecto, utilizaremos el controlador de motor L293D para controlar un solo motor de corriente continua. El motor podrá cambiar de dirección según los comandos indicados en el código de Arduino. Para una comprensión más clara del montaje y del código, es útil ver el video asociado (en el video en 00:00).
Hardware explicado
El L293D es un circuito integrado diseñado para accionar motores. Puede controlar dos motores de CC simultáneamente o un motor paso a paso. El chip utiliza una configuración en puente H para permitir el control de dirección al cambiar la polaridad de la tensión aplicada al motor. Esta flexibilidad lo convierte en una excelente opción para proyectos de robótica y automatización.
Además del L293D, utilizaremos una placa Arduino para enviar señales de control al controlador del motor. El Arduino generará los niveles lógicos necesarios para habilitar el motor y determinar la dirección de su rotación. La configuración también requerirá un motor de corriente continua y una fuente de alimentación compatible con los requisitos de voltaje del motor.
Detalles de la hoja de datos
| Fabricante | Texas Instruments |
|---|---|
| Número de parte | L293D |
| Tensión lógica/E/S | 5 V |
| Tensión de alimentación | 4.5 - 36 V |
| Corriente de salida (por canal) | 600 mA |
| Corriente de pico (por canal) | 1.2 A |
| Guía de frecuencia PWM | 20 kHz |
| Umbrales lógicos de entrada | 2.5 V (típ.) |
| Caída de tensión / RDS(en conducción)/ saturación | 1,5 V (máx.) |
| Límites térmicos | 150 °C (máx.) |
| Paquete | DIP de 16 pines |
| Notas / variantes | Puede controlar dos motores |
- Asegúrese de que la tensión de alimentación no supere los 36 V.
- Utilice una disipación térmica adecuada cuando opere cerca de la corriente máxima.
- Conecta siempre la masa del Arduino y del controlador del motor.
- Compruebe el cableado para evitar conexiones con polaridad invertida.
- Utilice señales PWM para controlar la velocidad si es necesario en proyectos futuros.
Instrucciones de cableado


Para cablear el controlador de motor L293D al Arduino, comienza por conectar la alimentación y la masa. Conecta los pines 4 y 5 del L293D a la masa. Luego, conecta el pin 1 (Vcc1) a la salida de 5 V del Arduino. Para Vcc2 (pin 8), conéctalo a una fuente de alimentación externa, asegurándote de que coincida con la especificación de voltaje del motor.
A continuación, conecta el pin de habilitación (pin 1) al pin 8 del Arduino para controlar la alimentación del motor. Para las entradas de control del motor, conecta el pin 2 (1A) del L293D al pin 2 del Arduino y el pin 7 (2A) al pin 7 del Arduino. Finalmente, conecta los terminales del motor a los pines 3 (1Y) y 6 (2Y) del L293D.
Ejemplos de código y guía paso a paso
El siguiente código inicializa los pines y configura el control del motor. Los identificadores utilizados incluyenP1Apara el primer pin de control del motor yEN12para el pin de habilitación. La función setup configura los pines como salidas.
void setup() {
Serial.begin(9600); // setup Serial Monitor to display information
pinMode(P1A, OUTPUT); // define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT); // define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT); // define pin as OUTPUT for 1,2EN enable
}Dentro del bucle, se le ordena al motor que gire en ambas direcciones con retardos entre ellas. El estado del motor se imprime en el monitor serie usandoSerial.println.
void loop() {
Serial.println("Rotating CW");
digitalWrite(EN12, HIGH); // Enable 1A and 2A
digitalWrite(P1A, HIGH); // send HIGH signal to P1A
digitalWrite(P2A, LOW); // send LOW signal to P2A
delay(3000); // motor runs for 3 seconds
digitalWrite(EN12, LOW); // Disable 1A and 2A
}Este extracto muestra cómo controlar la dirección de rotación del motor cambiando los niveles lógicos enviados aP1AyP2AEl motor funciona durante 3 segundos antes de detenerse y cambiar de dirección.
Aquí se muestra cómo se utilizan los controladores de media puente L293D:
Demostración / Qué esperar
Cuando la configuración esté completa y se haya subido el código, deberías observar que el motor gira en una dirección durante 3 segundos, se detiene durante 2 segundos y luego gira en la dirección opuesta durante otros 3 segundos. El estado del motor se imprimirá en el monitor serie, confirmando las acciones (en el video en 12:00).
Entre los errores comunes se encuentra no asegurarse de que el motor reciba el voltaje correcto y no verificar que sus conexiones sean correctas. Si el motor no responde, vuelva a comprobar el cableado y las conexiones de la fuente de alimentación.
Marcas de tiempo del video
- 00:00- Introducción
- 02:30- Explicación del cableado
- 05:00- Revisión del código
- 10:00- Demostración del control motor
++
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* watch L293 video for details https://youtu.be/jAmDliHcTJ0
* Code is available at http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Control Code by Robojax.com 2018025
}
void loop() {
// L293 Motor Control Code by Robojax.com 2018025
Serial.println("Rotating CW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
// L293 Motor Control Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println("Rotating CCW");
digitalWrite(EN12 ,HIGH);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
delay(3000);// motor runs for 3 seconds
digitalWrite(EN12 ,LOW);// Disable 1A and 2A
delay(2000);// motor stop for 3 seconds
Serial.println("Motor Stopped");
Serial.println("=========== Loop done");
delay(500);
// L293 Motor Control Code by Robojax.com 2018025
}
/*
* This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW)
and counter-clockwise (CCW).
* *
// Written by Ahmad S. for Robojax.com on
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
* Code is available at: http://robojax.com/learn/arduino
*
*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable
// DC motor 2 control
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable
/*
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: this code is "AS IS" and for educational purposes only.
*
*/
void setup() {
// L293 Motor Contro Code by Robojax.com 2018025
Serial.begin(9600);// setup Serial Monitor to display information
pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN
// L293 Motor Contro Code by Robojax.com 2018025
}
void loop() {
if(value == 45){
rotateMA("CW",HIGH); // start motor in CW
}
delay(3000);
rotateMA("CW",LOW); // stop motor
delay(2000);
rotateMA("CCW",HIGH); // start motor in CCW
delay(3000);
rotateMA("CW",LOW); /// stop motor
delay(2000);
// L293 Motor Contro Code by Robojax.com 2018025
}// loop ends
/**
* function: rotateMA(String di,int action)
* Sends power to motor A
* di is a string and can be "CW" or "CCW"
* to use:
* rotateMA("CW",HIGH);// to rotate motor CW
* rotateMA("CCW",HIGH);// to rotate motor CCW
* to stop the motor:
* rotateMA("CW",LOW);// to stop motor
*/
void rotateMA(String di,int endis)
{
// L293 Motor Contro Code by Robojax.com 2018025
if(di =="CW"){
Serial.println(" Rotating CW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
digitalWrite(P2A,LOW);// send - or LOW signal to P2A
}else{
// L293 Motor Contro Code by Robojax.com 2018025
// now changing the direction of rotation of motor
Serial.println(" Rotating CCW");
digitalWrite(EN12 ,endis);// Enable 1A and 2A
digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
digitalWrite(P2A,HIGH);// send - or LOW signal to P2A
}
// L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here
Cosas que podrías necesitar
-
Amazonas
-
AliExpressCompra el circuito integrado controlador de motor L293D en AliExpress.s.click.aliexpress.com
Recursos y referencias
Aún no hay recursos.
Archivos📁
No hay archivos disponibles.