Inhaltsverzeichnis
Für dieses Projekt benötigst du
Ein Arduino kompatibles Chassis mit der Line Tracking Funktion programmieren
Übersicht
Nachdem wir den Chassis bereits erfolgreich mithilfe der Anleitung Nr. 36a montiert haben, machen wir uns nun an die vollständige Programmierung einer Line Tracking Funktion. Das Chassis soll also selbstständig einer schwarzen Linie folgen können, ohne dabei von dieser abzukommen.
Diese Umsetzung gelingt uns durch Verwendung eines optischen Abstandssensors. Es gibt diese Module in diversen Ausführungen, die sich technisch jedoch kaum voneinander unterscheiden.
Für die Erstellung dieses Tutorials haben wir diesen Abstandssensor verwendet, da die Ausgabe digital (also durch ein HIGH und LOW Signal) erfolgt. Die Sensorempfindlichkeit für das digitale Signal kann per Potentiometer justiert werden.
Schaltplan
Achtung: Die Stromversorgung des Mikrocontrollers und der H-Brücke erfolgt durch sechs 1,5V AA-Batterien.
Funktionsweise
Grundlegend ist das Prinzip der Linienverfolgung relativ einfach erklärt. Wir möchten erzielen, dass der linke Gleichstrommotor des Chassis immer dann betätigt wird, wenn der Abstandssensor das digitale Signal „1“ erfasst. Der Wert „1“ entspricht dabei einem weißen Untergrund.
Zudem möchten wir, dass der rechte Gleichstrommotor des Chassis immer dann betätigt wird, wenn der Abstandssensor das digitale Signal „0“ erfasst. Der Wert „0“ entspricht dabei einem schwarzen Untergrund.
Der Roboter befindet sich also auf einem permanenten „Zick-Zack“-Kurs und verfolgt dabei die vorgegebene schwarze Linie.
Beispielsketch
int GS = 200; // Geschwindigkeit des Gleichstrommotors - die maximale Geschwindigkeit beträgt 250
int DWert; // Variable für die Erfassung des digitalen Werts
// Gleichstrommotor 1 = LINKS
int GSM1 = 10; // Die Variable GSM1 gibt den Pin vor, der Drehgeschwindigkeit des Gleichstrommotors steuert
int in1 = 9; // Über die Variablen "in1 & in2" wird die Drehrichtung des linken Motors gesteuert
int in2 = 8;
// Gleichstrommotor 1 = RECHTS
int GSM2 = 5; // Die Variable GSM2 gibt den Pin vor, der Drehgeschwindigkeit des Gleichstrommotors steuert
int in3 = 7; // Über die Variablen "in3 & in4" wird die Drehrichtung des rechten Motors gesteuert.
int in4 = 6;
int Sensor = 2; // Die Variable "Sensor" steht für den Pi, an dem der Sensor ausgelesen wird
void setup()
{
Serial.begin(9600); // Herstellen der seriellen Verbindung
pinMode(GSM1, OUTPUT); // Die Motoren dienen als Output
pinMode(GSM2, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop()
{
DWert = digitalRead(Sensor); // Auslesen des digitalen Werts an Pin2
Serial.print("Wert : "); // Kontrollinstrument, an dieser Stelle wird der digitale Wert des Sensors an den seriellen Monitor geschickt und kann dort ausgelesen werden.
Serial.println(DWert);
if (DWert == 1) // Wenn der digitale Wert 1 entspricht (also ein weißer Untergrund erfasst wird) ...
{
analogWrite(GSM1, GS); // ... soll sich der linke Motor (GSM1) in Bewegung setzen, der Chassis also mit der Geschwindigkeit "GS" nach rechts fahren.
digitalWrite(in1, HIGH); // Da sich der Chassis vorwärts bewegen soll, wird das Signal an (in1, HIGH) und das Signal an (in2, LOW) gesetzt.
digitalWrite(in2, LOW); // Eine Rückwärtsbewegung würde durch (in1, LOW) und (in2, HIGH) erzeugt werden
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
if (DWert == 0) // ... Bis der digitale Wert 0 (also ein schwarzer Untergrund) erfasst wird. ...
{
analogWrite(GSM2, GS); // ... Dann soll sich der rechte Motor (GSM2) in Bewegung setzen, der Chassis also mit der Geschwindigkeit "GS" nach links fahren.
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH); // Da sich der Chassis vorwärts bewegen soll, wird das Signal an (in3, HIGH) und das Signal an (in4, LOW) gesetzt.
digitalWrite(in4, LOW); // Eine Rückwärtsbewegung würde durch (in3, LOW) und (in4, HIGH) erzeugt werden.
}
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.