Control de iluminación de LEDs con Joystick KY-023 y Arduino

Este artículo detalla un proyecto práctico y educativo de electrónica que explora la interacción entre un módulo joystick KY-023, una placa Arduino Uno y un conjunto de cinco LEDs. El objetivo principal es visualizar el estado y la dirección del joystick mediante la activación de los LEDs, proporcionando una interfaz sencilla y didáctica para entender cómo se leen entradas analógicas y digitales de un periférico de juego.

El módulo joystick KY-023 es una interfaz de entrada popular y de bajo costo, comúnmente utilizada en proyectos de robótica y juegos, que simula el funcionamiento de un joystick de control de videojuegos clásico. Este proyecto no solo te enseñará a leer sus valores, sino también a traducirlos en señales visuales, reforzando conceptos fundamentales de programación y electrónica.



🔩Funcionamiento

Implementar un circuito que permita controlar el brillo de 4 LEDs mediante un joystick KY-023 conectado a una placa Arduino. El brillo de cada LED variará en función de la dirección en la que se mueva el joystick. Adicionalmente, un quinto LED se encenderá al presionar el botón del joystick.

El Módulo Joystick KY-023

El módulo joystick KY-023 (o similar, como el que usa un potenciómetro en X y otro en Y) es esencialmente una combinación de dos potenciómetros de 10K Ohm y un pulsador momentáneo.

  • Potenciómetros (Ejes X e Y):
    • Cada potenciómetro varía su resistencia según la posición del joystick en su respectivo eje (horizontal para X, vertical para Y).
    • Al conectarse a una entrada analógica del Arduino, se lee un valor entre 0 y 1023 (para un ADC de 10 bits), que representa la posición del joystick en ese eje.
    • Cuando el joystick está en reposo (centro), ambos ejes reportan un valor cercano a la mitad del rango (aproximadamente 512).
    • Moverlo a un extremo (ej. arriba o derecha) incrementa el valor hacia 1023; moverlo al otro extremo (ej. abajo o izquierda) lo disminuye hacia 0.
  • Pulsador (SW):
    • Ubicado debajo del vástago del joystick, se activa cuando se presiona el joystick hacia abajo.
    • Funciona como un interruptor normalmente abierto; al pulsarlo, cierra el circuito y cambia su estado (generalmente de HIGH a LOW cuando se usa con INPUT_PULLUP).
  • Pines de Conexión:
PINFunción
VCCAlimentación positiva (5V).
GNDTierra (masa).
VRxSalida analógica para el eje X.
VRySalida analógica para el eje Y.
SWSalida digital para el pulsador.
Los LEDs (Diodos Emisores de Luz)

Los LEDs son componentes electrónicos que emiten luz cuando una corriente eléctrica pasa a través de ellos en la dirección correcta (ánodo a cátodo).

  • Polaridad: Tienen polaridad. La pata más larga es el ánodo (+) y la pata más corta es el cátodo (-).
  • Resistencia de Protección: Siempre se debe conectar una resistencia en serie con un LED para limitar la corriente y protegerlo de daños. Un valor común para LEDs estándar con 5V es 220ohms.
  • Funcionamiento: En este proyecto, cada LED se encenderá o apagará mediante un pin digital del Arduino configurado como OUTPUT, que se pondrá en HIGH (encender) o LOW (apagar).

🔨Componentes

ComponenteCantidadEspecificaciónFunción
Placa Arduino1Arduino Uno, Nano, etc.Control de componentes(cerebro)
Joystick 1KY-023Encender cada led
LED5rojo, verde, amarillo, morado, blancoIluminar
Resistencia5220 ohmslimitar corriente
Cables de conexiónnUnir componentes


🔌Conexiones

Conecta los pines del joystick:

  • VCC a 5V de Arduino.
  • GND a GND de Arduino.
  • VRx a A0 (para eje X).
  • VRy a A1 (para eje Y).
  • SW a pin digital 2 (para el botón).

Conecta cada LED con su resistencia de 220 ohms a los pines PWM:

  • LED 1: Pin digital 6.
  • LED 2: Pin digital 5.
  • LED 3: Pin digital 4.
  • LED 4: Pin digital 3.
  • LED 5 (botón): Pin digital 7.

0️⃣Código

El código debe leer los valores analógicos de los ejes X e Y, y el estado digital del pulsador. Luego, basándose en rangos de valores para los ejes y el estado del pulsador, encenderá el LED correspondiente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Arduino.h>


// Pines del joystick
const int VRx = A0;
const int VRy = A1;
const int SW = 2;

// Pines de LEDs
const int LED_UP = 3;
const int LED_DOWN = 4;
const int LED_LEFT = 5;
const int LED_RIGHT = 6;
const int LED_PRESS = 7;

void setup() {
  // Configuración de pines
  pinMode(SW, INPUT_PULLUP); // Botón del joystick
  pinMode(LED_UP, OUTPUT);
  pinMode(LED_DOWN, OUTPUT);
  pinMode(LED_LEFT, OUTPUT);
  pinMode(LED_RIGHT, OUTPUT);
  pinMode(LED_PRESS, OUTPUT);

  Serial.begin(9600); // Para depuración opcional
}

void loop() {
  // Leer valores analógicos del joystick
  int x = analogRead(VRx); // Eje X
  int y = analogRead(VRy); // Eje Y
  int swState = digitalRead(SW); // Botón

  
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.println(y);
  // Mapear valores de 0-1023 a 0-255 para intensidad PWM
  int brightnessUp = map(y, 512, 1023, 0, 255);
  int brightnessDown = map(y, 512, 0, 0, 255);
  int brightnessLeft = map(x, 512, 0, 0, 255);
  int brightnessRight = map(x, 512, 1023, 0, 255);

  // Controlar LEDs según dirección
  analogWrite(LED_UP, (y > 512) ? brightnessUp : 0);
  analogWrite(LED_DOWN, (y < 512) ? brightnessDown : 0);
  analogWrite(LED_LEFT, (x < 512) ? brightnessLeft : 0);
  analogWrite(LED_RIGHT, (x > 512) ? brightnessRight : 0);

  // Encender LED si se presiona el botón
  if (swState == LOW) {
    digitalWrite(LED_PRESS, HIGH);
  } else {
    digitalWrite(LED_PRESS, LOW);
  }
  // Pequeño retraso para mayor estabilidad
  delay(50);
}

Notas:

  1. Los valores de mapeo y sensibilidad pueden ajustarse según tu joystick.
  2. Asegúrate de que las conexiones sean sólidas para evitar errores.


🖌️Diseños


🎬Videos


📑Conclusión

El proyecto de control visual de LEDs mediante el módulo Joystick KY-023 y Arduino Uno ha demostrado ser un ejercicio fundamental en la lectura de entradas analógicas y digitales para la creación de una interfaz sencilla de Interacción Humano-Máquina (HMI).

ComponenteRol central en la conclusión
Joystick KY-023Actuó como un codificador de movimiento, traduciendo las coordenadas físicas (X e Y) en valores numéricos (0-1023) y la presión en un estado binario (pulsado/no pulsado).
Código ArduinoSirvió como el “cerebro decisorio”, aplicando la lógica de umbrales (400 y 600) para interpretar si el valor analógico correspondía a un movimiento extremo (dirección) o a la posición de reposo (centro).
LEDsFuncionaron como los indicadores de estado en tiempo real, ofreciendo una respuesta visual inmediata y clara al usuario sobre la posición y acción del joystick.

El éxito reside en la capacidad del microcontrolador para digitalizar el movimiento analógico. Al definir rangos de umbral, se simplificó la complejidad de las lecturas analógicas continuas en cuatro estados direccionales discretos. Este proyecto sienta una base sólida para el desarrollo de controles de navegación para robots móviles, juegos interactivos o interfaces de usuario en cualquier sistema electrónico donde se requiera un mando direccional de fácil implementación. Se concluye que el joystick es una herramienta sumamente versátil para proyectos que demandan una entrada precisa y multifuncional.


Deja un comentario

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

Carrito de compra