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+ |
Alternativ können Sie diese auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
---|---|
- |
|
- |
|
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 |
Programmierung
Bemerkung
Öffnen Sie die Datei
8.self_driving_car.ino
unter dem Pfad3in1-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);
}
}
}