Controle via Arduino de 2 Micros Servos com joystick

Este é mais um projeto destinado aos iniciantes, um tutorial simples mas muito interessante que utilizaremos o Arduino para controlar dois micros servos 9g. A aplicação mais interessante é sua utilização em dispositivo de controle panorâmico e de inclinação (PAN/TILT), capaz de movimentar/direcionar câmeras de circuito fechado ou sensores de montagem em robôs.

 

Montando o Projeto

Então sem mais delongas vamos para a parte mais interessante que é a montagem do projeto \0/

Componentes utilizados:

Há 3 fios saindo do servo. Conecte os fios marrons ao terra e os vermelhos ao 5V de uma fonte externa. Conectar o terra (GND) do Arduino ao GND da fonte externa. Os fios laranjas devem ser conectados nos pinos digitais 5 e 6 do Arduino por meio de resistores de 220 ohm.

Conectar os pinos 5V, GND, VRX e VRY do jostick aos pinos 5V, GND, analógico 3 e analógico 4 do Arduino, respectivamente.

 

O esquemático do projeto pode ser visto na imagem abaixo:

 

A montagem real do projeto ficou assim:

Desenvolvendo o código

O código deste tutorial também é simples,  e pode ser visto abaixo:

#include <Servo.h>;
Servo servo1;
Servo servo2;
int VRX,VRY;

void setup() { 
servo1.attach(5);
servo2.attach(6);
servo1.write(90);
servo2.write(90);
}

void loop() {
VRX = analogRead(3);
VRY=analogRead(4);
VRX =map(VRX,0,1023,0,180);
VRY =map(VRY,0,1023,0,180);
servo1.write(VRX);
servo2.write(VRY);
delay(15);
}


 
 

 

 

 

 

 

 
 
 
 
 

Você pode consultar, baixar, modificar e compartilhar o código deste tutorial em nosso repositório do GitHub! E lá você encontra todos os códigos já publicados aqui no blog! Venha compartilhar conhecimento com toda a comunidade maker!

 

Mergulhando no projeto

Software

Carregamos a biblioteca Servo:

#include<Servo.h>

Dois objetos são criados e duas variáveis de tipo inteiro armazenam os valores lidos dos dois potenciômetros dentro do jostick:

Servo servo1; //cria um objeto servo
Servo servo2; //cria um segundo objeto servo
int VRX,VRY;

O loop de inicialização anexa os dois objetos servo aos pinos 5 e 6 e movimenta os servos até que atinjam suas posições iniciais:

servo1.attach(5);
servo2.attach(6);
servo1.write(90);
servo2.write(90);

No loop principal, os valores analógicos (ligados aos pinos 3 e 4) são lidos a partir dos eixos X e Y do jostick:

VRX = analogRead(3); //lê o eixo X
VRY=analogRead(4); //lê o eixo Y

Esses valores (de 0 a 1023) são mapeados para que fiquem entre 0 e 180 graus:

VRX =map(VRX,0,1023,0,180);
VRY =map(VRY,0,1023,0,180);

Depois, são enviados para os dois servos:

servo1.write(VRX);
servo2.write(VRY);

Por fim, aplicamos um delay de 15 ms para reiniciar o loop:

delay(15);

 

Hardware

O servo motor é um dispositivo que pode girar de 0 graus a 180 graus a partir de um comando de controle. O comando de controle é um pulso temporizado. A posição vai depender de quanto tempo o pulso fica em nível lógico alto (geralmente 5V) e quanto tempo fica em nível lógico baixo (geralmente 0V). Por padrão temos que enviar para o servo um pulso a cada 20ms. Internamente o servo possui um circuito capaz de traduzir o pulso de controle em um determinado grau de posicionamento.

É importante sempre alimentar o servo a partir de sua própria fonte de energia. Não o ligue a partir da fonte de 5V do Arduino, pois isso resultará em barulho e pode causar danos ao Arduino. Utilize uma fonte de 5V externa ou uma bateria e lembre-se de conectar o terra (GND) do Arduino ao terra da fonte externa.

Por proteção aos pinos do Arduino, utilize resistores de 220ohm para limitar corrente dos de sinal dos servos.

 

Conclusão

Um projeto básico que mostra como controlar servos de forma simples com a utilização da biblioteca Servo.h. Servos são amplamente utilizados na robótica e sugiro utilizar a imaginação para aplicar esses conceitos na criação de um dispositivo PAN/TILT para movimentar câmeras ou sensores em robôs autônomos.

Fique a vontade para sugestões e questionamentos. Abraços!

 

Referências

McRoberts, Michael Arduino básico / Michael McRoberts; [tradução Rafael Zanolli]. — São Paulo : Novatec Editora, 2011.

Sobre Alex da Rocha Mattos 4 artigos
Engenheiro de Telecomunicações – Universidade do Estado do Rio de Janeiro UERJ Instagram: https://www.instagram.com/curtoecircuito/ Email:curtoeckt@gmail.com

3 Comentários

  1. Olá Tudo bem?
    Legal seu projeto com 2 motores, eu estava precisando de um projeto similar, só que cada servo deve girar em direção oposta um ao outro e ao mesmo tempo sincronizados tanto para ida como para volta, é possível? detalhe: Arduino pró mini, servos de 9g padrão.
    Se tiver a solução agradeço muito!!!

    • Olá Toledo tudo bem? Com certeza é possível fazer a sincronia dos servos, na linha servo1.write(VRX); estamos indicando ao servo que vá para uma determinada posição em graus, o que você tem que fazer é passar posições opostas para os servos, por exemplo, você poderia passar a posição 0 para o primeiro servo e 180 para o segundo, depois passa a posição 1 para o primeiro e 179 para o segundo, e assim por diante, você poderia fazer isso dentro de um loop for ou while, onde em cada interação, você adiciona 1 na posição do primeiro servo e diminui 1 na posição do segundo servo.

      Esse foi só um exemplo que pensei aqui agora de cabeça, tenho certeza que se você pesquisar em sites de projetos de Arduino você irá encontrar alguma solução mais bem elaborada.

Deixe uma resposta

O seu endereço de email não será publicado.


*