Em uma de minhas andanças pela internet, encontrei o site de um amigo (Jeronimo Avelar Filho),
http://blogdoje.com.br/2008/11/07/controlando-motor-servo-de-parabolica-com-arduino/ que serviu de inspiração para que publicasse este post. (Afinal pra quê reinventar a roda! rsrsrsrs.)
Software
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 :
#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(8,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;
//case '6':
//Serial.println("Posicionado em 225 graus") ;
//myservo.write(225) ;
//break;
//case '7':
//Serial.println("Posicionado em 270 graus") ;
//myservo.write(270) ;
//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("6 - Posicionar em 225 graus") ;
Serial.println("7 - Posicionar em 270 graus") ;
Serial.println("Opcao ? ") ;
}
void piscaled() {
if( flag==0) {
digitalWrite(led,HIGH) ;
flag =1 ;
} else {
digitalWrite(led,LOW) ;
flag =0 ;
}
}
Em fim meus caros; Espero que estejam gostando!
o código pronto para teste está no linck abaixo,
link Programa controle servo pronto P/Transferir arduino.pde
Existe uma interface feita em C# que pode ser utilizada com este programa:
É bem simples e intuitiva, basta selecionar a porta (em minha máquina = 9)
a velocidade (9600).
click em "start"
após establizar a conecção, digitar o comando e enviar para que o servo se posicione.
vejam as figuras a seguir:
Viu para teste este projeto ajuda bastante!
eis o link para baixar:
easy talk compilado ( .exe )
easy talk compilado (.zip)
Façam comentários pois o termômetro deste site são vocês!
Neste site nada é proibido! Toda sugestão será bem vinda!
agora vou dormir um pouco...
Att.: Marcelo Bacana.
achei bastante interessante este esquema...mas gostaria de saber como comandar dois servos independentes, com placa "arduino".O servo1 indo de 0 a 180 e, parando e, o servo2 de 180 a 0, com controlo de passo 1º e, chegando ao fim do loop, saido do programa.Poderá me indicar o código para que eu possa testar? Muito obrigado
ResponderExcluirMuito Bom....
ResponderExcluirOk, bom tutorial so faltou uma imagem do esquema do servo com o Arduino, pro pessoal menos experiente, ajuda muito esse esquema.
ResponderExcluirValeu!!