Controlando Motor Servo de Parabolica com Arduino
Um dos motores servos mais baratos encontrados no mercado é o “motorzinho azul de parabólica.”. Ele possui curso de 0 a 180 graus e é usado para movimentar o elemento receptor da uma antena parabólica .É facilmente encontrado, com preços entre R$15,00 e R$ 20,00 reais, em lojas de eletronica ou especializadas em sistemas de tv por satelite

Como é comum a todos os servos este motor possui três fios: preto para o terra , vermelho para a tensão de alimentação e branco ou azul para o sinal de controle . Este sinal de controle determina o ângulo de giro do motor através da largura do pulso enviado ao motor. O sinal de controle é facilmente gerado por um microcontrolador através de uma saida PWM e no caso do Arduino, podemos gerar este sinal através de uma aplicação simule o pwm atraves de mudanças no estado do pino de saida ou usar uma biblioteca já pronta e atualmente disponível no ambiente de desenvolvimento do Arduino versão 0012.
Para testar a biblioteca e o motor liguei o fio branco de controle do motor servo ao pino 10 do Arduino .
O programa de exemplo abaixo utiliza a porta serial emulada através da conexão USB para enviar um menu com as opções de angulo de giro do motor e aguarda o recebimento da opção através da porta serial. Ao receber uma opção válida , o programa faz o motor servo se posicionar de 0 a 180 graus de acordo com a opção que houver sido selecionada a partir do menu .
O programa é muito simples e merecem atenção as instruções servo.attach e servo.write . A função servo.attach função pode ser usada em sua forma mais simples que especifica apenas o pino no qual o servo está ligado e usados os valores defaut para o tempo mínimo e máximo do pulso ( 544 e 2400 microsegundos respectivamente) ou então pode ter também passados os este valores como parâmetros da função. O objetivo de passar estes valores é propiciar um ajuste fino para o motor servo que se está utilizando. No caso do motor servo de parabólica, eu utilizei os valores de x e y nos quais os motor se posicionou de forma mais precisa nos referenciais de 0 e 180 graus . Pra fazer o servo girar para um determinado angulo é utilizada a função nome_do_servo.write(angulo) como no exemplo abaixo.
Servo myservo ;
int led = 13 ;
int flag = 0 ;
int i ;
int char_in ;
void setup()
{
Serial.begin(9600) ;
pinMode(led , OUTPUT) ;
myservo.attach(10,880,2300) ;
colocaMenu() ;
}
//
...
...
//
case '1':
myservo.write(0) ;
Serial.println("Posicionado em 0 graus") ;
break;
Este motor servo de parabólica não possui um torque muito elevado e é preciso avaliar o que se vai movimentar com ele já que todas as suas partes são em plástico. Um detalhe importante é que a peça abaixo ligada ao eixo do motor é projetada para utilização na antena parabólica e é necessário adaptar ou construir uma peça de plástico para um formato mais adequado a utilização final no seu projeto .
Este motor internamente possui uma trava mecânica e se for enviado para ele um pulso maior que o máximo suportado, ele ficará batendo contra esta trava e poderá ser danificado .
Internamente o motorzinho possui um circuito de controle com um potenciómetro ligado ao eixo de movimentação, que identifica se o eixo está no ângulo correto .
Existem diversos outros servos que podem ser utilizados principalmente os usados em aeromodelos. Estes servos estao disponiveis em diversos modelos e tamanhos com torques maiores e acabamentos em metal , proporcionando maior controle na movimentação e resistencia ao desgaste das peças , pas para começar a brincar e fazer algum projeto que não necessite de componentes com maior precisão , este motorzinho de parabólica é uma mão na roda .
Programa para teste do Servo :
/* ServoMotorByLib
*
* Coloca menu com opcoes para selecionar o angulo a ser comandado no servo motor
* Interface atraves da porta serial direta ou via USB
* Autor: Jeronimo Avelar Filho
* http://www.blogdoje.com.br
*/
#include <Servo.h>
Servo myservo ;
int led = 13 ;
int flag = 0 ;
int i ;
int char_in ;
void setup()
{
Serial.begin(9600) ;
pinMode(led , OUTPUT) ;
myservo.attach(10,880,2300) ;
colocaMenu() ;
}
void loop()
{
//piscaled() ;
if(Serial.available() > 0 ) {
char_in = Serial.read() ;
if(char_in != -1) {
Serial.println(char_in,BYTE) ;
piscaled() ;
switch (char_in) {
case '1':
myservo.write(0) ;
Serial.println("Posicionado em 0 graus") ;
break;
case '2':
Serial.println("Posicionado em 45 graus") ;
myservo.write(45) ;
break;
case '3':
Serial.println("Posicionado em 90 graus") ;
myservo.write(90) ;
break;
case '4':
Serial.println("Posicionado em 135 graus") ;
myservo.write(135) ;
break;
case '5':
Serial.println("Posicionado em 180 graus") ;
myservo.write(180) ;
break;
default :
Serial.println("Opcao Invalida") ;
break;
}
}
}
}
void colocaMenu() {
Serial.println("Teste de motor servo") ;
Serial.println("Selecione :") ;
Serial.println("1 - Posicionar em 0 graus") ;
Serial.println("2 - Posicionar em 45 graus") ;
Serial.println("3 - Posicionar em 90 graus") ;
Serial.println("4 - Posicionar em 135 graus") ;
Serial.println("5 - Posicionar em 180 graus") ;
Serial.println("Opcao ? ") ;
}
void piscaled() {
if( flag==0) {
digitalWrite(led,HIGH) ;
flag =1 ;
} else {
digitalWrite(led,LOW) ;
flag =0 ;
}
}
Atualização em 05/08/2009
No site “Robótica Simples” tem um modificação interessante que coloca parafusos no disquinho HORN do servo de parabólica. Vale a pena dar uma olhada em http://www.roboticasimples.com/artigos.php?acao=16
Posts relacionados:
Liberada Arduino IDE versão 0016
AVR Technical Library DVD
AvrFreaks




8. November 2008 at 10:05 am :
Este arduíno e seus acessório parecem realmente fantásticos. O fato de ter encapsulamento DIP e o projeto de hardware aberto acaba colocando-o na frente do MSP430, que até então era uma das minhas preferências. Eu fico pensando o que faz um hobbista usar PIC …
8. November 2008 at 11:24 am :
Marcelo,
Esta é mais uma das “guerras santas” : PICs X AVRs . Defensores apaixonados de ambos os lados tentam convencer que o dele é o melhor. O próprio projeto do Arduino, foi inicialmente prototipado com PICs mas o custo , facilidade de uso , ferramentas livres criadas pela comunidade , ferramentas gratuitas do proprio fabricantes fizeram o ATMEGA8 ser o escolhido final para o projeto. Alem disso o projeto que é pai do Arduino , o Wiring, já usava o ATMEGA128 e já tinha muitas bibliotecas prontas facilitando o porte para o ATMEGA8.
24. December 2008 at 4:07 pm :
Olá! É a minha primeira vez aqui e verifiquei que você mostra muito sobre o Arduino. Você sabe me dizer se existem representantes para os módulos e o próprio Arduino no Brasil?
3. January 2009 at 12:08 pm :
Joselio ,
De uma olhada no post sobre o Tatuino :
http://blogdoje.com.br/2008/05/12/tatuino-o-primeiro-arduino-industrializado-nacional/
Boa sorte !
7. January 2009 at 10:20 am :
Olá Gostaria de saber se posso controlar esse tipo de servo com um radio controle?
Att
7. January 2009 at 7:17 pm :
Éder , Imagino que voce esteja falando sobre radio-controle para aero-modelos na linha dos fabricados pela Futaba , infelizmente conheço muito pouco sobre o funcionamento para te orientar sobre a substituição . O funcionamento dos servos de parabólica é igual aos usados no radio-controle mas com certeza será necessário verificar, antes de ligar , se os servos tem as mesmas tensões de trabalho e consumo de corrente para alimentação e pulso de controle. Testar sem essa informação pode levar voce a “fritar” o radio-controle, que são muito mais caros que o servo de parabólica.
Boa Sorte !!
7. February 2009 at 11:11 pm :
Muito bacana esse post, vou salvar aqui. Comprei meu primeiro Arduino, ainda vai chegar, vou tentar justamente controlar um servo.
Abraços, valeu.
8. April 2009 at 11:29 am :
EDER,
Pode sim. Eu mesmo já o fiz.
É só conectar os 3 fios do servo no receiver do rádio controle. Atenção apenas para a tensão do receiver, os mais modernos operam de 3 a 12V, mas o servo de parabólica é 5V.
Esse servos de parabolica são uma bosta. No Ebay vc compra uns mini-servos com 1/5 do tamanho e custando 10 dolares o par… esses de parabolica são uns 20 a 30 reais aqui no brasil…
22. April 2009 at 2:59 pm :
Eu baixei o codigo fonte acima e compilei no programa Arduino 0015. Este seu programa ele parece abrir uma opção de prompt pra pessoa escolher qual lado vira-lo. Mas como faço para compilar este programa num .exe ou mesmo utilizar este programa para ele se comunicar com a interface ? valeu
22. April 2009 at 3:38 pm :
Rafael,
Voce já tem o Tatuino ou Arduino ? O programa deve ser compilado e carregado no Tatuino para ser executado no Tatuino. O programa não é executado no PC.
7. October 2009 at 4:52 pm :
Ola Amigo, Sou novato com arduino e não tenho muita experiência nesse assunto antão talvez você possa tirar essa duvida quando faço a alimentação do arduino externamente o servo obedece ao comandos perfeita mente e o giro é suave e continuo até o ponto desejado mais ao fazer a alimentação via usb o movimento e feito com pausas ou seja parecendo que o servo esta travando (tanto para um servo de parabólica e um mg995) você sabe qual o problema e se tem solução pois quero usar a comunicação serial para controlar o servo e não consegui alimentá-lo externamente mantendo a conexão serial fico grato pela reposta se a mesma vier
Parabéns pelo site ótimo post.
7. October 2009 at 5:03 pm :
Ronaldo.
Acredito que seja devido a limitação de corrente fornecida pela USB que é de 500 miliamperes· O somatório da corrente consumida pelo Arduino e pelo servo acionado está chegando perto do limite. Em consequencia a tensão de alimentação diminui e provavelmente o Arduino está sendo resetado. Sugiro manter o Arduino alimentado pela USB e alimentar o servo com uma fonte de alimentação independente ou 4 pilhas de 1,5 Volts , sem esquecer de interligar os terras (gnd ou - )
Boa Sorte !!!
9. October 2009 at 11:55 pm :
Puts era isso mesmo Muito Obrigado pela dica eu até ja tinha tentado alimentar o servo externamente e não tinha obtido resulta pos faltava interligar o gnd como vc disse hehe vivendo e aprendendo ainda bem que sempre podemos contar com pessoas como vc disposta a ajudar obrigado
3. January 2010 at 9:30 pm :
Olá!
Tô procurando ajuda.
Não consigo boa imagem da minha parabolica,já procurei a melhor posição para a antena e ainda assim tem canais que é só chovisco, o que pode ser?
7. January 2010 at 12:50 pm :
Cristiano , sugiro procurar algum forum ou site especializado em receptores de tv por satelite.
Boa Sorte.
24. February 2010 at 6:27 pm :
ola!
vou comprar um Arduino Duemilanove com ATmega328 para fazer meu trabalho de tcc, que sera um braço mecanico.
eu andei pesquisando sobre os servos posição e servo rotação, e não consegui chegar em uma conclusão de qual usar.
vc poderia me ajudar ?
por exemplo qual a diferença dos dois servo, qua é o mais indicado para montar um braço mecanico pequeno e simples, se puder me indicar um site confiavel para eu compra, marcas indicadas, eu gostaria que os servos fosse de 180º.
eu andei olhando em alguns site e reparei que a grande maioria eram de 60º vc poderia me esplicar como funciona?
obrigado
Junior
25. February 2010 at 4:32 am :
Ola Junior,
A grosso modo, um servo de rotação fica continuamente rodando e voce comanda o sentido em que ele vai rodar.Já o servo de posição recebe um comando para atingir um determinado angulo, movimenta-se ate chegar a este angulo e fica parado nesta posição. Eu acredito que o melhor para o seu objetivo será utilizar servos de posição. O melhor servo a ser indicado dependerá de uma serie de fatores, por exemplo: precisão na movimentação, força necessária , velocidade , etc. Estes fatores influenciarão diretamente no preço dos servos. Existem servos de 180 graus e os mais faceis de serem encontrados são os usados em aeromodelismo, a maioria das lojas especializadas tem e o mercadolivre tambem tem uma grande oferta. Sugiro que voce pesquise no google e no youtube sobre projetos de braços roboticos, robotic arms, arduino robotic arms e outras variações. Este tipo de projeto é muito popular na internet.
Boa sorte no seu TCC !!
25. February 2010 at 12:02 pm :
obrigado pela ajuda.
Junior
28. February 2010 at 7:26 pm :
o programa que foi usado a cima e o c++?
vou comprar um Arduino Duemilanove com ATmega328, qual são as linguagem de programação que posso utilizar?
obrigado
Junior
28. February 2010 at 8:09 pm :
Junior, O programa acima foi feito no ambiente de desenvolvimento do projeto Arduino que usa a linguagem Processing com bibliotecas desenvolvidas em C++. Os controladores AVR de 8 bits da Atmel , do qual fazem parte os ATmega8 , 88 , 168 e 328 usados no Arduino, podem ser programados em C, C++, Assembler, Basic, Processing, Forth e até Java com limitações.
Divirta-se !
12. March 2010 at 10:04 pm :
ola!
antes de mais nada eu queria te dar os parabens pelo seu blog que nos ajuda muito.
eu comprei o Arduino Duemilanove com ATmega328 e estou usando o programa 0017, quando eu faço a verificaçao ele da esta menssagem Binary sketch size: 2450 bytes (of a 30720 byte maximum), parece normal.
mas quando eu faço o upload ele da este erro
problem uploading to board.
avrdude: stk500_getsync(): not in sync: resp=0×00
avrdude: stk500_disable(): protocol error, expect=0×14, resp=0×51
vc pode me ajudar?
obrigado
junior
13. March 2010 at 12:23 pm :
Ola Junior,
Inicialmente sugiro que voce atualize o seu ambiente Arduino para a versão 0018,
Quanto ao problema que voce relata , sugiro que voce verifique se no menu Tools > Board se a opção selecionada de placa e processador corresponde a sua plava. Verifique tambem se no menu Tools > Serial Port se a porta correta ao qual esta ligado o arduino no seu computador está selecionada. Outra sugestão é dar reset no Arduino antes de fazer o upload do programa,
Boa sorte !
14. March 2010 at 10:39 am :
obrigado deu certo
junior
14. March 2010 at 10:02 pm :
ola amigo!
eu preciso movimentar 5 servos simultaneamente,
estou usando a versao 0018 que vc me recomendou, e a liguagem em c,
e nao estou conseguindo fazer ele volta, por exemplo eu mando o servo 1 para 180º ele vai e para certinho, mas quando eu tento voltar para 0º o servo fica louco ele vai e volta bem rapido, eu estou usando o comando void loop, ou se vc estiver outro comando mais facil de lidar pode me mandar, minha placa e o Arduino Duemilanove com ATmega328.
vc podia me ajudar de novo?
obrigado Junior
14. March 2010 at 11:09 pm :
Junior,
Atenção com a alimentação dos servos, use uma fonte de alimentação para os servos , não os alimente através do Arduino, é possivel que o excesso de corrente esteja resetando o Arduino. Não se esqueça de ligar o negativo ou gnd da alimentação dos servos com gnd/negativo do Arduino.
Boa Sorte !
16. March 2010 at 10:50 pm :
me corrija se eu estiver errado:
negativo do servo no gnd do arduino.
positivo do servo na fonte de alimentação.
comando do servo no pwm do arduino.
é isto?
obrigado de novo.
17. March 2010 at 10:09 am :
Junior ,
Tudo ok , so tenha atenção que o negativo do servo ,o negativo da fonte do servo e o negativo do Arduino precisam estar os tres ligados juntos
30. August 2010 at 10:37 am :
ola bom dia, estava eu procurando um site onde me ajudasse a ligar esses tres fios do servo motor da parabolica e achei este,não sou profissional na instalaçao de parabolica mas sei como pegar o sinal porém esse tipo de Lnb Gardiner, Servo Motor,nunca tipa me aparecido logo não sei onde ligar estes tres fios sendo-os branco vermelho e preto, se puder me ajudar ficarei grato. obrigado abraços
30. August 2010 at 10:47 am :
Regis,
O motor é alimentado com tensão DC atraves dos fios PRETO ( terra , gnd ou 0 Volts ) , VERMELHO para a tensão de alimentação e BRANCO ou AZUL para receber o sinal PWM que faz o motor se movimentar.
Nao conheço os circuitos de controle das antenas parabólicas mas sei que existem forums na internet em portugues especificos para este assunto, de uma pesquisada no Google.
Boa sorte !
26. February 2011 at 3:07 pm :
Ola boa tarde meu nome é Lucas estou no ultimo ano de engenharia mecatronica e estou fazendo um projeto de controle do sistema de comando das aletas de uma missel, vou usar um arduino mega e servomotores para controle das aletas, porem ñ tenho muita experiencia na programação do arduino queria se fosse possivel da sua ajuda para que eu possaa fazer a programação no arduino vou usar 4 servomotores! Vi seu blog e as postagens q vc deixou e achei q vc poderia me ajudar se possivel aguardo contato
Um otimo fim de semana
26. February 2011 at 4:53 pm :
Lucas ,
Experimente , faça seu prototipos e qualquer duvida especifica é só colocar aqui no blogdoje. É muito simples de usar servo-motores com o Arduino , boa sorte !
1. April 2011 at 7:08 pm :
Copiaram seu post na cara dura…
http://arduinorj.blogspot.com/2010/08/software-um-dos-motores-servos-mais.html
3. September 2011 at 2:21 pm :
boa tarde amigo! vc disse que o fio de controle vai direto no pino 10 do arduino, a minha duvida e o seguinte; se esse controle não ira ultrapassar a potencia maxima da saida do arduino?
4. September 2011 at 10:32 am :
Bom dia a todos, rspondendo ao amigo Marcelo Barros, o fato de um hobista usar ou não o PIC ou AVr, é uma questão de opção, é como Apple, Microsoft ou Linux, cada um usa o que gosta, e outro detalhe importante a quem você foi apresentando primeiro, utilizo Linux e Windows a mais de 10 anos, e me sinto muito bem em ambos ambientes, eu gosto de cueca da LUPO mas há quem usa Zorba ou Mash, e para delírio da galera, segue o link do concorrente a altura e que vai fazer jus aos usuários do PIC https://pinguinobrasil.wordpress.com/ .
1. October 2011 at 9:56 am :
olá.
só gostaria de saber algo:
o que é : Serial.begin(9600) ; ?
e o que é : myservo.write(0) ; ?
me responda por favor.
1. October 2011 at 6:08 pm :
Vini ,
Serial.begin(9600) - configura a serial para comunicaçao em 9600 bps.
myservo.write(0) - comando o servo para posicionar o seu angulo em 0 graus.
De uma olhada nas referencias das bibliotecas principais do arduino em http://arduino.cc/en/Reference/Libraries
Divirta-se !!
27. November 2011 at 2:32 pm :
Parabens pelo blog, gostaria de saber se alguma apostila ensinando passo a passo de como programar o PIC ou AVR, para quem quer inicializar.
27. November 2011 at 5:30 pm :
Ola Reinalto ,
de uma olhada no post http://blogdoje.com.br/2007/06/02/professor-geovany-araujo-borges/ . No final tem o link para a pagina do professor, contendo uma apostila bem completa, em portugues sobre progrmação de AVRs.
Divita-se