Como usar um servo motor com Arduino

O grande barato de comprar as coisas pela internet, e no exterior, é a quase completa falta de manuais. Um exemplo disso é o servo motor abaixo, que chegou recentemente e veio em boa hora, já que faltava no blog um post de servo motor com Arduino.

Micro Servo 9G

Chegou inteiro, mas desse jeito: o servo, os acessórios num plástico, e só. Uma etiqueta escrito “Micro Servo 9g” foi a maior pista que eu tive do modelo.

Aí começa a parte divertida da coisa, que é descobrir como o servo funciona, suas conexões, tensão de trabalho e tal. Vasculhando no Google, descobri um modelo muito parecido, chamado HXT900, e que sua tensão de operação vai de 3 a 6v. Já é um começo. Mas e as conexões?

Testando o servo motor com Arduino

Bom, o cabo tem 3 vias : Preto, vermelho e branco. Fácil, não ? Preto no GND, vermelho no 5V e branco para dados (ou sinal).

Testei o servo motor com Arduino usando o exemplo que já vem na IDE, que usa um potenciômetro para controlar a rotação do motor:

O programa abaixo para usar o servo com Arduino você pode encontrar no menu Arquivo -> Exemplos -> Servo -> Knob:

// Programa : Controlando a posicao de um servo usando potenciometro
// Traducao e comentarios : Arduino e Cia
//
// Controlling a servo position using a potentiometer (variable resistor) 
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 


#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

// Pino analgico do potenciometro
int potpin = 0;

// Variavel que armazena o valor lido do potenciometro
int val;     

void setup() 
{ 
  // Define que o servo esta ligado a porta 9
  myservo.attach(9);  
} 

void loop() 
{ 
  // Le o valor do potenciometro (valores entre 0 e 1023) 
  val = analogRead(potpin);            

  // Converte o valor pra ser usado no servo (valores entre 0 e 180) 
  val = map(val, 0, 1023, 0, 179);     

  // Move o eixo do servo, de acordo com o angulo
  myservo.write(val);                  

  // Aguarda o servo atingir a posição
  delay(15);                           
}

O programa lê as informações do potenciômetro ligado à entrada analógica (valores de 0 a 1023), converte esses valores para serem usados no servo (0 a 180), e move o servo motor para a posição correspondente. Gire o potenciômetro nos 2 sentidos, e o servo irá acompanhar o movimento do potenciômetro.

Também podemos controlar o servo usando posições pré-estabelecidas, o que é muito útil quando precisamos usar o motor para movimentos repetitivos. Como no exemplo abaixo onde utilizei 3 chaves (push-button):

… e o seguinte programa:

// Programa : Controlando o servo com 3 chaves
// Autor: Arduino e Cia

#include <Servo.h> 

Servo myservo;

int val; 
int ChaveEsquerda=3; //Pino a ser ligado na chave esquerda
int ChaveCentral=4;  //Pino a ser ligado na chave central
int ChaveDireita=5;  //Pino a ser ligado na chave direita

void setup() 
{ 
  // Pino de dados do servo conectado ao pino 9 do Arduino
  myservo.attach(9);   
  //Define o pino como entrada
  pinMode(ChaveEsquerda, INPUT);      
  //Aciona o resistor pull-up interno
  digitalWrite(ChaveEsquerda, HIGH);  
  pinMode(ChaveCentral, INPUT);
  digitalWrite(ChaveCentral, HIGH);
  pinMode(ChaveDireita, INPUT);
  digitalWrite(ChaveDireita, HIGH);
} 

void loop() 
{ 
 //Le o valor da Chave Esquerda (On/Off)
 val=digitalRead(ChaveEsquerda);  
   //Caso a chave seja pressionada, movimenta o servo
   if(val!=1) 
    {
       myservo.write(60);  //Move o servo para o angulo de 60 graus
       delay(15);          //Delay para o servo atingir a posiçao
    }

 val=digitalRead(ChaveCentral);
   if(val!=1)
    {
       myservo.write(90);  //Move o servo para o angulo de 90 graus
       delay(15);
    }

 val=digitalRead(ChaveDireita);
   if(val!=1)
    {
       myservo.write(120);  //Move o servo para o angulo de 120 graus
       delay(15);
    }
}

Ao pressionar o botão da esquerda, o servo se movimenta para a posição “60 graus”, o botão central leva à posição 90 graus, e o botão da direita, à posição 120 graus.

5/5 - (4 votos)

Related posts

Como medir a rotação de um motor com o sensor de velocidade LM393

by Arduino e Cia
9 anos ago

Controlando motores DC com o Arduino Motor Shield L293D

by Arduino e Cia
10 anos ago

Como usar o Servo Motor Shield 16 canais Adafruit

by Arduino e Cia
9 anos ago
Sair da versão mobile