6. Spielen mit dem Ultraschallmodul

Im Projekt 5. Mit dem Hindernisvermeidungs-Modul spielen werden die 2 Infrarot-Hindernisvermeidungsmodule zur Hindernisvermeidung verwendet, aber die Erkennungsdistanz des IR-Hindernisvermeidungsmoduls ist kurz, wodurch das Auto möglicherweise zu spät kommt, um den Hindernissen auszuweichen.

In diesem Projekt verwenden wir ein Ultraschallmodul für eine Langstreckenerkennung, damit das Auto Hindernisse aus einer größeren Entfernung erkennen und eine Entscheidung treffen kann.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

3-in-1 Starter-Kit

380+

3 in 1 Starter Kit

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

KOMPONENTENVORSTELLUNG

KAUF-LINK

SunFounder R3 Platine

BUY

L9110 Motortreibermodul

-

TT Motor

-

Ultraschall-Modul

BUY

Verdrahtung

Ein Ultraschallsensormodul ist ein Instrument, das die Entfernung zu einem Objekt mit Ultraschallwellen misst. Es hat zwei Sonden. Eine sendet Ultraschallwellen und die andere empfängt die Wellen und wandelt die Sende- und Empfangszeit in eine Entfernung um, wodurch die Entfernung zwischen dem Gerät und einem Hindernis erfasst wird.

Bauen Sie die Schaltung entsprechend dem folgenden Diagramm auf.

Ultraschallmodul

R3 Board

Vcc

5V

Trig

3

Echo

4

Gnd

GND

../_images/car_6.png

Code

Bemerkung

  • Öffnen Sie die Datei 6.ultrasonic_module.ino im Pfad 3in1-kit\car_project\6.ultrasonic_module.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Oder laden Sie den Code über den Arduino Web Editor hoch.

Nachdem der Code erfolgreich hochgeladen wurde, richten Sie das Auto auf die Wand. Wenn der Abstand zu groß ist, fährt es vorwärts; wenn es zu nah ist, fährt es rückwärts; wenn es sich in sicherer Entfernung befindet, hält es an.

Wie funktioniert das?

Dieses Projekt basiert auf der vom Ultraschallmodul gelesenen Entfernung, um das Auto entsprechend zu bewegen.

  1. Fügen Sie die Pin-Definition für das Ultraschallmodul hinzu, trigPin wird verwendet, um Ultraschallwellen zu senden, setzen Sie es also auf OUTPUT; echoPin wird auf INPUT gesetzt, um Ultraschallwellen zu empfangen.

    ...
    const int trigPin = 3;
    const int echoPin = 4;
    
    void setup() {
    ...
    
    //ultrasonic
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
    }
    
  2. Zuerst lesen Sie den Abstandswert, der vom Ultraschallmodul erhalten wurde. Wenn der Abstand größer als 25 ist, lassen Sie das Auto vorwärts fahren; wenn der Abstand zwischen 2-10cm liegt, lassen Sie das Auto rückwärts fahren, ansonsten (zwischen 10~25) stoppen.

    void loop() {
        float distance = readSensorData();
        if (distance > 25) {
            moveForward(200);
        }
        else if (distance < 10 && distance > 2) {
            moveBackward(200);
        } else {
            stopMove();
        }
    }
    
  3. Über die Funktion readSensorData().

    Der Sender des Ultraschallmoduls sendet alle 2us ein 10us Rechteckwellensignal, und der Empfänger empfängt ein High-Level-Signal, wenn sich ein Hindernis im Bereich befindet. Verwenden Sie die Funktion pulseIn(), um die Zeit vom Senden bis zum Empfangen aufzuzeichnen, teilen Sie durch die Schallgeschwindigkeit von 340m/s und dann durch 2. Das Ergebnis ist die Entfernung zwischen diesem Modul und dem Hindernis in Einheiten: cm.

    float readSensorData() {
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        float distance = pulseIn(echoPin, HIGH) / 58.00; //Entspricht (340m/s*1us)/2
        return distance;
    }
    
  • pulseIn(pin, value)

    • pin: die Nummer des Arduino-Pins, auf dem Sie den Impuls lesen möchten. Zulässige Datentypen: int.

    • value: Typ des zu lesenden Pulses: entweder HIGH oder LOW. Zulässige Datentypen: int.

    Liest einen Impuls (entweder HIGH oder LOW) an einem Pin. Wenn zum Beispiel der Wert HIGH ist, wartet pulseIn() darauf, dass der Pin von LOW auf HIGH wechselt, beginnt mit der Zeitmessung und wartet dann darauf, dass der Pin LOW wird und stoppt die Zeitmessung.