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!