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!