A11|02 Der Liniendetektor
Line Tracking Sensor


Sensorwerte / Mix an Sensoren

Eigentlich ist die Bezeichnung Liniendetektor nicht wirklich zu treffend für dieses Modul. Genau genommen kann es abrupte Farbübergänge auf Flächen (2D) messen – idealerweise Schwarz/Weiß-Grenzen. Mit drei Liniendetektoren kann ein autonomer mobiler Roboter einer Linie folgen. Es würde sogar mit einem funktionieren, wäre aber eine mühsame Fahrt.

 

Spezifikationen
- Pinabstand: 2.54mm
- Spannungsversorgung: 5V
- Stromverbrauch: <10mA
- Betriebstemperatur: 0°C ~ + 50°C
- Output Level: TTL level

Das Modul ist digitaler Natur. Das bedeutet, dass wir bei der Programmierung keine Schwellenwerte bei Farbübergängen programmieren und auswerten müssen. Dies erledigt bereits die eingebaute Elektronik auf dem Modul. Das Modul erkennt, ob sich eine lichtreflektierende oder Licht absorbierende Fläche vor dem Sensor befindet und sendet an das Arduino entweder eine binäre 1 (HIGH) oder 0 (LOW). Die Entscheidung wann es sich um eine 1 oder 0 handelt wird im Sensor bestimmt – programmtechnisch haben wir keinen Einfluss auf eine Nachjustierung. Aber wir können mithilfe des eingebauten Drehreglers den Schwellenwert mechanisch verschieben.

 

Der Aufbau

Verbinde dein Arduino mithilfe der Jumper Wire mit dem Modul:

 
 

Der minimal Sketch

Befindet sich der Sensor auf einer schwarzen Linie, schickt der Sketch eine Nachricht an den seriellen Monitor: Auf der Linie! Falls hingegen der Sensor die Linie verlässt, wird folgende Nachricht gesendet: Linie verlassen! Sobald die Schaltung aufgebaut ist, lade die folgende Skizze auf dein Arduino hoch.

Sehr wahrscheinlich musst du den Sensor zuerst kalibrieren. Halte dazu den Sensor in der von dir bevorzugten Distanz zur Linie und drehe so lange am Trimmpotentiometer bis die LED am Sensor erlischt. Das Drehen am Potentiometer fällt einfacher, wenn du es an einer Tischkante machst. Kontrolliere das Ergebnis, in dem du den Sensor auf gleicher Höhe auf eine weiße Fläche verschiebst. Die LED sollte nun nicht mehr leuchten.

/********************************************************
A11|02 Der Liniendetektor
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

int linePin = 3;   //Pin-Nummer des Liniendetektors
int lineValue = 0; //Variable zum Speichern der Liniendetektor-Werte


void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(linePin, INPUT);  //den Liniendetektor als INPUT deklarieren
}


void loop() 
{
  lineValue = digitalRead(linePin); //lies die aktuellen Liniendetektor-Wert

  if(lineValue == HIGH) //Wenn der Sensor ein HIGH sendet
  {
    //Sende den Liniendetektor-Wert und die Nachricht: Auf der Linie!  
    Serial.print(lineValue);
    Serial.println(" Auf der Linie! "); 
  }
  else
  {      
    //Sende den Liniendetektor-Wert und die Nachricht: Linie verlassen!  
    Serial.print(lineValue);
    Serial.println("  Linie verlassen! "); 
  }
}
 

Der Sketch im Detail

Der Sketch beginnt mit der Initialisierung von zwei Variablen: linePin (der Digital-Pin für den Sensor) und lineValue (Variable um die Werte des Sensors zu speichern).

int linePin = 3;   //Pin-Nummer des Liniendetektors
int lineValue = 0; //Variable zum Speichern der Liniendetektor-Werte
 

Der void setup() ist relativ unspektakulär. Hier initialisieren wir die serielle Kommunikation und stellen den Sensor als INPUT ein.

void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(linePin, INPUT);  //den Liniendetektor als INPUT deklarieren
}
 

In der void loop() Schleife lesen wir den Sensorwert mit digitalRead(linePin); ein und speichern ihn in der Variable lineValue.

void loop() 
{
  lineValue = digitalRead(linePin); //lies die aktuellen Liniendetektor-Wert
  ...
}
 

Wenn der Sensor aktiviert wird (HIGH = auf der Linie), geht das Programm in die if-Abfrage. Hier wird eine Nachricht an den seriellen Monitor gesendet: Auf der Linie!

if(lineValue == HIGH) //Wenn der Sensor ein HIGH sendet
  {
    //Sende den Liniendetektor-Wert und die Nachricht: Auf der Linie!  
    Serial.print(lineValue);
    Serial.println(" Auf der Linie! "); 
  }
  else
  {      
    //Sende den Liniendetektor-Wert und die Nachricht: Linie verlassen!  
    Serial.print(lineValue);
    Serial.println("  Linie verlassen! "); 
  }
}
 

Falls die if-Abfrage nicht aufgerufen wurde (LOW = nicht auf der Linie), wird die Nachricht Linie verlassen! gesendet.

else
{      
  //Sende den Liniendetektor-Wert und die Nachricht: Linie verlassen!  
  Serial.print(lineValue);
  Serial.println("  Linie verlassen! "); 
}
 
 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.