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.
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:
Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.
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.
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);
}