Arduino - Ultraschallsensor

In diesem Tutorial werden wir lernen:

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Ultraschallsensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über Ultraschallsensor

Der Ultraschallsensor HC-SR04 wird verwendet, um den Abstand zu einem Objekt mithilfe von Ultraschallwellen zu messen.

Pinbelegung

Der Ultraschallsensor HC-SR04 verfügt über vier Pins:

  • VCC-Pin: muss mit VCC (5 V) verbunden werden
  • GND-Pin: muss mit GND (0 V) verbunden werden
  • TRIG-Pin: Dieser Pin empfängt das Steuersignal (Impuls) vom Arduino.
  • ECHO-Pin: Dieser Pin sendet ein Signal (Impuls) an den Arduino. Der Arduino misst die Pulsdauer, um die Entfernung zu berechnen.
Pinbelegung des Ultraschallsensors
image source: diyables.io

Wie es funktioniert

Dieser Abschnitt widmet sich vertieftem Wissen. Machen Sie sich KEINE Sorgen, wenn Sie es nicht verstehen. Überspringen Sie diesen Abschnitt, wenn er Sie überfordert, und kommen Sie an einem anderen Tag zurück. Lesen Sie weiter mit den folgenden Abschnitten.
  1. Mikrocontroller: erzeugt einen 10-Mikrosekunden-Puls am TRIG-Pin.
  2. Der Ultraschallsensor sendet automatisch Ultraschallwellen aus.
  3. Die Ultraschallwelle wird nach dem Auftreffen auf ein Hindernis reflektiert.
  4. Der Ultraschallsensor:
    • Erkennt die reflektierte Ultraschallwelle.
    • Misst die Laufzeit der Ultraschallwelle.
  • Ultraschallsensor: erzeugt einen Impuls am ECHO-Pin. Die Dauer des Impulses entspricht der Laufzeit der Ultraschallwelle.
  • Der Mikrocontroller misst die Impulsdauer am ECHO-Pin und berechnet anschließend den Abstand zwischen Sensor und Hindernis.
  • Wie man den Abstand vom Ultraschallsensor bestimmt

    Um die Distanz vom Ultraschallsensor zu erhalten, müssen wir nur zwei Schritte durchführen (1 und 6 im Abschnitt Wie es funktioniert).

    • Erzeugt einen 10-Mikrosekunden-Puls am TRIG-Pin
    • Misst die Pulsdauer am ECHO-Pin und berechnet dann den Abstand zwischen Sensor und Hindernis

    Distanzberechnung

    Wir haben:

    • Die Reisezeit der Ultraschallwelle (μs): travel_time = pulse_duration
    • Die Geschwindigkeit der Ultraschallwelle: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/μs

    Also:

    • Die Ausbreitungsdistanz der Ultraschallwelle (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
    • Der Abstand zwischen Sensor und Hindernis (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

    Arduino - Ultraschallsensor

    Arduino-Pins können einen 10-Mikrosekunden-Puls erzeugen und die Pulsdauer messen. Daher können wir den Abstand zum Ultraschallsensor bestimmen, indem wir zwei Arduino-Pins verwenden:

    • Ein Pin ist mit dem TRIG-PIN verbunden, um einen 10-µs-Puls an den TRIG-PIN des Sensors zu erzeugen
    • Ein weiterer Pin ist mit dem ECHO-PIN verbunden, um den Puls vom Sensor zu messen

    Verdrahtungsdiagramm

    Arduino Ultraschallsensor Verdrahtungsdiagramm

    Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

    So programmiert man einen Ultraschallsensor

    digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);
    • Misst die Pulsdauer (µs) an einem Arduino-Pin mithilfe der pulseIn()-Funktion. Zum Beispiel Pin 8:
    duration_us = pulseIn(8, HIGH);
    • Entfernung berechnen (cm):
    distance_cm = 0.017 * duration_us;

    Arduino-Code

    /* * Created by ArduinoGetStarted, https://arduinogetstarted.com * * Arduino - Ultrasonic Sensor HC-SR04 * * Wiring: Ultrasonic Sensor -> Arduino: * - VCC -> 5VDC * - TRIG -> Pin 9 * - ECHO -> Pin 8 * - GND -> GND * * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG pin int echoPin = 8; // ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(trigPin, OUTPUT); // configure the echo pin to input mode pinMode(echoPin, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(echoPin, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

    Schnelle Schritte

    • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
    • Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code auf den Arduino hochzuladen
    Arduino IDE - Code hochladen
    • Öffnen Sie den seriellen Monitor
    • Bewegen Sie Ihre Hand vor dem Ultraschallsensor
    • Sehen Sie die Entfernung vom Sensor zu Ihrer Hand im seriellen Monitor
    COM6
    Send
    distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Code-Erklärung

    Sie finden die Erklärung in den Kommentaren des obigen Arduino-Codes.

    Wie man Rauschen aus Distanzmessungen eines Ultraschallsensors filtert

    Das Messergebnis des Ultraschallsensors enthält Rauschen. In einigen Anwendungen führt das verrauschte Messergebnis zu einem unerwünschten Betrieb. Wir können Rauschen entfernen, indem wir den folgenden Algorithmus verwenden:

    1. Mehrere Messungen durchführen und in einem Array speichern
    2. Das Array in aufsteigender Reihenfolge sortieren
    3. Rauschen filtern
      • Die kleinsten Messwerte werden als Rauschen betrachtet → ignorieren
      • Die größten Messwerte werden als Rauschen betrachtet → ignorieren
      • ⇒ Den Durchschnitt der mittleren Messwerte berechnen

      Der untenstehende Beispielcode führt 20 Messungen durch.

      • Die fünf kleinsten Messwerte werden als Rauschen betrachtet – ignorieren Sie sie.
      • Die fünf größten Messwerte werden als Rauschen betrachtet – ignorieren Sie sie.
      • ⇒ Berechnen Sie den Durchschnitt der zehn mittleren Messwerte (von der 5. bis zur 14. Messung).
      /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG pin #define ECHO_PIN 8 // ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

    Video Tutorial

    Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

    Fordere dich heraus

    Verwenden Sie einen Ultraschallsensor, um eines der folgenden Projekte durchzuführen:

    • Kollisionsvermeidung für RC-Auto.
    • Erkennung des Füllstands des Mülleimers.
    • Überwachung des Füllstands des Mülleimers.
    • Automatisches Öffnen und Schließen des Mülleimers. Hinweis: Siehe Arduino - Servo-Motor.

    Zusätzliches Wissen

    Einige Hersteller liefern Ultraschallsensoren, die drei Pins haben. TRIG-Signal und ECHO-Signal befinden sich an demselben Pin. In diesem Fall müssen wir nur einen Arduino-Pin für beide Zwecke verwenden: einen Impuls an den Sensor senden und den Impuls vom Sensor messen.

    Ultraschallsensor-Anwendungen

    • Kollisionsvermeidung
    • Füllstandserkennung
    • Füllstandmessung
    • Näherungserkennung

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!