Arduino - Joystick
En este tutorial, vamos a aprender cómo usar un joystick con Arduino. En detalle, aprenderemos:
- Cómo funciona el joystick
- Cómo conectar el joystick al Arduino y programarlo
- Cómo convertir los valores del joystick en valores controlables, como coordenadas XY, y la dirección del motor hacia arriba/abajo/izquierda/derecha

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del sensor del joystick
Probablemente veas el joystick en algún lugar, como un mando de videojuegos, un mando de juguete o incluso una gran máquina real, como el controlador de una excavadora.
El joystick está compuesto por dos potenciómetros entre sí y un pulsador. Por lo tanto, proporciona las siguientes salidas:
- Un valor analógico (de 0 a 1023) correspondiente a la posición horizontal (denominada coordenada X)
- Un valor analógico (de 0 a 1023) correspondiente a la posición vertical (denominada coordenada Y)
- Un valor digital de un pulsador (HIGH o LOW)
La combinación de dos valores analógicos puede crear coordenadas 2-D con los valores centrales cuando el joystick está en la posición de reposo. La dirección real de las coordenadas se puede identificar fácilmente cuando ejecutes un código de prueba (en la siguiente parte).
Algunas aplicaciones pueden usar las tres salidas; algunas aplicaciones pueden usar algunas de las tres salidas.
Diagrama de pines
Un joystick tiene 5 pines:
- Pin GND: debe conectarse a GND (0 V)
- Pin VCC: debe conectarse a VCC (5 V)
- Pin VRX: proporciona un valor analógico correspondiente a la posición horizontal (llamada coordenada X).
- Pin VRY: proporciona un valor analógico correspondiente a la posición vertical (llamada coordenada Y).
- Pin SW: es la salida del pulsador dentro del joystick. Por defecto está abierto. Si usamos una resistencia pull-up en este pin, el pin SW estará en HIGH cuando no esté presionado y en LOW cuando esté presionado.

Cómo funciona
- Cuando empujas el pulsador del joystick hacia la izquierda/derecha, el voltaje en el pin VRX cambia. El rango de voltaje es de 0 a 5 V (0 a la izquierda y 5 V a la derecha). El valor de voltaje es proporcional a la posición del pulsador, por lo que el valor de lectura en el pin analógico del Arduino va de 0 a 1023
- Cuando empujas el pulsador del joystick hacia arriba/abajo, el voltaje en el pin VRY cambia. El rango de voltaje va de 0 a 5 V (0 arriba y 5 V abajo). El valor de voltaje es proporcional a la posición del pulsador, por lo que el valor de lectura en el pin analógico del Arduino va de 0 a 1023
- Cuando empujas el pulsador del joystick en cualquier dirección, el voltaje en los pines VRX y VRY cambia en proporción a la proyección de la posición en cada eje
- Cuando empujas el pulsador del joystick de arriba hacia abajo, se cierra el pulsador interno del joystick. Si usamos una resistencia pull-up en el pin SW, la salida del pin SW cambiará de 5 V a 0 V, por lo que la lectura en el pin digital del Arduino cambia de HIGH a LOW
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Cómo programar para un joystick
El joystick tiene dos partes: analógicas (ejes X e Y) y digitales (botón pulsador).
- Para las partes analógicas (ejes X, Y), solo necesitas leer el valor del pin de entrada analógica usando la función analogRead().
- Para la parte digital (pulsador): es un botón. La forma más simple y conveniente es usar ezButton library. Esta biblioteca admite anti-rebote para botones y también habilita una resistencia interna de pull-up. Puedes ver más sobre el botón en Arduino - Button tutorial. El código se presentará en la próxima sesión de este tutorial.
Después de leer los valores de los pines analógicos, puede que necesitemos convertirlos a valores controlables. La siguiente parte proporcionará los códigos de ejemplo para ello.
Código de Arduino
Esta sección proporcionará los siguientes códigos de ejemplo de Arduino:
- Ejemplo de código: lee valores analógicos del joystick
- Ejemplo de código: lee valores analógicos y lee el estado del botón desde el joystick
- Ejemplo de código: convierte el valor analógico en comandos MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
- Ejemplo de código: convierte valores analógicos en ángulos para controlar dos servomotores (p. ej., en una cámara pan-tilt)
Lee valores analógicos del joystick
Pasos R\u00e1pidos
- Copia el código anterior y ábrelo con Arduino IDE
- Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
- Empuja el pulsador del joystick al máximo hasta el tope y luego gíralo en un círculo (sentido horario o antihorario)
- Mira el resultado en el Monitor Serial
- Mientras giras el pulgar del joystick, continúa mirando el Monitor Serie
- Si el valor X es 0, marca o memoriza la posición actual como izquierda ⇒ la dirección opuesta es la derecha
- Si el valor Y es 0, marca o memoriza la posición actual como arriba ⇒ la dirección opuesta es abajo
- Navega al ícono de Bibliotecas en la barra izquierda del IDE de Arduino.
- Busca “ezButton”, luego encuentra la librería de botones de ArduinoGetStarted.com
- Haz clic en el botón Instalar para instalar la librería ezButton.
- Copia el código anterior y ábrelo con el IDE de Arduino
- Haz clic en el botón Subir del IDE de Arduino para subir el código al Arduino
- Empuja el pulgar del joystick hacia la izquierda/derecha/arriba/abajo
- Empuja el pulgar del joystick desde la parte superior
- Ve el resultado en el Monitor Serial.
- Copia el código anterior y ábrelo con el IDE de Arduino
- Haz clic en el botón Subir del IDE de Arduino para cargar el código en Arduino
- Empuja el joystick hacia la izquierda/derecha/arriba/abajo o en cualquier dirección
- Mira el resultado en el monitor serie
Lee valores analógicos y lee el estado del botón de un joystick
Pasos R\u00e1pidos

Convierte el valor analógico en comandos MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO
Pasos R\u00e1pidos
※ Nota:
En un momento dado, puede no haber ningún comando, un comando o dos comandos (p. ej., ARRIBA y IZQUIERDA al mismo tiempo)
Convierte valores analógicos en ángulos para controlar dos servomotores
El detalle se presenta en el tutorial Arduino - Controles del Joystick para el Servomotor
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.