quinta-feira, 27 de maio de 2010

Servo Motor com Arduino

Apresentação:
Controlar um servo motor utilizando a placa Arduino 2009 é muito fácil! Neste post realizaremos um projeto muito simples mas que mostra a capacidade e as possibilidades do arduino.

Bem, para este pequeno projeto precisaremos de:
- 1 Protoboard (pode ser qualquer uma mesmo, não importa a quantidade de pontos);
- 1 Servo motor;
- 1 Potenciômetro de 10K;
- Alguns jumpers ou fios (neste projeto usei o fios de um cabo par trancado que não tinha mais utilidade);

O que faremos?
Esse projeto esta descrito no site do arduino em http://arduino.cc/en/Tutorial/Knob e exemplifica como controlar a posição de um servo motor a partir da mudança de resistência de um potenciômetro.
Isso mesmo, você vai girar o eixo do potenciômetro (isso vai mudar a resistência interna) e o valor da resistência será lido pelo conversor analógico-digital do micro controlador na placa arduino. Com base no valor digital da resistência o código dentro do arduino irá mapear a posição do eixo do servo motor.

Como ligar os acessórios?
Como sempre, ligue a sua placa arduino ao seu computador utilizando o cabo USB e abra o programa de desenvolvimento/gravação do arduino. No menu (Tools ou Ferramentas) configure a sua placa (a minha é uma arduino 2009 com micro controlador ATMega328) e agora configure a porta serial de acordo com as portas disponíveis na sua máquina.
Ainda não codificaremos, aguarde um pouco.

Servo motores possuem 3 fios: Alimentação, terra e sinal. Consulte a folha de dados do seu servo para conhecer as tensões que ele suporta sendo que normalmente os servos trabalham com 5 ou 6V.

Potenciômetros também possuem normalmente 3 fios, os pinos externos serão ligados em VCC e GND e não se preocupe que não há uma orientação padrão tanto faz ligar um ou outro em VCC e GND.

Montagem:

Para ficar mais claro eu fiz assim:

Peguei um jumper e liguei uma das pontas do fio na placa arduino onde diz 5V, a outra ponta liguei em uma trilha da protoboard. Peguei outro fio e liguei uma das pontas na placa arduino onde diz GND e a outra ponta em outra trilha. Fiz isso para trazer os sinais de tensão de 5 e 0V para a protoboard.

Agora pegue o cabo do servo, utilizando outro jumper ligue uma das pontas do fio no cabo vermelho do servo, ele normalmente indica alimentação. Ligue a outra ponta do fio na protoboard na trilha onde temos o sinal de 5V.

Execute o mesmo processo para o fio preto do servo, utilize um jumper para ligar este fio na trilha GND ou 0V na protoboard.

Agora para finalizar com o servo ligue um jumper no conector onde temos o fio amarelo do servo, a outra ponta deverá ser conectada na porta 9 do arduino.

Se o seu potenciômetro não possui cabos soldados aos seus contatos pegue 3 pedaços de fio do cabo de rede e conecte nos contatos, não precisa soldar mas prenda bem firme. Use uma alicate de bico para fazer isso que é mais fácil.

Ligue um dos fios dos contatos externos do potenciômetro na trilha VCC da protoboard, ligue o outro fio do contato externo na trilha GND onde conectamos o fio preto do servo. Agora ligue o fio conectado ao contato do meio na porta de entrada 0 no seu arduino.

Pronto agora tudo esta conectado corretamente!

Programação:
No menu Arquivo->Examples->Servo selecione o exemplo Knob. Esse exemplo terá o código abaixo:

#include

Servo myservo; // cria um objeto servo para controlar um servo

int potpin = 0; // pino analógico utilizado para ler os dados do potenciômetro
int val; // variável que armazenará os valores digitais do pot.

void setup()
{
myservo.attach(9); // diz para o objeto servo que um servo motor esta conectado no pino 9
}

void loop()
{
val = analogRead(potpin); // lê os valores do pot (entre 0 e 1023)
val = map(val, 0, 1023, 0, 179); // mapeia os valores para controlar o servo
// valores entre 0 e 180 (graus)
myservo.write(val); // envia a posição para o servo
delay(15); // aguarda o servo chegar na posição
}

Baixe o código para a sua placa arduino e pronto.

Agora gire o eixo do potenciômetro para ver o servo motor sendo controlado.
Fiz um pequeno video que demonstra este exemplo clique aqui.

Dúvidas, comentários e sugestões são bem vindos.

Abraço, Diego