Funcionamiento Interno del KY-023
El KY-023 está inspirado en los joysticks de los controles de PlayStation 2. Internamente, contiene:
- Dos potenciómetros de 10kΩ colocados en ángulo recto para detectar el movimiento en los ejes X e Y.
- Un interruptor mecánico que se activa al presionar el joystick hacia abajo (eje Z).
- Un resorte central que devuelve el joystick a su posición neutral (centro).
Cuando mueves el joystick:
- Cambia la resistencia de los potenciómetros.
- Esto genera una variación de voltaje analógico entre 0 y 5V (en Arduino, se traduce como valores entre 0 y 1023).
- El botón (SW) genera una señal digital: LOW (0) cuando se presiona, HIGH (1) cuando está libre.
Tabla Técnica
| Parámetro | Valor / Descripción |
|---|---|
| Modelo | KY-023 |
| Tipo de señal | Analógica (VRX, VRY) + Digital (SW) |
| Rango de voltaje | 3.3V – 5V |
| Potenciómetros | 2 × 10kΩ (eje X e Y) |
| Botón pulsador | Interruptor mecánico (eje Z) |
| Pines | VCC, GND, VRX, VRY, SW |
| Dimensiones del módulo | 2.6 cm × 3.4 cm |
| Posición central | ~512 en ambos ejes (VRX y VRY) |
| Compatibilidad | Arduino Uno, Mega, Nano, ESP32, Raspberry Pi, etc. |
| Aplicaciones comunes | Robótica, videojuegos, control de servos, navegación de interfaces, cámaras móviles |
Interpretación de Señales
| Movimiento del joystick | Valor VRX | Valor VRY |
|---|---|---|
| Centro | ~512 | ~512 |
| Izquierda | 0 | ~512 |
| Derecha | 1023 | ~512 |
| Arriba | ~512 | 0 |
| Abajo | ~512 | 1023 |
El botón SW se interpreta como:
- LOW (0) → Presionado
- HIGH (1) → No presionado
Código Arduino
#define VRX_PIN A0
#define VRY_PIN A1
#define SW_PIN 2
void setup() {
Serial.begin(9600);
pinMode(SW_PIN, INPUT_PULLUP);
}
void loop() {
int x = analogRead(VRX_PIN);
int y = analogRead(VRY_PIN);
bool pressed = digitalRead(SW_PIN) == LOW;
Serial.print("X: "); Serial.print(x);
Serial.print(" | Y: "); Serial.print(y);
Serial.print(" | Botón: "); Serial.println(pressed ? "Presionado" : "Libre");
// Ejemplo de acción: si se mueve hacia la derecha
if (x > 800) {
Serial.println("→ Movimiento hacia la derecha");
}
delay(100);
}
Este código no solo lee los valores, sino que también interpreta acciones específicas. Puedes expandirlo para controlar motores, LEDs o servos.
Disclaimer
La información técnica aquí presentada proviene de fuentes especializadas como Tricky Circuit, Arduino Maker Space y ArduinoModulesInfo. Aunque se ha verificado cuidadosamente, los valores pueden variar según el entorno, calidad del módulo y configuración del microcontrolador. Se recomienda realizar pruebas en tu propio circuito antes de integrarlo en proyectos finales.