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.
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.
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
- Micro Servo motor SG90 ou outro Servomotor
- Placa Arduino Uno ou similar
- Fios Jumper’s
- Protoboard
- Potenciômetro
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.
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.