O chip mais popular em questão de controlar motores e robôs é o L293D, que é parte indispensável do Motor Shield que será tratado neste post. Esse chip tem a capacidade de controlar motores DC, servo motores e motores de passo. Ele é chamado de Shield pois pode ser facilmente conectado a todos os pinos do Arduino, por possuir basicamente a mesma carcaça. Neste post, será descrito o que é e como funciona o Motor Shield L293D, e também serão desenvolvidos 4 projetos exemplos em que o Motor Shield controla quatro tipos diferentes de motores. Bora aprender?
Este Arduino Motor Shield é baseado no chip L293D e com ele é possível controlar até 4 Motores DC, 2 Servos ou 2 Motores de Passo! O chip L293D possui internamente 2 Ponte H e suporta uma corrente de saída de 600mA por canal, ou seja, será possível controlar até 2 motores com 600mA cada, visto que neste Shield temos 2 chips.
A shield também vem com um registrador de deslocamento 74HC595 que estende 4 pinos digitais do Arduino para os 8 pinos de controle de direção de dois chips L293D.
O PWM nos permite controlar a tensão aplicada ao motor na forma de pulsos de onda quadrada com uma certa frequência. A tensão aplicada ao motor determina sua velocidade de rotação, variando a largura dessa onda quadrada chamada de ciclo de trabalho. Este ciclo é dado em porcentagem e quanto maior o ciclo de trabalho, maior a tensão no motor, o que também aumenta a velocidade de rotação.
Quando o ciclo de trabalho é 100%, o pulso é constantemente HIGH e o motor recebe potência total e gira em sua velocidade de saída nominal, enquanto um ciclo de trabalho de 0% significa que o sinal de pulso está constantemente LOW, portanto, nenhuma tensão através do motor e o motor irá pare de girar.
A direção de rotação de um motor é determinada pela direção do fluxo de corrente através do motor. Isso é obtido usando um circuito em ponte H, que é usado para alternar a polaridade de uma tensão aplicada a uma carga como um motor, neste caso.
Uma ponte H consiste em quatro MOSFETs ou transistores conectados como chaves. Quando duas dessas chaves são ativadas ao mesmo tempo de uma maneira específica, a direção do fluxo da corrente é alterada, o que muda a direção de rotação do motor. O diagrama abaixo demonstra como a ponte H funciona.
Crédito: Mytectutor
Quando os interruptores S1 e S4 estão fechados, a corrente flui da esquerda para a direita através do motor, o que faz o motor girar em uma determinada direção, neste caso no sentido horário. Da mesma forma, se os interruptores S2 e S3 estiverem fechados, a corrente fluirá da direita para a esquerda e o motor girará na direção oposta.
As especificações do componente são as seguintes:
Neste projeto, seram desenvolvidos 4 exemplos de como realizar a comunicação entre o Motor Shield L293D e 4 diferentes tipos de motores: motor DC, motor de passo, servo motor e motor de passo NEMA. Os código utilizados aqui foram desenvolvidos pela equipe do Last Minute Engeneers, sua referência está no final do post. O objetivo aqui é simplesmente fazer com que os motores se movam, porém há algumas diferenças na abordagem para cada motor. E aí, pronto para colocar a mão na massa?
Antes de iniciarmos o projeto, é necessário baixar a biblioteca AFMotor.h para que a comunicação entre o Arduino e o componente seja possível. Para isso, basta abrir a IDE e acessar Sketch->Incluir Biblioteca->Gerenciar Bibliotecas…
Feito isso, basta escrever na caixa de busca “motor shield” e instalar a biblioteca Adafruit Motor Shield library, feita pela Adafruit.
O primeiro projeto consiste em controlar um motor DC com o Motor Shield. O intuito do projeto é mostrar ao leitor as diferenças entre as conexões e os códigos utilizados para controlar cada motor. Abaixo, serão descritos o diagrama do projeto, o código implementado e o resultado obtido (o adaptador utilizado é de 9 V).
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { //Seta a velocidade inicial do motor e o para motor.setSpeed(200); motor.run(RELEASE); } void loop() { uint8_t i; // Liga o motor motor.run(FORWARD); // Acelera de zero à velocidade máxima for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Desacelera da velocidade máxima para zero for (i=255; i!=0; i--) { motor.setSpeed(i); delay(10); } // Muda direção do motor motor.run(BACKWARD); // Acelera de zero à velocidade máxima for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Desacelera da velocidade máxima para zero for (i=255; i!=0; i--) { motor.setSpeed(i); delay(10); } // Desliga o motor motor.run(RELEASE); delay(1000); }
O segundo projeto consiste em controlar um motor de passo com o Motor Shield. Abaixo, serão descritos o diagrama do projeto, o código implementado e o resultado obtido (o adaptador utilizado é de 5 V).
Mesmo do projeto seguinte.
O terceiro projeto consiste em controlar um motor de passo NEMA 17 com o Motor Shield. Abaixo, serão descritos o diagrama do projeto, o código implementado e o resultado obtido (o adaptador utilizado é de 12 V).
Altere o parâmetro stepsPerRevolution de acordo com as especificações do seu motor antes de tentar o esboço. Por exemplo, para NEMA 17 defina-o para 200 e para 28BYJ-48 defina-o para 48.
#include <AFMotor.h> // Número de passos por rotação de saída // Se preciso, mude esta especificação de acordo com seu motor const int stepsPerRevolution = 200; // Conecta o motor a porta #2 (M3 and M4) AF_Stepper motor(stepsPerRevolution, 2); void setup() { Serial.begin(9600); Serial.println("Teste do Motor de Passos!"); motor.setSpeed(10); // 10 rpm } void loop() { Serial.println("Passo única da bobina"); motor.step(100, FORWARD, SINGLE); motor.step(100, BACKWARD, SINGLE); Serial.println("Passo duplo da bobina"); motor.step(100, FORWARD, DOUBLE); motor.step(100, BACKWARD, DOUBLE); Serial.println("Passos intercalados da bobina"); motor.step(100, FORWARD, INTERLEAVE); motor.step(100, BACKWARD, INTERLEAVE); Serial.println("Micropassos da bobina"); motor.step(100, FORWARD, MICROSTEP); motor.step(100, BACKWARD, MICROSTEP); }
O último projeto consiste em controlar um servo motor com o Motor Shield. Abaixo, serão descritos o diagrama do projeto, o código implementado e o resultado obtido.
#include <Servo.h> Servo myservo; // Cria servo objeto para controlar um servo int pos = 0; // Variável para guardar a posição do servo void setup() { // Conecta o servo no pino 10 para o servo objeto myservo.attach(10); } void loop() { // Aumenta o ângulo de 0 graus até 180 graus for(pos = 0; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } // Diminui o ângulo de 180 graus até 0 graus for(pos = 180; pos>=0; pos-=1) { myservo.write(pos); delay(15); } }
Espero que tenha gostado do post. O objetivo aqui foi apenas dar um norte ao aprendizado sobre o componente Motor Shield L293D e iniciar sua implementação prática com ele. Confira nossos posts relacionados ao tema abordado aqui:
Avalie o post e deixe um comentário sobre seu interesse com Arduino e se esse artigo te ajudou a descobrir mais sobre essa plataforma.
Siga-nos também no Instagram para receber conteúdos diários sobre Arduino e eletrônica: @eletrogate.
Até mais!
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!