Lição 13/31: Usando Joystick XY com Arduino e acionando um buzzer com o movimento do joystick | Robojax
Nesta lição, exploramos o módulo joystick XY e como interfaciá-lo com um Arduino para detectar movimento direcional e pressionamentos de botão. Este versátil dispositivo de entrada contém dois potenciômetros (um para o eixo X e um para o eixo Y) e um botão de pressão, permitindo capturar uma faixa completa de 360 graus de movimento juntamente com uma ação de clique. Além de simplesmente ler valores brutos, demonstraremos como acionar ações—como ligar um buzzer—quando o joystick é movido para uma posição específica. Este princípio forma a base para inúmeros projetos interativos.
Este guia é perfeito para construir:
- Um controle remoto de dois eixos para um carro robótico ou suporte de câmera pan-tilt.
- Um controle de jogo personalizado para PC ou dispositivo móvel.
- Um sistema de navegação por menu para um display LCD ou OLED.
- Um controlador preciso de velocidade e direção de motor para aplicações industriais ou de hobby.
- Um sistema de alarme interativo onde uma posição específica do joystick ativa uma sirene ou alerta.
Hardware e Componentes
Para acompanhar este projeto, você precisará dos seguintes componentes. O kit específico usado no vídeo é o kit Arduino 3 em 1 da SunFounder, mas essas peças estão amplamente disponíveis individualmente.
- Arduino Uno (ou qualquer placa compatível)
- Módulo Joystick XY
- Buzzer Passivo
- Cabos Jumper
- Cabo USB para programação e alimentação
Entendendo o Módulo Joystick XY
O joystick XY é um dispositivo de entrada autônomo. Como explicado no vídeo (no vídeo em 01:20), ele combina dois potenciômetros de 10k ohms dispostos perpendicularmente. Mover o stick ao longo do eixo X gira um potenciômetro, enquanto movê-lo ao longo do eixo Y gira o outro. Isso permite que o Arduino leia uma tensão analógica para cada eixo, representando a posição precisa do stick. O módulo também inclui um botão de pressão momentâneo que é ativado quando o stick é pressionado diretamente para baixo.
Aqui está uma análise de seus pinos:
- GND: Conecta ao terra (0V) do Arduino.
- VCC: Conecta à fonte de alimentação de 5V do Arduino.
- VRX: Saída analógica para a posição do eixo X.
- VRY: Saída analógica para a posição do eixo Y.
- SW: Saída digital para o botão de pressão (ativo em nível baixo).
O vídeo também demonstra que os dois potenciômetros internos estão ligados em paralelo entre VCC e GND, resultando em uma resistência total de cerca de 5k ohms, o que é uma leitura normal para este módulo (no vídeo em 04:30).
Guia de Ligação
A ligação para este projeto é simples. O vídeo mostra um diagrama de ligação da documentação da SunFounder, mas conectaremos o joystick diretamente aos pinos do Arduino conforme descrito. O buzzer é adicionado para a parte de ação do projeto.
Aqui estão as conexões estabelecidas no vídeo (no vídeo em 06:24):
- Joystick GND → Arduino GND (Fio preto)
- Joystick VCC → Arduino 5V (Fio vermelho)
- Joystick VRX → Arduino A0 (Fio amarelo)
- Joystick VRY → Arduino A1 (Fio verde)
- Joystick SW → Arduino Pino 8 (Fio azul)
- Buzzer Positivo (Pino Longo) → Arduino Pino 2
- Buzzer Negativo (Pino Curto) → Arduino GND
Explicação do Código
O código fornecido é projetado para ler a posição do joystick e ativar o buzzer quando uma condição específica é atendida. As partes principais que você pode configurar estão no topo do esboço.
Primeiro, as definições de pinos são definidas. Você pode alterá-las para corresponder à sua ligação específica:
const int xPin = A0; //o VRX conecta a
const int yPin = A1; //o VRY conecta a
const int swPin = 8; //o SW conecta a
const int alarmPin=2;//ao buzzer
Em seguida, variáveis globais são declaradas para armazenar o estado do joystick. Elas são atualizadas cada vez que a função readJoystick() é chamada.
int xValue;//para armazenar xValue
int yValue;//para armazenar yValue
int swValue;//para armazenar o valor do switch
Na função setup(), o pino do switch é configurado com um resistor de pull-up interno. Este é um passo crucial porque elimina a necessidade de um resistor externo. Ao configurá-lo como INPUT_PULLUP, o pino lerá HIGH por padrão e irá para LOW quando o botão for pressionado.
pinMode(swPin, INPUT_PULLUP); //define o pino SW como INPUTA lógica central está no loop(). Ele chama a função personalizada readJoystick() para obter dados atualizados. Em seguida, verifica uma condição: se o valor do eixo X for maior que 600 e o valor do eixo Y for menor que 300, a campainha é ligada. Você pode modificar esses valores de limite para definir uma "zona ativa" diferente para o joystick. O alarmPin é definido como HIGH para ativar a campainha e uma mensagem é impressa no Monitor Serial.
if(xValue >600 && yValue <300)
{
digitalWrite(alarmPin, HIGH);
Serial.print("Alarme X:");
Serial.print(xValue);
Serial.print(" Y:");
Serial.println(yValue);
}else{
digitalWrite(alarmPin, LOW);
// ... código para imprimir valores quando o alarme está desligado
}
Finalmente, a função personalizada readJoystick() é definida. Esta função lê os valores analógicos dos pinos X e Y e o estado digital do interruptor, armazenando-os nas variáveis globais. Essa abordagem modular mantém o loop principal limpo e organizado.
void readJoystick()
{
xValue =analogRead(xPin);//lê o valor do pino x
yValue =analogRead(yPin);//lê o pino y
swValue =digitalRead(swPin);//lê o interruptor
}
Projeto ao Vivo e Demonstração
Assim que o código é carregado, o Monitor Serial pode ser aberto para observar os valores brutos. Inicialmente, com o joystick centralizado, os valores de X e Y estarão em torno de 512, que é o ponto médio do intervalo de 0 a 1023. Pressionar o joystick para baixo mudará o valor do interruptor de 1 para 0 (no vídeo em 10:15).
Mover o joystick para os extremos mostrará o intervalo completo: movê-lo totalmente para a direita mostrará um valor de X de 1023, e totalmente para a esquerda mostrará 0. Da mesma forma, movê-lo para cima e para baixo mudará o valor de Y entre 0 e 1023 (no vídeo em 10:37).
A demonstração então mostra a parte de ação do projeto. Quando o joystick é movido para o canto superior direito (onde X > 600 e Y < 300), a campainha soará, e o Monitor Serial imprimirá uma mensagem de "Alarme". Movê-lo para fora dessa zona desligará a campainha. Isso prova que você pode usar a posição do joystick para controlar um dispositivo de saída, o que pode ser estendido para controlar relés, LEDs ou motores para várias aplicações.
Capítulos
- [00:00] Introdução ao Projeto do Joystick XY
- [01:20] Entendendo o Hardware e os Componentes Internos
- [03:33] Esquema do Módulo e Medição de Resistência
- [05:51] Conectando o Joystick ao Arduino
- [07:00] Configurando o Código e Habilitando o Resistor de Pull-up
- [09:23] Carregando o Código e Testando Valores Brutos
- [12:21] Agindo: Controlando uma Campainha com a Posição do Joystick
- [16:02] Demonstração ao Vivo do Sistema de Alarme
This code has not been parsed yet. Please return to the admin panel to parse it.
Common Course Links
Common Course Files
Coisas que você pode precisar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
Recursos e referências
-
DocumentaçãoDocumentação para o Kit de Aprendizado 3 em 1 IoT/Carro Inteligente/SunFounderdocs.sunfounder.com
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Código fonte do kit de aprendizado Smart Car 3 em 1 da SunFounder
3in1-kit-main-v2.zip12.80 MB
Manual do Usuário
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB