Composant · Capteur

IR Reflectance Sensor Array

La barrette de capteurs IR par réflectance montre la ligne à un robot suiveur. Détection infrarouge par réflexion, étalonnage, et où elle échoue.

Présentation

Une barrette de capteurs IR par réflectance est une bande de petits capteurs infrarouges montés en rangée, pointés vers le sol. Chaque capteur associe une DEL infrarouge qui éclaire vers le bas à un phototransistor qui mesure la part de cette lumière réfléchie. Pointez-la vers une ligne sombre sur un sol clair et la ligne réfléchit moins — le capteur au-dessus de la ligne lit donc différemment de ceux au-dessus du sol. Lisez toute la rangée et vous savez non seulement si vous êtes sur la ligne, mais où se trouve la ligne sous le robot.

C’est l’œil de presque tout robot suiveur de ligne, et la raison pour laquelle le suiveur de ligne est un si bon premier projet : la détection est économique, intuitive et immédiatement visible.

Coupe d'une barrette IR par réflectance au-dessus d'un sol avec une ligne noire. Chaque canal émet de l'infrarouge vers le bas ; le sol blanc le réfléchit fortement tandis que la ligne noire l'absorbe, donc le canal au-dessus de la ligne lit bas et les autres lisent haut.
Chaque canal émet de l'infrarouge et mesure ce qui revient. Le sol réfléchit ; la ligne absorbe — la lecture basse marque donc l'endroit où se trouve la ligne sous la barrette. Télécharger le SVG

Fonctionnement

Chaque canal est une paire émetteur-détecteur. La DEL IR émet une lumière invisible à ~940 nm ; le phototransistor conduit davantage à mesure que plus de lumière revient. Une surface blanche ou claire réfléchit fortement (retour élevé) ; une ligne noire absorbe l’infrarouge (retour faible). Deux styles de sortie existent :

  • Analogique — chaque canal rapporte une valeur continue proportionnelle à la réflectance. C’est plus riche : vous pouvez calculer où entre deux capteurs tombe la ligne et obtenir un signal d’erreur doux pour un contrôleur PID.
  • Numérique — un comparateur embarqué rapporte un simple ligne/pas-de-ligne par canal. Plus facile à lire, mais plus grossier.

Pour convertir la barrette en signal de braquage, on calcule une moyenne pondérée des capteurs qui voient la ligne. Si la ligne dérive sous les capteurs de gauche, la moyenne se décale à gauche, et ce décalage devient l’erreur que votre boucle de commande corrige.

Quand l’utiliser

Utilisez une barrette par réflectance dès qu’un robot doit suivre un parcours très contrasté — une ligne noire sur blanc, ou du ruban blanc sur un sol sombre. Plus de canaux donnent une résolution de position plus fine et permettent au robot de mieux gérer virages et discontinuités ; cinq suffisent pour apprendre, huit sont confortables pour des pistes plus rapides ou tortueuses.

C’est le mauvais outil pour détecter des objets, des distances ou quoi que ce soit hors du plan du sol — c’est le travail d’un capteur ultrason ou temps de vol.

Étalonnage et pièges

  • Étalonnez toujours. La lumière ambiante, la surface et la hauteur de roulement déplacent toutes les lectures. Avant un parcours, balayez la barrette au-dessus de la ligne et du sol, enregistrez le min/max par canal, puis mettez les lectures à l’échelle entre eux. Omettre cela est la première raison pour laquelle un suiveur de ligne marche sur une table et échoue sur une autre.
  • La hauteur compte. Les capteurs par réflectance ont une plage idéale étroite (quelques millimètres). Montez la barrette trop haut et le contraste s’effondre.
  • L’infrarouge ambiant est du bruit. Le soleil et certains éclairages inondent les détecteurs d’infrarouge. Capotez les capteurs ou roulez en intérieur pour un comportement régulier, et filtrez le signal — voir dompter le bruit des capteurs.
  • La finition de surface ment. Un noir brillant peut réfléchir comme du blanc sous le mauvais angle ; du ruban mat sur sol mat est la combinaison fiable.

La câbler à un Arduino

Une barrette analogique a besoin d’une broche ADC par canal, c’est pourquoi une barrette à 8 canaux et un Uno (six broches analogiques) font un assemblage maladroit — les huit d’un Nano (A0–A7) tombent juste.

Broche barrette Arduino Note
VCC 5 V Les émetteurs sont la consommation, pas les détecteurs
GND GND
OUT1–OUT8 A0–A7 Canaux analogiques, un par capteur
LEDON / CTRL Toute broche numérique Optionnel : allume et éteint les émetteurs

Cette broche LEDON vaut la peine d’être câblée même si la plupart des projets l’ignorent. Les émetteurs d’une barrette à 8 canaux peuvent tirer 100–200 mA ensemble, en continu, ce qui sur une petite batterie est une part significative du budget — et elle permet la soustraction de lumière ambiante, ci-dessous.

Étalonnage : le code qui décide si ça marche

Ce n’est pas optionnel ni un raffinement. Une barrette non étalonnée est la cause la plus fréquente d’un suiveur de ligne qui marche sur la table de cuisine et échoue en compétition.

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

Notez le garde span < 50. Un canal qui n’a vu aucun contraste pendant l’étalonnage — parce que le balayage l’a manqué, ou que son émetteur est mort — produirait sinon d’énormes valeurs normalisées à partir d’un bruit minuscule, et le robot braquerait vers un capteur qui ne lui dit rien.

De huit lectures à un nombre de braquage

La moyenne pondérée est toute l’astuce, et elle produit une position continue plutôt qu’un discret « le capteur 3 la voit » :

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

Deux décisions de conception comptent plus que l’arithmétique :

Ignorer les canaux sous un seuil empêche le bruit du sol de tirer la moyenne. Sans cela, huit canaux lisant chacun une petite valeur non nulle tirent l’estimation vers le milieu quel que soit l’endroit de la ligne.

Renvoyer la dernière erreur quand la ligne est perdue — plutôt que zéro — est ce qui permet à un robot de se reprendre après un virage serré. Zéro signifie « parfaitement centré », donc un robot qui met zéro à la perte de ligne fonce tout droit à pleine vitesse, loin de la ligne qu’il vient de perdre. Garder la dernière erreur signifie qu’il continue à tourner comme il tournait déjà, là où est partie la ligne.

Hauteur de montage, et pourquoi elle décide de tout

Les capteurs par réflectance ont une plage idéale étroite. Le signal chute vite dans les deux directions : trop haut et le retour est faible, trop bas et le cône de l’émetteur ne s’est pas assez élargi pour éclairer ce que voit le détecteur.

Hauteur de roulement Comportement typique
1–3 mm Meilleur contraste, mais frotte sur toute irrégularité de surface
3–8 mm La bande utilisable — la plupart des barrettes spécifient environ 3 mm
8–15 mm Contraste qui s’effondre ; la plage d’étalonnage rétrécit
> 15 mm Effectivement aveugle sur la plupart des surfaces

Deux conséquences pratiques. Montez-la rigidement — une barrette sur un support flexible change de hauteur quand le robot accélère, ce qui change les lectures, que la boucle de commande lit comme la ligne qui bouge. Et montez-la de niveau, car une barrette inclinée donne à chaque canal une hauteur effective différente et donc un étalonnage différent, ce qui se traduit par un robot qui suit bien dans un sens et mal dans l’autre.

La monter devant les roues compte aussi : plus elle est en avant, plus tôt le robot voit un virage, et plus le contrôleur a d’anticipation. Trop en avant et la géométrie amplifie l’erreur en oscillation.

Vaincre la lumière ambiante

Le soleil contient beaucoup d’infrarouge à 940 nm, et il arrive au détecteur en ressemblant exactement à une réflexion. Un robot qui marche en intérieur et échoue près d’une fenêtre voit presque toujours cela.

Si les émetteurs de votre barrette sont commutables, la correction est complète et coûte deux lectures :

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
}

Tout ce qui est constant dans l’environnement s’annule exactement. Cela double le temps d’échantillonnage, ce qui sur un suiveur de ligne rapide est un vrai coût — mais cela transforme un capteur peu fiable en capteur fiable, et c’est la technique qu’utilisent les barrettes du commerce.

À défaut : capotez la barrette avec une jupe pour qu’elle ne voie que le sol juste en dessous.

Dépannage

Symptôme Cause probable Solution
Marche sur une surface, pas une autre Pas d’étalonnage, ou étalonnage périmé Réétalonnez au début de chaque parcours, sur la surface réelle
Le robot braque vers un côté La plage d’étalonnage d’un canal est fausse Vérifiez le hi/lo de chaque canal ; un émetteur mort se voit à une plage minuscule
Perd la ligne dans les virages serrés Barrette trop près des roues, ou mise à zéro à la perte Avancez-la ; gardez la dernière erreur plutôt que mettre à zéro
Oscille sur les lignes droites Barrette trop en avant, ou gain trop élevé Réduisez l’anticipation ; réglez de nouveau le contrôleur
Échoue près d’une fenêtre Infrarouge ambiant Soustraction avec émetteurs éteints, ou capotez la barrette
Erratique sur ruban noir brillant Réflexion spéculaire sur le ruban Ruban mat sur sol mat est la combinaison fiable
Les lectures dérivent pendant le parcours Batterie qui s’affaisse, donc émetteurs faiblissants Les émetteurs sont gourmands ; vérifiez le rail en charge
Tous les canaux lisent pareil Barrette trop haute Ramenez-la à 3–8 mm et réétalonnez

Choisir une barrette

Canaux Résolution de position Convient pour
3 Grossière — essentiellement gauche/centre/droite Apprendre le concept seulement
5 Suffisante Un premier suiveur de ligne sur piste douce
8 Confortable Pistes rapides, virages serrés, détection de jonctions du robot labyrinthe de lignes
12–16 Fine Robots de compétition à vitesse élevée

L’analogique bat le numérique pour tout ce qui a une boucle de commande. Le comparateur d’une barrette numérique donne du ligne/pas-de-ligne par canal, ce qui quantifie la position en une poignée de valeurs discrètes et rend impossible un braquage proportionnel doux. L’analogique donne un signal d’erreur continu, ce dont un contrôleur PID a besoin.

L’espacement des canaux compte autant que leur nombre : la barrette doit être plus large que la ligne d’ assez pour qu’au moins un capteur soit toujours sur le sol à chaque bord, mais pas si large que la ligne puisse se glisser entre deux capteurs sans être vue. Pour du ruban électrique standard de 19 mm, un espacement de 8 mm convient bien.

Pour un robot solveur de labyrinthe de lignes, il y a une exigence supplémentaire : la barrette doit être assez large pour voir une jonction. Un robot détecte un virage à gauche en remarquant que les capteurs extrêmes de gauche sont devenus sombres alors que le centre est encore sur la ligne — ce qui est impossible si la barrette est à peine plus large que le ruban.

Explorer le graphe

Utilisé dans ces réalisations

Projets, parcours d'apprentissage et simulateurs qui intègrent le composant IR Reflectance Sensor Array.

Questions

FAQ : IR Reflectance Sensor Array

Qu'est-ce qu'un capteur de suiveur de ligne ?

Un capteur de suiveur de ligne est un capteur infrarouge par réflectance que le robot pointe vers le sol pour détecter une ligne tracée. Chaque canal éclaire vers le bas en infrarouge et mesure la part réfléchie, si bien qu'une ligne sombre (qui réfléchit moins) se lit différemment du sol environnant.

Comment fonctionne un capteur de suiveur de ligne ?

Chaque canal associe une DEL IR à un phototransistor. Les surfaces claires réfléchissent fortement et les lignes sombres absorbent l'infrarouge, donc le capteur au-dessus de la ligne lit bas tandis que les autres lisent haut. Lire toute la rangée indique au robot où se trouve la ligne sous lui.

Comment étalonner un capteur IR pour un robot suiveur de ligne ?

Avant un parcours, balayez la barrette au-dessus de la ligne et du sol nu et enregistrez la lecture minimale et maximale par canal, puis mettez à l'échelle les lectures en direct entre ces bornes. Omettre l'étalonnage est la première raison pour laquelle un suiveur de ligne marche sur une surface et échoue sur une autre.

Qu'est-ce que le PID dans un suiveur de ligne ?

Le PID est la méthode de commande qui convertit l'erreur de position du capteur en braquage doux. Le terme proportionnel réagit à l'écart par rapport à la ligne, le terme dérivé amortit les dépassements, et le terme intégral élimine la dérive constante — le robot suit ainsi la ligne sans osciller. Vous pouvez le régler en direct dans notre simulateur PID.

Quels sont les principaux composants d'un robot suiveur de ligne ?

Un suiveur de ligne de base a besoin de quatre choses : une barrette de capteurs IR par réflectance pour voir la ligne, un microcontrôleur comme un Arduino Uno pour exécuter la boucle de commande, un contrôleur de moteurs comme le L298N, et deux moteurs à courant continu avec roues. Une alimentation et un châssis complètent le montage.

À quoi sert une barrette de capteurs de suiveur de ligne ?

Au-delà des robots suiveurs de ligne, les barrettes par réflectance servent à la détection de bords (s'arrêter au bord d'une table), à la détection de position façon codeur, et à la simple détection de surface ou de contraste en automatisme. Partout où un robot doit réagir à une marque très contrastée sur une surface, une barrette par réflectance est un choix économique et fiable.

Pour aller plus loin

Références