ESP8266 - Ultraschallsensor

Dieses Tutorial erklärt dir, wie man den ESP8266 und einen Ultraschallsensor verwendet, um den Abstand zu Hindernissen oder Objekten zu messen. Im Detail werden wir Folgendes lernen:

Erforderliche Hardware

1×ESP8266 NodeMCU
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Ultraschallsensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

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 HC-SR04-Ultraschallsensor wird verwendet, um den Abstand zu einem Objekt mittels Ultraschallwellen zu bestimmen.

Die Pinbelegung des Ultraschallsensors

Der HC-SR04-Ultraschallsensor hat vier Anschlüsse:

  • VCC-Pin: muss mit VCC (5 V) verbunden sein
  • GND-Pin: muss mit GND (0 V) verbunden sein
  • TRIG-Pin: An diesem Pin wird das Steuersignal (Impuls) vom ESP8266 empfangen.
  • ECHO-Pin: Dieser Pin sendet ein Signal (Impuls) an den ESP8266. Der ESP8266 misst die Länge des Impulses, um die Entfernung zu berechnen.
Pinbelegung des Ultraschallsensors

So funktioniert es

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. Der Mikrocontroller erzeugt einen 10-Mikrosekunden-Puls am TRIG-Pin, der den Ultraschallsensor veranlasst, Ultraschallwellen auszusenden.
  2. Die Ultraschallwelle wird reflektiert, nachdem sie auf ein Hindernis getroffen hat.
  3. Der Ultraschallsensor erkennt dann die reflektierte Ultraschallwelle und misst deren Laufzeit.
  4. Der Ultraschallsensor erzeugt einen Impuls am ECHO-Pin, dessen Impulsdauer der Ausbreitungszeit der Ultraschallwelle entspricht.
  5. Der Mikrocontroller misst die Impulsdauer am ECHO-Pin und berechnet die Entfernung zwischen dem Sensor und dem Hindernis.

Wie man die Entfernung vom Ultraschallsensor bestimmt

  1. Um die Entfernung vom Ultraschallsensor zu berechnen, müssen zwei Schritte unternommen werden (1 und 6 im Abschnitt How It Works):
  2. Erzeuge einen 10-Mikrosekunden-Puls am TRIG-Pin.
  3. Messe die Pulsdauer am ECHO-Pin.
  4. Berechne die Entfernung zwischen dem Sensor und dem Hindernis.

Berechnung der Entfernung

Wir haben:

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

Also:

  • Die Wegstrecke 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

ESP8266 - Ultraschallsensor

Wir können zwei Pins eines ESP8266 verwenden, um die Entfernung von einem Ultraschallsensor zu messen: Ein Pin ist mit dem TRIG-Pin verbunden, um einen 10-µs-Puls zu erzeugen, und der andere Pin ist mit dem ECHO-Pin verbunden, um den Impuls vom Sensor zu messen.

Verdrahtungsdiagramm

ESP8266 NodeMCU Ultraschallsensor Verdrahtungsdiagramm

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

Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

So programmieren Sie einen Ultraschallsensor

  • Erzeuge einen 10-Mikrosekunden-Puls am Pin D5 des ESP8266, indem du die Funktionen digitalWrite() und delayMicroseconds() verwendest. Zum Beispiel:
  • Setze den Pin mit digitalWrite() auf HIGH, warte dann 10 Mikrosekunden mit delayMicroseconds(), und setze den Pin anschließend mit digitalWrite() wieder auf LOW.
digitalWrite(D5, HIGH); delayMicroseconds(10); digitalWrite(D5, LOW);
  • Messe die Pulsdauer (μs) am Pin D6 des Arduino mithilfe der Funktion pulseIn(). Zum Beispiel:
duration_us = pulseIn(D6, HIGH);
  • Berechne die Entfernung (cm):
distance_cm = 0.017 * duration_us;

ESP8266-Code

const int TRIG_PIN = D5; // The ESP8266 pin D5 connected to Ultrasonic Sensor's TRIG pin const int ECHO_PIN = D6; // The ESP8266 pin D6 connected to Ultrasonic Sensor's ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // Configure the trigger pin to output mode pinMode(TRIG_PIN, OUTPUT); // Configure the echo pin to input mode pinMode(ECHO_PIN, INPUT); } void loop() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the ECHO pin duration_us = pulseIn(ECHO_PIN, 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

Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial zur Einrichtung der Entwicklungsumgebung für ESP8266 in der Arduino IDE an, falls dies dein erster Umgang mit ESP8266 ist.
  • Verdrahte die Bauteile wie im Diagramm gezeigt.
  • Schließe das ESP8266-Board über ein USB-Kabel an deinen Computer an.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, zum Beispiel (z. B. NodeMCU 1.0 (ESP-12E Module)), und den jeweiligen COM-Port.
  • Kopiere den Code und öffne ihn in der Arduino IDE.
  • Klicke im Arduino IDE auf die Schaltfläche Hochladen, um den Code zu kompilieren und auf den ESP8266 hochzuladen.
So laden Sie Code auf den ESP8266 NodeMCU mit der Arduino-IDE hoch.
  • Öffne den seriellen Monitor
  • Bewege deine Hand in der Nähe des Ultraschallsensors
  • Schau dir den im seriellen Monitor angezeigten Abstand zwischen dem Sensor und deiner Hand an
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

Schau dir die zeilenweise Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!

Wie man Rauschen aus Abstandsmessungen eines Ultraschallsensors filtert

Das Messergebnis eines Ultraschallsensors kann Rauschen enthalten, was zu unerwünschten Abläufen in bestimmten Anwendungen führen kann. Um das Rauschen zu entfernen, kann der folgende Algorithmus verwendet werden:

  1. Nehmen Sie mehrere Messungen vor und speichern Sie sie in einem Array
  2. Sortieren Sie das Array in aufsteigender Reihenfolge
  3. Filtern Sie das Rauschen heraus
    • Einige der kleinsten Messwerte werden als Rauschen angesehen → ignorieren Sie sie
    • Einige der größten Messwerte werden als Rauschen angesehen → ignorieren Sie sie
    • Berechnen Sie den Durchschnitt der mittleren Messwerte

    Der nachstehende Beispielcode führt 20 Messungen durch:

    • Die fünf kleinsten Proben sollten ignoriert werden.
    • Die fünf größten Proben sollten ignoriert werden.
    • Der Durchschnitt der 10 mittleren Proben (von der 5. bis zur 14. Probe) sollte berechnet werden.
    /* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-ultrasonic-sensor */ #define TRIG_PIN D5 // The ESP8266 pin connected to Ultrasonic Sensor's TRIG pin #define ECHO_PIN D6 // The ESP8266 pin connected to Ultrasonic Sensor's 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() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the 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 für eines der folgenden Projekte:

  • Konstruieren Sie ein Kollisionsvermeidungssystem für ein ferngesteuertes Auto.
  • Schätzen Sie den Füllstand eines Mülleimers.
  • Überwachen Sie den Füllstand eines Mülleimers.
  • Automatisieren Sie das Öffnen und Schließen eines Mülleimers. Hinweis: Siehe ESP8266 - Servo Motor.

Ultraschallsensor-Anwendungen

  • Vermeidung von Kollisionen
  • Kapazitätsschätzung
  • Höhenabschätzung
  • Identifizierung naher Objekte

※ 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!