Traqueur de ligne
Le module traqueur de ligne TCL1543 est pourvu de 5 détecteurs optiques à infrarouges ITR20001 dont le principe de fonctionnement est le suivant :
Un émetteur émet un rayon IR en direction du sol. Un photo-transistor détecte la fraction de ce rayonnement réfléchi par le sol. Si le sol est réfléchissant ou clair, le récepteur recevra davantage de lumière que s’il est sombre.
Chaque détecteur fournit au microcontrôleur une valeur analogique.
Il suffit de comparer les valeurs des 5 détecteurs pour juger de la position de la ligne noire, et ainsi contrôler la trajectoire du robot.
Le TCL1543 communique avec le microcontrôleur par un protocole SPI (SPI sur Raspberry Pi)
Calibration
Selon l’éclairement ambiant et la réflexivité des surfaces constituant le sol et la ligne, les détecteurs vont renvoyer des valeurs extrêmes (surface « noire », surface »blanche ») différentes.
Il faut calibrer le capteur, afin d’optimiser le « contraste de l’image.
Pour cela, une procédure de calibration doit être faite :
- on balaye toute la ligne avec le capteur
- on enregistre les valeurs minimum et maximum obtenues par chaque détecteur IR
- on utilise ses valeurs extrêmes pour déterminer si le détecteur voit du noir ou du blanc.
Utilisation avec Arduino
Bibliothèque
Pour utiliser plus simplement le détecteur de ligne, il faut installer la bibliothèque TRSensors2.
Calibration
La calibration est nécessaire pour adapter le détecteur au contraste de la ligne à suivre (dépend des matériaux, de l’éclairement, …).
Elle peut se faire à l’aide de ce petit script :
#include "TRSensors2.h" #define NUM_SENSORS 5 TRSensors trs = TRSensors(); unsigned int sensorValues[NUM_SENSORS]; void setup() { Serial.begin(115200); Serial.println("TRSensor : calibration en cours ..."); for (int i = 0; i < 400; i++) // la procedure dure environ 10 secondes { trs.calibrate(); // calibration ... } Serial.println("Calibration terminee"); for (int i = 0; i < NUM_SENSORS; i++) { Serial.print(trs.calibratedMin[i]); Serial.print('\t'); } Serial.println(); for (int i = 0; i < NUM_SENSORS; i++) { Serial.print(trs.calibratedMax[i]); Serial.print('\t'); } Serial.println(); } void loop() { delay(250); }
- Téléverser le programme et ouvrir le moniteur série .
- Lorsque le premier message apparait, balayer lentement le capteur au dessus de la ligne à détecter.
- Noter soigneusement les valeurs qui s’affichent.
par exemple :
213 229 231 210 170
358 373 389 358 298
Dans la fonction setup()
des futurs programmes utilisant le capteur, il faudra ajouter quelques lignes pour adapter le capteur à la ligne à détecter.
par exemple :
unsigned int minSensorValues[NUM_SENSORS] = {213, 229, 231, 210, 170}; unsigned int maxSensorValues[NUM_SENSORS] = {358, 373, 389, 358, 298}; trs.SetCalibrates(minSensorValues, maxSensorValues);
Il faut effectuer la procédure de calibration une seule fois pour une ligne donnée.
Détection d’une ligne
#include "TRSensors2.h" #define NUM_SENSORS 5 // sensors 0 through 5 are connected to analog inputs 0 through 5, respectively TRSensors trs = TRSensors(); unsigned int sensorValues[NUM_SENSORS]; void setup() { Serial.begin(115200); Serial.println("TRSensor"); // Donnees de calibrations unsigned int minSensorValues[NUM_SENSORS] = {213, 229, 231, 210, 170}; unsigned int maxSensorValues[NUM_SENSORS] = {358, 373, 389, 358, 298}; trs.SetCalibrates(minSensorValues, maxSensorValues); } void loop() { // Lecture de la position de la ligne (nombre entre 0 et 4000) unsigned int position = trs.readLine(sensorValues); Serial.println(position); delay(250); }
La position de la ligne est donnée par la méthode .readLine()
qui renvoie un nombre entre 0 et 4000 :
Position de la ligne par rapport au capteur |
gauche | centre | droite |
Nombre renvoyé par.readLine() |
0 | 2000 | 4000 |
Autres méthodes
Lecture des valeurs « brutes » renvoyées par le capteur.
trs.AnalogRead(sensorValues);
Lecture des valeurs « calibrées » renvoyées par le capteur
trs.readCalibrated(sensorValues);
Utilisation avec Raspberry Pi
Bibliothèque
On peut utiliser une bibliothèque « maison » : TRsensor.py
Téléchargement : TRsensor
Calibration
La procédure d’autocalibration nécessite de déplacer le capteur au dessus de la ligne à suivre.
On doit réaliser une calibration à chaque fois que l’on change l’éclairement ambiant, ou la nature de la ligne à suivre.
La classe TRSensor
dispose d’une méthode d’autocalibration autoCalibration()
Une fois les valeurs obtenues, on peut les conserver et les fournir lors des constructions futures de l’objet TRSensor
:
TR = TRSensor(cMin = [421, 448, 451, 490, 348], cMax = [92, 106, 109, 125, 152])