Vídeo: Tutorial Motor Shield L293D e Arduino

Vídeo: Tutorial Motor Shield L293D e Arduino

O sistema embarcado Arduino apresenta como principal componente o microcontrolador Atmega 328P. Segundo o datasheet do fabricante, este pode drenar cargas de saída de até 40mA, o que torna inviável o controle direto da maioria dos motores DC.

Por este motivo, torna-se necessária a utilização de driver para motores. Existem muitos Shields no mercado prontos para utilização com Arduino, um deles é o Motor Shield L293D, que permite o controle de até 4 motores DC de forma independente, além de possibilitar o controle de servo motores e motores de passo:

Hardware Motor Shield L293D

O hardware deste Shield consiste basicamente em dois circuitos integrados L293D (ponte H dupla com diodos de proteção internos) e um registrador de deslocamento da família TTL, o 74HC595. Na figura abaixo está explícito o diagrama esquemático do Shield. Você pode ter mais informações sobre o funcionamento da ponte H no post Controle Motor DC 12V com Arduino Motor Shield L293D.

Esquemático Motor Shield

De acordo com o byte configurado na saída do registrador, controla-se os motores DC. A ligação com Arduino é bastante simples, visto que o mesmo pode ser encaixado em cima do sistema embarcado. Vale salientar que o Shield ainda permite a alimentação externa exclusiva para os motores (aconselhável para evitar erros de lógica). Se utilizar fonte externa, desconecte o jumper PWR. Confira na Figura 3 a ligação utilizada para o projeto de hoje.

Circuito Motor Shield L293D

Programa controle de motor DC com Motor Shield L293D

Apoiando-se a uma biblioteca free source, pode-se facilmente controlar motores DC utilizando este Shield e o Arduino. No exemplo de hoje traremos o controle de um único motor, que pela análise do código pode ser expandido para o controle de mais motores facilmente.

O Box 1 traz o código proposto. O mesmo está ricamente comentado para maior compreensão.

/*
   Aula 65 - Controle de Motor com Motor Shield
    
   Autor: Eng. Wagner Rambo  Data: Maio de 2016
*/
 
// --- Bibliotecas Auxiliares ---
#include <AFMotor.h> //Inclui biblioteca AF Motor

// --- Seleção dos Motores ---
AF_DCMotor motor1(1); //Seleção do Motor 1

// --- Variáveis Globais ---
unsigned char velocidade1 = 0x00; //Armazena a velocidade do motor1 (8 bits)
 
// --- Configurações Iniciais ---
void setup()
{
   //A biblioteca se encarrega de setar entradas e saídas!

} //end setup
 
// --- Loop Infinito ---
void loop()
{
      velocidade1 = 0xFF;           //Velocidade recebe o valor máximo
      motor1.setSpeed(velocidade1); //Seleciona velocidade atual
      motor1.run(FORWARD);          //Movimenta motor no sentido horário
      delay(2000);                  //Mantém por 2 segundos
      
      velocidade1 = 0x00;           //Velocidade recebe o valor mínimo
      motor1.setSpeed(velocidade1); //Seleciona velocidade atual
      motor1.run(RELEASE);          //Motor parado
      delay(2000);                  //Mantém por 2 segundos
      
      
      velocidade1 = 0xFF;           //Velocidade recebe o valor máximo
      motor1.setSpeed(velocidade1); //Seleciona velocidade atual
      motor1.run(BACKWARD);         //Movimenta motor no sentido anti-horário
      delay(2000);                  //Mantém por 2 segundos
      
      velocidade1 = 0x00;           //Velocidade recebe o valor mínimo
      motor1.setSpeed(velocidade1); //Seleciona velocidade atual
      motor1.run(RELEASE);          //Motor parado
      delay(2000);                  //Mantém por 2 segundos
      
      // -- Controle Gradativo de Aceleração --
      for(velocidade1 = 0x00; velocidade1<255; velocidade1++)
      {
         motor1.setSpeed(velocidade1); //Atualiza velocidade
         motor1.run(FORWARD);          //Motor gira em sentido horário
         delay(10);                    //Taxa de atualização de 10 ms
      
      } //end for
      
      velocidade1 = 0x00;           //Velocidade recebe o valor mínimo
      motor1.setSpeed(velocidade1); //Seleciona velocidade atual
      motor1.run(RELEASE);          //Motor parado
      delay(2000);                  //Mantém por 2 segundos
      
      

} //end loop

Antes de compilar o Sketch, baixe a biblioteca AF Motor (disponível juntamente com os demais arquivos deste projeto), descompacte a pasta, cole na pasta Librares do Arduino, e reinicie a IDE.

Para baixar todos arquivos utilizados no projeto, acesse este link.

1
Vídeo: Tutorial Motor Shield L293D e Arduino
4 votos, 5.00 classificação média (100% pontuação)

Wagner Rambo é bacharel em Engenharia Eletrônica, Computadores e Telecomunicações, e colaborador do site FILIPEFLOP.

Compartilhe este Post

6 Comentários

  1. João Almeida - 16 de setembro de 2016

    Amigo, na foto do shield, a alimentação está na Sequência “M+ GND”. Seu desenho esquemático não estaria invertido ? O vermelho não deve entrar no M+ da placa?

  2. André Lucas Novaes - 16 de setembro de 2016

    Boa tarde

    Recentemente adquiri um Motor Drive Shield L293d
    Você poderia me ajudar num questionamento?

    Vi as especificações dele e vi que poderia entrar com uma tensão de até 36v, e que cada CI entrega 0,6A. Coloquei um motor PM55L-048-HHD0 de 24v que tem como pico 0,6A também.
    Em voltagens baixas o motor ficou somente vibrando, mas assim que passou de 20v ele girou e 5 segundos depois os capacitores explodiram. Você poderia me ajudar a entender o que aconteceu?
    Lembrando que me certifiquei da polaridade da minha fonte.

    Você indicaria alguma outra Shield ou uma outra solução? Obrigado

  3. Eladio Cesar Pinto - 15 de junho de 2016

    Se pode utilizar juntamente com o shild motor, o display LCD também vendido por vocês ?

Deixe uma resposta