O Servo Motor Arduino é um equipamento utilizado nos mais diversificados projetos para controle de posição e movimento e está geralmente associado a projetos de pequena e média escala. Mesmo que bastante semelhantes, o servo motor é comercializado com ângulos de 180º e 360º (Rotação contínua).
Por ser um produto de fácil controle e aplicação, existem diversos modelos deste para venda, modelos com engrenagens metálicas e de plástico, modelos de diversos tamanhos e também servos motores de posição e servos motores de rotação contínua, um servo motor de 360º que possui especificações diferentes dos demais.
Para o servo motor de 180º existem diversos códigos para controle de posição e velocidade, porém estes códigos não se aplicam ao servo motor de 360º uma vez que este não possui as mesmas funções e não possibilita determinar um ângulo de parada para o mesmo, por exemplo.
Neste artigo vamos verificar a diferença entre os servos de 180 e 360º e desenvolver um método de controle para o servo motor de rotação contínua, vamos conhecer um pouco melhor o funcionamento destes motores e como eles são desenvolvidos.
Servo Motor Arduino de Posição
Os servos motores de posição são aqueles com ângulos máximos de 180º e que conseguem posicionar-se em ângulos exatos dentro do limite e a partir de 0º. São recomendados para projetos que necessitam de posicionamentos precisos e não corram perigo de alterar sua posição.
Uma vez que posicionado no ângulo determinado através do código Arduino, este equipamento tende a manter sua posição e mostrar-se resistente a reações externas, fator bastante importante em projetos e que se diferencia de motores DC, por exemplo, que não possibilitam posicionamentos específicos e não fixam posição já que quando parados não possuem tensão aplicada.
Sendo este, o modelo mais comum encontrado para venda e normalmente utilizado nos mais diversificados projetos, fica fácil encontrarmos códigos de funcionamento e esquemas de ligação para utilizar junto ao mesmo. Uma facilidade de utilização do Servo Motor está no fato de precisar uma única biblioteca já inclusa no Software Arduino.
O Servo motor é constituído de forma mecânica por um motor DC e um grupo de engrenagens, estes elementos são responsáveis pelo movimento, diminuição das rotações e parcial suba no torque básico do motor base.
O controle de posição do servo motor está diretamente relacionado um tipo de trimpot, que varia a sua resistência e indica o ângulo em que o servo se encontra, instalado junto de um pequeno circuito elétrico, estes são responsáveis pelo funcionamento e interpretação dos dados PWM fornecidos pelo Arduino.
Alguns modelos de Servo Motor como o Micro Servo Motor SG90, talvez o modelo mais famoso desta linha, possuem um exclusivo sistema de segurança que delimita os valores máximos e mínimos de deslocamento através de uma peça plástica fixada junto a uma de suas engrenagens, veja:
Para compreender um pouco melhor da aplicação e desenvolvimento de projetos junto ao Servo Motor Arduino, acesse o link abaixo, onde constam códigos e esquemas elétricos para seu controle.
https://www.usinainfo.com.br/blog/controle-de-posicao-servo-motor-com-arduino/
Servo Motor Arduino de Rotação Contínua
Diferente do Servo Motor de Posição, este modelo possui a capacidade de realizar movimentos maiores que 180º, possibilitando voltas contínuas que por sua vez, eliminam capacidade de controle do ângulo, ou seja, este servo não possui a capacidade de deslocar-se de acordo com ângulos determinados via código.
Semelhante a um motor DC, o Servo Motor 360º possibilita movimentos continuados em um único sentido, porém destaca-se uma vez que não necessita de um drive para inverter sua rotação, este procedimento é realizado diretamente via código. Um fator que diferencia o Servo Motor de Rotação Contínua do modelo de 180º é que este perde em partes a sua resistência às intervenções externas de movimento.
O Servo Motor de Rotação Contínua também é constituído mecanicamente por um motor DC e um grupo de engrenagens, responsáveis pelo movimento, diminuição das rotações e parcial suba no torque básico do motor base. O que diferencia o Servo de Rotação Contínua para o Servo de posição é a ausência do trimpot para verificação de ângulo.
O processo de fabricação de ambos os modelos tratados neste artigo são os mesmos, porém no Servo Motor de Rotação Contínua não é incluído o trimpot, o que gera um espaço vazio dentro do encapsulamento e faz necessária a inclusão de um pequeno divisor que separa o pino de rotação das engrenagens e impede o contado deste com o circuito.
Até então tratamos das diferenças físicas deste modelo, porém outra diferença bastante importante é quanto a sua programação. Os códigos utilizados no Servo de Posição não funciona da mesma maneira quando aplicado em projetos com o Servo Motor de Rotação Contínua.
Projeto de Aplicação para Servo Motor Arduino 360º
O esquema de ligação de ambos os modelos é o mesmo, o servo motor é constituído de três fios, dois de alimentação e um de comunicação com isto já conseguimos trabalhar os movimentos através do código Arduino. Veja abaixo, o esquema de ligação para aplicação do código Arduino:
Para quem preferir, fica disponível também esquema elétrico de ligação do projeto acima:
Como vemos, nada diferente do projeto desenvolvido com o Servo Motor de Posição, porém o código para utilização do Servo de Rotação Contínua possui algumas particularidades que se diferenciam bastante, veja abaixo o código completo e após breve explicação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include "Servo.h" // Inclui a Biblioteca Servo.h Servo meuservo; // Cria o objeto servo para programação int angulo = 0; // Ajusta o ângulo inicial do Servo void setup() { meuservo.attach(9); // Declara o pino do servo } void loop() { for (angulo = 110; angulo < 180; angulo += 10) { // Executa movimentos no sentido horário meuservo.write(angulo); // Altera sua velocidade de 10 em 10 delay(2000); // Cada velocidade funciona por 2 segundos } meuservo.write(90); // Para o servo motor delay(2000); // Aguarda 2 segundos para continuar for (angulo = 70; angulo >= 0; angulo -= 10) { // Executa movimentos no sentido anti horário meuservo.write(angulo); // Executa o ângulo de 10 em 10 graus delay(2000); // Cada velocidade funciona por 2 segundos } meuservo.write(90); // Para o servo motor delay(2000); // Aguarda 2 segundos para continuar } |
Teoricamente, os processos para execução do código são os mesmos, só que como já foi tratado anteriormente, o servo motor de rotação contínua não reconhece os ângulos como variáveis de posição, neste equipamento, os ângulos são tratados como variáveis de velocidade e sentido de rotação. Em resumo:
- Ângulos entre 180 e 110 graus executam movimentos com diferentes velocidades no sentido horário.
- Ângulos entre 0 e 70 graus executam movimentos com diferentes velocidades no sentido anti-horário.
- O ângulo de 90 graus determina um momento de parada para o Servo Motor.
- O delay determina quanto tempo o motor irá ficar acionado.
Por mais que não faça sentido, é isto mesmo, são os ângulos que determinam a velocidade de movimento do Servo Motor de Rotação Contínua, no código realizamos a variação do ângulo e velocidade através do seguinte comando:
1 2 3 4 |
for (angulo = 110; angulo < 180; angulo += 10){ meuservo.write(angulo); delay(2000); } |
De maneira interpretada, a função diz: para ângulos menores que 180 e acima de 110 soma-se em intervalos de 2 segundos um ângulo de 10º e executa-se este após ajuste, sendo que após chegar ao valor máximo termina a sequencia e vai para próxima.
Conclusão
Por mais que pareçam semelhantes em sua forma física, os Sevos Motores de 180 e 360º possuem peculiaridades que os diferenciam bastante, existem modelos de 180º com trava fim de curso e outros sem, modelos de posição possuem trimpot para determinar posição enquanto servos de rotação contínua não possuem.
Mesmo com um esquema de ligação extremamente igual, o código destes dois modelos de Servo Motor Arduino se diferencia uma vez que o de Rotação Contínua possui configurações próprias, mesmo que semelhantes, mas com ações diferentes.
Cada modelo possui suas distinções, porém um fator que deixa a desejar no Servo Motor de 360º é a sua perda de torque quando reduzida a sua velocidade, teoricamente o torque está diretamente relacionado com a velocidade.
Se já utilizou este motor e encontrou uma solução para sua utilização, comente abaixo e compartilhe as suas experiências com os demais, muitas outras possibilidades podem ser exploradas, a aplicação de uma biblioteca VarSpeedServo, por exemplo, ou diferentes meios de dispor as variáveis para uma melhor experiência.
Tenho um projeto que utilizaria servo atuando num ângulo de 270º. Acredito que a única maneira de controlar estes ângulos de 0 a 270 seria através de um sensor ótico ou chave no início ou final da rotação.
Concorda com isso ou teria outra solução?
Boa Tarde Lauro! Realmente, os servos com ângulos maiores que 180º não possuem posicionamento preciso então é necessário utilizar dispositivos como os que citou.
É um prazer ler trabalhos como esse.
Olá Gustavo! Muito Obrigado, que bom que tenha gostado.