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

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.


Componentes

  • 1 Placa Arduino (UNO, Mega, o similar).
  • 1 Módulo joystick KY-023.
  • 5 LEDs (cualquier color).
  • 5 Resistencias (220 ohms).
  • Cables de conexión.
  • Protoboard.

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.

Código

 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


Deja un comentario

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

Carrito de compra