Código de Pesquisa

Código e vídeo do Arduino: Controlador de motor CC L293D (sem controle de velocidade)

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

Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver

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.

pino 1 do L293D na protoboard
pino 1 do L293D na protoboard
L293D_protoboard_ligações_bb

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:

L293D como meia ponte, sentido horário
L293D como meia ponte no sentido horário
L293D como meia ponte (sentido anti-horário)
L293D como meia-ponte sentido anti-horário

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

Imagens

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb
L293D_breadboard_wiring_bb
L293D as halft bridge CCW
L293D as halft bridge CCW
L293D as halft bridge CW
L293D as halft bridge CW
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver
79-Arduino code L293 DC motor driver (Advanced).
Idioma: C++
++
/*
 * 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 
}
80-Arduino code: L293 DC motor driver (Advanced)
Idioma: C++
/*


 * 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

Recursos e referências

Ainda não há recursos.

Arquivos📁

Nenhum arquivo disponível.