Servomotor para aplicações com arduino – Garra robótica

Garra robótica aberta

Neste novo artigo iremos abordar um dos tópicos mais importantes para a automação e controle de processos. Vamos aprender como controlar e interfacear o Arduino com um servomotor. Esses pequenos atuadores são utilizados em diversas aplicações na indústria, na automação e robótica. O Arduino permite controlar e implementar funcionalidades para servomotores de forma fácil e eficiente. Vamos aprender o que são e como funcionam os servomotores, e implementar no arduino uma aplicação para controlar um servo TowerPro MG995.

 

Introdução

 

Um servomotor é um equipamento eletromecânico que possui um encoder e um controlador acoplado. Diferentemente de motores tradicionais, como de corrente contínua, o servo motor apresenta movimento rotativo proporcional a um comando de forma a atualizar sua posição. Ao invés de girar continuamente como os motores de corrente contínua, o servo, ao receber um comando, gira até a posição especificada pelo mesmo.

Ou seja, o servo motor é um atuador rotativo para controle de posição, que atua com precisão e velocidade controlada em malha fechada.

A figura mostra um típico servo motor. Trata-se do TowerPro MG995, que será usado nas próximas seções junto com o nosso arduino UNO.

Figura 1: Servo motor TowerPro MG995. Imagem: Eletrogate

O servo-mecanismo utiliza um sinal de feedback de posição para controlar a velocidade e a posição final do eixo do motor. O servo motor é composto pelos seguintes componentes principais:

  • Atuador: Consiste em um motor em conjunto com um sistema de engrenagens e redução para amplificação de torque. A maioria dos servos utiliza motores de corrente contínua, mas também há modelos que utilizam motores CA. Alguns servos trabalham com atuadores de até 180º de liberdade de giro, outros modelos possuem 360º de liberdade de giro. Esse parâmetro, bem como a velocidade e o torque são especificações que variam de modelo para modelo e devem ser analisadas para cada aplicação;
  • Sensor(encoder): O sensor consiste em um medidor de posição, geralmente um potenciômetro acoplado ao eixo do motor, cuja resistência elétrica está associada a posições diferentes do eixo do motor. Encoders também são utilizados para medir a velocidade do motor;
  • Controlador e circuitos complementares: Este é o circuito de controle do servo motor. A saída dos sensores é utilizada como realimentação e comparada com o sinal de controle (posição e velocidade desejadas). A diferença dos dois sinais é o sinal de controle utilizado pelo circuito controlador para corrigir a posição do atuador.

 

Especificações

 

Os Servos são acionados por meio de três fios, dois para alimentação e um correspondente ao sinal de controle para determinar a posição. No caso do TowerPro MG995, os três fios são:

  • Vermelho: Alimentação positiva;
  • Marron: GND;
  • Laranja: Sinal de controle PWM;

Veja na figura 2 como é a cabo de ligação do servo motor.

Figura 2: Fios de ligação do TowerPro MG995. Imagem: Eletrogate


O MG995 possui uma liberdade de rotação de até 180º, sendo 90º para cada direção de rotação. O sinal de controle é um PWM em 50Hz (período de 20ms) e a tensão de operação é de 4.8V até 7.2V. O servo vem acompanhado de um conjunto de acessórios e possui engrenagens metálicas, o que o faz ideal para ser usado em aplicações de robótica em que se precise de um servo resistente e de alto torque.

Veja na figura 3 o conjunto de acessórios que acompanha o servo.

 

 

Figura 3: Servo motor MG995 mais conjunto de acessórios. Imagens: Eletrogate

 

Tipos de servo motores

 

Os servo motores são classificados de acordo com a natureza de sua alimentação. Ou seja, podem ser servos CA ou CC. Os servomotores de corrente contínua são do tipo imã permanente com escova e são utilizados em aplicações pequenas em razão de serem simples e terem custo baixo.

Servos de corrente alternada, por sua vez, podem ser subdivididos em servos que utilizam motores de indução(assíncronos) e servos que utilizam motores síncronos.  Em geral são maiores e de potência mais elevada, sendo comumente utilizados na indústria em aplicações de maior potência e nas quais se exige maior robustez.

 

Aplicações

 

Os servos são utilizados em várias aplicações em que é preciso controlar posição com precisão e velocidade altas. Tanto na indústria como no universo hobbysta os servos são muito populares. Dentre as principais aplicações podemos citar as seguintes:

  • Aeromodelismo;
  • Automodelismo;
  • Nautimodelismo;
  • Robótica;
  • Automação de processos;
  • Controle de válvulas;
  • Qualquer aplicação em que seja preciso controlar posição ou movimento;

Agora que você conhece o que é um servomotor e suas aplicações, vamos entender como controlá-lo utilizando o Arduino.

 

Descrição do Projeto

 

Independente de qual seja a aplicação do servo motor, a interface básica com Arduino será a mesma. Precisamos utilizar um sinal para setar a posição que desejamos. Geralmente isto é feito por meio de um potenciômetro. Esse sinal do potenciômetro é lido pelo Arduino e usado para gerar um sinal PWM proporcional à resistência do potenciômetro. Esse PWM é o sinal de controle do servomotor. Assim, ao variarmos a resistência elétrica do potenciômetro, variamos também a posição do servomotor. Esta montagem pode ser usada por exemplo para controlar a abertura de uma válvula, por exemplo, desde a posição de totalmente fechada, passando por todas aberturas intermediárias, até a posição de totalmente aberta.

Uma outra forma de utilizar o servo é para abrir e fechar uma válvula segundo uma lógica ON/OFF. Ou seja, utilizar o servo como o acionamento da válvula. Assim, apertando um botão de controle o servo abre e fecha a válvula completamente, o que significa fazer o giro completo de 180º do servomotor.

Por fim, vamos mostrar um exemplo no qual vamos controlar uma garra robótica usando o servomotor. O mesmo software que você vai aprender é usado para essa aplicação. Está preparado?

Vamos para a montagem do hardware!

 

Aspectos de Hardware

 

Antes de mais nada, vamos separar os componentes que precisamos para montar o servomotor junto com o arduino. A nossa lista de componentes é a seguinte:

  • Servomotor TowerPro MG995 + acessórios;
  • Arduino UNO + cabo USB;
  • Potenciômetro de 10k;
  • Fonte 5V de protoboard para alimentar o servo;
  • Jumpers para conexão no protoboard;
  • Push button;

A montagem é simples. O servomotor em si deve ser ligado à alimentação conforme as cores apresentadas na introdução. O MG995 chega a consumir 350mA quando em operação. A corrente em modo estático fica em torno de 5mA. De acordo com as especificações de tensão e corrente dos pinos do arduino UNO, os pinos de VCC e GND da placa conseguem fornecer até 200 mA, ou seja, é necessário utilizar uma fonte externa para alimentar o servo.

Assim, a montagem para uma aplicação de controle do servo em qualquer posição fica da seguinte forma:

 

 

Figura 4: Circuito Arduino UNO com servomotor

 

 

Na figura 5 temos uma segunda montagem, utilizada para utilizar o servo como um acionamento ON/OFF de válvulas ou qualquer outro mecanismo de abertura. Nessa montagem, o botão é utilizada como sinal de comando.

 

 

Figura 5: Controle de servomotor para abertura e fechamento total comandado por botão

 

 

Lembre-se de que o GND do Arduino deve estar conectado com o GND da fonte de externa de alimentação do servomotor. Além disso, talvez seja interessante ligar um resistor em um dos terminais do potenciômetro, para evitar de que na posição de menor resistência a corrente atinja valores muito altos.

 

Aspectos de software

 

Os softwares para cada um dos circuitos são semelhantes. Vamos começar pelo firmware do circuito da figura 4.

 

 

Figura 6: Firmware para circuito da figura 4

 

 

O aspecto mais importante desse software é a utilização da biblioteca servo.h. Esta biblioteca possui as funções necessárias para posicionar a servo para a posição desejada.

Na função Void Setup() nós associamos o objeto servomotor, do tipo Servo, a um pino do arduino. Na mesma função, nós inicializamos o servo na posição 0º, utilizando o método write do objeto que acabamos de criar.

 

Loop principal

 

Na função Void Loop(), o procedimento consiste em ler o valor do potenciômetro e usá-lo como referência para atualizar a posição do servo. A leitura analógica do potenciômetro retorna um valor entre 0 e 1023. Para setar o servo nós usamos valores de 0 a 179, correspondendo ao giro de 180º do mesmo. Assim, é necessário usar a função Map() para traduzir a escala de 0-1023 para a escala de 0-179. Dessa forma, os valores lidos do potenciômetro podem ser usados como referência para setar a posição do servomotor.

Para atualizar a posição do servo a cada iteração do loop, nós chamamos o método write() do objeto servomotor, passando como parâmetro o valor lido do potenciômetro traduzido para a escala de 0-179.

Assim, sempre que mexermos no potenciômetro, o servo motor irá atuar e atualizar a sua posição.

Agora vejamos o firmware para o circuito da figura 5. Veja abaixo:

 

Figura 7: Firmware para circuito da figura 5

 

 

Esse segundo firmware é semelhante ao primeiro. Aqui nós vamos ler o estado de um botão e “abrir” ou “fechar” o servomotor. Na função Void Setup() inicializamos o pino para leitura do estado do botão e associamos um pino do Arduino ao objeto servomotor, declarado no início do programa. Ao mesmo tempo já setamos o servo para um estado inicial, correspondente à posição de fechado.

Na função Void Loop(), constantemente lemos o estado do botão e o último estado do servo. Se o botão foi ativado e o último estado do servo era fechado, então nós setamos o servo no sentido de abrir a válvula ou mecanismo de abertura. Caso o último estado tem sido de abertura, nós giramos o servo no sentido de fechamento.

Aplicação: Garra Robótica

 

Vamos mostrar uma das aplicações mais legais dos servomotores com Arduino. O mesmo software que desenvolvemos acima pode ser usado para controlar a garra. Caso queira apenas abrir ou fechar a garra, pode ser usado o software para o circuito com pushbutton. Caso queira controlar o grau de abertura e fechamento da garra, pode escolher o software que usa o potenciômetro para controlar o servo.

A garra robótica é fácil de montar e pode ser encontrada aqui. Peça a sua!

Veja abaixo as imagens da montagem para abrir e fechar a garra robótica:

Garra robótica aberta

 

Garra robótica fechada

A montagem da garra robótica pode ser feita com base nas imagens do link que indicamos mais acima. É uma peça bem autoexplicativa, e todas as peças necessárias para montar já vem no kit da garra. Depois de montada e já com o servo embutido, no caso, um micro servo de 9g da TowerPro, ao acionar o servo usando o potenciômetro, pode-se controlar o grau de abertura da garra. Ao controlar o servo com o botão(ON/OFF), pode-se abrir ou fechar a garra de acordo com o botão.

Considerações finais

 

Com a biblioteca servo.h e os dois exemplos que você acabou de aprender é possível controlar a maioria dos servomotores disponíveis no mercado. Lembre-se de que servomotores com torque maior consomem mais corrente do que o Arduino é capaz de fornecer e devem ser ligados a uma fonte de alimentação externa.

Ficou alguma dúvida? Não conseguiu reproduzir o que foi descrito no projeto? Deixe as suas dúvidas aqui no blog para nós e os colegas do blog tentarmos te ajudar! Fique atento às novas postagens e até a próxima!

Avaliações: 5.0. de 1 voto.
Por favor, aguarde...
Vitor Vidal
Vitor Vidal
Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.