25 setembro 2014

Controlando servo motor com o Motor Shield L293D

Aqui no Arduino e Cia já temos dois posts falando sobre o Motor Shield L293D :



Faltva apenas a parte de controle de servo motores para cobrirmos todas as opções do Motor Shield L293D, e é isso que vamos ver nesse post.

Motor Shield L293D e Micro Servo

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

O servo motor que eu utilizei para testar foi o Micro Servo 9G. Observe que 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 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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);
} 


15 comentários:

  1. Boa tarde.

    Como faço para a alimentação do servo motor ser a mesma da shield e não do arduíno?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você pode utilizar alimentação externa para os servos, mas vai precisar fazer uma pequena alteração no hardware. Dê uma olhada neste link, por favor: https://learn.adafruit.com/adafruit-motor-shield/using-rc-servos

      Abraço !

      Excluir
  2. Olá, gostaria de saber se eu poderia controlar os 4 motores DC e mais os 2 servos simultaneamente já que tem espaço, ou sobrecarregaria alguma coisa? É que onde eu comprei o shield dizia que ele podia controlar 4 motores DC, OU 2 motores de passo, OU 2 servos. Eu poderia então controlar os 2 servos mais os 4 motores? Abraço.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Sim, você pode controlar os 4 motores DC com alimentação externa, E os 2 servo motores ao mesmo tempo, já que eles utilizam os 5V do Arduino.

      Abraço!

      Excluir
  3. Olá, Qeria saber se posso controlar 4 servos 9g com Shield ?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Esse shield só consegue controlar dois servo motores.

      Abraço!

      Excluir
  4. eu poderia usar 2 motores de passo quenos que tenho acho que consome menos q 5v
    e mais servo motor nesse shild ??

    ResponderExcluir
    Respostas
    1. Oi Edilsom,

      Veja as especificações dos motores, mas a princípio funciona sim.

      Abraço!

      Excluir
  5. Boa tarde, estou fazendo um projeto em que vou ligar dois motores DC de 3V, um servo 9G, um Sensor ultrasonico SR e um módulo bluetooth HC-05. Minha dúvida é, como alimentar isso tudo e ainda ter uma força nos motores DC?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Você pode usar a alimentação externa para os motores e a alimentação do próprio Arduino para o sensor ultrassônico e o HC-05.

      Abraço!

      Excluir
    2. Você teria como dar consultoria nesse caso ? Não estou conseguindo arrancar força dos motores DC.

      Excluir
    3. Oi Tiago,

      Entre em contato utilizando o formulário de contato no lado direito da página. Combinamos por email.

      Abraço!

      Excluir
  6. Olá, seria possível você dar uma olhada nesse sketch https://github.com/jinschoi/SphereBot, e me dizer por que não consigo faze-lo funcionar com esse Shield. Obrigado

    ResponderExcluir
  7. Bom dia, gostaria de saber como faço para ligar esse modulo + um modulo acelerometro, ficaria ligados nos mesmos pinos do Arduino Uno?

    Grato.

    ResponderExcluir
  8. Olá Boa tarde. Eu consigo utilizar o shield para 4 motores DC e ainda utilizar um receptor de controle de PS2? Tudo isso no arduino Uno! Pergunto isso porque o Shield L293D utiliza todos os pinos do Arduino. Como faço?

    ResponderExcluir