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:
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:
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:
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:
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:
// 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
Muito bom artigo, me ajudou muito.
Obrigado
Valeu Iuri !
Obrigado por acompanhar o Arduino e Cia. 🙂
Abraço.
a biblioteca AFMotor não está sendo reconhecida na IDE do arduino. O que faço?
tem o codigo para controlar servo motor?
Bom dia Rafael,
Ainda não, mas em breve publicarei um post sobre o motor shield com servo motor.
Abraço !
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…
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 !
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
Boa tarde Edlei,
Por favor verifique se o seu controle remoto não está usando os mesmos pinos de controles dos motores.
Abraço !
tentei um código parecido e apresenta "interferencia" ao utilizar os controles laterais. uso as portas analógicas, ou seja, estão totalmente livre.
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.
Boa tarde Henrique,
Faz sim, talvez você precise ajustar alguma coisa, dependendo do seu motor, mas vai servir para o seu projeto.
Abraço !
Estou com um problema que apenas a porta M2 não funciona nesse shield, o que poderia ser?
Obrigado
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 !
Olá, tudo bem.
Estou com um problema:
No meu shield, o M1 só faz o motor DC girar para um sentido. Já testei o drive que controla a entrada do M1, já testei o registrador, a única diferença é a voltagem na entrada do drive que faz o motor girar na direção oposta, a entrada que funciona (pino 7 do drive) a voltagem é 4,8v, já na entrada com problema (pino 2 do drive) a voltagem é 3,2v no máximo, testei tudo q podia mas não vi onde se esconde o problema
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?
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 !
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.
oi estou precisando de uma placa dessa que rode um motor de parafusadeira
Boa noite João,
Veja se o motor não excede as especificações da placa (máximo de 600 mA).
Abraço !
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.
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 !
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.
Como soldar a barra de pinos no shield?
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 !
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
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 !
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
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.
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
estou com problemas aparecendo a seguinte mensagem:
AF_DCMotor does not name a type.
Como posso corrigir?
Boa tarde Panesi,
Me parece algum erro na instalação da biblioteca.
Abraço!
Ola Tudo bem? Gostaria de tirar algumas dúvidas referente a programação…você cobra quanto na consultoria via skype?
Boa noite,
Por favor entre em contato utilizando o formulário de contato no lado direito da página. Conversamos por email.
Abraço!
Muito BOm !
BOM DIA, ESTOU PLANEJANDO FAZER UM DRONE, QUAL A SHIELD QUE DEVO USAR?
Boa noite Rogério,
Que tipo de motor você vai usar, e quantos ?
Abraço!
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?
Boa noite Carlos,
Que tipo de fonte de alimentação você está usando para o projeto ?
Abraço!
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?
Bom dia,
Pode manter o jumper. é como se vc estivesse alimentando o Arduino pela USB.
Abraço!
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.
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!
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!
Obrigado pela atenção!
Sucesso!
Se usar um fonte 9V, 0,6A, para alimentar o Arduino, preciso retirar o jumper?
Bom dia,
Não. Você só precisa retirar o jumper se utilizar alimentação externa diretamente no shield.
Abraço!
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
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.
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.
Conseguiu resolver seu problema ? estou com um motor shield de NodeMCU e queria alimentar ele com uma lipo 11.1v só que parece que ele só aceita 9v pra carregar a placa, vc tb passou por isso ?
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?
Oi Eduardo,
Ainda não tenho, mas planejo lançar algo em breve.
Abraço!
Boa tarde, estou precisando de uma ajuda. Tenho um motor DC 48V, consigo controlar ele com o Arduino ?
Boa noite,
Com este shield tem como acender uma fita de LED simulando o amanhecer e anoitecer?
Att,
Sergio Junior
Oi Sérgio,
Nunca tentei, mas se forem leds endereçáveis, você não vai nem precisar de shield. 🙂
Abraço!
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
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.
Pessoal, estou tentando usar o AFMotor para o motor shield mas esta dando que .github é falsa
alguém pode me ajudar?
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!
Boa tarde,
acho que estou com problemas para instalar a biblioteca precisava de ajuda
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.
Boa tarde amigos . tem como ligar essa placa em um recepitor de radio rc ??
Boa noite, eu tenho uma fonte de notebook 19V 2,75A, posso alimentar esse shield com ela?
Tenho 3 motores dc para ligar e pretendo utilizar este shield 293d, porém preciso também conectar um display 16×2 onde utiliza os pinos 2-5 e 12 e 11 do arduino mega ou seja não será possível ligar os dois ( o display e o Shield) ja que o shiel d pelo q vc disse usa os mesmos pinos???
Olá..
Amigos alguém pode me mostar mostrar um código que utilize 3 motores que funcionam simultâneamnete e pelomenos 1 sensor para dealiga-los quando a temperatura estiver muito alta.
E aí, pessoal, talvez eu esteja comum problema.
Quero alimentar de forma independente o shield e o arduino. Para isso, retirei o jumper. Porém, quando ligo o arduino no computador pelo USB, o LED do shield acende. Imagino que isso não deveria acontecer, então fiquei com medo de ligar a fonte DC no shield para testar e acabar danificando o arduino.
O LED acendia fraco, é soh por girar manualmente o motor, sua intensidade mudava (lembrando que a única fonte de energia era o USB do arduino, com o jumper do shield desligado).
Alguém sabe dizer se isso eh mesmo um problema?
Olá, pessoal. Acredito estar com um problema.
Quero alimentar de forma independente o Arduino e o Shield. Para isso, retirei o jumper do shield e liguei o Arduino no USB do computador. Porém, o LED do shield acende, fraco mas acende. Se eu girar o motor manualmente, o LED muda de intensidade.
Isso deveria acontecer? Como não liguei nada alimentando o shield, imagino que esse LED deveria ficar apagado.
Não liguei as pilhas no shield com medo de queimar algum componente. Alguém sabe dizer se realmente tenho um problema?
Boa tarde amigos. Vcs sabem me dizer se da pra conectar essa placa em um recepitor de radio rc ?
Bom dia. Tenho um arduino uno e motor shield l293d e gostaria de saber como controlar 2 motores utilizando joystick.
Preciso controlar 8 motores, a princípio pensei em utilizar dois Arduinos Uno e dois motor shield L293D. Como faço para estabelecer comunicação entre os Arduinos se os pinos 0 e 1 são utilizados pelos shields?
Oi Oswaldo,
Você pode fazer uma comunicação por I2C, pro exemplo (pinos A4 e A5), ou então emular uma serial por software em algum pino digital usando a biblioteca SoftwareSerial. Tenho alguns exemplos aqui no blog que usam essa biblioteca.
Abraço!
Adilson
CONFIEI QUE ERA ATÉ 25VCC, COLOQUEI 24V ESTOUREI OS DOIS CAPACITORES. CORRIJAM, POIS A TENSÃO MÁXIMA SEGUNDO O SITE DA FILIPEFLOP É 16V
Fala Gabriel!
Vou corrigir. Infelizmente o fornecedor mudou o projeto e colocou tensão máxima de 16V. O shield que eu tenho e que usei na época para escrever o post suportava até 24V.
P.S.: Não precisa gritar. 🙂
Abraço!
Adilson