El encoder rotatorio KY-040 es un control de giro incremental: detecta si se gira en sentido horario o antihorario y cuántos pasos. A diferencia de un potenciómetro, puede girar infinitamente. Tiene además un botón integrado al presionar el eje.
Pines del KY-040
| Pin | Función | Arduino |
|---|---|---|
| + | VCC | 5V |
| GND | Tierra | GND |
| CLK | Señal de reloj | Pin 2 |
| DT | Señal de datos | Pin 3 |
| SW | Botón | Pin 4 |
Código: Contador con Dirección
const int CLK = 2;
const int DT = 3;
const int SW = 4;
int contador = 0;
int ultimoCLK;
void setup() {
Serial.begin(9600);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
ultimoCLK = digitalRead(CLK);
}
void loop() {
int estadoCLK = digitalRead(CLK);
if (estadoCLK != ultimoCLK) {
if (digitalRead(DT) != estadoCLK) {
contador++;
Serial.print("Horario: ");
} else {
contador--;
Serial.print("Antihorario: ");
}
Serial.println(contador);
ultimoCLK = estadoCLK;
}
if (digitalRead(SW) == LOW) {
Serial.println("¡Botón presionado!");
delay(200); // Antirrebote
}
}
Aplicaciones
- Control de volumen: combínalo con un amplificador de audio para subir/bajar
- Menús en LCD: navega entre opciones girando, selecciona con el botón
- Posición de motor: controla un servo proporcionalmente al giro del encoder
- Configuración de parámetros: ajusta la temperatura objetivo de un termostato DIY