Componente · Sensore

Array di sensori a riflessione IR

Una schiera di sensori IR a riflessione fa vedere la linea a un robot seguitore. Scopri come funziona il rilevamento, come calibrarlo e dove fallisce.

Che cos’è

Una schiera di sensori IR a riflessione è una striscia di piccoli sensori a infrarossi montati in fila e puntati verso il terreno. Ogni sensore abbina un LED a infrarossi che proietta luce verso il basso a un fototransistore che misura quanta luce torna indietro. Puntala verso una linea scura su un pavimento chiaro e la linea rifletterà meno: il sensore sopra la linea leggerà quindi un valore diverso da quelli sul pavimento. Leggendo l’intera fila sai non solo se sei sulla linea, ma dove si trova sotto il robot.

È l’occhio di quasi ogni robot seguitore di linea e il motivo per cui il simulatore di robot seguitore di linea è un ottimo primo progetto: il rilevamento è economico, intuitivo e immediatamente visibile.

Sezione trasversale di una schiera IR a riflessione sopra un pavimento con una linea nera. Ogni canale emette infrarossi verso il basso; il pavimento bianco li riflette fortemente, mentre la linea nera li assorbe, così il canale sopra la linea legge un valore basso e gli altri valori alti.
Ogni canale emette IR e misura ciò che torna indietro. Il pavimento riflette, la linea assorbe: il valore basso indica dove si trova la linea sotto la schiera. Scarica SVG

Come funziona

Ogni canale è una coppia emettitore-rilevatore. Il LED IR emette luce invisibile a ~940 nm; il fototransistore conduce maggiormente quando torna più luce. Una superficie bianca o chiara riflette fortemente (ritorno elevato); una linea nera assorbe l’IR (ritorno basso). Esistono due tipi di uscita:

  • Analogica — ogni canale riporta un valore continuo proporzionale alla riflessione. È più ricco: puoi calcolare tra quali due sensori si trovi la linea e ottenere un segnale d’errore fluido per un controllore PID.
  • Digitale — un comparatore integrato riporta per ogni canale il semplice stato linea/non linea. È più facile da leggere, ma meno preciso.

Per trasformare la schiera in un segnale di sterzo calcoli una media ponderata dei sensori che vedono la linea. Se la linea si sposta sotto i sensori di sinistra, la media si sposta a sinistra e questo scostamento diventa l’errore che il ciclo di controllo corregge.

Quando usarla

Usa una schiera a riflessione ogni volta che un robot deve seguire un percorso ad alto contrasto, per esempio una linea nera su bianco o nastro bianco su un pavimento scuro. Più canali offrono una risoluzione di posizione più fine e permettono al robot di gestire curve e interruzioni in modo più fluido; cinque bastano per imparare, otto sono comodi per percorsi più veloci o tortuosi.

È lo strumento sbagliato per rilevare oggetti, distanze o qualsiasi cosa fuori dal piano del terreno: è compito di un sensore ultrasonoro o a tempo di volo.

Calibrazione e problemi comuni

  • Calibra sempre. La luce ambiente, la superficie e l’altezza da terra modificano le letture. Prima di una sessione, fai scorrere la schiera sulla linea e sul pavimento e registra il minimo/massimo per canale, poi scala le letture tra questi valori. Saltare questa operazione è il motivo numero uno per cui un robot seguitore di linea funziona su un tavolo e fallisce su un altro.
  • L’altezza conta. I sensori a riflessione hanno una zona ottimale stretta, di pochi millimetri. Monta la schiera troppo in alto e il contrasto crolla.
  • L’IR ambiente è rumore. La luce solare e alcune luci inondano i rilevatori di infrarossi. Scherma i sensori oppure lavora al chiuso per un comportamento coerente e filtra il segnale: consulta come domare il rumore dei sensori.
  • La finitura superficiale inganna. Il nero lucido può riflettere come il bianco nell’angolo sbagliato; nastro opaco su pavimento opaco è la combinazione affidabile.

Collegamento a un Arduino

Una schiera analogica richiede un pin ADC per canale, motivo per cui una schiera a 8 canali e un Uno, con sei pin analogici, formano una coppia scomoda: gli otto pin analogici di un Nano (A0–A7) sono esattamente sufficienti.

Pin della schiera Arduino Nota
VCC 5 V Gli emettitori, non i rilevatori, consumano corrente
GND GND
OUT1–OUT8 A0–A7 Canali analogici, uno per sensore
LEDON / CTRL Qualsiasi pin digitale Facoltativo: accende e spegne gli emettitori

Vale la pena collegare il pin LEDON, anche se la maggior parte dei progetti lo ignora. Gli emettitori di una schiera a 8 canali possono consumare insieme 100–200 mA in continuo, una frazione significativa del budget di una batteria piccola; inoltre ti consente di eseguire la sottrazione della luce ambiente, descritta più avanti.

Calibrazione: il codice che decide se funziona

Non è facoltativa e non è un perfezionamento. Una schiera non calibrata è il motivo più comune per cui un robot seguitore di linea funziona sul tavolo della cucina e fallisce in gara.

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);
}

Osserva la protezione span < 50. Un canale che durante la calibrazione non ha visto contrasto, perché la scansione lo ha mancato o perché il suo emettitore è guasto, produrrebbe altrimenti valori normalizzati enormi partendo da un rumore minimo e il robot si devierebbe verso un sensore che non gli sta dicendo nulla.

Da otto letture a un solo valore di sterzo

La media ponderata è tutto il trucco e produce una posizione continua, anziché un indicatore discreto come «il sensore 3 la vede»:

// 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
}

Due decisioni progettuali contano più dell’aritmetica:

Ignorare i canali sotto una soglia impedisce al rumore del pavimento di trascinare la media. Senza questa protezione, otto canali che leggono ciascuno un piccolo valore diverso da zero trascinano la stima verso il centro, indipendentemente da dove si trovi la linea.

Restituire l’ultimo errore quando la linea viene persa, anziché zero, permette al robot di recuperare dopo un angolo acuto. Zero significa «perfettamente centrato», quindi un robot che azzera in perdita della linea prosegue dritto a piena velocità, allontanandosi dalla linea appena persa. Conservare l’ultimo errore lo mantiene nella direzione di sterzo in cui stava già virando, cioè verso cui la linea è andata.

Altezza di montaggio e perché decide tutto

I sensori a riflessione hanno una zona ottimale stretta. Il segnale diminuisce rapidamente in entrambe le direzioni: se sono troppo alti il ritorno è debole, se sono troppo bassi il cono dell’emettitore non si è ancora aperto abbastanza da illuminare ciò che vede il rilevatore.

Altezza da terra Comportamento tipico
1–3 mm Contrasto migliore, ma graffia su qualsiasi irregolarità della superficie
3–8 mm L’intervallo utilizzabile: la maggior parte delle schiere indica circa 3 mm
8–15 mm Contrasto in crollo; l’intervallo di calibrazione si riduce
> 15 mm Praticamente cieca sulla maggior parte delle superfici

Due conseguenze pratiche. Montala rigidamente: una schiera su un supporto flessibile cambia altezza mentre il robot accelera, il che modifica le letture e il ciclo di controllo interpreta come se la linea si stesse muovendo. E montala in piano, perché una schiera inclinata dà a ogni canale un’altezza effettiva diversa e quindi una calibrazione diversa; il risultato è un robot che traccia bene in una direzione e male nell’altra.

È importante anche montarla davanti alle ruote: più è in avanti, prima il robot vede un angolo e più tempo di anticipo ha il controllore. Troppo in avanti, la geometria amplifica l’errore fino a trasformarlo in oscillazione.

Contrastare la luce ambiente

La luce solare contiene molta radiazione a 940 nm che arriva al rilevatore ed è indistinguibile da un riflesso. Un robot che funziona al chiuso e fallisce vicino a una finestra sta quasi sempre vedendo proprio questo.

Se gli emettitori della schiera possono essere attivati e disattivati, la soluzione è completa e costa due letture:

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
}

Qualsiasi componente costante dell’ambiente si cancella esattamente. Raddoppia il tempo di campionamento, un costo reale su un robot seguitore di linea veloce, ma trasforma un sensore inaffidabile in uno affidabile: è la tecnica usata dalle schiere commerciali.

In alternativa, circonda la schiera con una flangia, in modo che veda soltanto il pavimento immediatamente sottostante.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
Funziona su una superficie, non su un’altra Nessuna calibrazione oppure calibrazione obsoleta Ricalibra all’inizio di ogni sessione, sulla superficie reale
Il robot devia verso un lato L’intervallo di calibrazione di un canale è errato Controlla hi/lo di ogni canale; un emettitore guasto dà un intervallo minimo
Perde la linea negli angoli stretti Schiera troppo vicina alle ruote oppure azzeramento in perdita di linea Spostala in avanti; conserva l’ultimo errore anziché azzerare
Oscilla sui tratti rettilinei Schiera troppo in avanti oppure guadagno eccessivo Riduci l’anticipo; regola di nuovo il controllore
Fallisce vicino a una finestra Infrarossi ambiente Esegui la sottrazione con emettitori spenti oppure scherma la schiera
Comportamento irregolare su nastro nero lucido Riflessione speculare dal nastro Nastro opaco su pavimento opaco è la combinazione affidabile
Le letture derivano durante la sessione Batteria che cala e emettitori che si affievoliscono Gli emettitori consumano molta corrente; controlla la tensione della linea di alimentazione sotto carico
Tutti i canali leggono lo stesso valore Schiera troppo alta Portala a 3–8 mm e ricalibra

Scelta della schiera

Canali Risoluzione di posizione Adatta a
3 Grossolana: essenzialmente sinistra/centro/destra Imparare soltanto il concetto
5 Adeguata Un primo robot seguitore di linea su un percorso dolce
8 Comoda Percorsi veloci, curve strette, rilevamento delle giunzioni nel labirinto di linee
12–16 Fina Robot da competizione ad alta velocità

L’uscita analogica è migliore di quella digitale per qualsiasi sistema con ciclo di controllo. Il comparatore di una schiera digitale fornisce linea/non linea per ogni canale, quantizzando la posizione in pochi valori discreti e rendendo impossibile uno sterzo proporzionale fluido. L’uscita analogica fornisce un segnale d’errore continuo, proprio ciò che serve a un controllore PID.

La distanza tra i canali conta quanto il loro numero: la schiera deve essere più larga della linea quanto basta perché almeno un sensore resti sempre sul pavimento a ogni bordo, ma non così larga che la linea possa passarne in mezzo senza essere vista. Per nastro elettrico standard da 19 mm, una distanza di 8 mm funziona bene.

Per un risolutore di labirinti di linee c’è un ulteriore requisito: la schiera deve essere abbastanza larga da vedere una giunzione. Un robot rileva una svolta a sinistra notando che i sensori più esterni a sinistra sono diventati scuri mentre il centro è ancora sulla linea, cosa impossibile se la schiera è appena più larga del nastro.

Esplora il grafo

Usato in queste costruzioni

Progetti, percorsi di apprendimento e simulatori che includono Array di sensori a riflessione IR.

Domande

FAQ su Array di sensori a riflessione IR

Che cos'è un sensore per robot seguitore di linea?

Un sensore per robot seguitore di linea è un sensore a infrarossi riflessi che il robot punta verso il terreno per rilevare una linea tracciata. Ogni canale proietta luce IR verso il basso e misura quanta ne torna indietro, così una linea scura, che riflette meno, produce una lettura diversa dal pavimento circostante.

Come funziona un sensore per robot seguitore di linea?

Ogni canale abbina un LED IR a un fototransistore. Le superfici chiare riflettono fortemente e le linee scure assorbono l'infrarosso, quindi il sensore sopra la linea legge un valore basso mentre gli altri leggono valori alti. Leggendo l'intera fila, il robot sa dove si trova la linea sotto di sé.

Come calibri un sensore IR per un robot seguitore di linea?

Prima di una sessione, fai scorrere la schiera sia sulla linea sia sul pavimento nudo e registra la lettura minima e massima di ogni canale, poi scala le letture successive tra questi limiti. Saltare la calibrazione è il motivo principale per cui un robot seguitore di linea funziona su una superficie e fallisce su un'altra.

Che cos'è il PID in un robot seguitore di linea?

PID è il metodo di controllo che trasforma l'errore di posizione rilevato dal sensore in uno sterzo fluido. Il termine proporzionale reagisce a quanto il robot si discosta dalla linea, quello derivativo attenua il superamento e quello integrale elimina la deriva costante, così il robot segue la linea senza oscillare. Puoi regolarlo dal vivo nel nostro simulatore PID.

Quali sono i componenti principali di un robot seguitore di linea?

Un robot seguitore di linea di base richiede quattro elementi: una schiera di sensori IR a riflessione per vedere la linea, un microcontrollore come Arduino Uno per eseguire il ciclo di controllo, un driver del motore come L298N e due motori CC con ruote. Batteria e telaio completano il progetto.

A cosa serve una schiera di sensori a riflessione per robot seguitore di linea?

Oltre ai robot seguitori di linea, le schiere a riflessione servono per rilevare bordi (fermandosi al bordo di un tavolo), per la rilevazione della posizione in stile encoder e per semplici rilevamenti di superficie o contrasto nell'automazione. Ovunque un robot debba reagire a un segno ad alto contrasto su una superficie, una schiera a riflessione è una scelta economica e affidabile.

Per approfondire

Fonti