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.

Motor Shield L293D e Micro Servo

O Motor Shield L293D já foi abordado aqui no blog e mostrado em alguns posts:

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:

Arduino Motor Shield L293D - Conectores

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).

Circuito Motor Shield e Micro Servo 9G

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!

Avalie este post!