O Motor Shield Arduino L293D é um produto bastante utilizado nos mais diversificados projetos uma vez que possibilita o controle de até quatro Motores DC ou dois Motores de Passo simultaneamente e possuir saída para controle de até dois Servos Motores com funcionamento também simultâneo.
Além de possuir uma capacidade bastante elevada de funcionamento, o shield também necessita de uma alimentação maior que a cedida pelo próprio Arduino para seu funcionamento, tendo isto em vista o Motor Shield L293D possui pinos para alimentação externa que facilitam a instalação e funcionamento de motores.
Por ser desenvolvido no formato de Shield, o Driver Ponte H em questão possui um encaixe perfeito com o Arduino e elimina a necessidade de Jumpers comumente utilizados nos diversificados Módulos, seu contato direto elimina problemas de mau contato e garante maior qualidade na comunicação entre Shield e Arduino.
L293D – Drive Ponte H
O Circuito Integrado L293D é um CI fácil de se encontrar e que possui grande eficiência quando o assunto é o controle de motores, através de seus dois circuitos denominados Ponte H, este possibilita o controle de dois motores simultaneamente através de um sinal externo gerado por um microcontrolador como o Arduino.
Fundamentalmente, a Ponte H é constituída de quatro chaves de contato e uma fonte de alimentação, cada uma destas consegue controlar um Motor DC e seu sentido de rotação, veja abaixo um esquema de funcionamento deste procedimento:
Tomando a imagem acima como base, podemos determinar através dela o sentido de giro de um Motor DC através do acionamento de suas chaves, por exemplo, ao acionarmos as chaves C1 e C4 a corrente irá fluir em um sentido e ao acionarmos as chaves C2 e C4 este sentido de giro será invertido, de maneira ilustrativa, observamos abaixo estes dois procedimentos:
Por se tratar de um CI, existem bastantes mistificações quanto a sua utilização, porém esta é bastante simplificada, a conexão dos motores e pinos de comunicação do microcontrolador normalmente são desenvolvidas através de uma protoboard, porém vale observar sempre a alimentação que envolve o funcionamento deste circuito.
Ao observarmos o datasheet do L293D encontramos diversas informações relevantes quanto ao seu funcionamento, dentre elas os seus limites de alimentação, a corrente de saída suportada pelo circuito, por exemplo, é de 600mA por canal com correntes de pico de até 1,2A enquanto que a tensão suportada pelo mesmo é de 4,5 à 36V aproximadamente.
Outra informação bastante importante que encontramos no datasheet diz respeito aos pinos do circuito integrada e as suas devidas funções, através da imagem abaixo podemos verificar os pinos de sinal e alimentação, vale lembrar que ao desenvolver um projeto, todos os pinos de alimentação devem estar devidamente conectados.
Além dos pinos de alimentação, temos os pinos Enable 1 e 2 que fornecem a velocidade dos motores e estão associados ao Arduino, os pinos Output 1, 2, 3 e 4 utilizados para a conexão dos motores e os pinos Input 1, 2, 3 e 4 utilizados para realizar o controle do sentido de rotação dos motores através de um microcontrolador como o Arduino.
Motor Shield Arduino L293D
Através de um componente como o L293D consegue-se controlar até dois motores DC, porém como o Motor Shield Arduino possui dois destes circuitos, o mesmo expande a sua capacidade de funcionamento e consegue controlar até quatro motores DC simultaneamente.
Circuitos Integrados que Constituem o Motor Shield Arduino
Na imagem acima, pode-se observar que além de dois L293D, o Motor Shield constitui-se também de um CI 74HC595, um registrador de deslocamento que possibilita uma saída paralela de 8 bits através de uma entrada digital, entrada esta que constituísse de três pinos, clock, latch e data.
A alimentação do Motor Shield Arduino obedece os limites de tensão estabelecidos pelo Driver L293D e por mais que seja um shield com contato direto no Arduino, a alimentação do Arduino normalmente não é suficiente para o funcionamento dos motores, por isto é necessária uma alimentação externa.
Através do esquema exibido abaixo, podemos observar o borne para para alimentação externa e como dito, este possui limite de alimentação de 4,5 a 36V, ao lado tem-se o jumper de seleção para fonte de alimentação, quando este tiver no local indicado a alimentação utilizada para os motores é o do próprio Arduino, porém ao inserirmos uma fonte externa é fundamental a retirada deste jumper.
O Motor Shield Arduino também é constituído de um LED Power de indicação que aponta a funcionalidade do Shield, um botão reset interligado diretamente com o botão reset do Arduino e uma barra de resistores Pull Down que mantem os motores desligados durante a sua inicialização.
Quanto a conexão dos motores, por trabalharmos com um shield que comumente utiliza sua biblioteca para projetos, esta exige a conexão dos motores em locais específicos, cada local corresponde a uma posição, os Motores DC M1, M2, M3 e M4, o motor de passo 1 utilizando os bornes de M1 e M2, o motor de passo 2 os bornes de M3 e M4 e os servos motores, seus locais específicos que possibilitam a conexão direta de seus fios, veja abaixo um esquema com estas posições:
O Motor Shield Arduino L293D é um dispositivo que vai diretamente conectado ao Arduino e possibilita a utilização direta de seus pinos, desta maneira cada modelo possui uma capacidade diferenciada para a inclusão de elementos externos. De uma forma resumida, os pinos utilizados estão associados da seguinte maneira:
– Controle dos Motores DC e Motores de Passo: D3, D4, D5, D6, D7, D8, D11 e D12.
– Controle dos Servos Motores: D9 e D10.
Ao utilizar todos estes pinos mencionados acima para o controle dos motores, o Arduino UNO disponibiliza apenas os pinos D2 e D13 (Digital 2 e Digital 13) para inclusão de sensores e elementos de comunicação digital, quanto aos pinos analógicos, estes ficam disponíveis do A0 ao A5 e podem ser utilizados para incluir diversos equipamentos de comunicaçãoI2C, inclusive displays, por exemplo.
Produtos Utilizados no Teste
– Motor Shield Arduino L293D Driver Ponte H;
– Motor DC 3-6V com Caixa de Redução e Eixo Duplo;
– Motor de Passo 12V 1,5Kgf.cm 39HBD26DJ4;
– Servo Motor MG995 Tower Pro 180° 11kgf/cm;
– Fonte de Alimentação Chaveada 5VDC 1A;
– Fonte de Alimentação Chaveada 12VDC 1A.
Esquema de Ligação Motor Shield com Motor DC
Com a capacidade de utilizar até 4 motores DC, o Motor Shield L293D possui a capacidade de controle individual para cada um destes dispositivos, porém também possibilita a utilização controlada de cada um dos seus Bornes de Instalação, ou seja, podemos controlar apenas um ou dois motores sem problema algum.
Acima vemos o esquema de ligação possível utilizando-se os 4 motores DC conectados ao Motor Shield Arduino, porém vale ressaltar que nestes casos a corrente máxima por porta deve ser de 600mA, utilizarmos as quatro portas teremos um total de 2,4A e a fonte de alimentação utilizada através dos Bornes deve suprir esta necessidade para o total desempenho dos motores.
Para o nosso teste, vamos utilizar apenas um motor sendo controlado pelo shield, para isto, vamos utilizar uma fonte externa de 5V 1A e o Motor DC na posição M4, veja no esquema de ligação abaixo:
Para realizar o controle de outros motores basta instalá-los em um dos outros bornes, vale lembrar que os motores não possuem uma polaridade específica e por isto não possuem uma pinagem correta para instalação, porém dependendo do modo de instalação o sentido de direção poderá ser diferenciado.
Código de Funcionamento Motor Shield com Motor DC
O código de funcionamento, através da utilização da biblioteca específica torna-se bastante simples e dinâmico, uma vez que possibilite atalhos de comandos e dispensa uma configuração direta de pinos já que estes contam internamente na biblioteca.
Biblioteca AFMotor: DOWNLOAD AQUI.
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 |
#include <AFMotor.h> // Inclui a Biblioteca AFMotor.h AF_DCMotor motor(4); // Define M4 como posição de controle para motor void setup() { motor.setSpeed(200); // Define velocidade inicial do motor motor.run(RELEASE); // Define a função Stop } void loop() { uint8_t i; motor.run(FORWARD); // Liga o Motor for (i=0; i<255; i++) { // Acelera de 0 até a velocidade máxima motor.setSpeed(i); delay(10); } for (i=255; i!=0; i--) { // Diminui da velocidade máxima até 0 motor.setSpeed(i); delay(10); } motor.run(BACKWARD); // Inverte a direção do motor for (i=0; i<255; i++) { // Acelera de 0 até a velocidade máxima motor.setSpeed(i); delay(10); } for (i=255; i!=0; i--) { // Diminui da velocidade máxima até 0 motor.setSpeed(i); delay(10); } motor.run(RELEASE); // Desliga o Motor delay(1000); } |
O código está totalmente comentado e não possui grandes segredos, para realizar a alteração do local de instalação do Motor, deve-se alterar a função abaixo de acordo com o apresentado:
1 2 3 4 |
AF_DCMotor motor(1); // Define M1 como posição de controle para motor AF_DCMotor motor(2); // Define M2 como posição de controle para motor AF_DCMotor motor(3); // Define M3 como posição de controle para motor AF_DCMotor motor(4); // Define M4 como posição de controle para motor |
Com este código base consegue-se realizar a maioria dos procedimentos possíveis no controle de Motores DC através do Motor Shield, seus comandos são simples e de fácil adaptação, porém vale lembrar que para incluir mais um motor, fundamentalmente todos estes comandos devem ser duplicados de acordo com o projeto.
Esquema de Ligação Shield L293D com Motor de Passo
Além de possuir a capacidade de controlar até quatro motores DC, o Motor Shield também consegue controla até dois Motores de Passo com correntes de funcionamento de até 600mA, porém vale ressaltar que o motor de passo utiliza o local de dois motores DC para o seu funcionamento, veja na imagem abaixo a posição de instalação para cada um dos motores de passo 39HBD26DJ4:
Para este projeto, já que o Motor de Passo possui uma tensão de funcionamento de 12V, é necessário incluirmos uma fonte de alimentação de 12V 1A, corrente necessária para o controle de até dois destes Motores de Passo 12V 39HBD26DJ4 que possuem uma corrente máxima de funcionamento de 480mA.
Tendo em vista a diversidade dos motores de passo e a suas diferentes especificações, muitas vezes o que dificulta a sua utilização diz respeito a identificação dos fios correspondentes às bobinas, se você também possui esta dúvida, assista o vídeo abaixo de nosso parceiro e verifique como desenvolver tal verificação:
Após termos realizado o teste e identificado os pinos, conectamos o motor aos terminais M3 e M4 do Shield para realizarmos o controle de sua direção e velocidade, o diagrama correspondente ao código disponibilizado logo abaixo e utiliza o Motor de Passo 39HBD26DJ4 como base:
Vale ressaltar aqui, que alguns modelos como este são comercializados com barramentos de 5 ou 6 fios, porém ao realizarmos a medição com um multímetro verificamos que apenas 4 destes são realmente conectados à bobinas, onde um par de bobinas iria conectado no M3 e outro no M4, por exemplo.
Código de Funcionamento Shield L293D com Motor de Passo
A grande maioria dos códigos de funcionamento do Motor Shield L293D possuem suas funções atribuídas à Biblioteca AFMotor uma vez que esta possibilita funções práticas e diretas para a utilização de motores, é o caso do código abaixo o qual nos possibilita em poucas linhas realizar o teste de funcionamento de um Motor DC.
Biblioteca AFMotor: DOWNLOAD AQUI.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <AFMotor.h> // Inclui a Biblioteca AFMotor.h const int stepsPerRevolution = 48; // Número de etapas por volta AF_Stepper motor(stepsPerRevolution, 2); // Define M3 e M4 como local de instalação void setup() { motor.setSpeed(100); // Define a velocidade do Motor } void loop() { motor.step(648, FORWARD, SINGLE); // Movimenta o Motor para uma Direção motor.step(648, BACKWARD, SINGLE); // Inverte a direção do Motor motor.step(648, FORWARD, MICROSTEP); // Movimenta o Motor em uma Direção motor.step(648, BACKWARD, MICROSTEP); // Inverte a direção do Motor } |
Neste código, algumas das variáveis possuem algumas funções mais complexas e que geram algumas dúvidas, na tradução literal FORWARD significa “para frente” e BACKFORWARD “para trás”, porém estes podem variar de acordo com a instalação das bobinas e o método de conexão dos fios.
1 |
motor.step(648, FORWARD, MICROSTEP); // Movimenta o Motor em uma Direção |
Na linha acima temos a função responsável por realizar um dos procedimentos de movimentação do motor, o valor 648 define quantas etapas o motor irá executar, FORWARD define a direção deste movimento e por fim o tipo de movimento, por exemplo:
– SINGLE: As bobinas são energizadas de maneira individual e possuem um torque razoável.
– MICROSTEP: As bobinas adjacentes sofrem um movimento o qual cria um número de “micro etapas”, isso resulta em uma resolução mais fina e suave, porém faz com que o motor perda parte do seu torque.
Esquema de Ligação Motor Shield com Servo Motor
Dentre os objetos de controle do Motor Shield, o Servo Motor a depender da sua utilização e modelo é o único que exerce suas funções básicas sem problema e apenas com a alimentação do próprio Arduino, porém ao utilizamos Servos Motores metálicos como os selecionados para este projeto, é recomendada a inclusão de uma fonte externa, podendo ser a mesma 5V 1A utilizada para o controle dos motores DC.
Assim como na utilização do Motor de Passo, o Shield L293D controla também duas unidades do Servo Motor, porém estes possuem um local específico de instalação que possibilita a conexão direta de seus cabos em uma barra de pinos especial. Abaixo vemos o esquema de ligação para controle de um Servo Motor:
Como vemos, o primeiro pino da esquerda pela direita é o pino GND e após temos o pino de alimentação e o pino de comunicação, seguindo sempre o mesmo padrão dos servos motores comercializados.
Código de Funcionamento com Servo Motor
O pino de sinal do Servo Motor é conectado diretamente no pino PWM do Arduino, ou seja, diferente do Motor DC e do Motor de Passo, este não passa pelo 74HC595 e não necessita da biblioteca AFMotor, apenas a biblioteca Servo que já vem instalada junto do Arduino.
O controle de Servo Motor pode ser executado utilizando códigos padrões como o que já desenvolvemos anteriormente em nosso seguinte artigo e que novamente utilizaremos para demonstrar o funcionamento do nosso Motor Shield L293D:
https://www.usinainfo.com.br/blog/controle-de-posicao-servo-motor-com-arduino/
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 |
#include "Servo.h" // Inclui a Biblioteca Servo.h Servo meuservo; // Cria o objeto servo para programação int angulo = 0; // Ajusta o ângulo inicial do Servo void setup() { meuservo.attach(10); // Declara o pino do servo } void loop() { for (angulo = 0; angulo < 180; angulo += 1) { // Comando que muda a posição do servo de 0 para 180° meuservo.write(angulo); // Comando para angulo específico delay(15); } delay(2000); // Tempo de espera para próximo movimento for (angulo = 180; angulo >= 1; angulo -= 5) { // Comando que muda a posição do servo de 180 para 0° meuservo.write(angulo); // Comando para angulo específico delay(5); } delay(2000); // Tempo de espera para próximo movimento } |
Com todas as funções já comentadas, este código demonstra algumas funções padrões do software Arduino quando trabalhamos com o Servo, o que facilita ainda mais a sua utilização é a sequencia de pinos específico necessários para o funcionamento do mesmo.
CONCLUSÃO
O funcionamento do Motor Shield Arduino é baseado quase que exclusivamente na biblioteca AFMotor.h, porém vale ressaltar que os projetos podem ser executados sem esta, porém é necessário um conhecimento mais aprofundado de programação para este procedimento.
A linha de projetos possíveis de se desenvolver com este Shield é extremamente grande, o mesmo pode ser atribuído a projetos de carros tanto 2WD quanto 4WD, pode ser atribuído a projetos com necessidade de precisão de movimento através de motores de passo e até mesmo os mais diversificados projetos com Servo Motor 180 ou 360º.
Se você já usou este Shield, tem algum uma experiência com ele e deseja compartilhar com os demais, não esqueça de deixar o seu comentário logo abaixo, além da utilização de cada um dos tipos de motores, é possível intercalar o seu funcionamento, sendo ideal para o desenvolvimento de um Carro Robô 4WD com Micro Servo Motor e Eixo Móvel.