Magos do Arduino

Joystick analógico

Aprenda a utilizar um joystick analógico com o Arduino

Magos do Arduino

Joystick analógico

O módulo KY-023 é um joystick analógico como os que encontramos em controles de vídeo games.

Ele possui duplo eixo analógico (X e Y), e utiliza dois potenciômetros de 10kΩ (um para cada eixo), exibindo a posição via tensão analógica (aproximadamente 0-5V, escalada para 0-1023 no ADC do Arduino).

Um botão embutido (eixo Z) também está presente, e ao pressionar o joystick, uma chave táctil é ativada, retornando um sinal digital (HIGH/LOW).

Molas centram o stick quando solto, com retorno automático ao centro, o que é útil para precisão.

Ele funciona na faixa de tensão de operação de 3.3V até 5V, com tensão de saída analógica adequada para ADCs de microcontroladores comuns como o Arduino.

Sua pinagem consiste em GND (0V), VCC(5V), VRx (X) e VRy (Y) para o movimento e SW que é o controle do botão.

Joystick analógico

Neste projeto você criará um circuito que faz o uso de um joystick analógico com o Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Breadboard (opcional)
  • 1x Arduino UNO
  • 1x Joystick analógico KY-023
  • Jumpers

Circuito Joystick analógico

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito Joystick analógico

Schematics Joystick analógico

A seguir temos o schematics do circuito, que detalha suas conexões e fornece detalhes mais específicos do que o circuito da imagem anterior.

Schematics Joystick analógico

Código fonte para o circuito do joystick analógico

Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
 * Código do curso Magos do Arduino para conectar um joystick analógico 
 * no Arduino.
 * 
 * Conecte um joystick analógico no Arduino e imprima os valores 
 * no monitor serial.
 *
 * (c) Copyright KazaleIT
 * @kazaleitoficial no YouTube
 **/

#define PINO_X A0
#define PINO_Y A1
#define PINO_BOTAO 7

void setup() {
  pinMode(PINO_BOTAO, INPUT_PULLUP);
  Serial.begin(9600); // inicializa conexão serial
}

void loop() {
  // obtém valores do joystick analógico
  int valorBotao = digitalRead(PINO_BOTAO);
  int valorX = analogRead(PINO_X);
  // adicione um pequeno atraso para estabilizar a leitura do sinal analógico
  // e evitar leituras inconsistentes
  delay(100);
  int valorY = analogRead(PINO_Y);
  delay(100);

  // imprime os valores obtidos
  char buffer[50];
  sprintf(buffer, "X: %d, Y: %d, Botão: %s (%d)", valorX, valorY, 
    (valorBotao==0 ? "pressionado": "não pressionado"), valorBotao);
  Serial.println(buffer);

  delay(300);
}