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.
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.
- ProyectoConstruya un robot seguidor de línea: simulación a pista
- ProyectoConstruye un robot de cobertura de área para limpiar suelos
- ProyectoConstruye un robot mini sumo: tracción, cuña y borde
- ProyectoRobot resuelto de laberintos de línea con memoria LSRB
- ProyectoRobot seguidor de línea con microcontrolador 8051
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