Componente · Sensor

IR Reflectance Sensor Array

Una hilera de sensores IR reflexivos mide con precisión milimétrica la desviación lateral sobre una línea negra o blanca. Cómo calibrar y calcular el error.

Qué es

Un sensor de reflectancia por infrarrojos es una tira de pequeños sensores de infrarrojos montados en fila, apuntando al suelo. Cada sensor empareja un LED infrarrojo que proyecta luz hacia abajo con un fototransistor que mide cuánta luz de esa rebota. Apúntalo a una línea oscura sobre un suelo claro y la línea reflects menos, así que el sensor que está sobre la línea lee distinto de los que están sobre el suelo. Lee toda la fila y sabrás no solo si estás sobre la línea, sino dónde está la línea bajo el robot.

Es el ojo de casi todos los robots seguidores de línea, y la razón por la que el seguidor de línea es un primer proyecto tan bueno: la detección es barata, intuitiva e inmediatamente visible.

Corte transversal de una matriz de reflectancia por infrarrojos sobre un suelo con una línea negra. Cada canal emite infrarrojo hacia abajo; el suelo blanco lo refleja con fuerza mientras que la línea negra lo absorbe, de modo que el canal sobre la línea lee bajo y los demás leen alto.
Cada canal emite IR y mide lo que rebota. El suelo refleja; la línea absorbe, así que la lectura baja marca dónde está la línea bajo la matriz. Descargar SVG

Cómo funciona

Cada canal es un par emisor-detector. El LED de infrarrojos emite luz invisible de ~940 nm; el fototransistor conduce más cuanto más luz vuelve. Una superficie blanca o clara refleja con fuerza (retorno alto); una línea negra absorbe el IR (retorno bajo). Hay dos estilos de salida:

  • Analógico: cada canal informa un valor continuo proporcional a la reflectancia. Es más rico: puedes calcular dónde entre dos sensores cae la línea y obtener una señal de error suave para un controlador PID.
  • Digital: un comparador a bordo informa línea/no línea por canal. Más fácil de leer, pero más tosco.

Para convertir la matriz en una señal de dirección calculas una media ponderada de qué sensores ven la línea. Si la línea se desvía hacia los sensores de la izquierda, la media se desplaza a la izquierda, y ese desplazamiento se convierte en el error que corrige tu lazo de control.

Cuándo usarlo

Usa una matriz de reflectancia siempre que un robot deba seguir un camino de alto contraste: una línea negra sobre blanco, o cinta blanca sobre un suelo oscuro. Más canales dan una resolución de posición más fina y permiten manejar curvas y huecos con más elegancia; cinco bastan para aprender, ocho resultan cómodos para pistas más rápidas o sinuosas.

Es la herramienta equivocada para detectar objetos, distancias o cualquier cosa fuera del plano del suelo: eso es trabajo de un sensor ultrasónico o de tiempo de vuelo.

Calibración y errores comunes

  • Calibra siempre. La luz ambiente, la superficie y la altura de montaje desplazan las lecturas. Antes de una tanda, pasa la matriz por encima de la línea y del suelo y registra el mín/máx por canal; después escala las lecturas entre esos valores. Omitir esto es la razón número uno de que un seguidor de línea funcione en una mesa y falle en otra.
  • La altura importa. Los sensores de reflectancia tienen una zona dulce estrecha (unos pocos milímetros). Si montas la matriz demasiado alta, el contraste se desploma.
  • La IR ambiente es ruido. La luz solar y certainas iluminaciones inundan los detectores de infrarrojo. Protege los sensores con un capuchón o trabaja en interiores para tener un comportamiento constante, y filtra la señal; mira cómo domar el ruido de sensores.
  • El acabado de la superficie miente. El negro brillante puede reflejar como el blanco en el ángulo equivocado; la cinta mate sobre suelo mate es la combinación fiable.

Cablearlo a un Arduino

Una matriz analógica necesita un pin ADC por canal, y por eso una matriz de 8 canales y un Uno (seis pines analógicos) son una pareja incómoda: los ocho del Nano (A0–A7) encajan exactamente.

Pin de la matriz Arduino Nota
VCC 5 V Los emisores son el consumo, no los detectores
GND GND
OUT1–OUT8 A0–A7 Canales analógicos, uno por sensor
LEDON / CTRL Cualquier pin digital Opcional: enciende y apaga los emisores

Ese pin LEDON merece cablearse aunque la mayoría de los proyectos lo ignoren. Los emisores de una matriz de 8 canales pueden consumir 100–200 mA juntos, de forma continua, lo cual en una batería pequeña es una fracción significativa del presupuesto, y además te permite hacer sustracción de luz ambiente, como verás más abajo.

Calibración: el código que decide si funciona

Esto no es opcional ni un refinamiento. Una matriz sin calibrar es la razón más común de que un seguidor de línea funcione en la mesa de la cocina y falle en una competición.

const int N = 8;
const int PIN[N] = {A0, A1, A2, A3, A4, A5, A6, A7};
int lo[N], hi[N];

void calibrate() {
  for (int i = 0; i < N; i++) { lo[i] = 1023; hi[i] = 0; }

  // Sweep the array across the line and the floor for ~3 seconds.
  unsigned long start = millis();
  while (millis() - start < 3000) {
    for (int i = 0; i < N; i++) {
      int v = analogRead(PIN[i]);
      if (v < lo[i]) lo[i] = v;
      if (v > hi[i]) hi[i] = v;
    }
  }
}

// 0 = floor, 1000 = line, per channel, normalised against this run's own extremes.
int normalised(int i) {
  int span = hi[i] - lo[i];
  if (span < 50) return 0;                       // this channel never saw contrast
  return constrain(map(analogRead(PIN[i]), lo[i], hi[i], 0, 1000), 0, 1000);
}

Fíjate en la guarda span < 50. Un canal que no vio contraste durante la calibración —porque el barrido no lo recogió, o su emisor está muerto— produciría si no valores normalizados enormes a partir de un ruido minúsculo, y el robot se desviaría hacia un sensor que no le está diciendo nada.

De ocho lecturas a un solo número de dirección

La media ponderada es todo el truco, y produce una posición continua en lugar de un «el sensor 3 la ve» discreto:

// Returns position in the same units as the weights: 0..7000 for an 8-channel array,
// or -1 if the line is not visible at all.
long linePosition() {
  long weighted = 0, total = 0;
  for (int i = 0; i < N; i++) {
    int v = normalised(i);
    if (v > 100) {                    // ignore channels that are clearly on floor
      weighted += (long)v * i * 1000;
      total    += v;
    }
  }
  if (total == 0) return -1;          // line lost
  return weighted / total;
}

// Error for the control loop: 0 when centred.
long error() {
  long pos = linePosition();
  if (pos < 0) return LAST_ERROR;     // hold the last known direction, do not zero it
  return pos - 3500;                  // centre of an 8-channel array
}

Dos decisiones de diseño de ahí importan más que la aritmética:

Ignorar los canales por debajo de un umbral impide que el ruido del suelo arrastre la media. Sin eso, ocho canales que leen cada uno un valor pequeño no nulo tiran de la estimación hacia el centro esté donde esté la línea.

Devolver el último error cuando se pierde la línea, en lugar de cero, es lo que permite que un robot se recupere de una curva cerrada. Cero significa «perfectamente centrado», así que un robot que pone cero al perder la línea sigue recto a toda velocidad, alejándose de la línea que acaba de perder. Mantener el último error significa que sigue girando como ya estaba girando, que es hacia donde se fue la línea.

Altura de montaje, y por qué lo decide todo

Los sensores de reflectancia tienen una zona dulce estrecha. La señal cae rápido en ambas direcciones: demasiado alto y el retorno es débil, demasiado bajo y el cono del emisor no ha llegado a repartirse lo suficiente para iluminar lo que ve el detector.

Altura Comportamiento típico
1–3 mm Mejor contraste, pero raspa con cualquier irregularidad del suelo
3–8 mm La banda utilizable: la mayoría de matrices especifican unos 3 mm
8–15 mm Contraste desplomándose; el rango de calibración se encoge
> 15 mm prácticamente ciego en la mayoría de las superficies

Dos consecuencias prácticas. Móntalo rígido: una matriz sobre un soporte flexible cambia de altura conforme el robot acelera, lo que cambia las lecturas, y el lazo de control lo interpreta como que la línea se ha movido. Y móntalo a nivel, porque una matriz inclinada da a cada canal una altura efectiva distinta y por tanto una calibración distinta, lo que se manifiesta como un robot que sigue bien en una dirección y mal en la otra.

Montarlo por delante de las ruedas también importa: cuanto más adelante, antes ve el robot la curva, y más tiempo de reacción tiene el controlador. Demasiado adelante, la geometría amplifica el error hasta convertirlo en oscilación.

Vencer la luz ambiente

La luz solar contiene mucha luz infrarroja de 940 nm, y llega al detector con un aspecto exactamente igual que una reflexión. Un robot que funciona en interiores y falla cerca de una ventana casi siempre está viendo esto.

Si los emisores de tu matriz se pueden conmutar, la solución es completa y cuesta dos lecturas:

int ambientSubtracted(int i) {
  digitalWrite(LEDON, LOW);   delayMicroseconds(200);
  int dark = analogRead(PIN[i]);      // ambient only
  digitalWrite(LEDON, HIGH);  delayMicroseconds(200);
  int lit  = analogRead(PIN[i]);      // ambient + our own emitter
  return lit - dark;                  // just our emitter
}

Todo lo que sea constante en el entorno se cancela exactamente. Duplica el tiempo de muestreo, lo cual en un seguidor de línea rápido es un coste real, pero convierte un sensor poco fiable en uno fiable, y es la técnica que usan las matrices comerciales.

Si eso no basta: protege la matriz con una falda para que solo vea el suelo directamente debajo.

Resolución de problemas

Síntoma Causa probable Solución
Funciona en una superficie y no en otra Sin calibrar, o calibración obsoleta Recalibra al inicio de cada tanda, sobre la superficie real
El robot se desvía hacia un lado El rango de calibración de un canal está mal Revisa el hi/lo de cada canal; un emisor muerto aparece como un rango minúsculo
Pierde la línea en curvas cerradas Matriz demasiado cerca de las ruedas, o poner cero al perderla Adelántala; mantén el último error en lugar de poner cero
Oscila en las rectas Matriz demasiado adelantada, o ganancia excesiva Reduce el adelanto; reajusta el controlador
Falla cerca de una ventana Infrarrojo ambiente Sustracción con emisores apagados, o capuchón sobre la matriz
Comportamiento errático sobre cinta negra brillante Reflexión especular de la cinta Cinta mate sobre suelo mate es la combinación fiable
Las lecturas se desvían a lo largo de la tanda La batería se desploma y los emisores se atenúan Los emisores devoran corriente; comprueba el riel bajo carga
Todos los canales leen lo mismo Matriz demasiado alta Bájala a 3–8 mm y recalibra

Cómo elegir una matriz

Canales Resolución de posición Bueno para
3 Tosca: esencialmente izquierda/centro/derecha Aprender solo el concepto
5 Adecuada Un primer seguidor de línea en una pista suave
8 Cómoda Pistas rápidas, curvas cerradas, detección de intersecciones en un laberinto de líneas
12–16 Fina Robots de competición a velocidad

Lo analógico gana a lo digital para cualquier cosa con un lazo de control. El comparador de una matriz digital te da línea/no línea por canal, lo que cuantiza la posición a unos pocos valores discretos y hace la dirección proporcional suave imposible. Lo analógico da una señal de error continua, que es lo que necesita un controlador PID.

La separación entre canales importa tanto como el número: la matriz debería ser más ancha que la línea lo bastante como para que al menos un sensor esté siempre sobre el suelo en cada borde, pero no tan ancha que la línea pueda quedar entre dos sensores sin ser vista. Para cinta eléctrica estándar de 19 mm, una separación de 8 mm funciona bien.

Para un resolutor de laberintos de líneas hay un requisito extra: la matriz debe ser ancha suficiente para ver una intersección. Un robot detecta un giro a la izquierda al notar que los sensores más externos del lado izquierdo se han puesto oscuros mientras el centro sigue sobre la línea, lo cual es imposible si la matriz es apenas más ancha que la cinta.

Explora el grafo

Se usa en estos montajes

Proyectos, rutas de aprendizaje y simuladores que incluyen IR Reflectance Sensor Array.

Preguntas

Preguntas frecuentes sobre IR Reflectance Sensor Array

¿Qué es un sensor seguidor de línea?

Un sensor seguidor de línea es un sensor de reflectancia infrarroja que el robot apunta hacia el suelo para detectar una línea marcada. Cada canal proyecta luz IR hacia abajo y mide cuánta rebota, así que una línea oscura (que refleja menos) da una lectura distinta de la del suelo que la rodea.

¿Cómo funciona un sensor seguidor de línea?

Cada canal empareja un LED IR con un fototransistor. Las superficies claras reflejan mucho y las líneas oscuras absorben el infrarrojo, así que el sensor que está sobre la línea da una lectura baja mientras los demás dan lecturas altas. Leer toda la fila le dice al robot dónde está la línea debajo de él.

¿Cómo se calibra un sensor IR para un robot seguidor de línea?

Antes de una carrera, pasa la matriz tanto por la línea como por el suelo desnudo y registra la lectura mínima y máxima de cada canal; después escala las lecturas en directo entre esos límites. Saltarse la calibración es la razón principal por la que un seguidor de línea funciona en una superficie y falla en otra.

¿Qué es el PID en un seguidor de línea?

El PID es el método de control que convierte el error de posición del sensor en una dirección suave. El término proporcional reacciona a cuánto se ha salido el robot de la línea, el término derivativo amortigua el sobreimpulso y el término integral elimina la deriva constante, de modo que el robot sigue la línea sin tambalearse. Puedes ajustarlo en directo en nuestro simulador PID.

¿Cuáles son los componentes principales de un robot seguidor de línea?

Un seguidor de línea básico necesita cuatro cosas: una matriz de sensores de reflectancia IR para ver la línea, un microcontrolador como un Arduino Uno para ejecutar el bucle de control, un driver de motores como el L298N y dos motores de CC con ruedas. Una batería y un chasis completan el montaje.

¿Para qué se usa una matriz de sensores seguidores de línea?

Además de en robots seguidores de línea, las matrices de reflectancia se usan para detectar bordes (detenerse al llegar al borde de una mesa), para medir posición al estilo de un encoder y para detectar superficies o contrastes sencillos en automatización. Siempre que un robot tenga que reaccionar a una marca de alto contraste sobre una superficie, una matriz de reflectancia es una opción barata y fiable.

Lecturas adicionales

Referencias