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:

Erweiterungsmöglichkeiten


Erstellt: 26.02.2024 · Zuletzt geändert: 06.04.2026