Neste tutorial, mostraremos como usar os servos motores de rotação contínua 360° e como controlá-los usando um Arduino Uno. Trazemos como exemplos os modelos SG90, MG90 e MG995. Para comprar esses produtos em nossa loja, clique aqui. Veja mais informações dos produtos.
Os servo motores de 360 graus de rotação contínua, são uma versão modificada dos servo motores de 180 graus que podem girar continuamente. Ao contrário dos servos tradicionais que têm limite de rotação de 0° a 180°, os dispositivos de rotação contínua não tem um controle preciso da posição angular.
Os motores do tipo servo motor são sistemas que contém um encoder acoplado, do tipo potenciômetro, e uma unidade de controle que permitem o controle preciso da rotação (Figura 4). Os modelos de 180° são assim conhecidos por eles terem limitadores físicos que é permitido o giro apenas em 180°. Já os modelso de 360°, não contém esse limitador físico. O controle da posição nos modelos SG90, MG90 e MG995 é feito através da largura de pulso de um sinal de onda quadrada de 50Hz. Essa largura de pulso é a duração da onda que varia entre 1 e 2ms. Com isso, se um pulso de 1ms for enviado para o motor, a posição do seu eixo será movida para 0° definida pelo sistema do motor. Caso a largura de pulso for de 1,5ms, o motor irá girar para sua posição de 90° e manterá o ângulo até que a largura de pulso seja alterada. Se a largura do pulso for 2ms, a nova posição será de 180°. A imagem abaixo ilustra o sinal enviado para o motor e sua respectiva posição para os modelos citados.
O controle da posição nos modelos SG90, MG90 e MG995 é feito através da largura de pulso de um sinal de onda quadrada de 50Hz. Essa largura de pulso é a duração da onda que varia entre 1 e 2ms. Com isso, se um pulso de 1ms for enviado para o motor, a posição do seu eixo será movida para 0° definida pelo sistema do motor. Caso a largura de pulso for de 1,5ms, o motor irá girar para sua posição de 90° e manterá o ângulo até que a largura de pulso seja alterada. Se a largura do pulso for 2ms, a nova posição será de 180°. A imagem abaixo ilustra o sinal enviado para o motor e sua respectiva posição para os modelos citados.
Os servos de rotação contínua, por outro lado, não fornecem controle de posição angular por não possuirem o encoder do tipo potenciômetro. O controle desses modelos modificados são também por sinais com variação na largura de pulso entre 1 e 2ms.
1ms ≤ Rotação Sentido anti-horário < 1,5ms
Motor parado = 1,5ms
1,5ms < Rotação Sentido horário ≤ 2ms
Para conectar o servo ao arduino, faça a ligação como na Figura 6.
É recomendado usar uma fonte 5V externa para alimentação do servo motor para que não danifique a sua placa Arduino caso tenha um pico de corrente acima do limite (1A) em caso de travamento no eixo. Para fins didáticos, podemos usar os pinos 5V e GND da placa.
O primeiro passo para começar a usar o servo motor com a placa Arduino é instalar a IDE (integrated development environment) no seu computador. Caso já tenha a IDE do Arduino Instalada, pule para o próximo tópico.
Após a montagem e verificação do circuito elétrico do projeto, vamos a programação. Este projeto visa comandar o servo motor de maneira que o eixo do servo execute movimentos com diferentes velocidades:
Para isto, vamos utilizar a biblioteca “Servo.h” que implementa as funcionalidades de um servo motor tornando sua aplicação mais simples. Esta biblioteca já se encontra instalada no Arduino IDE e você pode encontra-la por meio do seguinte caminho na barra de ferramentas: Sketch > Incluir biblioteca > Servo.
Ao selecionar a opção da biblioteca “Servo”, o comando #include <Servo.h> aparecerá no editor de texto.
#include
Em void setup (), vamos declarar as conexões entre os fios do servo e as portas que serão utilizadas, para isso usamos a função attach (pino digital). Nesse exemplo, o fio laranja, de controle do servo (PWM) será conectado ao pino digital 2 do Arduino.
void setup(){
servo.attach(2); //declara pino digital utilizado
}
No loop, deverá ser criado dois laços de repetição usando o comando for: um para controlar a velocidade do servo motor de 125º a 180º e um segundo para fazer o processo inverso, ou seja, do 65º a 0°. Quando o micro servo retorna a posição inicial (90°), ele fica parado 1 segundo “delay (1000)”. Note que no intervalo de 65° a 125° a velocidade do servo é normal.
void loop(){
for (angulo = 125;angulo <= 180; angulo++){
//manda comando pro servo
servo.write(angulo);
//intervalo de execução
delay(100);
}
servo.write(90); // Ponto de parada
delay(1000);
for (angulo = 65; angulo >= 0; angulo--){
servo.write(angulo);
delay(100);
}
}
O código final desse projeto terá a seguinte estrutura:
#include
Servo servo; // cria o objeto servo
int angulo = 0; // declara origem do angulo como 0°
void setup(){
servo.attach(2); //declara pino digital utilizado
}
void loop(){
for (angulo = 125;angulo <= 180; angulo++){
//manda comando pro servo
servo.write(angulo);
//intervalo de execução
delay(100);
}
servo.write(90); //Ponto de parada
delay(1000);
for (angulo = 65; angulo >= 0; angulo--){
servo.write(angulo);
delay(100);
}
}
ROBOBUILDERS IMPORTACAO E COMERCIO DE PRODUTOS DE SISTEMAS E AUTOMACAO - CNPJ: 27.338.195/0001-30 © Todos os direitos reservados. 2022