Código de Pesquisa

Controlando um motor DC usando um driver de motor L293D com PWM Arduino

Controlando um motor DC usando um driver de motor L293D com PWM Arduino

Este projeto demonstra como controlar a velocidade e a direção de um motor DC usando um chip driver de motor L293D e as capacidades de Modulação por Largura de Pulso (PWM) do Arduino. Esta configuração permite um controle preciso do motor, tornando-a adequada para uma variedade de aplicações.

Aqui estão algumas ideias de projetos usando esta configuração:

  • Robótica:Controle o movimento das rodas de um pequeno robô.
  • Dispositivos automatizados:Crie cortinas, persianas ou uma pequena esteira transportadora automáticas.
  • Controle do ventilador:Ajuste a velocidade de um ventilador de refrigeração com base nas leituras de temperatura.
  • Rastreadores solares:Posicione pequenos painéis solares para seguir o sol ao longo do dia.

Hardware/Componentes

  • Arduino Uno (ou placa compatível)
  • IC de Driver de Motor L293D
  • Motor CC (classificado para os limites de tensão e corrente do L293D, até 600mA)
  • Fonte de Alimentação de 9V (para o motor)
  • Fios de conexão
  • Placa de protótipos (recomendado)

Guia de Fiação

O chip L293D atua como uma interface entre o Arduino e o motor DC. Ele permite que o Arduino controle tanto a velocidade quanto a direção do motor. O chip requer uma fonte de alimentação separada para o motor porque o Arduino não pode fornecer corrente suficiente para a maioria dos motores. (no vídeo em 04:04)

%%FAROLAMENTO%%

Explicação do Código

O código do Arduino controla o driver L293D, que por sua vez controla o motor DC. O código usa PWM para variar a velocidade do motor e sinais digitais para mudar a direção.

Aqui estão os principais parâmetros configuráveis no código:


#define P1A 10 // Arduino pin connected to L293D input 1A
#define P2A 11 // Arduino pin connected to L293D input 2A
#define EN12 9 // Arduino pin connected to L293D enable pin (1,2EN)

const int speedStep = 15; // Increment for speed changes
const int speedDelay = 1000; // Delay between speed steps (in milliseconds)

OL293D()a função controla a direção e a velocidade do motor. 'L' ajusta o motor para girar no sentido horário, 'R' ajusta-o para o sentido anti-horário. Ospdo parâmetro controla a velocidade (0-255) eenativa (1) ou desativa (0) o motor. (no vídeo às 09:24)


void L293D(char dir,int spd, int en)
{
  if(dir =='L') // Clockwise rotation
  {
    // ...
    analogWrite(P1A,spd); // Set speed using PWM
    digitalWrite(P2A,LOW); 
  }else{ // Counter-clockwise rotation
    // ...
    digitalWrite(P1A,LOW);
    analogWrite(P2A,spd); // Set speed using PWM
  }
}

Projeto ao Vivo/Demonstração

O vídeo demonstra o projeto em ação, mostrando as mudanças de velocidade e direção do motor. As leituras do osciloscópio visualizam os sinais PWM que controlam o motor. (no vídeo às 11:07)

Capítulos

  • [00:00] Introdução ao Controle de Motor DC com L293D
  • [00:30] Demonstração e Explicação do Projeto
  • [01:12] Visão geral do driver de motor L293D
  • [02:08] Especificações do Motor CC
  • [02:30] Explicação do Datasheet L293D
  • [04:40] Explicação e Demonstração da Fiação
  • [07:05] Explicação do Código Arduino
  • [11:07] Demonstração do Projeto e Leituras do Osciloscópio
144-Arduino source for L293D motor driver (loop)
Idioma: C++
/*
 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad S. for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  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

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811

 for(int speed=0; speed<=255; speed +=speedStep)
 {
  L293D('L',speed, 0);// 
  delay(speedDelay);// delay between each step
 }

  delay(50);// 50 millisecond delay
  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise direction
 *  or 'R' for counter-clockwise direction
 *  en is an integer: 1 to rotate, 0 to stop
 *  spd is the speed value from 0 to 255
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);// Disable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep this pin LOW
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end
145-Source for a simple L293D motor controller using Arduino (CW, CCW, and STOP)
Idioma: C++
++
/*

 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.
 * This code will control the motor with different directions and speed.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad Shamshiri for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada.
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  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

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811


  L293D('L',255, 1);// maximum speed to the LEFT
  delay(3000);// wait for 3 seconds

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('L',127, 1);// half speed to the LEFT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('R',90, 1);// slow to the RIGHT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise (CW) direction
 *  or 'R' for counter-clockwise (CCW) direction.
 *  en is an integer: 1 to rotate, 0 to stop.
 *  spd is the speed value from 0 to 255.
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);//enable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep it LOW P1A
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end

Arquivos📁

Nenhum arquivo disponível.