Ausweichroboter

Ein Roboter, der selbstständig durch den Raum fährt und Hindernissen ausweicht. Kein Bausatz, kein Lasercut, kein 3D-Druck -- das Chassis ist ein Paketkarton. Schere, Heißkleber, fertig. Die Elektronik ist ein Arduino Uno, zwei Motoren und ein Ultraschallsensor. Gesamtkosten unter 15 Euro (ohne den Karton).

Stückliste

Teil Beschreibung ca. Preis
Arduino Uno R3 ATMega328P, oder kompatibler Klon 5 €
L298N Motortreiber Dual-H-Brücke, 5V-Regler onboard 2 €
HC-SR04 Ultraschall-Entfernungssensor 1 €
2× TT-Motor mit Rad Die gelben Getriebemotoren (1:48) 3 €
Kugelrad (Ballcaster) Als drittes Rad hinten, oder eine Murmel mit Heißkleber 1 €
4× AA Batteriehalter 6V Versorgung für Motoren 1 €
Jumperkabel Dupont-Kabel, male-female vorhanden
Paketkarton Doppelwellig, ca. 3--4 mm stark 0 €

Alles bis auf den Karton gibt es bei den üblichen Verdächtigen. Die TT-Motoren mit Rädern werden oft im Doppelpack verkauft.

Chassis

Das Chassis ist ein einziges Stück Wellpappe, das zu einer flachen Wanne gefaltet wird. Kein Schneiden und Kleben von Einzelteilen -- ein Zuschnitt, falten, fertig. Die hochgeklappten Wände geben Stabilität und dienen gleichzeitig als Halterung für den Sensor und die Elektronik.

Zuschnitt

Ausgangsmaterial: ein Stück doppelwellige Pappe, ca. 30 × 24 cm (passt in jeden Paketkarton). Die Wellpappe-Rillen sollten quer zur Fahrtrichtung laufen -- dann lassen sich die Seitenwände sauber falten.

        ┌─────── 18 cm ───────┐
        │                      │
   4 cm │   ○ ○   Frontwand   │ 4 cm
────────┼──────────────────────┼────────
        │                      │
        │                      │
   4 cm │     Bodenplatte      │ 4 cm
        │       18 × 12        │
        │                      │
────────┼──────────────────────┼────────
   4 cm │    Heckwand (2 cm)   │ 4 cm
        │                      │
        └──────────────────────┘

Falzlinien

Die Falzlinien (gestrichelt im Zuschnitt) mit der stumpfen Seite einer Schere oder einem Lineal einritzen -- nicht durchschneiden. Dann klappen die Wände sauber hoch. Bei doppelwelliger Pappe geht das einwandfrei.

Motorhalterung

Die TT-Motoren werden von innen an die Seitenwände geklebt. Dazu in jede Seitenwand einen Schlitz schneiden (ca. 20 × 15 mm), durch den die Motorachse nach außen ragt. Der Motor liegt flach an der Innenseite der Wand an -- Heißkleber hält bombenfest.

Die Motorachsen sollten ungefähr auf halber Länge der Bodenplatte sitzen, leicht hinter der Mitte. So kippt der Bot nicht nach vorne.

Zusammenbau

  1. Zuschnitt ausschneiden, Falzlinien ritzen
  2. Motorschlitze in die Seitenwände schneiden
  3. HC-SR04-Löcher in die Frontwand bohren (Kugelschreiber reicht)
  4. Wände hochklappen, Ecklaschen nach innen falten und festkleben
  5. Motoren von innen einkleben, Räder aufstecken
  6. Kugelrad hinten mittig unter die Bodenplatte kleben (oder eine Murmel in einen Heißklebe-Klecks drücken)
  7. Arduino Uno und L298N oben auf die Bodenplatte -- doppelseitiges Klebeband oder Gummibänder
  8. Batteriehalter unter die Bodenplatte zwischen die Motoren

Zeitaufwand: ca. 30 Minuten. Wenn was nicht passt -- neuen Karton nehmen, kostet nichts.

Schaltung

Pinbelegung

Arduino Pin Verbindung
D2 HC-SR04 Trigger
D3 HC-SR04 Echo
D5 L298N ENA (PWM linker Motor)
D6 L298N ENB (PWM rechter Motor)
D7 L298N IN1
D8 L298N IN2
D9 L298N IN3
D10 L298N IN4
GND gemeinsame Masse

Verkabelung

Code

// Ausweichroboter -- Arduino Uno + HC-SR04 + L298N
// Fährt geradeaus, weicht bei Hindernis aus.

// --- Pins ---
const int TRIG = 2;
const int ECHO = 3;

const int ENA = 5;   // PWM links
const int ENB = 6;   // PWM rechts
const int IN1 = 7;
const int IN2 = 8;
const int IN3 = 9;
const int IN4 = 10;

// --- Parameter ---
const int SPEED       = 150;  // 0-255, Motorgeschwindigkeit
const int TURN_SPEED  = 180;
const int MIN_DIST_CM = 25;   // Ausweichdistanz
const int TURN_MS     = 400;  // Drehzeit in ms

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  int dist = measureDistance();

  if (dist > 0 && dist < MIN_DIST_CM) {
    // Hindernis: anhalten, zurück, drehen
    stop();
    delay(200);
    backward(SPEED);
    delay(300);
    stop();
    delay(200);
    turnRight(TURN_SPEED);
    delay(TURN_MS);
    stop();
    delay(200);
  } else {
    forward(SPEED);
  }

  delay(50);
}

// --- Entfernung messen ---
int measureDistance() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  long duration = pulseIn(ECHO, HIGH, 30000);  // Timeout 30ms
  if (duration == 0) return -1;                  // kein Echo
  return duration / 58;                          // cm
}

// --- Motorfunktionen ---
void forward(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void backward(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}

void turnRight(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);   // links vorwärts
  digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH);  // rechts rückwärts
}

void turnLeft(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, LOW);  digitalWrite(IN2, HIGH);  // links rückwärts
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);    // rechts vorwärts
}

void stop() {
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);
}

Der Code ist bewusst simpel gehalten -- eine Zustandsmaschine mit zwei Zuständen: "Fahren" und "Ausweichen". Das reicht, um den Bot durch ein Zimmer fahren zu lassen.

Was man verbessern kann

Weiterführendes


Erstellt: 06.04.2026