Arbeitsauftrag: Linienfolger

Funktionsweise des Linienfolgers

Mithilfe des Liniensensors (auch IR-Sensor genannt) kann unser Fahrzeug einer Linie (Fahrspur) folgen und beim Verlassen der Fahrspur gegenlenken, um wieder der Linie folgen zu können.

Montage des Liniensensors an das Fahrzeug

Der Sensor wird vorne an das Fahrzeug angebracht. Die IR-LED und der Empfänger sollen dabei parallel zum Boden sein, also in Richtung Boden zeigen.

Arbeitsauftrag 1

Schreibe ein Programm, mit dem dein Fahrzeug, wenn es auf eine schwarze Linie trifft, nach links oder rechts ausweichen kann. Vor dem Aufeinandertreffen soll das Fahrzeug gerade auf die Linie zufahren. Nach dem Ausweichen soll das Fahrzeug wieder auf die schwarze Linie treffen und den Ausweichvorgang wiederholen.

Hilfestellung 1

Lass dir die Reflexionswerte der schwarzen Linie und des Hintergrunds, auf der die Linie klebt, ausgeben. Der Wert für dir schwarze Linie ist der Schwellenwert, sobald dieser Wert gemessen wird, soll das Fahrzeug nach links oder rechts ausweichen.

Für den Arbeitsauftrag 1 werden folgende Funktionen in deinem Code benötigt:

vorwärts fahren

nach links fahren

nach rechts fahren

Messwerte des IR-Sensors auslesen

Hilfestellung 2

Hier findest du einen Beispielcode. Diesen kannst du als Vorlage nutzen und ihn weiter optimieren (z.B. die Dauer des nach links fahren), beachte aber dass du den Messwert des Liniensensors von deinem Sensor verwenden musst. Vergleiche auch unbedingt deine Hardware mit den Pins im Beispielcode.

ausweichen_liniensensor.ino

int empfaenger = A0; // Variablen deklarieren
int messwert = 0;
//Motor links
int M_l = 3;
//Motor rechts
int M_r = 5;
// Funktionen deklarieren
void vorwaerts();
void links_fahren();
void rechts_fahren();
void messen();
void setup() {
Serial.begin (9600);
pinMode(M_l, OUTPUT);
pinMode(M_r, OUTPUT);
}
void loop() {
vorwaerts();
messen();
if (messwert>520){ //Wenn der Liniensensor höhere Werte als 250 misst, befindet sich das Fahrzeug über der Linie
links_fahren();
}
else if (messwert<520){ //Außerhalb der Linie werden Messwerte unterhalb 250 gemessen
rechts_fahren();
}
}
void vorwaerts(){
analogWrite (M_l,250);
analogWrite (M_r,250);
}
void links_fahren (){
analogWrite (M_l,250);
analogWrite (M_r,0);
delay (100);
}
void rechts_fahren (){
analogWrite (M_l,0);
analogWrite (M_r,250);
delay (100);
}
void messen(){
messwert = analogRead (empfaenger); //Der gemessene Reflexionswert wird in der Variable messwert zwischengespeichert
Serial.print ("Reflexionswert = ");
Serial.print (messwert);
Serial.println();
delay(500);
}

Arbeitsauftrag 2

Schreibe ein Programm, mit dem dein Fahrzeug einer schwarzen Linie folgen kann. Wird die schwarzen Linie vom Fahrzeug verlassen, soll durch eine Links- bzw. Rechtskurve das Fahrzeug wieder auf Kurs gebracht werden.