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 um servo motor com Arduino.
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.
Um servo motor é 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.
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:
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;
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;
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.
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:
Veja na figura 2 como é a cabo de ligação do servo motor:
Figura 2: Fios de ligação do TowerPro MG995.
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 motor 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.
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.
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:
Agora que você conhece o que é um servomotor e suas aplicações, vamos entender como controlá-lo utilizando, a integração do servo motor com Arduino.
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 do servo motor com Arduino!
Antes de mais nada, vamos separar os componentes que precisamos para montar o servomotor junto com o arduino.
Materiais necessários para o projeto com Servo Motor e Arduino
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 motor com Arduino em qualquer posição fica da seguinte forma:
Figura 4: Montagem para uma aplicação de controle do servo motor com Arduino
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.
Os softwares para cada um dos circuitos são semelhantes. Vamos começar pelo firmware do circuito da figura 4.
#include <Servo.h> Servo servomotor; // Cria objeto para controlar o servo int potPin = 0; // Especifica em qual pino o sinal do potenciometro está ligado int readAnalog = 0; // Variável para armazenar o valor lido do potenciometro void setup(){ Serial.begin(9600); servomotor.attach(servoPin); // Associa o pino 7 ao objeto servomotor servomotor.write(0); // Inicia servomotor na posição zero } void loop(){ // Lê o valor do potenciometro. Esse valor está entre 0 e 1023 readAnalog = analogRead(potPin); Serial.println(readAnalog); // Traduz a escala de 0-1023 para uma escala de 0-179, usado pelo servo readAnalog = map(readAnalog, 0, 1023, 0, 179); // Seta o sinal de controle de acordo com o potenciometro servomotor.write(readAnalog); delay(500); }
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.
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. P
ara 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:
#include <Servo.h> Servo servomotor; // Cria objeto para controlar o servo int Abertura = 50; int Fechamento = 0; int UltimoEstado = 0; int sevoPin = 7; // Especifica o pino usado para controlar o servo int readPin = 8; // Variável para armazenar o valor lido do potenciometro void setup(){ pinMode(readPin, INPUT); Serial.begin(9600); servomotor.attach(servoPin); // Associa o pino 7 ao objeto servomotor servomotor.write(Fechamento); // Inicia servomotor na posição zero } void loop(){ if (digitalRead(readPin) == HIGH && UltimoEstado == 0){ servomotor.write(Abertura); UltimoEstado = 1; delay(100); }else if (digitalRead(readPin) == HIGH && UltimoEstado == 1){ servomotor.write(Fechamento); UltimoEstado = 0; delay(100); } delay(500); }
Você também pode conferir o código completo e atualizado visitando o repositório desse post no GitHub da Eletrogate.
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.
Vamos mostrar uma das aplicações mais legais dos servo motores 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.
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
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!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!