Controla tus proyectos con Arduino y Joystick analógico


arduino-joystick

¿Qué es un joystick analógico?

Un joystick analógico es un sencillo controlador que podemos añadir a nuestros proyectos de electrónica y Arduino, que tiene la ventaja de proporcionar una cantidad de información superior a la que podríamos obtener simplemente con pulsadores.

Estos joystick son similares a las palancas de analógicas que tienen muchos mandos de videoconsolas u ordenadores, como el mando de Playstation 2, o Xbox, que se emplean cuando se necesita un control más suave y preciso del que es posible con los mandos digitales.

Si queréis aprender a usar Arduino con el mando de la Playstation 2 podéis consultar esta entrada

Internamente los joystick están formados por un sistema de balancín con dos ejes ortogonales acoplados a dos potenciómetros. Estos potenciómetros realizan la medición de la posición de la palanca en ambos ejes.

Por otro lado, uno de los ejes está apoyado en un microrruptor, lo que permite detectar la pulsación de la palanca.

arduino-joystick-funcionamiento

Por tanto, los joystick facilitan una señal analógica para la posición de cada eje, más una señal digital para la detección de la pulsación del mando. Al disponer de la entrada en los ejes X e Y en forma analógica, podemos programar controles mucho más ricas y precisas de las que podríamos conseguir con un control digital todo/nada.

Por ejemplo, podemos aumentar la velocidad de movimiento de un brazo robótico cuanto mayor sea el valor de la medición, o hacer que un vehículo gire más o menos rápido. Si hiciéramos esto simplemente con pulsadores, sería imposible conseguir movimientos suaves, y el robot se movería "a saltos".

Este tipo de joystick son dispositivos sencillos y cómodos de usar, y nos permiten añadir un control a nuestros proyectos. Por ejemplo, podemos usarlo para controlar un servo, un brazo robótico, una torreta con un laser, o incluso vehículos y robots completos.

Precio

Este tipo de Joystick analógicos son dispositivos baratos. Podemos encontrarlos por 0,75€ en vendedores internacionales de Ebay y Aliexpress.

arduino-joystick-componente

Esquema de montaje

El montaje de este tipo de dispositivos es sencillo. En primer lugar, alimentamos el módulo conectando Vcc y GND, respectivamente, a 5V y GND de Arduino.

Para la medida analógica en ambos ejes, conectamos las salidas VRx y VRy a dos entradas analógicas de Arduino.

Finalmente, si también queremos la señal digital del pulsador, conectamos la salida SW a una entrada digital de Arduino. Vamos a usas las resistencias de Pull-Up internas de Arduino, por lo que no es necesario resistencias adicionales.

El esquema de montaje del joystick quedaría de la siguiente forma

arduino-joystick-conexion

Mientras que el montaje, visto desde Arduino, sería el siguiente.

arduino-joystick-esquema

Ejemplos de código

El código para hacer funcionar el joystick es igualmente sencillo. Por un lado, leemos la posición de ambos potenciómetros mediante mediante las entradas analógicas.

Respecto al pulsador, usamos una entrada digital para leer el su estado.

Finalmente, mostramos la lectura por puerto serie. En un ejemplo real, en esta parte ejecutaríamos las acciones oportunas, como mover un servo, o un robot.

GND - GND
Vcc - 5v
VRx - A0
VRy - A1
SW -  D9
*/

const int pinLED = 13;
const int pinJoyX = A0;
const int pinJoyY = A1;
const int pinJoyButton = 9;

void setup() {
	pinMode(pinJoyButton , INPUT_PULLUP);	//activar resistencia pull up 
	Serial.begin(9600);
}

void loop() {
	int Xvalue = 0;
	int Yvalue = 0;
	bool buttonValue = false;

	//leer valores
	Xvalue = analogRead(pinJoyX);
	delay(100);  					//es necesaria una pequeña pausa entre lecturas analógicas
	Yvalue = analogRead(pinJoyY);
	buttonValue = digitalRead(pinJoyButton);

	//mostrar valores por serial
	Serial.print("X:" );
	Serial.print(Xvalue);
	Serial.print(" | Y: ");
	Serial.print(Yvalue);
	Serial.print(" | Pulsador: ");
	Serial.println(buttonValue);
	delay(1000);
}
Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino
3.3 3 votes
Article Rating
Previous Medir campos magnéticos con Arduino y sensor Hall lineal 49E
Next Reproducir sonidos con Arduino y un buzzer pasivo o altavoz
9 Comments
oldest
newest
Inline Feedbacks
View all comments
weeberp
4 years ago

Me gusta mucho tu web y gracias por la licencia para compartir y trabajar con el material. Dicho lo anterior, creo que tienes mal el código cuando activa la resistencia pull-up, se lo estás activando al LED en vez de al botón del joystick.
Saludos.

luisllamas
4 years ago
Reply to  weeberp

¡Cierto! Arreglado. ¡Gracias por el aviso!

Miguel
3 years ago

Una pregunta de novato que tengo sobre la conexión del joystick.
La entrada de sw siempre tiene que ser a el pin digital numero nueve o lo puedo poner en el resto de pines?

cesar
2 years ago

pregunta, y si lo quiero hacer con motores esque ando buscando algo que me explique como mover un coche de cuatro ruedas con el joystick que debería hacer?

Jose L
1 year ago

Hola, tengo una pregunta referente al joystick y la resistencia pullup/down. En este articulo pones que se puede usar la resistencia interna y se refleja en tu codigo, pero si doy al link en el que explicas qué son dichas resistencias, recomiendas hacerlo fisicamente, en lugar de usar las internas. La verdad que yo lo quiero para un brazo robotico y no quiero usar la placa y añadir resistencias, por lo que me gusta mas esta idea, pero ya me haces dudar de si funcionará bien asi.
Muchas gracias por tu tiempo y paciencia.

Diego
1 year ago

Hola, se podría utilizar los ejes analógicos como si fueran pulsadores?
Es decir convertirlo de analógico a digital (4 botones)

Mike
8 months ago

Gracias, ha sido de gran ayuda!