Vídeo: Tutorial Motor Shield L293D e Arduino 19

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.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

19 Comentários

  1. Amigo, Boa tarde!
    Como conectar o motor shield L293D e o módulo bluetooth HC – 06 no arduino UNO?
    pergunto pois o shield ele tampa as entradas de conexão do arduino (1 e 2).

    1. Olá,

      Você pode conectar como neste exemplo aqui: https://create.arduino.cc/projecthub/isum-sathmira/bluetooth-car-6dab7a

      Abraços!
      Vinícius – Equipe MakerHero

  2. Opa!! A fonte de alimentação qual foi as especificações para utilizar? Estou perguntando porque comecei a utilizar arduinos uno
    com este shield e utilizei uma fonte de 12v com 2A para controlar dois motores de passo (JK42HM34-1334) e o CI L293D não suportou. Qual fonte de alimentação eu devo utilizar para controlar estes dois motores?

    1. Olá Austim,

      Em teoria era pra ter suportado. Você desconectou o jumper PWR?

      Abraço!
      Rosana – Equipe MakerHero

      1. Bom dia Rosana.
        Desconectei sim, o jumper. Por isso que não entendi. Também reparei que usando uma fonte de 12 V e 1 A para controlar apenas um dos motores de passo o CI está ficando bem quente. O problema é que não tenho fonte com 1,5 A para utilizar apenas de 1 ou 2 A.

        1. Olá Austim,

          Com a fonte de 12V/1A e os dois motores funcionou?

          Abraço!
          Rosana – Equipe MakerHero

          1. Sim e não. Quando ponho apenas para controlar apenas 1 ele funciona perfeito, mexo no joystick para controle de direção e rotação e funciona tanto para o motor1 e motor2. Mas quando habilito o código para controlar cada motor por um eixo do joystick os motores funcionam sozinho e juntos rodando em extrema baixa rotação.
            Na dúvida, testei uma fonte que tenho de 9V e 500mA para ver ser um motor funcionava mas ficou igual se eu utiliza-se uma fonte de 12V com 1A para os dois motores.

          2. Olá Austim,

            O ideal seria você testar usando uma fonte ajustável. Acredito que seria a melhor maneira pra ver a tensão e corrente ideal.

            Abraço!
            Rosana – Equipe MakerHero

  3. Meu arduino nao liga quando ponho a shield
    Oque eu faço ?

  4. Boa noite pessoal da MakerHero, tudo certo?

    Estou com umas duvidas rápidas com meu Motor Shield L293D. Comprei ele, está novinho. Estou com um projeto para controlar uma miniatura que construí (pra frente, pra trás, pra direita e pra esquerda). Algo simples, controlado por controle remoto (ps2). Fiz todas as ligações corretas, revi, revi de novo (haha) e por ai vai. Surgiu dois problemas:

    1) O motor quando peço para se movimentar (independente se é pra andar pra frente ou virar pra direita) ele dá uns tranquinhos, umas “derrapadas”. Creio eu que seja por causa de um delay que tenho na minha programação (ele é necessário, infelizmente). Não sei se é isso ou problema no shield, mas se for, gostaria de saber um conselho pra não ocorrer mais esses trancos.

    2) Minha porta M2 não dá sinal. O shield é novo, a porta M1 funciona normal. Quando vou testar a segunda porta (apenas ela, sem ter um motor no M1), ele não faz nada no motor, mesmo dando o comando. Será que o shield precisa que as portas anteriores estejam preenchidas para funcionar, por exemplo, se eu quiser utilizar a M3, preciso estar com a M1 e M2 preenchidas? Ou meu shield veio com problema?

    Tenho essas duvidas simples para meu projeto. Não “inventei nada”, apenas fiz o basico, mas infelizmente, ocorreram esses problemas e preciso de uma ajuda.

    Desde já agradeço

    João Melo

  5. Bom post, mas tenho umas dúvidas que não foram sanadas nele:
    Posso ligar dois motores com tensões diferentes (1 servo de 6v e 1dc de 12v) para uma mesma alimentação (bateria de 12v) externa com essa ponte h?
    Gostaria de aproveitar os pinos analógicos e os pinos 5v e gnd, no mesmo lado das portas analógicas. é possível?

  6. Oi, queria saber qual seria o código pra um desaceleração gradativa do motor

  7. 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?

  8. 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

    1. Wagner ou outra pessoa do blog poderia tirar a dúvida do cidadão? A dúvida dele pode ser a de muitos, inclusive a minha. Grato pela atenção

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

    1. Bom dia Eladio,

      Temos vários displays disponíveis em nossa loja. Dê uma olhada nesta categoria, por favor: https://www.makerhero.com/display-ct-41d86

      Abraço!

      Adilson – Equipe MakerHero

Trackbacks and Pingbacks

  1. […] post anterior sobre o assunto já exploramos a utilização do Motor Shield L293D com a biblioteca AF Motor e já conhecemos também um pouco do seu hardware. Hoje o utilizaremos sem a biblioteca. Para […]