Aula 5: O que é um Servo Motor?

Existem diversos tipos de motores que podem ser utilizados facilmente com o Arduino. Entre os mais fáceis de se utilizar está o servo motor, sendo bastante utilizado em aeromodelismo e outros projetos que precisam de pouco movimento. Nessa aula você vai aprender a controlar o servo motor de duas maneiras: utilizando um botão e utilizando um potenciômetro.

Material Necessário

O que é um potenciômetro?

Nas aulas anteriores falamos um pouco sobre o que é um resistor. No projeto dessa aula iremos utilizar um resistor variável chamado potenciômetro.

Potenciômetro

Diferente de um botão que é digital e tem um valor de 0 ou 1, o potenciômetro varia o seu valor conforme a rotação de sua haste e, por isso, deve ser conectado em uma porta analógica do Arduino.

O potenciômetro é bastante usado em controles de volume, intensidade de lâmpadas e etc. Veja na figura abaixo o seu funcionamento interno.

Funcionamento potenciômetro

O que é um servo motor?

O servo motor é, basicamente, um motor onde é possível controlar sua posição. O servo consegue fazer um movimento de rotação de até meia volta, não fica girando como alguns motores. Porém, existem outros modelos de servo motor que conseguem dar voltas completas, sendo cada modelo indicado para um tipo de projeto diferente.

Servo motor 9g

Circuito servo controlado por um botão

O servo possui três fios para sua utilização e na extremidade desses fios um conector de 3 pinos fêmea. O fio marrom do servo deve ser conectado ao GND, o fio vermelho ao 5 V e o fio laranja ao pino 9 do Arduino.

Circuito servo com botão

Para conectar o servo basta utilizar 3 jumpers macho-macho e ligar o conector do servo com a protoboard. O servo também acompanha algumas hastes e parafusos. Não é necessário parafusar as hastes ao servo, apenas um encaixe já basta. Você pode escolher uma das hastes para visualizar melhor o movimento do servo.

Conexão jumpers

Código servo controlado por um botão

O programa deve fazer o seguinte: ao apertar o botão, o servo gira até meia volta (180 graus) e retorna, ficando parado até pressionar o botão novamente.

// Programa : Servo motor com botão
// Autor : FILIPEFLOP
#include <Servo.h>

Servo meuServo;
int botao = 7;

void setup() 
{
pinMode(botao, INPUT_PULLUP); // define o botão como saidas 
}

void loop() 
{
meuServo.attach(9);
if(digitalRead(botao) == LOW)
{
for(int angulo=0; angulo<=180; angulo++) // Aumenta o angulo do servo ate chegar em 180 graus
{
meuServo.write(angulo);
delay(10);
}
for(int angulo=180; angulo>=0; angulo--)// Diminui o angulo do servo
{
meuServo.write(angulo);
delay(10);
}
}
meuServo.detach();
}

Circuito servo controlado por um potenciômetro

Agora vamos controlar a rotação do servo motor utilizando um potenciômetro. Observe o circuito a seguir:

Circuito servo com potenciômetro

Código servo controlado por um potenciômetro

O programa consiste em ler o valor de rotação do potenciômetro e controlar a rotação do servo de acordo.

// Programa : Servo motor com potenciômetro
// Autor : FILIPEFLOP

#include <Servo.h>

Servo meuServo;

int pinoPot = A0;
int valorPot;

void setup() 
{
  meuServo.attach(9);
}

void loop() 
{
  valorPot = analogRead(pinoPot);
  // mapeia os valores do potenciometro (entre 0 e 1023) para os valores do servo (entre 0 e 180)
  valorPot = map(valorPot, 0, 1023, 0, 180); 
  meuServo.write(valorPot); // manda o valor para o servo
  delay(15);
}

Possíveis erros

Caso o projeto não funcione, verifique alguns dos possíveis erros:

  • Verifique se os jumpers estão na mesma coluna dos terminais dos componentes, fazendo assim a conexão;
  • Verifique se os jumpers estão ligados nos pinos corretos no Arduino;
  • Verifique se as conexões do servo estão corretas, fio marrom no GND, fio vermelho no 5 V e laranja no pino 9;
  • Verifique se os pinos do botão estão bem inseridos na protoboard;
  • Verifique se os pinos do potenciômetro estão bem inseridos na protoboard;
  • Verifique se o código carregou na placa através da IDE Arduino.

Desafios

Veja abaixo alguns desafios que você pode tentar!

  • No primeiro código, modifique o limite de rotação do servo trocando os valores de ângulo nas linhas for(int angulo=0; angulo<=180; angulo++); por exemplo for(int angulo=50; angulo<=110; angulo++);
  • No segundo código, modifique o limite de rotação do servo trocando os valores de ângulo na linha valorPot = map(valorPot, 0, 1023, 0, 180); por exemplo valorPot = map(valorPot, 0, 1023, 50, 110);