O que é Servomotor? | Controlando um Servo com Arduino

O que é Servomotor? Controlando um Servo com Arduino

Nesse tutorial aprenderemos o que é um servomotor e como controla-lo usando um Arduino, mais especificamente o Arduino Uno, usando a biblioteca nativa da IDE Arduino Servo.h. Para esse tutorial usaremos o Micro Servo motor SG90.

[toc]

O que é um Servomotor e como funciona?

Entre os atuadores temos um motor bem especial. Os servomotores, também chamados de servos, são muito utilizados quando o assunto é robótica. De forma simplificada, um servomotor é um motor na qual podemos controlar sua posição angular através de um sinal PWM.

Microservo servo SG90 9g
Micro servo motor SG90

Dessa forma, um servomotor é um atuador eletromecânico utilizado para posicionar e manter um objeto em uma determinada posição. Para isso, ele conta com um circuito que verifica o sinal de entrada e compara com a posição atual do eixo.

controle via PWM de um servo
controle via PWM de um servo

Como você pode ver na figura anterior, o ângulo do servomotor é proporcional ao Duty Cycle (tempo que o sinal é positivo) do sinal PWM.

Diferentemente dos motores de corrente continua ou motores de passo que podem girar indefinidamente, o eixo de um servo possui a liberdade de apenas 180º. Existem ainda alguns servos que são adaptados para girar indefinidamente, mas não entraremos nesse mérito aqui.

Servomotores geralmente possuem 3 pinos:

  • Alimentação positiva (vermelho) – 5V;
  • Terra (Preto ou Marrom) – GND;
  • (Amarelo, Laranja ou Branco) – Ligado a um pino digital de entrada e saída;

Atenção!!

Servomotores consomem uma corrente significativa ao se movimentarem. A utilização de uma fonte externa pode ser necessária e é recomendada. Lembre-se de conectar o pino GND da fonte externa ao GND do Arduino para que a referência seja a mesma.

Apesar de sua posição ser controlada através do duty cycle de um sinal PWM enviado ao pino de controle não é necessária a conexão do pino de controle a um pino que possua PWM, pois utilizaremos a biblioteca Servo.h.

A utilização de analogWrite produzirá um controle de menor precisão e poderá até danificar alguns servomotores por sua frequência (490 Hz) ser 10 vezes superior a frequência típica de controle de alguns servomotores.

Além de mais preciso e recomendado, o uso da biblioteca Servo.h faz com que o uso do servomotor seja mais fácil. Isso se dá pelo fato de você só precisar definir o ângulo que você deseja, não necessitando o uso dos valores de PWM (0 a 255).


Mãos à obra - Controlando um Servomotor com Arduino - Micro Servo motor SG90

Componentes necessários

Montando o projeto

Agora vamos conectar os componentes do projeto. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.

Esquema de montagem de um servo com Arduino Uno
Esquema de montagem de um servomotor com Arduino Uno

O microservo tem três fios saindo dele. Um será vermelho e irá para os +5 V. Outro, preto ou marrom, irá para o GND. O terceiro, branco, amarelo ou laranja, será conectado ao pino digital 8.

Monte o potenciômetro com os seus pinos externos conectados um no +5 V e o outro no GND e o pino do meio ao pino analógico A0.

Conectando o Arduino ao computador

Conecte seu Arduino ao computador e abra a IDE Arduino.

Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).

Programando

Crie um programa (sketch) e salve com o nome de “programa_servo”.

Nesse exemplo utilizaremos a biblioteca Senvo.h que já é nativa da IDE Arduino e deve ser adicionada em: Sketch > Incluir Biblioteca > Servo.

Com o seu programa salvo, escreva nele o código conforme escrito abaixo.

#include <Servo.h>
Servo servo1; // cria um objeto servo1

// Esta função "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
 servo1.attach(5); // anexa o servomotor (físico), no pino 5, ao objeto servo1 (lógico)
}

void loop() {
 int angulo = analogRead(0); // Lê o valor do potenciômetro
 angulo = map(angulo, 0, 1023, 0, 180); // Mudança de Escala
 servo1.write(angulo); // Escreve o ângulo para o servomotor
 delay(20); // Espera de 20ms, Suficiente para que o servomotor atinja a posição
}

Após escrever o código, salve e depois clique em Carregar (Upload) para que o programa seja transferido para seu Arduino.

Colocando para funcionar

Se tudo deu certo, conforme você variar a resistência do potenciômetro o servomotor irá se mover.


Entendendo a fundo

Entendendo o Software

Biblioteca Servo.h

Na elaboração do software utilizamos a biblioteca Servo.h. Esta biblioteca implementa as funcionalidades de um servomotor tornando sua utilização extremamente simples. Entretanto alguns cuidados devem ser tomados.

Importante:

A biblioteca suporta a ligação de até 12 servomotores na maioria das placas Arduino e 48 no Arduino Mega. O uso da biblioteca desabilita o uso da função analogWrite nos pinos 9 e 10  (*exceto no Arduino Mega). No Mega o uso de 12 a 23 servomotores desabilitará o a função analogWrite nos pinos 11 e 12.

Declarando um Servomotor

Ao usar essa biblioteca trataremos cada servomotor como um objeto, dessa forma precisamos declará-lo no início do código.

Servo servo1; // Cria um objeto servo1

Depois de declarado, sempre que quisermos mexer em alguma função desse servo, devemos usar o nome da função precedida do nome do servo e ponto.

servo1.exemplo(); // chama função exemplo() para o objeto servo1

Você poderá declarar quantos servos for usar, levando em conta a limitação física de sua placa Arduino. Cada servo pode ter qualquer nome, mas é aconselhável que se use nomes intuitivos.

Declarando porta de controle do Servomotor

Agora é preciso definir em que porta esta conectado o fio de controle do servo, para isso usamos a função attach(pino).

servo1.attach(5); // Anexa o servomotor (físico), no pino 5, ao objeto servo1 (lógico)

Controlando a Posição do Servomotor

A função write define em um servomotor padrão o ângulo em graus na qual ele deve se posicionar.

servo1.write(angulo); //angulo: posição em graus para servos comuns

Fechamento

Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!! Compartilhe à vontade.

Apostila Arduino Básico