Conhecimento

Como utilizar o Módulo Joystick KY-023 com ESP32

Como utilizar o Módulo Joystick KY-023 com ESP32

Se você já pensou em controlar um robô, navegar por um menu ou criar seu próprio console de videogame, o Módulo Joystick KY-023 é o componente que você precisa conhecer. Versátil e de baixo custo, ele oferece controle analógico em dois eixos (X e Y) e um botão de pressão (eixo Z), abrindo um leque de possibilidades para seus projetos.

Neste guia completo, vamos explorar como o KY-023 funciona, suas especificações e como integrá-lo facilmente com um microcontrolador ESP32, incluindo um código de exemplo prático.

Como o Módulo Joystick Funciona?


Ele é composto por dois potenciômetros montados em um mecanismo de gimbal e um pequeno botão de pressão.

  • Eixos X e Y: Cada eixo é ligado a um potenciômetro. Ao mover o joystick, você altera a resistência de cada potenciômetro, o que gera uma tensão de saída analógica que varia proporcionalmente à posição.
  • Botão (Eixo Z): O próprio bastão do joystick funciona como um botão. Ao pressioná-lo para baixo, ele aciona um interruptor que gera um sinal digital.

Quando o joystick está em repouso (centralizado), a tensão nos pinos de saída X e Y é aproximadamente metade da tensão de alimentação (por exemplo, 2,5V se alimentado com 5V). Em um microcontrolador com conversor analógico-digital (ADC) de 10 bits, como o do Arduino ou ESP32, esse valor central corresponde a uma leitura de cerca de 512.

Ao mover o joystick para os extremos, a tensão varia de 0V a 5V, resultando em leituras de 0 a 1023. Isso permite não apenas saber a direção do movimento, mas também a sua intensidade.

Especificações Técnicas


  • Tensão de Operação: 3.3V a 5V
  • Saída: 2 saídas analógicas (eixos X e Y) e 1 saída digital (botão)
  • Faixa de Tensão de Saída: 0V a VCC (tensão de alimentação)
  • Dimensões: 40 x 27 x 34 mm

Configuração de Pinos


  • GND: Conecta-se ao terra.
  • +5V: Conecta-se à fonte de alimentação.
  • VRx: Saída de tensão analógica correspondente à posição do eixo X.
  • VRy: Saída de tensão analógica correspondente à posição do eixo Y.
  • SW: Saída digital para o botão; indica LOW (0) quando pressionado.

Exemplo prático


Vamos montar um circuito simples para ler os dados do joystick

 ⚠️ ATENÇÃO: O ESP32 opera com 3.3V. Embora o módulo KY-023 suporte 5V, os pinos de entrada do ESP32 não são tolerantes a 5V. Para evitar danos ao seu microcontrolador, sempre alimente o módulo com 3.3V ao usá-lo com um ESP32.

Fonte: https://www.espboards.dev/sensors/ky-023/

Fiação:

  • GND do módulo → GND do ESP32.
  • +5V do módulo → 3.3V do ESP32.
  • VRx do módulo → GPIO18 (ou outro pino ADC) do ESP32.
  • VRy do módulo → GPIO5 (ou outro pino ADC) do ESP32.
  • SW do módulo → GPIO17 (ou outro pino digital) do ESP32.

O pino SW do botão precisa de um resistor de pull-up para garantir um estado lógico definido quando não está pressionado. Felizmente, podemos usar o resistor de pull-up interno do ESP32 via software, simplificando o circuito.

Código


// Definição dos pinos conectados ao ESP32
const int pinoVRx = 36; // Eixo X conectado ao GPIO36 (ADC1_CH0)
const int pinoVRy = 39; // Eixo Y conectado ao GPIO39 (ADC1_CH3)
const int pinoSW = 34;  // Botão conectado ao GPIO34

// Variáveis para armazenar os valores lidos
int valorX = 0;
int valorY = 0;
int valorBotao = 0;

void setup() {
  // Inicializa a comunicação serial a 9600 bps
  Serial.begin(9600);

  // Configura o pino do botão como entrada com resistor de pull-up interno.
  // O pino lerá HIGH quando solto e LOW quando pressionado.
  pinMode(pinoSW, INPUT_PULLUP);
}

void loop() {
  // Lê os valores analógicos dos eixos X e Y
  valorX = analogRead(pinoVRx);
  valorY = analogRead(pinoVRy);

  // Lê o valor digital do botão
  valorBotao = digitalRead(pinoSW);

  // Exibe os valores brutos no Monitor Serial
  Serial.print("Eixo X: ");
  Serial.print(valorX);
  Serial.print(" | Eixo Y: ");
  Serial.print(valorY);
  Serial.print(" | Botão: ");
  Serial.println(valorBotao == LOW ? "Pressionado" : "Solto");

  // Analisa e imprime a direção do movimento
  // Usamos uma "zona morta" para evitar leituras flutuantes no centro
  if (valorY < 100) {
    Serial.println("Direção: Cima");
  } else if (valorY > 4000) {
    Serial.println("Direção: Baixo");
  }

  if (valorX < 100) {
    Serial.println("Direção: Esquerda");
  } else if (valorX > 4000) {
    Serial.println("Direção: Direita");
  }
  
  Serial.println("---------------------------------");

  // Aguarda 200 milissegundos antes da próxima leitura
  delay(200);
}

Entendendo o código


  1. setup(): Inicializamos a comunicação serial e, crucialmente, configuramos o pino do botão (pinoSW) como INPUT_PULLUP. Isso ativa um resistor interno que mantém o pino em nível lógico ALTO (HIGH). Quando o botão é pressionado, ele conecta o pino ao GND, fazendo a leitura ir para o nível BAIXO (LOW).
  2. loop():
    • analogRead(pinoVRx) e analogRead(pinoVRy) leem os valores de tensão dos potenciômetros. No ESP32, o ADC padrão tem 12 bits, então os valores variam de 0 a 4095.
    • digitalRead(pinoSW) lê o estado do botão (HIGH ou LOW).
    • A lógica if/else if verifica se os valores de X e Y estão nos extremos para determinar a direção. Usamos valores como < 100 e > 4000 em vez de == 0 ou == 4095 para criar uma margem de tolerância e tornar a detecção mais confiável.

Ideias de Projetos


Com o Módulo Joystick KY-023 funcionando, as possibilidades são enormes:

  • Controle de Servos: Crie um sistema de câmera Pan/Tilt controlado pelo joystick.
  • Controle de Robô: Use o joystick para controlar a direção e a velocidade de um robô com rodas.
  • Ponteiro de Mouse: Emule um mouse de computador com o ESP32.
  • Mini Game: Desenvolva um jogo simples em um display OLED ou LCD.
  • Navegação de Menus: Crie interfaces de usuário intuitivas para seus projetos.

Conclusão


O Módulo Joystick KY-023 é um componente fantástico, acessível e fácil de usar. Ele oferece uma forma de controle muito mais rica e intuitiva do que simples botões, sendo perfeito tanto para iniciantes que querem entender a leitura de sensores analógicos quanto para makers experientes que buscam aprimorar a interatividade de seus projetos.

Fontes


Autor


Avatar

Luiz Guilherme Silvino Greca

Aluno de Engenharia Mecatrônica da UTFPR, participante de O Projeto