Arduino Nano - Joystick
Este tutorial ensina você a usar o Joystick com o Arduino Nano. Em detalhes, vamos aprender:
- Como um joystick de 2 eixos funciona
- Como conectar o joystick ao Arduino Nano e programá-lo
- Como converter os valores do joystick em valores controláveis, como coordenadas XY, a direção do motor para cima/baixo/esquerda/direita...

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
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.

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

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().
- 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
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.
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
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.

- 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.
Converte o valor analógico em comandos MOVE LEFT/RIGHT/UP/DOWN
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.
※ 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.