1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / ¿Cómo utilizar un joystick analógico con Arduino?

¿Cómo utilizar un joystick analógico con Arduino?

| Actualizado:
Comentarios: 0

¿Cómo utilizar un joystick analógico con Arduino?
¿Cómo utilizar un joystick analógico con Arduino?

En este post veremos la conexión de un joystick a la placa Arduino. Primero se comprobara hacia donde se mueve sacando los datos por el serial monitor y en un segundo proyecto, según el movimiento del joystick encenderá un led.

En este artículo conectaremos de una forma sencilla un joystic analógico a la placa de Arduino Uno. El joystick es similar a dos potenciómetros conectados entre sí; uno, para el eje X (Horizontal) y otro, para el eje Y (Vertical). Y cuenta con un switch de selección.

Material necesario:

  • Arduino Uno
  • Cables macho-hembra
  • Joystic analógico.
Joystick de palanca para control del Arduino

En la siguiente imagen se muestra el circuito de la conexión con la placa de Arduino:

Esquema del circuito para el control de un joystick con Arduino UNO

Se debe tener en cuenta que la placa de Arduino usa un ATmega328 como microcontrolador, con una resolución ADC de 10 bits. Quiere decir que los valores en cada canal analógico pueden variar de 0 a 1023. Con estos datos sabemos que la posición inical del joystick es (x, y) = (511, 511). En el eje X los valores podrán variar de 0 a 1023, al igual que en el eje Y.

const int pinX = A0;
const int pinY = A1;
const int pinBoton = 9;
 
void setup() {
   pinMode(pinBoton , INPUT_PULLUP);   //activar resistencia pull up 
   Serial.begin(9600);
}
 
void loop() {
   int X = 0;
   int Y = 0;
   bool botonValor = false;
 
   //leer valores
   X = analogRead(pinX);
   /*Es necesario hacer una pequeña pausa entre lecturas de diferentes
   pines analógicos porque si no puede ser que obtengamos la misma
   lectura dos veces (debido al funcionamiento interno de esos pines) */
   delay(100);
   Y = analogRead(pinY);
   botonValor = digitalRead(pinBoton);
 
   //mostrar valores por pantalla
   Serial.print("X:" );
   Serial.print(X);
   Serial.print(" | Y: ");
   Serial.print(Y);
   Serial.print(" | Pulsador: ");
   Serial.println(botonValor);
   delay(1000);
}

Encender un led según el movimento del joystick.

En la siguiente prueba utilizaremos el joystick para encender unos led colocados en 4 direcciones (superior, inferior, izquierda y derecha).

Material necesario:

  • Arduino Uno
  • Protoboard.
  • Cables macho-hembra
  • Joystic analógico.
  • 4 leds.
  • 4 resistencias de 220 Ω.
Esquema para el encendido de leds utilizando un joystick

Código:

int ladoy = A1;   // Entrada de referencia para el eje de las Y.
int ladox = A0;   // Entrada de referencia para el eje de las X.
int ledup = 12;   // Led superior.
int ledD = 13;    // Led inferior.
int ledL = 10;    // Led izquierda.
int ledR = 11;    // Led derecha.
int valorX;
int valorY;

void setup() {  
  Serial.begin(9600);
  /* Declaración de los leds
  como salidas */
  pinMode(ledup, OUTPUT);
  pinMode(ledD, OUTPUT); 
  pinMode(ledL, OUTPUT); 
  pinMode(ledR, OUTPUT); 
}
 
void loop() {  
  valorX = analogRead(ladox);
  if (valorX > 700){ // derecha
    digitalWrite(ledR,HIGH);
    Serial.print("x = ");
    Serial.println(valorX);
  }else{
    digitalWrite(ledR, LOW );
  }
  
  valorX = analogRead(ladox);
  if (valorX < 400){  // izquierda
    digitalWrite(ledL,HIGH);
    Serial.print("x = ");
    Serial.println(valorX);
  }else{
    digitalWrite(ledL, LOW );
  }
  
  valorY = analogRead(ladoy);
  if (valorY > 700){  // arriba
    digitalWrite(ledup,HIGH);
    Serial.print("y = ");
    Serial.println(valorY);
  }else{
    digitalWrite(ledup, LOW );
  }
 
  valorY = analogRead(ladoy);
  if (valorY < 400){  // abajo
    digitalWrite(ledD,HIGH);
    Serial.print("y = ");
    Serial.println(valorY);
  }else{
    digitalWrite(ledD, LOW );
  }
}

Si habéis repasado el código veréis que en la función setup() se han declarado los pines como salida y la función loop lo único que hace es comprobar hacia que dirección se mueve el joystick. La posición inicial es (511, 511), es la equivalente a (0, 0). Para asegurarnos que apunta hacia la derecha vamos a comprobar que x es mayor que 700; para la izquierda, x es menor de 400; hacia arriba, y es mayor que 700; y por último, para abajo, y es menor que 400.

Os animo a hacer fácilmente el siguiente ejercicio para poner a prueba vuestras habilidades: conseguir que se enciendan los 4 leds presionando el botón del joystick.

Artículos que te pueden interesar

¿Cómo medir la temperatura y la humedad con el módulo DHT11 y Arduino?
Medir la temperatura y humedad con Arduino

Módulo DHT11, medir la temperatura y la humedad con Arduino.

| Actualizado:
Comentarios: 1

En este artículo veremos el funcionamiento del módulo DHT11 para medir la temperatura y la humedad, realizaremos la conexión con la placa Arduino y mostraremos las medidas obtenidas a través de una pantalla LCD. Contenido 1 Conectando el sensor DHT11…

Servomotores con Arduino, servo SG90
Uso de servomotores con Arduino. Servo SG90

Uso de servomotores con Arduino. Servo SG90

| Actualizado:
Comentarios: 0

En este tutorial se explicará el funcionamiento y características de un servomotor, Servo SG90, así como la conexión con la placa Arduino y su utilización Contenido 1 Librería servo de Arduino 2 Esquema para su montaje 3 Código para girar…

Reloj con Arduino
Montar un reloj con Arduino, el módulo RTC DS3231 y mostrarlo en una pantalla LCD

Montar un reloj con Arduino, el módulo RTC DS3231 y mostrarlo en una pantalla LCD

| Actualizado:
Comentarios: 0

Con este proyecto podremos regular la fecha y la hora actual. El módulo RTC DS3231 cuenta con una pila que en el caso de que se corte la fuente de alimentación, permitirá al reloj seguir guardando internamente la fecha y…

Detector de incendios con Arduino
Detector de incendios con Arduino y el sensor KY-026

Detector de incendios con Arduino y el sensor KY-026

| Actualizado:
Comentarios: 0

El módulo KY-026 es un sensor de llama que permite detectar un fuego gracias a un sensor óptico sensible a la radiación emitida por la llama. El sensor puede detectar fuentes de luz en el rango de una longitud de…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *