Encoder rotatorio óptico y magnético: diferencias, funcionamiento y ejemplos con KY-040 y AS5600

  • Los encoders rotatorios pueden ser ópticos (como el KY-040) o magnéticos (como el AS5600), cada uno con sus particularidades y ventajas según el uso.
  • El KY-040 destaca por su simplicidad, precio bajo y utilidad en interfaces de usuario, mientras que el AS5600 aporta precisión absoluta y es ideal para control de motores y robótica.
  • La elección entre uno y otro depende de la necesidad de precisión, robustez ante el entorno y facilidad de integración en proyectos Arduino o similares.

encoders rotatorios

El mundo de la electrónica y la robótica está lleno de pequeños grandes inventos que permiten controlar y monitorizar todo tipo de movimientos. Uno de los elementos más versátiles y útiles es sin duda el encoder rotatorio, tanto en su versión óptica como magnética. Estos dispositivos se han hecho indispensables en proyectos de Arduino, automatización y control de motores. Si alguna vez te has preguntado qué es exactamente un encoder rotatorio óptico o magnético, qué es y ejemplos KY-040 y AS5600, estás en el lugar correcto.

En este artículo vamos a sumergirnos a fondo en el funcionamiento, aplicaciones y ejemplos prácticos de los encoders rotatorios, centrándonos especialmente en dos módulos muy populares: el KY-040 y el AS5600. Vas a descubrir cómo distinguir entre encoder óptico y magnético, cuáles son sus características físicas y eléctricas, cómo se conectan y programan en Arduino y qué ventajas puede ofrecerte cada uno según tu proyecto. Además, te daremos consejos para elegir y utilizar estos sensores en tus propios montajes, todo explicado de forma clara y amena, sin dejar por el camino ningún detalle relevante.

¿Qué es un encoder rotatorio?

Un encoder rotatorio es un sensor destinado a medir la posición angular, la velocidad y el sentido de giro de un eje o elemento giratorio. Este dispositivo transforma el movimiento de rotación en señales eléctricas (típicamente pulsos digitales o señales analógicas) que posteriormente pueden ser interpretadas por un microcontrolador como Arduino, una Raspberry Pi o incluso un autómata industrial.

Estos sensores son fundamentales en aplicaciones donde se necesita saber en qué posición exacta se encuentra un eje o monitorizar cuántos giros ha dado. Es habitual encontrarlos en impresoras, servomotores, robots, sistemas de control numérico y, cómo no, en proyectos DIY, desde interfaces para menús hasta sistemas de control de velocidad.

Tipos de encoder rotatorio: óptico frente a magnético

encoders

Los encoders rotatorios pueden dividirse principalmente en ópticos y magnéticos, aunque existen otras variantes menos habituales como los capacitivos.

Encoder rotatorio óptico

El encoder óptico, como el KY-040, basa su funcionamiento en un disco con marcas o agujeros y un sistema emisor/receptor óptico (fotodiodo o LED). A medida que el eje gira, las interrupciones producidas por estas marcas generan pulsos eléctricos que el microcontrolador puede contar, determinando así el desplazamiento angular. Su construcción interna suele incluir una parte estática (el disco) y una parte giratoria (el eje vinculado al elemento a medir).

Este tipo de encoder destaca por su buena precisión y respuesta rápida. Son muy útiles en aplicaciones donde la robustez mecánica y la sencillez de lectura digital son clave, como en interfaces de usuario, controles de volumen, menús rotatorios y robots educativos.

Encoder rotatorio magnético

Por otro lado, el encoder magnético utiliza un sensor sensible al campo magnético (habitualmente un sensor Hall o un chip especializado como el AS5600), que detecta la posición angular de un imán acoplado al eje. Estos encoders pueden proporcionar una mayor resolución gracias a la conversión analógica/digital interna y son menos susceptibles a suciedad o polvo, ya que no dependen de partes ópticas. Además, suelen ofrecer salidas digitales (I2C o PWM) y/o analógicas, lo que facilita su integración en diferentes sistemas electrónicos.

Encoder incremental y absoluto: diferencias clave

El mundo de los encoders se divide además en incrementales y absolutos.

  • Encoder incremental: Ofrece una señal en forma de pulsos cada vez que el eje gira una fracción determinada. El número de pulsos por vuelta depende del diseño y el modelo. Para conocer la posición actual, el sistema debe contar y recordar estos pulsos desde un punto de referencia.
  • Encoder absoluto: Proporciona directamente la posición angular actual del eje, incluso si este se ha movido cuando el sistema estaba apagado. Suele tener una codificación especial en el disco o un sensor magnético de alta resolución.

En este artículo, nos centraremos en los encoders incrementales (como el KY-040) y uno de tipo absoluto magnético (AS5600), ya que son los más habituales y fáciles de integrar en proyectos Arduino.

Funcionamiento general de un encoder rotatorio incremental

Los encoders incrementales (como el KY-040) constan de dos canales de salida, canal A y canal B, que generan pulsos digitales desfasados 90º entre sí. Al comparar el orden en que cambian estos canales, es posible deducir el sentido de giro (horario o antihorario), además de contar los pasos (posiciones) recorridos.

La señal producida se denomina de «cuadratura» y permite obtener diferente precisión:

  • Precisión simple: Registrando solo un flanco en un canal.
  • Precisión doble: Registrando ambos flancos en un canal.
  • Precisión cuádruple: Registrando ambos flancos en ambos canales.

Encoder rotatorio KY-040: características, conexiones y uso con Arduino

El KY-040 es uno de los encoders rotatorios incrementales más utilizados en el ámbito maker. Se trata de un módulo compacto, económico y fácil de encontrar, especialmente diseñado para conectar directamente a placas Arduino y otros microcontroladores.

Principales características técnicas del KY-040:

  • Tipo: Incremental óptico
  • Voltaje de alimentación: 5V
  • Consumo: 10 mA
  • Ciclos por revolución: 30
  • Pulsos por vuelta: 20
  • Tamaño: 20 x 30 x 30 mm
  • Peso: 10 gramos
  • Pulsador integrado: Es posible pulsar el eje hacia dentro como si de un botón se tratase, lo que añade una funcionalidad extra muy útil en menús o interfaces.

Asignación de pines:

  • CLK: Canal A (salida de pulsos)
  • DT: Canal B (salida de pulsos)
  • SW: Pulsador integrado
  • +: Alimentación 5V
  • GND: Tierra

¿Cómo conecta el KY-040 a Arduino?

La conexión es directa y sencilla:

Pin KY-040 Pin Arduino
CLK 2 (o cualquier entrada digital)
DT 3 (o cualquier entrada digital)
SW 4 (o cualquier entrada digital)
+ 5V
GND GND

También puede utilizarse con Raspberry Pi cambiando los pines de conexión, por ejemplo usando GPIO16 para CLK, GPIO15 para DT y GPIO14 para SW.

Funcionamiento interno

A diferencia de los potenciómetros, el encoder rotatorio KY-040 no limita su ángulo de giro, permitiendo dar vueltas ilimitadas al eje. Internamente, dos escobillas metálicas se deslizan sobre una superficie dividida en sectores, cerrando el contacto en diferentes combinaciones que detectan los canales A y B.

El encoder devuelve señales digitales en ambos pines, y el desfase permite saber hacia dónde se gira el eje. Además, al ser incremental, la posición absoluta solo es conocida mientras se mantiene el conteo desde el inicio del programa; si se pierde alimentación, el conteo se resetea.

Ejemplo de código básico para Arduino

Un ejemplo clásico para usar el KY-040 consiste en incrementar o decrementar un contador según el sentido de giro. El esquema simplificado sería:

int A = 2;
int B = 3;
volatile int POSICION = 0;
int ANTERIOR = 0;

void setup() {
  pinMode(A, INPUT);
  pinMode(B, INPUT);
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(A), codificador, LOW);
}

void loop() {
  if (POSICION != ANTERIOR) {
    Serial.println(POSICION);
    ANTERIOR = POSICION;
  }
}

void codificador() {
  static unsigned long ultimaInterrupcion = 0;
  unsigned long tiempoInterrupcion = millis();
  if (tiempoInterrupcion - ultimaInterrupcion > 5) { // Antirrebote
    if (digitalRead(B) == HIGH){
      POSICION++;
    } else {
      POSICION--;
    }
    POSICION = min(50, max(-50, POSICION)); // Limita el rango
    ultimaInterrupcion = tiempoInterrupcion;
  }
}

Este código incluye antirrebote (debounce) para evitar lecturas erráticas debidas a la naturaleza mecánica de los contactos. Es recomendable implementar esta protección en cualquier proyecto con encoders incrementales.

Encoder magnético : características, conexiones y uso con Arduino

El AS5600 es un encoder rotatorio magnético de alta resolución, ideal para sustituciones precisas de potenciómetro tradicional, control de motores y robótica. Su principal virtud es que aprovecha la detección magnética, lo que le hace inmune a suciedad y desgaste mecánico que sí afecta a los ópticos.

Características principales del AS5600:

  • Tipo: Absoluto, magnético
  • Resolución: 12 bits (4096 posiciones por vuelta)
  • Alimentación: 3,3V o 5V
  • Interfaces: I2C (digital) o salida analógica
  • Configuración flexible: Puedes seleccionar dirección y modo de salida por hardware
  • Salida analógica: Tensión proporcional al ángulo, útil para microcontroladores sin I2C
  • Gran precisión y repetibilidad: Su sistema interno está preparado para detectar incluso pequeños movimientos angulares

Pinout y conexión a Arduino

Pin AS5600 Función Pin Arduino (I2C)
VCC Alimentación 5V
GND Tierra GND
SDA Datos I2C A4
SCL Reloj I2C A5
OUT Salida analógica (opcional) A0
DIR/MODE Dirección/Selección de modo Según configuración deseada

Nota importante: En placas diferentes de Arduino Uno, los pines I2C pueden variar. Asegúrate de comprobar el esquema de tu placa.

Ejemplo de código para lectura digital (I2C)

Para sacar el máximo partido al AS5600 con Arduino, lo más recomendable es usar la biblioteca específica (puedes encontrarla en el gestor de librerías de Arduino IDE buscando AS5600):

#include <Wire.h>
#include <AS5600.h>
AS5600 encoder;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  if (!encoder.begin()) {
    Serial.println("AS5600 no detectado. Comprueba conexiones.");
    while (1);
  }
  Serial.println("AS5600 inicializado.");
}

void loop() {
  float angulo = encoder.getAngle();
  Serial.print("Ángulo: ");
  Serial.print(angulo);
  Serial.println(" grados");
  delay(100);
}

Con este código podrás leer el ángulo en grados en tiempo real. Es perfecto para aplicaciones donde necesitas conocer la posición absoluta a máxima resolución.

Ejemplo de código para lectura analógica

Si prefieres una conexión más sencilla o tu microcontrolador no soporta I2C, puedes aprovechar la salida analógica del AS5600:

const int analogPin = A0;

void setup() {
  Serial.begin(9600);
  pinMode(analogPin, INPUT);
}

void loop() {
  int valor = analogRead(analogPin);
  float angulo = map(valor, 0, 1023, 0, 360);
  Serial.print("Ángulo analógico: ");
  Serial.print(angulo);
  Serial.println(" grados");
  delay(100);
}

Así obtienes una lectura proporcional al ángulo real del eje según la posición del imán.

Aplicaciones prácticas y consejos de uso

Ambos encoders tienen aplicaciones muy variadas en proyectos de electrónica:

  • KY-040: Ideal para interfaces de usuario rotativos, menús, regulación de brillo, volumen, selección de opciones, control de robots educativos, proyectos de domótica y sistemas que requieren un control rotativo sin referencia angular absoluta.
  • AS5600: Perfecto para el control de posición y velocidad de motores, automatización industrial, detección de posición en articulaciones robóticas, sistemas de cámara estabilizada (gimbals), potenciómetros digitales de alta resolución y cualquier aplicación que requiera detección precisa del ángulo.

Algunos consejos para su uso:

  • Implementa siempre filtrado antirrebote (debounce) cuando uses encoders incrementales de tipo mecánico como el KY-040 para evitar lecturas erróneas.
  • En el caso del AS5600, asegúrate de que el imán esté bien alineado con el sensor para obtener lecturas fiables y estables.
  • Recuerda que en encoders incrementales si se corta la alimentación, se pierde la información de posición; en el AS5600 esto no ocurre ya que es absoluto.
  • Aprovecha los múltiples modos de conexión que ofrecen ambos encoders para adaptarlos a las necesidades concretas de tu proyecto.

Comparativa: ¿Cuándo elegir un encoder óptico y cuándo uno magnético?

Característica KY-040 (Óptico incremental) AS5600 (Magnético absoluto)
Tipo de señal Digital (cuadratura) Digital (I2C)/Analógica
Resolución 20 pulsos/vuelta 4096 posiciones/vuelta
Funciona tras corte eléctrico No (requiere reiniciar conteo) Sí (posición absoluta)
Sensibilidad a polvo/suciedad Sensible (partes mecánicas) Muy robusto
Precio Muy económico Moderado
Dificultad de integración Muy fácil con código básico Requiere librería o programación de I2C
Aplicaciones tipo UX, menús, control simple Control de motor, robótica avanzada

La elección entre ambos dependerá de las prioridades de tu proyecto: sencillez y coste reducido en el caso del KY-040, y precisión y robustez en el del AS5600.

codificador rotativo
Artículo relacionado:
Codificadores giratorios: qué son y principales tipos

Comienza la conversación

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.