Código de Pesquisa

Aula 95: Usando um Escudo para Motor DC L293D | Curso de Arduino Passo a Passo

Aula 95: Usando um Escudo para Motor DC L293D | Curso de Arduino Passo a Passo

Neste tutorial, exploraremos como controlar quatro motores DC usando o escudo de motor L293D com Arduino. Esta configuração é particularmente útil para aplicações de robótica, como a construção de um carro robô, onde o controle preciso do motor é essencial. Ao final desta lição, você terá um modelo funcional que pode operar múltiplos motores simultaneamente.

O escudo de motor L293D simplifica o processo de cabeamento e permite que você controle os motores com apenas algumas conexões. Você aprenderá a conectar o escudo ao Arduino, configurar o código e executar comandos de controle do motor de forma eficaz. Para uma explicação mais visual, você pode consultar o vídeo em timestamps específicos para detalhes de cabeamento e codificação (no vídeo em mm:ss).

Hardware Explicado

O componente principal deste projeto é o escudo de motor L293D, que é um driver de motor em ponte H quádruplo. Isso significa que ele pode controlar dois motores em ambas as direções, permitindo controle total sobre a rotação do motor. O escudo conecta-se diretamente ao Arduino, facilitando a gestão de energia e sinais de controle sem fiação desorganizada.

Cada chip L293D pode suportar até 600 mA de corrente por canal e opera em tensões que variam de 4,5V a 36V. Essa faixa o torna adequado para uma variedade de motores CC. Além disso, o shield possui um jumper que permite alimentar tanto os motores quanto o Arduino a partir de uma única fonte de alimentação externa.

Detalhes da Ficha Técnica

Fabricante Texas Instruments
Número da peça L293D
Tensão lógica/IO 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 1 kHz - 20 kHz
Limites de lógica de entrada 2 V min (alto), 0,8 V max (baixo)
Queda de tensão / RDS(on)/ saturação 1,5 V max
Limites térmicos 150 °C
Pacote 16-DIP
Notas / variantes Configuração de Ponte H Dupla

  • Certifique-se de que os motores não excedam 600 mA para prevenir danos.
  • Use dissipadores de calor adequados para aplicações de alta corrente.
  • Conecte a fonte externa antes de ligar o Arduino.
  • Verifique a colocação do jumper para alimentar o shield e o Arduino.
  • Teste a direção do motor trocando as conexões, se necessário.

Instruções de Fiação

L293d_Shield_wiring

Comece conectando o escudo de motor L293D ao seu Arduino Uno ou Mega. Alinhe os pinos do escudo com os conectores do Arduino e pressione firmemente. Em seguida, conecte seus motores DC aos terminais identificados.M1,M2,M3, eM4no escudo. Cada motor requerirá dois terminais, então certifique-se de conectá-los corretamente para a direção correta de rotação.

Para a alimentação, conecte uma bateria externa ou uma fonte de alimentação aos terminais de entrada de energia do escudo, garantindo que a voltagem fique na faixa de 4,5V a 36V. Não se esqueça de conectar o jumper no escudo para permitir que a energia flua para o Arduino. Por fim, conecte o terra da fonte de alimentação ao pino de terra do Arduino para completar o circuito.

Instale a biblioteca necessária

clique no ícone da Biblioteca e procure por:Adafruit Motor Sheild Librarye clique em Instalar para instalá-lo.

Exemplos de Código e Passo a Passo

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

No código, inicializamos quatro objetos de motor:motor1,motor2,motor3, emotor4. Cada motor é atribuído a um número de canal correspondente às conexões de terminais do escudo do motor. Isso nos permite controlar cada motor individualmente.

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

Osetup()a função inicializa a comunicação serial, permitindo-nos enviar e receber mensagens do Arduino IDE. Isso é útil para depuração e monitoramento do processo de controle do motor.

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

Para controlar os motores, ajustamos a velocidade usando osetSpeed()método, que recebe um valor entre 0 e 255. Orun()método então inicia o motor na direção especificada, comoFORWARDouBACKWARDA velocidade pode ser ajustada dinamicamente conforme necessário.

Demonstração / O que Esperar

Uma vez que tudo esteja conectado e o código esteja carregado, você deve ver os motores girarem de acordo com os comandos no código. Inicialmente, um motor será ligado, seguido pelos outros em sequência, cada um funcionando por uma duração definida. Se os motores não operarem como esperado, verifique sua fiação, certifique-se de que o jumper está conectado e verifique se a fonte de energia é adequada (no vídeo em mm:ss).

Timestamps de Vídeo

  • 00:00 Introdução
  • 03:00 Ficha técnica para L293D
  • 03:56 Fiação explicada
  • 07:21 Código e biblioteca
  • 13:51 Demonstração controlando 4 motores

Imagens

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 e referências

Arquivos📁

Nenhum arquivo disponível.