Código e vídeo do Arduino: Controlador de motor CC L293D (sem controle de velocidade)
Este tutorial explica como usar o controlador de motor L293D com um Arduino para controlar um motor de corrente contínua (DC). O L293D permite que você faça o motor girar nos dois sentidos, horário e anti-horário. Seguindo este guia, você aprenderá como ligar os componentes e programar o Arduino para obter o controle desejado do motor.
Neste projeto, utilizaremos o driver de motor L293D para controlar um único motor CC. O motor poderá inverter a direção com base nos comandos fornecidos no código do Arduino. Para uma compreensão mais clara da configuração e do código, é benéfico assistir ao vídeo associado (no vídeo em 00:00).
Hardware explicado
O L293D é um circuito integrado projetado para acionar motores. Ele pode controlar dois motores CC simultaneamente ou um motor de passo. O chip utiliza uma configuração em ponte H para permitir o controle da direção ao inverter a polaridade da tensão aplicada ao motor. Essa flexibilidade o torna uma excelente escolha para projetos de robótica e automação.
Além do L293D, usaremos uma placa Arduino para enviar sinais de controle ao driver do motor. O Arduino gerará os níveis lógicos necessários para habilitar o motor e determinar a direção de rotação. A montagem também exigirá um motor CC e uma fonte de alimentação compatível com os requisitos de tensão do motor.
Detalhes da ficha técnica
| Fabricante | Texas Instruments |
|---|---|
| Número de peça | L293D |
| Tensão lógica/E/S | 5 V |
| Tensão de alimentação | 4.5 - 36 V |
| Corrente de saída (por canal) | 600 mA |
| Corrente de pico (por canal) | 1.2 A |
| Orientação sobre a frequência PWM | 20 kHz |
| Limiares de lógica de entrada | 2,5 V (típ.) |
| Queda de tensão / RDF(ligado)/ saturação | 1.5 V (máx.) |
| Limites térmicos | 150 °C (máx.) |
| Pacote | DIP de 16 pinos |
| Notas / variantes | Pode controlar dois motores |
- Certifique-se de que a tensão de alimentação não exceda 36 V.
- Use dissipação de calor adequada ao operar próximo da corrente máxima.
- Sempre conecte o terra do Arduino ao terra do driver do motor.
- Verifique a fiação para evitar conexões com polaridade invertida.
- Use sinais PWM para controlar a velocidade, se necessário em projetos futuros.
Instruções de fiação


Para ligar o controlador de motor L293D ao Arduino, comece conectando a alimentação e o terra. Conecte os pinos 4 e 5 do L293D ao terra. Em seguida, conecte o pino 1 (Vcc1) à saída de 5 V do Arduino. Para Vcc2 (pino 8), conecte-o a uma fonte de alimentação externa, garantindo que ela corresponda à especificação de tensão do motor.
Em seguida, conecte o pino de habilitação (pino 1) ao pino 8 do Arduino para controlar a alimentação do motor. Para as entradas de controle do motor, conecte o pino 2 (1A) do L293D ao pino 2 do Arduino e o pino 7 (2A) ao pino 7 do Arduino. Finalmente, conecte os terminais do motor aos pinos 3 (1Y) e 6 (2Y) do L293D.
Exemplos de Código e Guia Passo a Passo
O código a seguir inicializa os pinos e configura o controle do motor. Os identificadores utilizados incluemP1Apara o primeiro pino de controle do motor eEN12Para o pino de habilitação. A função setup configura os pinos como saídas.
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
}Na função loop, o motor é comandado a girar em ambas as direções com atrasos entre elas. O estado do motor é impresso no monitor serial 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 trecho mostra como controlar a direção de rotação do motor alterando os níveis lógicos enviados paraP1AeP2A. O motor funciona por 3 segundos antes de parar e inverter a direção.
Aqui está como os drivers de meia ponte L293D são usados:
Demonstração / O que esperar
Quando a configuração estiver completa e o código carregado, você deverá observar o motor girando em uma direção por 3 segundos, parando por 2 segundos e então girando na direção oposta por mais 3 segundos. O estado do motor será impresso no monitor serial, confirmando as ações (no vídeo em 12:00).
Erros comuns incluem garantir que a tensão correta seja fornecida ao motor e verificar se as conexões do motor estão corretas. Se o motor não responder, verifique novamente a fiação e as conexões da fonte de alimentação.
Marcas de tempo do vídeo
- 00:00- Introdução
- 02:30- Explicação da fiação
- 05:00- Revisão do código
- 10:00- Demonstração de controle do 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
Coisas que você pode precisar
-
Amazonas
-
AliExpressCompre o IC driver de motor L293D no AliExpress.s.click.aliexpress.com
Recursos e referências
Ainda não há recursos.
Arquivos📁
Nenhum arquivo disponível.