6. Mit dem Ultraschallmodul spielen

Im Projekt 5. Spielen mit dem Hindernisvermeidungs-Modul werden die 2 Infrarot-Hindernisvermeidungsmodule zur Hindernisvermeidung eingesetzt. Jedoch ist die Erkennungsreichweite des IR-Hindernisvermeidungsmoduls kurz, wodurch das Auto möglicherweise zu spät ausweicht.

In diesem Projekt verwenden wir ein Ultraschallmodul für Fernerkennungen, damit das Auto Hindernisse aus größerer Entfernung wahrnehmen und eine Entscheidung treffen kann.

Benötigte Komponenten

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

Es ist definitiv praktisch, ein ganzes Set 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.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 Minima

BUY

L9110 Motortreibermodul

-

TT Motor

-

Ultraschall-Modul

BUY

Verdrahtung

Ein Ultraschallsensormodul ist ein Instrument, das mit Ultraschallwellen den Abstand zu einem Objekt misst. Es hat zwei Sonden. Eine sendet Ultraschallwellen, 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 erkannt wird.

Bauen Sie die Schaltung entsprechend dem folgenden Diagramm auf.

Ultraschallmodul

R4 Board

Vcc

5V

Trig

3

Echo

4

Gnd

GND

../_images/car_6.png

Code

Bemerkung

  • Öffnen Sie die Datei 6.ultrasonic_module.ino unter dem 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 eine Wand. Wenn der Abstand zu groß ist, wird es vorwärts fahren; wenn es zu nah ist, wird es rückwärts fahren; wenn es in sicherem Abstand ist, wird es stoppen.

Wie funktioniert das?

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

  1. Fügen Sie die Pin-Definition für das Ultraschallmodul hinzu. trigPin wird verwendet, um Ultraschallwellen zu senden, setzen Sie diesen 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. Lesen Sie zuerst den Entfernungswert, der vom Ultraschallmodul abgerufen wird. Wenn die Entfernung größer als 25 ist, lassen Sie das Auto vorwärts fahren; wenn die Entfernung 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 Quadratsignal, und der Empfänger empfängt ein High-Level-Signal, wenn sich ein Hindernis innerhalb des Bereichs befindet. Verwenden Sie die Funktion pulseIn(), um die Zeit von der Sendung bis zum Empfang zu protokollieren, 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; //Equivalent to (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: Art des zu lesenden Pulses: entweder HIGH oder LOW. Zulässige Datentypen: int.

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