¿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.

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.

Partes

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.

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

Esquema de montaje

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

Conexión a Arduino

Código de ejemplo

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);
}