¿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.
Anuncio:
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.
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.
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
Mientras que el montaje, visto desde Arduino, sería el siguiente.
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); }
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.
Anuncio:
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.
¡Cierto! Arreglado. ¡Gracias por el aviso!
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?
A cualquier pin I/O
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?
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.
Hola. Las resistencias internas tienen dos desventajas. Una que son muy “blandas” (valor muy alto) y por otro que si te las dejas, y tienes un error en código, es posible hacer un corto. Por contra, tienen la ventaja de ser muy cómodas. La entrada en la que recomiendo usar externas es de nivel “básico”. Para gente que empieza, recomiendo ponerlas externas para que seas consciente de que estar, y evitar chispazos. Esta entrada es intermedia, y se presupone que el que la usa ya sabe el funcionamiento de las resistencias (y asume las consecuencias si se equivoca en el… Read more »
Hola, se podría utilizar los ejes analógicos como si fueran pulsadores?
Es decir convertirlo de analógico a digital (4 botones)
Gracias, ha sido de gran ayuda!