Linienfolger-Roboter
Ein Linienfolger ist ein klassisches Einstiegsprojekt in die Robotik. Der Roboter erkennt eine schwarze Linie auf hellem Untergrund mithilfe von Infrarot-Sensoren und steuert seine Motoren entsprechend.
Bauteile
| Bauteil | Anzahl | Beschreibung |
|---|---|---|
| Arduino Nano | 1 | Mikrocontroller |
| IR-Sensor-Modul (TCRT5000) | 2 | Linienerkennung links/rechts |
| L298N Motortreiber | 1 | H-Brücke für 2 DC-Motoren |
| DC-Getriebemotor | 2 | Antrieb, 3-6V |
| Lenkrolle (Kugelrad) | 1 | Stützrad vorne |
| Batteriehalter 4xAA | 1 | Stromversorgung |
| Chassis | 1 | 3D-gedruckt oder lasergeschnitten |
Schaltung
Die beiden IR-Sensoren werden an die digitalen Eingänge D2 und D3 des Arduino angeschlossen. Der L298N-Motortreiber wird über die Pins D5, D6 (Motor A) und D9, D10 (Motor B) gesteuert. Die Enable-Pins werden mit PWM angesteuert, um die Geschwindigkeit zu regeln.
Code
// Linienfolger - Arduino Sketch
const int sensorLinks = 2;
const int sensorRechts = 3;
const int motorA_EN = 5;
const int motorA_IN1 = 6;
const int motorB_EN = 9;
const int motorB_IN1 = 10;
const int geschwindigkeit = 150; // PWM 0-255
void setup() {
pinMode(sensorLinks, INPUT);
pinMode(sensorRechts, INPUT);
pinMode(motorA_EN, OUTPUT);
pinMode(motorA_IN1, OUTPUT);
pinMode(motorB_EN, OUTPUT);
pinMode(motorB_IN1, OUTPUT);
Serial.begin(9600);
}
void vorwaerts() {
analogWrite(motorA_EN, geschwindigkeit);
digitalWrite(motorA_IN1, HIGH);
analogWrite(motorB_EN, geschwindigkeit);
digitalWrite(motorB_IN1, HIGH);
}
void linksLenken() {
analogWrite(motorA_EN, 0);
digitalWrite(motorA_IN1, LOW);
analogWrite(motorB_EN, geschwindigkeit);
digitalWrite(motorB_IN1, HIGH);
}
void rechtsLenken() {
analogWrite(motorA_EN, geschwindigkeit);
digitalWrite(motorA_IN1, HIGH);
analogWrite(motorB_EN, 0);
digitalWrite(motorB_IN1, LOW);
}
void stopp() {
analogWrite(motorA_EN, 0);
analogWrite(motorB_EN, 0);
}
void loop() {
int links = digitalRead(sensorLinks);
int rechts = digitalRead(sensorRechts);
// Sensor gibt LOW zurueck wenn schwarze Linie erkannt
if (links == LOW && rechts == LOW) {
vorwaerts(); // beide Sensoren auf der Linie
} else if (links == LOW) {
linksLenken(); // Linie ist links -> nach links lenken
} else if (rechts == LOW) {
rechtsLenken(); // Linie ist rechts -> nach rechts lenken
} else {
stopp(); // Linie verloren
}
delay(10);
}
Chassis
Das Chassis kann entweder aus 3mm MDF/Acryl lasergeschnitten oder als flache Platte 3D-gedruckt werden. Wichtig ist:
- Abstand der IR-Sensoren: ca. 3-4 cm, symmetrisch zur Mitte
- Motorhalterung: passend zum Getriebemotor (meist 130er Typ)
- Lenkrolle: vorne mittig, damit der Roboter frei drehen kann
Erweiterungsmöglichkeiten
- PID-Regelung statt einfachem An/Aus für sanftere Kurvenfahrt
- Mehr Sensoren (3 oder 5 Stück) für bessere Linienerkennung bei Kreuzungen
- OLED-Display zur Anzeige der Sensorwerte
Erstellt: 26.02.2024 · Zuletzt geändert: 06.04.2026