8. Autonomes Fahren

Dieses Projekt kombiniert zwei Projekte: 6. Spielen mit dem Ultraschallmodul und 5. Mit dem Hindernisvermeidungs-Modul spielen. Die 2 Infrarot-Hindernisvermeidungsmodule dienen zur kurzfristigen oder Rand-Erkennung, während die Ultraschallmodule zur Fernerkennung verwendet werden, um sicherzustellen, dass das Auto während des freien Fahrens keinem Hindernis begegnet.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

Es ist sicherlich praktisch, ein komplettes Kit zu kaufen. Hier ist der Link:

Name

KOMPONENTEN IN DIESEM KIT

LINK

3-in-1 Starter Kit

380+

3 in 1 Starter Kit

Alternativ können Sie diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

SunFounder R3 Platine

BUY

L9110 Motortreibermodul

-

TT Motor

-

Ultraschall-Modul

BUY

Hindernisvermeidungsmodul

BUY

Verdrahtung

Schließen Sie das Ultraschallmodul und die 2 IR-Hindernisvermeidungsmodule gleichzeitig an.

Verbinden Sie das Ultraschallmodul wie folgt mit dem R3-Board.

Ultraschallmodul

R3 Board

Vcc

5V

Trig

3

Echo

4

Gnd

GND

Die Verdrahtung der beiden IR-Hindernisvermeidungsmodule zum R3-Board ist wie folgt:

Linkes IR-Modul

R3 Board

OUT

8

GND

GND

VCC

5V

Rechtes IR-Modul

R3 Board

OUT

7

GND

GND

VCC

5V

../_images/car_7_8.png

Programmierung

Bemerkung

  • Öffnen Sie die Datei 8.self_driving_car.ino unter dem Pfad 3in1-kit\car_project\8.self_driving_car.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Alternativ können Sie den Code über den Arduino Web Editor hochladen.

Sobald der Code erfolgreich hochgeladen wurde, beginnt das Auto mit dem freien Fahren. Wenn das IR-Hindernisvermeidungsmodul auf beiden Seiten ein Hindernis erkennt, wird es in die entgegengesetzte Richtung für eine Notausweichbewegung fahren; wenn direkt vor dem Auto ein Hindernis in einem Abstand von 2~10cm ist, wird es rückwärts nach links fahren, seine Richtung korrigieren und dann vorwärts fahren.

Wie funktioniert es?

Der Arbeitsablauf dieses Projekts ist wie folgt.

  • Lese zuerst den Wert des linken und rechten IR-Hindernisvermeidungsmoduls.

  • Wenn das linke IR-Modul 0 ist (Hindernis erkannt) und das rechte IR-Modul 1 ist, lasse das Auto nach links zurückfahren.

  • Wenn das rechte IR-Modul 0 ist (Hindernis erkannt), lasse das Auto nach rechts zurückfahren.

  • Wenn beide IR-Module gleichzeitig ein Hindernis erkennen, wird das Auto rückwärts fahren.

  • Ansonsten lies den vom Ultraschallmodul erkannten Abstand.

  • Wenn der Abstand größer als 50 cm ist, lasse das Auto vorwärts fahren.

  • Wenn der Abstand zwischen 2-10cm liegt, lasse das Auto zurückfahren, bevor es sich dreht.

  • Wenn der Abstand zwischen 10-50cm liegt, lasse das Auto mit geringer Geschwindigkeit vorwärts fahren.

void loop() {

    int left = digitalRead(leftIR);   // 0: Obstructed  1: Empty
    int right = digitalRead(rightIR);

    if (!left && right) {
        backLeft(150);
    } else if (left && !right) {
        backRight(150);
    } else if (!left && !right) {
        moveBackward(150);
    } else {
        float distance = readSensorData();
        Serial.println(distance);
        if (distance > 50) { // Safe
            moveForward(200);
        } else if (distance < 10 && distance > 2) { // Attention
            moveBackward(200);
            delay(1000);
            backLeft(150);
            delay(500);
        } else {
            moveForward(150);
        }
    }
}