03 julho 2014

Controlando motores DC com o Arduino Motor Shield L293D

Aquele seu projeto está ficando grande demais e com muitos motores para controlar ? Talvez seja a hora de partir para um controlador de motores integrado, como o Arduino Motor Shield L293D :

Arduino Motor Shield L293D


Esse shield é compatível com Arduino Uno e Arduino Mega, possui dois chips L293D, cada um composto por 2 pontes H (um conceito que já abordamos no artigo Controle de motor CC com o L293D - Ponte H), além de um CI 74HC595. Tudo isso para controlar até 4 motores DC, 2 Servos (alimentados por 5v) ou 2 motores de passo. Lembrando que a corrente máxima suportada por cada L293D é de 600 mA, com picos de 1.2A.

Nas laterais da placa temos os terminais (com parafusos) para conexão dos motores DC ou motores de passo. Na parte superior esquerda, conectores de 3 pinos permitem a conexão de até 2 servos. Um led na parte central da placa indica não só o funcionamento do shield como também que há alimentação para os motores :

Motor Shield L293D - Detalhe conexões
A tensão de entrada pode variar de 4,5 à 25 Vcc. Para utilização de alimentação externa, não se esqueça de retirar o jumper PWR.

Como a maioria dos shields, você tem à disposição os pinos que sobram quando você não está controlando motores, obviamente, e também alguns pinos que estão sempre disponíveis :

  • Pinos disponíveis : os pinos analógicos de A0 a A5, que também podem ser utilizados como pinos digitais 14 a 19. Também estão disponíveis os pinos 2 e 13.
  • Pinos utilizados para controle de motores DC e motores de passo : 11,3,5 e 6, além dos pinos 4,7, 8 e 12.
  • Pinos utilizados para controle de servo motores : pinos 9 (servo 1) e 10 (servo 2)

Para utilizar os pinos que sobram, você pode soldar uma barra de pinos ao shield nos furos correspondentes, como fizemos no nosso shield :

Motor Shield - Detalhe barra de pinos

Essa é uma visão geral sobre a estrutura desse shield. Para utilizá-lo com o Arduino, precisaremos da biblioteca AFMotor, disponível nesse link.

Quando você descompacta o arquivo, é criada uma pasta chamada adafruit-Adafruit-Motor-Shield-library-4bd21ca. Renomeie essa pasta simplesmente para AFMotor, e coloque-a dentro da pasta LIBRARIES da IDE do seu Arduino.

Se você quiser controlar 2 motores DC de 5 volts, por exemplo, utilize alimentação externa e monte o circuito da seguinte maneira :

Circuito Arduino Motor Shield e motores DC
O programa abaixo gira cada motor em um sentido diferente, e depois de 5 segundos inverte essa rotação. Os principais comandos utilizados são :

motor.setSpeed(velocidade) - Ajusta a velocidade de rotação do motor, podendo ser um valor entre 0 (mínimo) e 255 (máximo)
motor.run(sentido) - Aciona o motor. A variável sentido pode ter o valor FORWARD (move o motor no sentido horário), BACKWARD (sentido inverso/anti-horário) ou RELEASE, que determina a parada do motor :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Programa : Arduino Motor Shield - Controle motores DC
// Autor : Arduino e Cia
 
// carrega a biblioteca AFMotor
#include <AFMotor.h>

// Define o motor1 ligado a conexao 1
AF_DCMotor motor1(1); 
// Define o motor2 ligado a conexao 4
AF_DCMotor motor2(4); 
 
void setup()
{
  // Define a velocidade maxima para os motores 1 e 2
  motor1.setSpeed(255); 
  motor2.setSpeed(255); 

}
 
void loop()
{
  // Aciona o motor 1 no sentido horario
  motor1.run(FORWARD); 
  // Aciona o motor 2 no sentido anti-horario
  motor2.run(BACKWARD); 
 
  // Aguarda 5 segundos
  delay(5000);

  // Desliga os 2 motores
  motor1.run(RELEASE); 
  motor2.run(RELEASE); 

  // Aciona o motor 1 no sentido anti-horario
  motor1.run(BACKWARD);
  // Aciona o motor 2 no sentido horario
  motor2.run(FORWARD); 
 
  // Aguarda 5 segundos
  delay(5000);
  
  // Desliga os 2 motores
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
}

Em um próximo artigo, vamos mostrar como controlar um motor de passo utilizando o Arduino Motor Shield L293D. Até lá !

Atualizado : Controlando motores de passo 28BYJ-48 com o Arduino Motor Shield L293D 
Veja também : Controlando servo motor com o Motor Shield L293D



60 comentários:

  1. Muito bom artigo, me ajudou muito.
    Obrigado

    ResponderExcluir
    Respostas
    1. Valeu Iuri !

      Obrigado por acompanhar o Arduino e Cia. :-)

      Abraço.

      Excluir
    2. a biblioteca AFMotor não está sendo reconhecida na IDE do arduino. O que faço?

      Excluir
  2. tem o codigo para controlar servo motor?

    ResponderExcluir
    Respostas
    1. Bom dia Rafael,

      Ainda não, mas em breve publicarei um post sobre o motor shield com servo motor.

      Abraço !

      Excluir
  3. Amigo você sabe até quantos volts eu posso colocar como alimentação externa do shield? Estou usando 4 pilhas de 1.5v, ou seja 6v, mas não tá dando conta do recado, visto que é um carrinho com 4 motores DCs...

    ResponderExcluir
    Respostas
    1. Bom dia,

      Verifiquei no site do fabricante e a tensão de entrada pode ser de 4,5 à 25 volts. Entretanto, eles não recomendam usar pilhas comuns. Se puder, dê uma olhada nesse artigo, onde falam sobre a alimentação dessa placa :

      https://learn.adafruit.com/adafruit-motor-shield/power-requirements

      Abraço !

      Excluir
  4. Olá, amigo, estou com um problema , estou usando o mesmo shield motor normal, quando uso o iRremote para controlar com o controle, apenas um motor funciona. Poderia me ajudar ?

    Código
    http://shrib.com/6wkL401X

    ResponderExcluir
    Respostas
    1. Boa tarde Edlei,

      Por favor verifique se o seu controle remoto não está usando os mesmos pinos de controles dos motores.

      Abraço !

      Excluir
    2. tentei um código parecido e apresenta "interferencia" ao utilizar os controles laterais. uso as portas analógicas, ou seja, estão totalmente livre.

      Excluir
  5. Esse código faz com que os dois motores girem ao mesmo tempo ? Estou fazendo uma janela automatizada como tcc mas estou tendo dificuldades de girar os dois motores ao mesmo tempo.

    ResponderExcluir
    Respostas
    1. Boa tarde Henrique,

      Faz sim, talvez você precise ajustar alguma coisa, dependendo do seu motor, mas vai servir para o seu projeto.

      Abraço !

      Excluir
  6. Estou com um problema que apenas a porta M2 não funciona nesse shield, o que poderia ser?
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde Wilson,

      Se você já testou as outras 3 portas e o problema permanece, provavelmente você tem algum problema no shield.

      De qualquer forma, se puder me envie o código que você está usando, assim eu testo no shield que tenho aqui.

      Abraço !

      Excluir
  7. Boa tarde
    Comprei um motor shield para utilizar com um arduino leonardo. Quando mando compilar o programa da um erro informando que não é compatível com o leonardo. Alguém sabe se realmente a motor shield l293d não é compativel com esta placa?

    ResponderExcluir
    Respostas
    1. Bom dia Andre,

      As informações que eu tenho é que esse shield é compatível apenas com Uno e Mega, ainda não tive oportunidade de testar com o Leonardo.

      Abraço !

      Excluir
    2. Tengo el mismo problema. El mensaje es #error "This chip is not supported!".
      Si alguien sabe de alguna solución a este problema, no deje de comunicarlo.

      Excluir
  8. oi estou precisando de uma placa dessa que rode um motor de parafusadeira

    ResponderExcluir
    Respostas
    1. Boa noite João,

      Veja se o motor não excede as especificações da placa (máximo de 600 mA).

      Abraço !

      Excluir
  9. Olá, muito bom seu blog, ele está me ajudando muito no meu TCC de Eng. Elétrica. Tenho uma dúvida, a ponte é acionada por meio de um PWM? Abri a biblioteca e só não entendi muito bem como se dá o controle da velocidade do motor. Muito obrigado.

    ResponderExcluir
    Respostas
    1. Oi Cassiano,

      Obrigado. Por favor dê uma olhada nessa página, onde eles detalham um pouco mais a biblioteca :

      https://learn.adafruit.com/afmotor-library-reference/af-dcmotor

      Abraço !

      Excluir
  10. Olá, abri a biblioteca da ponteH, porém não entendi muito como se dá o controle de velocidade do motor. Eles são acionados por PWM? Obrigado.

    ResponderExcluir
  11. Respostas
    1. Boa noite João,

      Esse shield já vem pronto com os furos para soldar uma barra de pinos. Basta seguir o esquema que fizemos acima, utilizando os pinos de A0 a A5.

      Abraço !

      Excluir
  12. ola boa tarde, aparece esse erro abaixo oque eu faço?

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
    sketch_mar27a:8: error: 'AF_DCMotor' does not name a type
    sketch_mar27a:10: error: 'AF_DCMotor' does not name a type
    sketch_mar27a.ino: In function 'void setup()':
    sketch_mar27a:15: error: 'motor1' was not declared in this scope
    sketch_mar27a:16: error: 'motor2' was not declared in this scope
    sketch_mar27a.ino: In function 'void loop()':
    sketch_mar27a:23: error: 'motor1' was not declared in this scope
    sketch_mar27a:23: error: 'FORWARD' was not declared in this scope
    sketch_mar27a:25: error: 'motor2' was not declared in this scope
    sketch_mar27a:25: error: 'BACKWARD' was not declared in this scope
    sketch_mar27a:31: error: 'RELEASE' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa tarde Gabriel,

      Me parece algum erro na instalação da biblioteca AF_Motor. Por favor dê uma olhada na IDE para verificar se a biblioteca foi carregada normalmente.

      Abraço !

      Excluir
  13. Otimo post, parabens!!

    A questão e que estou montando um pequeno projeto com Arduíno UNO e o motor shield L293d.
    A questão é que o conforme fala o data sheet do shield quando usamos todas as saidas de motor/servo as portas 13,12,11,10 entre outras ficam ocupadas, e agora preciso colocar um controle de PS2 e não tenho portas digitais necessárias para implementa-lo (13,12,11), Sera que posso usar as portas analógicas do Arduíno para tal finalidade, ou existe alguma outra alternativa?

    Agradeço a ajuda!! Valew

    Por favor preciso de ajuda.. Very Happy Very Happy Very Happy


    Estava com o mesmo problema e q

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não sei como você está ligando o controle PS2, mas talvez você consiga alterar a biblioteca para utilizar outras portas do Arduino.

      Abraço.

      Excluir
  14. amigo com o hago para controlar un proyecto con los 4 motores del motor shield l293d por medio de una programa android ,,,, k programa utilizo y k codigo para el IDE de arduino

    ResponderExcluir
  15. estou com problemas aparecendo a seguinte mensagem:
    AF_DCMotor does not name a type.
    Como posso corrigir?

    ResponderExcluir
    Respostas
    1. Boa tarde Panesi,

      Me parece algum erro na instalação da biblioteca.

      Abraço!

      Excluir
  16. Ola Tudo bem? Gostaria de tirar algumas dúvidas referente a programação...você cobra quanto na consultoria via skype?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Por favor entre em contato utilizando o formulário de contato no lado direito da página. Conversamos por email.

      Abraço!

      Excluir
  17. BOM DIA, ESTOU PLANEJANDO FAZER UM DRONE, QUAL A SHIELD QUE DEVO USAR?

    ResponderExcluir
    Respostas
    1. Boa noite Rogério,

      Que tipo de motor você vai usar, e quantos ?

      Abraço!

      Excluir
  18. Ola amigo, meu nome é Carlos, estou usando 2 motores DC 6V com caixa de reducao, ao medir a tensao de saida para os motores verifico somente 1.7V com a velocidade no MAX, 255, Meu carro esta um pouco devagar, e por causa do chassi adaptado o peso nao esta taoooo leve como deveria mas tambem nao esta pesado, Ha como aumentar a forca de saida para meus 2 motores e aumentar a velocidade do carro?

    ResponderExcluir
    Respostas
    1. Boa noite Carlos,

      Que tipo de fonte de alimentação você está usando para o projeto ?

      Abraço!

      Excluir
  19. Olá, eu tenho um suporte para pilhas de 6v que encaixa no plug P4 do Arduino e gostaria de saber se usando esse eu deveria manter o jumper ou retira-lo também?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Pode manter o jumper. é como se vc estivesse alimentando o Arduino pela USB.

      Abraço!

      Excluir
  20. Boa noite! Estou precisando de um esquema que eu possa usar 2 motores de passo de floppy disk no meu shield l293, e controlar a velocidade e ponto de início e fim. Alguém disposto em me ajudar. Muito obrigado.

    ResponderExcluir
  21. Boa tarde,
    primeiramente, obrigado pelo post, me ajudou muito!
    gostaria de saber uma coisa, esse shield ocupa todas as portas do arduino, ou seja eu não poderia conectar um outro sensor? por exemplo um sensor ultrassônico?

    Muito obrigado!

    ResponderExcluir
    Respostas
    1. Oi Giordano,

      Você consegue utilizar sensores sim, mas vai ter que soldar uma barra de pinos no shield para ficar mais fácil.

      Abraço!

      Excluir
  22. Se usar um fonte 9V, 0,6A, para alimentar o Arduino, preciso retirar o jumper?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Não. Você só precisa retirar o jumper se utilizar alimentação externa diretamente no shield.

      Abraço!

      Excluir
  23. Bom dia,

    Estou montando um projeto com a shield l293 e vou precisar usar todos os pinos digitais que sobram. Tanto os pinos de 14 à 19 como os pinos 2 e 13. Gostaria de saber como acessar os pinos 2 e 13. Obrigada

    ResponderExcluir
  24. Olá,

    Outra dúvida que tenho...
    Vou utilizar apenas dois motores e um servo motor.
    Sendo assim, posso utilizar os pinos correspondentes aos outros dois motores e do servo não utilizados para conectar outros componentes?
    Obrigada.

    ResponderExcluir
  25. Por favor me dê uma ajuda, estou utilizando 4 motores DC 3-6v com caixa de redução 48:1 e tração nas 4 rodas 4WD. Porém se coloco todos motores com a mesma velocidade, por exemplo 50, o que está no M1, roda bem os outros rodam, mas cada um com velocidade cada vez menor. Uso uma bateria lipo de 11.1V de 3 cel. da tunirgy de 2200mAh... Estou alimentando o shield e o arduino com ela... Já tentei alimentar somente os motores e colocar no teste o arduino na tomada, e fica da mesma forma. Achei que o problema poderia ser nos motores, troquei as posições deles no M1 ao M4, e a velocidade diminue conforma vai do M1 para o M4. Meu teste foi simples, colocando no código velocidade 50 para todos motores e forward para todos, testei com várias velocidades e ocorre a mesma coisa. Obrigado.

    ResponderExcluir
  26. Olá. O post é muito bom e muito explicativo. Tenho certeza de que já ajudou muitas pessoas. Vc tem as instruções e o código para controlar esse dispositibo via bluetooth?

    ResponderExcluir
    Respostas
    1. Oi Eduardo,

      Ainda não tenho, mas planejo lançar algo em breve.

      Abraço!

      Excluir
  27. Boa tarde, estou precisando de uma ajuda. Tenho um motor DC 48V, consigo controlar ele com o Arduino ?

    ResponderExcluir
  28. Boa noite,

    Com este shield tem como acender uma fita de LED simulando o amanhecer e anoitecer?

    Att,

    Sergio Junior

    ResponderExcluir
    Respostas
    1. Oi Sérgio,

      Nunca tentei, mas se forem leds endereçáveis, você não vai nem precisar de shield. :)

      Abraço!

      Excluir
  29. Boa noite, gostaria de saber como alimentar o meu projeto, ele tem 2 motores DC de 3V com 150mA ou 6V 200mA, um servo MG9S 4.8V até 7V, um sensor HC-SR04 de 5V 2mA, um Bluetooth HC-05 3.3V 35mA.
    Eu conectei os dois motores juntamente com o servo a um motor shield L293D, e estou alimentando ele com 6V usando 4 pilhas AA, e alimentando o arduino pelo conector P4 com uma bateria 9V, mas os motores DC de 3V não estão tendo força suficiente para fazer o robo andar.
    Como faço para resolver essa questão ?

    Abraço

    ResponderExcluir
  30. Olá bom dia. Queria saber como posso colocar e se é possivel colocar um sensor de cores, motor shield, sensor ultrasonico, dois sensores de refletancia em um unicio só Arduino Mega.

    ResponderExcluir
  31. Pessoal, estou tentando usar o AFMotor para o motor shield mas esta dando que .github é falsa
    alguém pode me ajudar?

    ResponderExcluir
    Respostas
    1. Oi Ana,

      Essa mensagem de .github falsa (ou inválida) é normal. Você pode apagar a pasta .github que vêm com a biblioteca, pois ela não é usada.

      Abraço!

      Excluir
  32. Boa tarde,
    acho que estou com problemas para instalar a biblioteca precisava de ajuda

    ResponderExcluir
    Respostas
    1. Baixa a nova IDE(programa) do Arduino e la na barra Sketch, incluir biblioteca, gerenciar biblioteca, na próxima janela te a opção: redefinir buscar,só digitar o nome da biblioteca que quer que o aplicativo vai achar com a ajuda da net, na descrição clica em cima da biblioteca e depois em instalar que o programa vai fazer automaticamente, depois só fechar e abrir novamente o programa q vai esta lá. abraços.

      Excluir