Microcontroladores , Open Hardware , Open Software e Tecnologia em Geral
Blog do Je » Page 'Controlando Motor Servo de Parabolica com Arduino'

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

Gostou deste post ? Divulgue !
delicious digg google
stumbleupon technorati Yahoo!

42 commentarios to “Controlando Motor Servo de Parabolica com Arduino”

  1. 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 …

  2. 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.

  3. 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?

  4. Joselio ,
    De uma olhada no post sobre o Tatuino :
    http://blogdoje.com.br/2008/05/12/tatuino-o-primeiro-arduino-industrializado-nacional/

    Boa sorte !

  5. Olá Gostaria de saber se posso controlar esse tipo de servo com um radio controle?

    Att

  6. É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. Muito bacana esse post, vou salvar aqui. Comprei meu primeiro Arduino, ainda vai chegar, vou tentar justamente controlar um servo.

    Abraços, valeu.

  8. 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…

  9. 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

  10. 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.

  11. 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.

  12. 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 !!!

  13. 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

  14. 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?

  15. Cristiano , sugiro procurar algum forum ou site especializado em receptores de tv por satelite.
    Boa Sorte.

  16. 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

  17. 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 !!

  18. obrigado pela ajuda.
    Junior

  19. 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

  20. 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 !

  21. 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

  22. 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 !

  23. obrigado deu certo
    junior

  24. 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

  25. 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 !

  26. 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.

  27. 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

  28. 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

  29. 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 !

  30. 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

  31. 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 !

  32. Copiaram seu post na cara dura…

    http://arduinorj.blogspot.com/2010/08/software-um-dos-motores-servos-mais.html

  33. 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?

  34. 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/ .

  35. olá.

    só gostaria de saber algo:

    o que é : Serial.begin(9600) ; ?

    e o que é : myservo.write(0) ; ?

    me responda por favor.

  36. 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 !!

  37. Parabens pelo blog, gostaria de saber se alguma apostila ensinando passo a passo de como programar o PIC ou AVR, para quem quer inicializar.

  38. 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

  39. Olá, estou montando uma estrutura robotica que utiliza motores linear d rosca sem fim de portões eletronicos e é claro cada tem uma função. Somente o motor de giro da base e do primeiro braço trabalhará com redutor de velocidade e motores de 2cv de baixa rotação (1750rpm). O problema é que tudo isso trabalha com 110volts para efetuar os movimentos.(Giro, braço de base, antebraço, garra. Como eu poderia controlar tudo isso utilizando o arduino? É possível suavizar os movimentos de uma estrutura destas com motores de médio porte ? Obs: esta estrutura levantará 3 kilos e será para uso industrial semelhante a deste link “http://www.robots.com/inquiry/robot/798″

    Obrigado até o momento.

  40. Ola Andre , existem algumas formas de controlar motores e atuadores ac utilizando o Arduino. Sugiro que voce de uma pesquisada no google , existem diversos exemplos desta utilização que voce deseja :https://www.google.com/search?q=Arduino+ac+motor+control
    Boa sorte

  41. muito bom o seu artigo.
    Gostaria de comprar ou importar o servo motor gardiner azul.
    Onde compro?
    Você pode informar?

  42. Eu encotrei facilmente em lojas de eletronica aqui em Brasilia ( 310 sul ) onde o comercio de componentes é bem restrito . Acredito que em outras capitais tambem não seja dificil de achar.
    Abs

Topo da página / Assinar para receber novos Posts (RSS)