Arduino Nano - Joystick

Este tutorial ensina você a usar o Joystick com o Arduino Nano. Em detalhes, vamos aprender:

Arduino Nano joystick

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×Joystick
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Joystick de 2 Eixos

Você já deve ter visto um joystick em vários lugares, como um controle de videogame, o controle de um brinquedo ou até uma máquina grande, como o painel de controle de uma escavadeira.

O joystick é construído com dois potenciômetros perpendiculares entre si e um botão de pressão. Assim, ele produz as seguintes saídas:

  • Um valor analógico de 0 a 1023 (lido pelo Arduino) que corresponde à posição horizontal (conhecida como coordenada X)
  • Um valor analógico de 0 a 1023 (lido pelo Arduino) que corresponde à posição vertical (conhecida como coordenada Y)
  • Um valor digital do botão de pressão (HIGH ou LOW)

Portanto:

  • Dois valores analógicos podem ser combinados para criar coordenadas 2-D.
  • O centro do sistema de coordenadas 2-D é a posição de repouso do joystick.
  • Para determinar a direção do joystick, execute um código de teste que será apresentado na próxima seção.

Algumas aplicações podem usar as três saídas, enquanto outras usam apenas algumas delas.

Pinagem do Joystick

Um Joystick tem 5 pinos:

  • Pino GND: Este pino deve ser conectado ao GND (0V).
  • Pino VCC: Este pino deve ser conectado ao VCC (5V).
  • Pino VRX: Este pino fornece um valor analógico que corresponde à posição horizontal (conhecida como coordenada X).
  • Pino VRY: Este pino fornece um valor analógico que corresponde à posição vertical (conhecida como coordenada Y).
  • Pino SW: Esta é a saída do botão de pressão dentro do joystick. Ele é normalmente aberto. Se um resistor de pull-up for usado neste pino, o pino SW ficará HIGH quando não estiver pressionado e LOW quando estiver pressionado.
joystick pinout

Como Funciona

  • Quando você move o manche do joystick para a esquerda ou para a direita, a tensão no pino VRX varia de 0 a 5V, sendo 0 à esquerda e 5V à direita, resultando em um valor lido no pino analógico do Arduino de 0 a 1023.
  • Quando você move o manche do joystick para cima ou para baixo, a tensão no pino VRY varia de 0 a 5V, sendo 0 em cima e 5V embaixo, resultando em um valor lido no pino analógico do Arduino de 0 a 1023.
  • Quando você move o manche do joystick em qualquer direção, a tensão nos pinos VRX e VRY muda em proporção à projeção da posição em cada eixo.
  • Quando você empurra o manche do joystick de cima para baixo, o botão de pressão dentro do joystick é fechado. Se usarmos um resistor de pull-up no pino SW, a saída do pino SW muda de 5V para 0V, fazendo o valor lido no pino digital do Arduino mudar de HIGH para LOW.

Diagrama de Ligação

The wiring diagram between Arduino Nano and Joystick

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

Como Programar o Joystick

O joystick é composto de dois componentes: analógico (eixos X, Y) e digital (botão de pressão):

  • Para as partes analógicas (eixos X, Y), basta ler o valor do pino de entrada analógica usando a função analogRead().
int value_X = analogRead(A6); int value_Y = analogRead(A7);
  • Para a parte digital (botão de pressão): é um botão. A maneira mais simples e prática de usá-lo é com a biblioteca ezButton. Essa biblioteca tem suporte a debounce para botões, além de um resistor de pull-up interno. Para saber mais sobre botões, você pode conferir o tutorial Arduino Nano - Botão. O código para isso será apresentado na próxima sessão deste tutorial.

Depois de obter os valores dos pinos analógicos, talvez seja necessário convertê-los em valores controláveis. A próxima seção fornece exemplos de código para isso.

Código Arduino Nano

Esta seção apresenta os seguintes exemplos de código para o Arduino Nano:

  • Código de exemplo: ler valores analógicos do joystick
  • Código de exemplo: ler valores analógicos e o estado do botão do joystick
  • Código de exemplo: converter o valor analógico em comandos MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Código de exemplo: converter valores analógicos em ângulos para controlar dois servo motores (por exemplo, em uma câmera pan-tilt)

Lê os valores analógicos do joystick

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.println(value_Y); delay(200); }

Passos Rápidos

  • Copie o código e abra-o no Arduino IDE.
  • Clique no botão Upload para transferir o código para o Arduino Nano.
  • Empurre o manche do joystick até o fim e gire-o em um movimento circular (no sentido horário ou anti-horário).
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano on COM15
2

Enquanto gira o manche do joystick, fique de olho no Serial Monitor.

Se o valor de X for 0, anote ou lembre a posição atual como esquerda, sendo a oposta a direita.

Se o valor de Y for 0, anote ou lembre a posição atual como cima, sendo a oposta baixo.

Lê os valores analógicos e o estado do botão de um joystick

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #include <ezButton.h> #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define SW_PIN 2 // The Arduino Nano pin connected to SW pin ezButton button(SW_PIN); int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis int bValue = 0; // The variable to store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.print(value_Y); Serial.print(" : button = "); Serial.println(bValue); }

Passos Rápidos

  • Clique no ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise por “ezButton” e localize a biblioteca de botão do ArduinoGetStarted.com.
  • Depois, clique no botão Install para instalar a biblioteca ezButton.
Arduino Nano button library
  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload para enviá-lo ao Arduino Nano.
  • Mova o manche do joystick para a esquerda, a direita, para cima e para baixo.
  • Pressione o manche do joystick por cima.
  • Veja o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano on COM15
2

Converte o valor analógico em comandos MOVE LEFT/RIGHT/UP/DOWN

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int value_X = 0 ; // The variable to store value of the X axis int value_Y = 0 ; // The variable to store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Passos Rápidos

  • Copie o código e abra-o com o Arduino IDE.
  • Clique no botão Upload na IDE para enviar o código ao Arduino Nano.
  • Mova o joystick em qualquer direção com o polegar.
  • Veja os resultados no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano on COM15
2

※ Nota:

Em qualquer momento, pode não haver nenhum comando, um comando ou dois comandos (por exemplo, UP e LEFT ao mesmo tempo).

Converte valores analógicos em ângulos para controlar dois servo motores

Os detalhes estão no tutorial intitulado Arduino Nano - Joystick controla Servo Motor.

Vídeo

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!