Neste post vamos mostrar como você pode controlar, de maneira muito simples, um servo motor do tipo 9G usando o Motor Shield L293D com Arduino.

O Motor Shield L293D já foi abordado aqui no blog e mostrado em alguns posts:
- Controlando motores DC com o Arduino Motor Shield L293D
- Controlando motores de passo 28BYJ-48 com o Arduino Motor Shield L293D
Faltava apenas a parte de controle de servo motores para cobrirmos todas as opções deste shield, e é isso que vamos ver nesse post.
O motor shield L293D Arduino
Controlar servos com o Motor Shield é tarefa mais simples do que trabalhar com motores DC e motores de passo já que temos 2 conectores no canto superior esquerdo, específicos para ligação dos servo motores:
A alimentação do servo ligado a um dos conectores é feita pelo próprio Arduino (5v), e na placa que eu tenho o Servo 1 (conector superior) é controlado pelo pino digital 10 do Arduino, e o Servo 2 (conector inferior) é controlado pelo pino 9.
Observação: no site oficial do Motor Shield esta informação está invertida: Servo 1 no pino D9 e Servo 2 no pino D10. Pode ser a versão da placa ou apenas uma marcação errada. Na dúvida, teste as duas configurações.
Circuito e conexão
O servo motor que eu utilizei para testar foi o Micro Servo 9G. Observe que no shield o primeiro pino mais à esquerda é o negativo (GND), o do meio é o Vcc e o mais à direita é o pino de sinal (S).
Ao contrário do motor DC e do motor de passo, que utilizam a biblioteca AF_Motor, com o servo motor utilizamos a própria biblioteca Servo do Arduino.
O programa abaixo movimenta o servo entre 0 e 180 graus, e depois volta à posição inicial repetindo o processo:
// Programa : Controle de servo com Motor Shield L293D
// Autor : Arduino e Cia
// Carrega a biblioteca Servo
#include <Servo.h>
// Cria um objeto chamado servo1
Servo servo1;
int val = 0;
void setup()
{
// Indica que o servo1 esta ligado ao pino 10
servo1.attach(10);
Serial.begin(9600);
}
void loop()
{
// Movimenta o servo
servo1.write(val);
delay(100);
val = val+5;
// Envia as informacoes de val para a serial
Serial.println(val);
// Verifica se o valor de val chegou a 180
if (val == 180)
{
// Caso val chegue a 180, volta a 0
val = 0;
}
// Aguarda 15 ms e reinicia o processo
delay(15);
}
Gostou? Confira mais posts com o L293D aqui no Arduino e Cia!