Para iniciar este post sobre o módulo joystick Arduino eu ia elaborar uma definição sobre o joystick, mas não encontrei nenhuma mais “elegante” do que esta do Wikipedia:

Joystick é um periférico de computador e videogame pessoal ou um dispositivo geral de controle que consiste em uma vara vertical na qual os pivôs se aproximam de uma extremidade e transmitem seu ângulo em duas ou três dimensôes a um computador

Bonito não? Bonito e útil. Você encontra joysticks (e suas variações) em computadores, videogames, guindastes, helicópteros e caminhões, apenas para citar alguns exemplos.

joystick arduino

Bom, Joystick é o assunto do post de hoje, onde vou testar um módulo Joystick, mostrar como você pode acompanhar as variações dos valores dos eixos pelo serial monitor e ainda montar um circuito simples com leds, que serão controlados pelo movimento do módulo.

Conexão do módulo joystick Arduino

Falando primeiramente do módulo, ele consiste em uma haste vertical que controla dois potenciômetros (eixos X e Y), que ligaremos nas portas analógicas, e um push-button (eixo Z), que ligaremos em uma porta digital. A ligação ao Arduino é feita por meio de 3 conectores (X, Y e Z) na lateral, onde cada conector tem 3 fios: GND, 5V e S (sinal).

Joystick - detalhe conectores

No meu circuito, acrescentei ainda 5 leds, que acendem conforme o joystick é movimentado : eixo Y (esquerda e direita),  eixo X (superior e inferior), e também ao pressionar o botão (eixo Z).

Circuito - Arduino com módulo joystick

Devido à quantidade de conexões, uma boa idéia é utilizar um shield para sensores como este, principalmente se, além do joystick, você utilizar em seus projetos outros sensores e motores:

Arduino Sensor Shield

O programa não exige nenhuma biblioteca especial, já que estamos apenas lidando com portas digitais e analógicas e os comandos básicos do Arduino.

//Programa : Teste modulo Joystick  
 //Autor : Arduino e Cia  
   
 int valorx = 0; //Armazena o valor lido do potenciometro - Eixo X  
 int valory = 0; //Armazena o valor lido do potenciometro - Eixo Y  
 int valorz = 0; //Armazena o valor lido do botão - Eixo Z  
 int pinoledesquerda = 2; //Pino Led Esquerdo  
 int pinoledsuperior = 3; //Pino Led Superior  
 int pinoleddireita = 4;  //Pino Led Direito  
 int pinoledinferior = 5; //Pino Led Inferior  
 int pinoledz = 10;    //Pino Led Eixo Z  
   
 void setup() 
 {  
 pinMode(7, INPUT);  //Pino Eixo Z  
 Serial.begin(9600);  
 pinMode(pinoledesquerda, OUTPUT);  
 pinMode(pinoledsuperior, OUTPUT);  
 pinMode(pinoleddireita, OUTPUT);  
 pinMode(pinoledinferior, OUTPUT);  
 pinMode(pinoledz, OUTPUT);  
 }  
   
 void loop() 
 {  
 //As linhas abaixo apagam todos os leds  
 digitalWrite(pinoledesquerda, LOW);  
 digitalWrite(pinoledsuperior, LOW);  
 digitalWrite(pinoleddireita, LOW);  
 digitalWrite(pinoledinferior, LOW);  
 digitalWrite(pinoledz, LOW);  
   
 //Le o valor do potenciometro ligado à porta analogica A0 - Eixo X  
 valorx = analogRead(0);   
   
 //Mostra o valor do eixo X no serial monitor  
 Serial.print("X:");  
 Serial.print(valorx, DEC);  
   
 //Testa o valor do Eixo X e aciona o led correspondente  
 if (valorx > -1 & valorx <200)  
 {  
  digitalWrite(pinoledinferior, HIGH); //Acende o led inferior  
 }  
 if (valorx > 700 & valorx <1025)  
 {  
  digitalWrite(pinoledsuperior, HIGH); //Acende o led superior  
 }  
   
 //Le o valor do potenciometro ligado à porta analogica A1 - Eixo Y  
 valory= analogRead(1);  
   
 //Mostra o valor do eixo Y no serial monitor  
 Serial.print(" | Y:");  
 Serial.print(valory, DEC);  
   
 //Testa o valor do Eixo Y e aciona o led correspondente  
 if (valory > -1 & valory <200)  
 {  
  digitalWrite(pinoleddireita, HIGH); //Acende o led da direita  
 }  
 if (valory > 700 & valory <1025)  
 {  
  digitalWrite(pinoledesquerda, HIGH); //Acende o led da equerda  
 }  
   
 //Lê o valor da porta Digital 7 - Eixo Z  
 valorz = digitalRead(7);  
   
 //Mostra o valor do Eixo Z no serial monitor  
 Serial.print(" | Z: ");  
 Serial.println(valorz, DEC);  
   
 //Caso o botão do Eixo Z seja pressionado, acende o led verde  
 if (valorz != 1 )  
 {  
  digitalWrite(pinoledz, HIGH);  
 }  
}  

Carregue o programa, abra o serial monitor e movimente o potenciometro, observando a variação dos valores do Eixo X (Porta analógica A0), Eixo Y (porta analógica A1) e Eixo Z (porta digital 7).

Gostou? Confira outros posts com Arduino aqui mesmo no Arduino e Cia!

Avalie este post!