I21 - Como usar o módulo Joystick com Arduino

Intermediário - Projeto 21

Primeiros passos para usar o módulo Joystic KY-023 com Arduino

Objetivo

Mostrar como conectar, configurar e utilizar o módulo Joystick KY-023 com o Arduino. Neste projeto, ao posicionarmos os eixos os eixos x, y e z do joystick exibiremos os seus valores no Monitor Serial do IDE do Arduino. Também vamos controlar 4 LEDs que estarão desligados, mas que se acenderão quando acionarmos o eixo x para a direita ou para a esquerda e/ou o eixo y para cima ou para baixo. Pressionando o botão do joystick (eixo z) faremos com que os leds pisquem 3 vezes.

Definições

1. Módulo Joystick 3 eixos (modelo KY-023): É um módulo eletrônico que trabalha como um direcional analógico para controlar diversos aparelhos, componentes e sistemas robóticos que operam com informações de posicionamento cartesiano nos eixos x e y, e ainda um botão de pressão no eixo z.

1.1. O Joystick KY-023 é formado por dois potenciômetros analógicos que controlam os eixos x e y e um push button que controla o eixo z. O seu princípio de funcionamento consiste no controle dos dois potenciômetros conectados entre si por um bastão de controle, sendo um potenciômetro para o movimento do eixo x e outro para o movimento eixo y. O botão de pressão push button corresponde ao eixo z, cuja a leitura é digital: 1 quando neutro e 0 quando pressionado (circuito pull up).

1.2. A figura abaixo mostra o posicionamento dos eixos perpendiculares x, e y, cuja a posição de referência do joystick é com os pinos conexão para baixo. Observe que quando o joystick fica nesta posição de referência, o eixo y irá controlar o movimento horizontal do bastão e o eixo x irá controlar o movimento vertical do bastão.

1.2. O módulo joystick produz uma saída de cerca de 2.5V nos eixos x e y, quando o bastão do joystick estiver na posição de repouso (centro). Quando movemos o bastão, a saída nos eixos irá variar de 0V a 5V, dependendo da direção.

1.3. Quando conectado a um microcontrolador, como em uma placa Arduino, por exemplo, obteremos a leitura analógica do joystick, quando em repouso, em torno de 511. Ao movermos o bastão (botão) do joystick, a leitura será compreendida entre 0 e 1023 em cada eixo, dependendo de sua posição. Pequenas variações na leitura podem ocorrer devido as imprecisões mecânicas do dispositivo de controle do módulo.

Referências

Projeto 13 - Led pisca de acordo com os parâmetros do potenciômetro
Como usar push button com Arduino (programação)
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.

"refletância", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2020, https://dicionario.priberam.org/reflet%C3%A2ncia [consultado em 04-08-2020]. R
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.

"refletância", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2020, https://dicionario.priberam.org/reflet%C3%A2ncia [consultado em 04-08-2020].
 Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.

"refletância", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2020, https://dicionario.priberam.org/reflet%C3%A2ncia [consultado em 04-08-2020].
 Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.

"refletância", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2020, https://dicionario.priberam.org/reflet%C3%A2ncia [consultado em 04-08-2020].

Aplicação

Para fins didáticos e projetos de jogos, controles de servo motores e sistemas robóticos. Aprendendo os passos desse tutorial, você poderá utilizar o módulo joystick com o Arduino para controlar servos, motores, leds, entre outros componentes. Já a leitura do botão de pressão pode ser utilizada para acionar eventos específicos em seu projeto.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 400 pontos

Jumpers Kit cabos ligação macho / macho 1
 
 
Módulo Joystick 3 eixos

Módulo Joystick KY-023

1

 

 - Tensão de Operação: 3,3-5V
- Modelo: KY-023
- Fácil instalação: 4 Furos
- Dimensões: 3.7 x 2.5 x 3.2cm
- Peso: 15g

Sinal de saída (Eixo X e Y): Saída analógica;
Sinal de saída (Eixo Z): Sinal digital (0 ou 5V);

Datasheet: Módulo Joystick 3 eixos

 

Led 5mm Led 5mm 4

4 LEDs alto brilho ou difuso (qualquer cor)

Você poderá utilizar também LEDs de 3 mm na cor que desejar.

Resistor Resistor 150Ω 4



 

1 Resistor de 150Ω ou superior - usar com os leds

Arduino UNO Arduino UNO R3 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da energia elétrica enquanto você monta o circuito.

Atenção

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão da porta digital do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no ânodo (terminal maior) ou no cátodo (terminal menor) do led, tanto faz.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Leds ligados em série e em paralelo.

2.1. Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

3. Para a montagem do módulo joystick no circuito faça a conexão como mostra a figura abaixo:

 Pinos do Arduino utilizados no projeto

Joystick Descrição Arduino
GND Conexão com o GND GND
Vcc Conexão com o pino 5V Vcc (5V)
VRx Eixo x - porta analógica (INPUT) A0
VRy Eixo y - porta analógica (INPUT) A1
SW Push button - sinal digital (INPUT_PULLUP) 2

3.1. Veja abaixo a montagem do módulo Joystick no Arduino, conforme determinamos neste projeto:

 4. A montagem do nosso projeto foi realizada em um protoboard 400 pontos:

Testando o módulo Joystick KY-023

1. Para verificarmos se a montagem do circuito está correta e o módulo joystick funcionando, rode o sketch abaixo e verifique:

1.1. Copie o código e cole no IDE do Arduino. Com o Arduino conectado no PC, rode o programa.

int joyX = A0;      // pino analógico do eixo X
int joyY = A1;      // pino analógico do eixo Y
int joyButton = 2;  // pino digital do botão de pressão
    
void setup() {
   Serial.begin(9600);                  // inicia comunicação serial
   pinMode(joyX, INPUT);                // entrada leitura eixo X joystick
   pinMode(joyY, INPUT);                // entrada leitura eixo y joystick
   pinMode(joyButton, INPUT_PULLUP);    // entrada resistor interno pull up pusch button
} 
   
void loop() {
   int x = analogRead(joyX);              // faz a leitura do eixo x (0 a 1023) - analógico 
   int y = analogRead(joyY);              // faz a leitura do eixo y (0 a 1023) - analógico
   int button = digitalRead(joyButton);   // faz a leitura do eixo z (0 ou 1) - digital 
   Serial.print("X: ");
   Serial.print(x);
   Serial.print(", Y: ");
   Serial.print(y);
   Serial.print(", Button: ");
   Serial.println(button);
   delay(100);
}

1.2. Abra o Monitor Serial do IDE do Arduino.

1.3. Movimente o bastão (botão) do joystick em várias posições: para cima, para baixo, para a esquerda, para a direita e nas diagonais, verificando os valores apresentados no monitor serial.

1.4. Compare os o valores com a imagem abaixo. ATENÇÃO: Tome como referência a posição dos pinos de conexão do módulo joystick.

 1.5. Ao pressionarmos o botão do joystick (eixo z) vamos obter o valor de Button = 0, e como o botão desativado o valor de Button = 1;

Código do Projeto (Sketch)

1) Faça o dowload e abra o arquivo projetoI21.ino no IDE do Arduino:  DOWNLOAD - projetoI21.ino

 Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    I21: Usando o módulo Joystick KY-023
*    Autor: Angelo Luis Ferreira
*    Data: 05/04/2023
*    
*             http://squids.com.br/arduino             
*
*******************************************************************************/
byte joyX = A0;      // pino analógico do eixo X
byte joyY = A1;      // pino analógico do eixo Y
byte joyButton = 2;  // pino digital do botão de pressão
byte ledUp = 9;      // pino digital led superior
byte ledRight = 10;  // pino digital led à direita
byte ledDown = 11;   // pino digital led inferior
byte ledLeft = 12;    // pino digital led esquerdo
 
// set initial variables
unsigned long anterior = 0;   // para controle do timer
int x, y, button;             // leitura posição do joystick
boolean led;             
    
void setup() {
   pinMode(joyX, INPUT);                // entrada leitura eixo X joystick
   pinMode(joyY, INPUT);                // entrada leitura eixo y joystick
   pinMode(joyButton, INPUT_PULLUP);    // entrada resistor interno pull up pusch button
} 
   
void loop() {
  x = analogRead(joyX);               // faz a leitura do eixo x (0 a 1023) - analógico 
  y = analogRead(joyY);               // faz a leitura do eixo y (0 a 1023) - analógico
  button = digitalRead(joyButton);    // faz a leitura do eixo z (0 ou 1) - digital  
  ledsAction();                       // aciona o conjunto de leds
  delay(50);                          // espera 50 milessegundos
}
   
void ledsAction() {
  x >= 1000 ? digitalWrite(ledUp, HIGH) : digitalWrite(ledUp, LOW);
  y >= 1000 ? digitalWrite(ledRight, HIGH) : digitalWrite(ledRight, LOW);
  x <= 50 ? digitalWrite(ledDown, HIGH) : digitalWrite(ledDown, LOW);
  y <= 50 ? digitalWrite(ledLeft, HIGH) : digitalWrite(ledLeft, LOW);

  // led pisca 3 vezes - botão acionado
  if (button == 0) {
    for (byte j=0; j<3; j++) {
        turnLed(led = 1);
        delay(500);
        turnLed(led = 0);
        delay(500);
    }
  }
}

// liga e desliga leds
void turnLed(boolean led) {
  digitalWrite(ledUp, led);
  digitalWrite(ledRight, led);
  digitalWrite(ledDown, led);
  digitalWrite(ledLeft, led);
}

Vídeo

Como o projeto deve funcionar

1. Ao iniciar o programa, os 4 leds ficam desligados.

2. Ao movimentar o botão do joystick, os leds se acenderão de acordo com a posição do bastão de controle.

2.1. Vamos tomar como referência o módulo joystick na posição em que os pinos de conexão fiquem para baixo:

2.2. Na tabela abaixo, veja como os leds deverão acender, conforme posição do joystick definida acima:

Posição do bastão do Joystick Leds que se acenderão Valor de X Valor de Y
Bastão para cima Led superior aceso 1023 511
Bastão na diagonal direita para cima Led superior e led direito acesos 1023 1023
Bastão para a direita Led direito aceso 511 1023
Botão na diagonal direita para baixo Led direito e led inferior acesos 0 1023
Bastão para baixo Led inferior aceso 0 511
Bastão diagonal esquerdo para baixo Led inferior e led esquerdo acesos 0 0
Bastão para esquerda Led esquerdo aceso 511 0
Bastão diagonal esquerdo para cima Led esquerdo e led superior acesos 1023 0

3. Ao pressionarmos o botão, faremos com que todos os leds pisquem 3 vezes.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores