HC-SR04 Ultraschallsensormodule

Dieser umfassende Leitfaden ist Ihre zentrale Anlaufstelle, um alles Wissenswerte über den HC-SR04 zu erfahren. Wir beginnen mit den Grundlagen und erklären das grundlegende Funktionsprinzip, das der Schlüssel zur Ausschöpfung seines Potenzials ist. Anschließend behandeln wir wichtige Aspekte wie die wichtigsten Spezifikationen, die Anbindung an gängige Mikrocontroller und gehen sogar auf fortgeschrittene Anwendungsszenarien ein. Am Ende dieses Leitfadens sind Sie bestens gerüstet, um das volle Potenzial des HC-SR04 in Ihren eigenen Projekten auszuschöpfen.

Was ist das Ultraschallsensormodul HC-SR04?

Das Ultraschallsensormodul HC-SR04 ist ein bemerkenswertes und äußerst vielseitiges Gerät, das sich in der weiten Landschaft der Elektronikprojekte eine Nische erobert hat. Was es wirklich auszeichnet, ist seine Kosteneffizienz, eine Eigenschaft, die es für eine Vielzahl von Anwendern zugänglich macht, von preisbewussten Hobbybastlern bis hin zu Profis, die nach einer erschwinglichen Lösung für ihre Projekte suchen.

Front and back view of HC SR04 Ultrasonic Sensor Module
Front and back view of HC - SR04 Ultrasonic Sensor Module

Technische Daten

Das Verständnis der technischen Spezifikationen des Ultraschallsensormoduls HC-SR04 ist für jede Projektumsetzung von entscheidender Bedeutung. Hier ist die Tabelle mit den technischen Spezifikationen:

Operating Voltage
+5V DC (4.5V to 5.5V)
Operating Current
~15mA (Standby: ~2mA)
Range
2cm to 400cm (0.8" to 13ft)
Accuracy
±3mm (Best case, varies with environment)
Resolution
0.3cm (1mm theoretically possible with calibration)
Angle of Detection
~15° cone angle
Trigger Input Signal
10μs HIGH pulse to initiate ranging
Echo Output Signal
Pulse width proportional to distance: 1μs = 0.017cm (based on sound speed 340m/s)
Maximum Frequency
40kHz ultrasonic frequency
Measurement Cycle
≥60ms (to avoid interference between measurements)
Operating Temperature
-15°C to +60°C (5°F to 140°F)
Dimensions
45mm × 20mm × 15mm (sensor module)
Weight
~5g (module only)

Erklärung:

  1. Reichweite: Der HC-SR04 hat eine Reichweite von 2 cm bis 400 cm (0,8 Zoll bis 157 Zoll). Durch diese relativ große Reichweite eignet er sich für eine Vielzahl von Anwendungen. In einem kleinen Robotikprojekt, bei dem der Roboter in einem Raum navigieren muss, kann er beispielsweise mit einer Reichweite von 2 bis 400 cm Möbel oder Wände in der Nähe effektiv erkennen. In einer größeren industriellen Anwendung kann er verwendet werden, um den Abstand zwischen Maschinenkomponenten innerhalb dieses Bereichs zu messen. Es ist jedoch zu beachten, dass die Genauigkeit an den äußeren Enden dieses Bereichs leicht variieren kann.
  1. Auflösung: Mit einer Auflösung von 0,3 cm kann der HC-SR04 ziemlich genaue Entfernungsmessungen liefern. Diese Genauigkeit ist für die meisten Hobbyanwendungen und viele industrielle Anwendungen ausreichend. In einem 3D-Druck-Projekt, bei dem der Sensor zur Erkennung des Abstands zum Druckbett für die automatische Nivellierung verwendet wird, kann die Auflösung von 0,3 cm sicherstellen, dass sich der Druckkopf in der richtigen Höhe über dem Bett befindet, was zu hochwertigen Druckergebnissen führt.
  1. Stromversorgung: Der Sensor wird mit einer Gleichstromversorgung von 5 V betrieben. Während des Betriebs verbraucht er eine Betriebsstromstärke von 15 mA, was einen relativ geringen Stromverbrauch darstellt. Im Standby-Modus ist der Stromverbrauch sogar noch geringer, weniger als 2 mA. Dies macht ihn zu einer energieeffizienten Wahl für batteriebetriebene Projekte. In einem batteriebetriebenen IoT-Sensorknoten, der den HC-SR04 zur Abstandsmessung verwendet, sorgt der geringe Stromverbrauch beispielsweise dafür, dass die Batterie über einen längeren Zeitraum hält.
  1. Betriebswinkel: Der Betriebswinkel des HC-SR04 beträgt weniger als 15°. Das bedeutet, dass der Sensor ein relativ schmales Sichtfeld hat. Er ist am effektivsten bei der Erkennung von Hindernissen, die sich direkt vor ihm befinden. In einem Smart-Home-Sicherheitssystem, in dem der Sensor zur Erkennung von Eindringlingen verwendet wird, die sich einer Tür nähern, ermöglicht der schmale Betriebswinkel eine fokussierte Erkennung von Objekten, die direkt auf den Sensor zukommen, wodurch Fehlalarme durch Objekte im peripheren Bereich reduziert werden.
  1. Schnittstelle: Das Modul verfügt über eine 4-polige Schnittstelle, die VCC-, GND-, Trig- und Echo-Pins umfasst. Dieses einfache Schnittstellendesign erleichtert den Anschluss an verschiedene Mikrocontroller und andere elektronische Komponenten.

Pinbelegung erklärt

Pin 1
Label
VCC
Function
Power Supply (Positive)
Voltage
5V DC
Connection
Arduino: 5V
Raspberry Pi: 5V (Common ground with module)
Pin 2
Label
Trig (Trigger)
Function
Trigger Input
▶ 10μs High Pulse to Start Measurement
▶ Low Level to Reset
Connection
Arduino: Any Digital Pin (e.g., D2)
Raspberry Pi: Any GPIO (e.g., GPIO17)
Pin 3
Label
Echo
Function
Echo Output
▶ High Duration = Round-Trip Time of Ultrasonic Waves
▶ Max High Time: 38ms (Timeout for No Obstacle)
Connection
Arduino: Any Digital Pin (e.g., D3)
Raspberry Pi: GPIO with **Voltage Divider** (5V→3.3V)
⚠️ Direct 5V Echo to Raspberry Pi may damage GPIO! Use 1kΩ + 2kΩ voltage divider.
Pin 4
Label
GND
Function
Power Ground (Common Ground)
Connection
Arduino/GND
Raspberry Pi/GND

Erklärung:

Der VCC-Pin ist für die Stromversorgung des Moduls zuständig. Durch den Anschluss an eine stabile 5-V-Stromquelle, vorzugsweise vom 5-V-Ausgang des Mikrocontrollers, wird sichergestellt, dass das Modul ordnungsgemäß funktioniert. Eine stabile Stromversorgung ist für genaue Messwerte entscheidend. Eine instabile Stromversorgung kann zu inkonsistenten Entfernungsmessungen führen. Wenn beispielsweise Spannungsspitzen oder -abfälle in der Stromversorgung des HC-SR04 auftreten, kann der Sensor falsche Ultraschallimpulse aussenden oder die empfangenen Echos falsch interpretieren, was zu ungenauen Entfernungsberechnungen führt.
Der GND-Pin stellt die erforderliche Masseverbindung her. Er schließt den Stromkreis und trägt dazu bei, eine stabile Referenzspannung für das Modul aufrechtzuerhalten. Ohne eine ordnungsgemäße Masseverbindung funktioniert das Modul möglicherweise überhaupt nicht oder liefert ungenaue Ergebnisse. In einem Arduino-basierten Projekt wird der GND-Pin des HC-SR04 in der Regel mit dem GND-Pin der Arduino-Platine verbunden, um eine gemeinsame Massebezugspunkt zu gewährleisten.
Der Trig-Pin ist der Ort, an dem die Magie beginnt. Wenn ein 10-μs-Hochpuls an diesen Pin gesendet wird, löst er den Ultraschallsender aus, der einen 8-Puls-Burst von 40-kHz-Ultraschallwellen aussendet. In einem Python-basierten Raspberry Pi-Projekt können Sie die GPIO-Bibliothek (General Purpose Input/Output) verwenden, um diesen 10-μs-Hochpegelimpuls zu erzeugen. Dieser einfache digitale Eingabemechanismus ermöglicht eine einfache Steuerung des Entfernungsmessungsprozesses.

The Echo pin is the key to obtaining the distance information. Once the ultrasonic waves are sent out, the Echo pin goes high. It remains high until the reflected waves are received by the ultrasonic receiver. The duration for which the Echo pin is high is directly proportional to the time it takes for the ultrasonic waves to travel to the obstacle and back. By measuring this time duration, we can calculate the distance to the obstacle using the formula Distance ( cm ) = Time ( μs ) × 0.0343 2 . In a C++-based Arduino project, you can use the pulseIn() function to measure the duration of the high-level pulse on the Echo pin.

Kernkomponenten und Funktionsweise

Wichtige Komponenten

Um die Funktionsweise des Ultraschallsensormoduls HC-SR04 wirklich zu verstehen, ist es wichtig, sich zunächst mit seinen Kernkomponenten vertraut zu machen. Jedes Teil spielt eine wichtige Rolle für den Gesamtbetrieb des Moduls.

  1. Ultraschallsender: Diese Komponente ist für den ersten Schritt des Entfernungsmessungsprozesses verantwortlich. Sie sendet Ultraschallwellen mit einer Frequenz von 40 kHz aus. Diese hochfrequenten Wellen sind für das menschliche Ohr nicht hörbar, aber für die Funktion des Sensors von entscheidender Bedeutung. Bei Auslösung sendet der Sender diese Wellen in die Umgebung aus. Stellen Sie sich das wie einen leistungsstarken Lautsprecher vor, der Schallwellen mit einer Frequenz aussendet, die weit über das hinausgeht, was wir hören können. In einer Robotikanwendung würde beispielsweise der Ultraschallsender eines Roboters diese 40-kHz-Wellen in die Bewegungsrichtung des Roboters aussenden, um Hindernisse auf seinem Weg zu erkennen.
  1. Ultraschallempfänger: Wie der Name schon sagt, besteht die Aufgabe des Ultraschallempfängers darin, die Ultraschallwellen zu erfassen, die von Hindernissen im Bereich des Sensors zurückgeworfen werden. Sobald der Sender die Wellen aussendet, breiten sie sich durch die Luft aus, bis sie auf ein Objekt treffen. Die Wellen werden dann zurückgeworfen, und es ist die Aufgabe des Empfängers, diese reflektierten Wellen aufzunehmen. Er funktioniert wie ein hochempfindliches Mikrofon, das selbst die leisesten Echos der Ultraschallwellen erkennen kann. In einem Hausautomationssystem, in dem der HC-SR04 zur Erkennung der Anwesenheit einer Person in einem Raum verwendet wird, würde der Empfänger die Wellen auffangen, die vom Körper der Person zurückgeworfen werden.
  1. Steuerkreis: Dies ist das Gehirn hinter dem Vorgang. Der Steuerkreis verwaltet die gesamte Signalverarbeitungssequenz. Er koordiniert die Aktionen des Senders und des Empfängers. Wenn er ein Triggersignal empfängt, weist er den Sender an, die Ultraschallwellen auszusenden. Anschließend überwacht er sorgfältig den Empfänger auf eingehende reflektierte Wellen. Sobald die Wellen empfangen werden, berechnet die Steuerschaltung die Zeit, die die Wellen für den Weg zum Hindernis und zurück benötigt haben. Anhand dieser Zeit und der bekannten Schallgeschwindigkeit in der Luft berechnet sie die Entfernung zum Hindernis. In einer industriellen Umgebung würde die Steuerschaltung in einem HC-SR04, der für automatisierte Maschinen verwendet wird, diese Vorgänge präzise steuern, um genaue Entfernungsmessungen für die ordnungsgemäße Funktion der Maschinen zu gewährleisten.

So funktioniert es

Nachdem wir nun die wichtigsten Komponenten kennen, wollen wir uns Schritt für Schritt ansehen, wie der HC-SR04 tatsächlich Entfernungen misst.

Auslösesignal: 

Der Prozess beginnt mit einem Triggersignal. Wenn ein 10-μs-Hochimpuls an den Trig-Pin (Trigger) des HC-SR04-Moduls angelegt wird, ist dies so, als würde man dem Sensor einen „Start“-Befehl geben. Dieser kurze, aber wichtige elektrische Impuls leitet die gesamte Entfernungsmessungssequenz ein. In einem Arduino-basierten Projekt würden Sie beispielsweise eine einfache Codezeile verwenden, um diesen 10-μs-Hochimpuls an den Trig-Pin des HC-SR04 zu senden und ihm damit den Start des Messvorgangs zu signalisieren.

Wellenausbreitung: 

Sobald der Ultraschallsender ausgelöst wird, tritt er in Aktion. Das Modul sendet eine Folge von 8 Ultraschallimpulsen mit einer Frequenz von 40 kHz aus. Diese Impulse sind wie eine Reihe unsichtbarer „Schallkugeln”, die in die Umgebung abgeschossen werden. Nach dem Aussenden dieser Impulse geht das Modul in einen Wartezustand über und wartet geduldig darauf, dass die Wellen auf ein Hindernis treffen und zurückgeworfen werden. In einer realen Situation, wenn Sie den HC-SR04 verwenden, um die Entfernung zu einer Wand in einem Raum zu messen, würden die 8 Impulse auf die Wand zufliegen und sich in einer kegelförmigen Form mit einem relativ engen Winkel von etwa 15 Grad ausbreiten.

Echokennung: 

Der Echo-Pin ist der Schlüssel zur Erkennung der reflektierten Wellen. Sobald die Ultraschallwellen ausgesendet werden, wird der Echo-Pin auf High gesetzt. Auf diese Weise zeigt der Sensor an, dass er den Messvorgang gestartet hat. Dann wartet er darauf, dass die reflektierten Wellen zurückkommen. Wenn der Ultraschallempfänger die reflektierten Wellen empfängt, wird der Echo-Pin auf Low gesetzt. Die Dauer, während der der Echo-Pin auf High bleibt, entspricht der Umlaufzeit der Ultraschallwellen. In einem Raspberry Pi-Projekt würden Sie eine Funktion verwenden, um die Zeit zu messen, in der der Echo-Pin auf High steht, was ein entscheidender Schritt bei der Berechnung der Entfernung ist.

Entfernungsberechnung:

Distance Calculation: The final step is to calculate the distance to the obstacle. The formula for calculating the distance in centimeters is Distance (cm) = Time ((μs)) × 0.0343 2 . The factor 0.0343 comes from the speed of sound in air, which is approximately 343 m/s. Since the waves travel to the obstacle and back (a round-trip), we divide the total distance traveled by 2 to get the one-way distance to the obstacle. For example, if the time measured for the Echo pin to be high is 2000μs, then the distance would be calculated as 2000 × 0.0343 2 = 34.3 cm. This calculation is the same whether you're using the HC-SR04 in a simple hobbyist project or a complex industrial application.

Schnittstelle zu gängigen Mikrocontrollern

Arduino-Einrichtungsanleitung

Schaltplan

Das Anschließen des Ultraschallsensormoduls HC-SR04 an einen Arduino ist ganz einfach. So geht's:

  • VCC: Verbinden Sie den VCC-Pin des HC-SR04 mit dem 5V-Pin des Arduino. Dadurch wird das Sensormodul mit der erforderlichen Spannung versorgt. Eine stabile 5-V-Stromversorgung durch den Arduino gewährleistet die optimale Funktion des Sensors.
  • GND: Der GND-Pin (Masse) des HC-SR04 sollte mit dem GND-Pin des Arduino verbunden werden. Dadurch wird eine gemeinsame Massebezugspunkt für den Sensor und den Arduino hergestellt, was für eine ordnungsgemäße elektrische Kommunikation entscheidend ist.
  • Trig: Verbinden Sie den Trig-Pin (Trigger) des HC-SR04 mit dem digitalen Pin 2 des Arduino. Dies ist der Pin, an den der Arduino den 10-μs-Hochpegelimpuls sendet, um den Entfernungsmessungsprozess im HC-SR04 auszulösen.
  • Echo: Der Echo-Pin des HC-SR04 wird mit dem digitalen Pin 3 des Arduino verbunden. Der Arduino liest den Hochpuls an diesem Pin, um die Entfernung zum Hindernis zu berechnen.
Hier ist ein einfacher Schaltplan, der die Verbindungen veranschaulicht:
				
					       HC - SR04         Arduino
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ Digital Pin 2
         Echo ------------ Digital Pin 3
				
			

Code-Beispiel

Hier ist ein grundlegendes Arduino-Code-Beispiel, mit dem Sie die Entfernungsmessung mit dem HC-SR04 beginnen können:
				
					const int trigPin = 2;
const int echoPin = 3;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}
				
			
In der Setup-Funktion initialisieren wir zunächst die serielle Kommunikation mit einer Baudrate von 9600, wodurch wir die Entfernungsmesswerte im Arduino Serial Monitor anzeigen können. Anschließend legen wir den trigPin als Ausgangspin und den echoPin als Eingangspin fest.
In der Schleifenfunktion setzen wir zunächst den trigPin für 2 Mikrosekunden auf LOW, um einen sauberen Start zu gewährleisten. Dann setzen wir ihn für 10 Mikrosekunden auf HIGH, um den Ultraschallsender im HC-SR04 auszulösen. Danach setzen wir den trigPin wieder auf LOW.
Mit der Funktion pulseIn wird dann die Dauer des High-Pulse am echoPin gemessen. Diese Dauer entspricht der Zeit, die die Ultraschallwellen benötigt haben, um zum Hindernis und zurück zu gelangen. Anschließend berechnen wir die Entfernung mit der Formel distance = duration * 0,0343 / 2, wobei 0,0343 die Schallgeschwindigkeit in cm/μs ist und wir durch 2 teilen, da die Wellen zum Hindernis und zurück gelangen.
Schließlich geben wir die berechnete Entfernung auf dem seriellen Monitor aus und fügen vor der nächsten Messung eine Verzögerung von 500 Millisekunden hinzu.

In the setup function, we first initialize the serial communication at a baud rate of 9600, which allows us to view the distance readings in the Arduino Serial Monitor. Then, we set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, we start by setting the trigPin to LOW for 2 microseconds to ensure a clean start. Then, we set it HIGH for 10 microseconds to trigger the ultrasonic transmitter in the HC-SR04. After that, we set the trigPin back to LOW.

The pulseIn() function is then used to measure the duration of the high-level pulse on the echoPin. This duration represents the time it took for the ultrasonic waves to travel to the obstacle and back. We then calculate the distance using the formula distance = duration * 0.0343 / 2, where 0.0343 is the speed of sound in cm/μs and we divide by 2 because the waves travel to the obstacle and back.

Finally, we print the calculated distance to the Serial Monitor and add a 500-millisecond delay before the next measurement.

Tipps

  1. Genaue Messung der Dauer:

When using the pulseIn() function, it's important to note that it measures the duration of a pulse. In the case of the HC-SR04, this is the time the Echo pin is high. To ensure accurate measurements, make sure there are no other electrical interferences that could affect the pulse duration. Also, be aware that if the obstacle is too far away, the pulse may time out. You can set a timeout value in the pulseIn() function to handle such cases gracefully. For example, long duration = pulseIn(echoPin, HIGH, 20000); where 20000 is the timeout value in microseconds.

  1. Vermeidung von Lärmquellen:

Ultraschallwellen können durch laute Geräuschquellen beeinträchtigt werden. Vermeiden Sie bei der Platzierung des HC-SR04 in Ihrem Projekt Bereiche mit hoher Schallintensität, wie z. B. in der Nähe von Lautsprechern oder in einer sehr lauten Industrieumgebung. Geräusche können die vom Sensor ausgesendeten Ultraschallwellen stören und zu ungenauen Entfernungsmessungen führen. Wenn Sie den Sensor in einer lauten Umgebung verwenden müssen, sollten Sie schallabsorbierende Materialien oder Gehäuse verwenden, um den Sensor vor Geräuschen zu schützen.

Raspberry Pi Integration

Spannungswarnung

Einer der wichtigsten Aspekte bei der Integration des HC-SR04 in einen Raspberry Pi sind die Spannungspegel. Die GPIO-Pins (General Purpose Input/Output) eines Raspberry Pi können nur eine maximale Spannung von 3,3 V aufnehmen. Der HC-SR04 arbeitet jedoch mit 5 V, und der Echo-Pin des HC-SR04 kann ein 5-V-Signal ausgeben. Das direkte Anschließen eines 5-V-Signals an einen GPIO-Pin des Raspberry Pi kann den Pi beschädigen.

To solve this issue, you can use a voltage divider circuit. A simple voltage divider using a 1kΩ and a 2kΩ resistor can be used to convert the 5V output from the Echo pin of the HC-SR04 to a 3.3V-compatible signal for the Raspberry Pi. The formula for calculating the output voltage V out of a voltage divider is V out = V in × R 2 R 1 + R 2 , where V in is the input voltage (5V in this case), R 1 is the first resistor (1kΩ), and R 2 is the second resistor (2kΩ). Plugging in the values, we get V out = 5 × 2000 1000 + 2000 3.33 V , which is within the safe range for the Raspberry Pi GPIO pin.

Verkabelung

  • VCC: Verbinden Sie den VCC-Pin des HC-SR04 mit dem 5V-Pin des Raspberry Pi. Dadurch wird das HC-SR04-Sensormodul mit Strom versorgt.

  • GND: Der GND-Pin des HC-SR04 sollte mit dem GND-Pin des Raspberry Pi verbunden werden, um eine gemeinsame Masse herzustellen.
  • Trig: Verbinden Sie den Trig-Pin des HC-SR04 mit GPIO 17 am Raspberry Pi. Der Raspberry Pi verwendet diesen Pin, um den 10-μs-Hochpegel-Triggerimpuls an den HC-SR04 zu senden.
  • Echo: Der Echo-Pin des HC-SR04 wird nach Durchlaufen der Spannungsteilerschaltung (1-kΩ- und 2-kΩ-Widerstände) mit GPIO 27 auf dem Raspberry Pi verbunden. Der Raspberry Pi liest den Impuls mit hoher Dauer an diesem Pin, um die Entfernung zu berechnen.
Die Verdrahtung lässt sich wie folgt zusammenfassen:
				
					       HC - SR04         Raspberry Pi
         VCC ------------ 5V
         GND ------------ GND
         Trig ------------ GPIO 17
         Echo (through voltage divider) ------------ GPIO 27
				
			

Python-Code

Hier ist ein Python-Code-Beispiel, das die RPi.GPIO-Bibliothek verwendet, um den HC-SR04 mit einem Raspberry Pi zu verbinden:
				
					import RPi.GPIO as GPIO
import time

# Set the GPIO mode
GPIO.setmode(GPIO.BCM)

# Define the pins
TRIG = 17
ECHO = 27

# Set up the pins
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

def measure_distance():
    # Send a 10μs high - level pulse to trigger the sensor
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    # Wait for the echo to start
    while GPIO.input(ECHO)==0:
        pulse_start = time.time()

    # Wait for the echo to end
    while GPIO.input(ECHO)==1:
        pulse_end = time.time()

    pulse_duration = pulse_end - pulse_start
    distance = pulse_duration * 17150  # Speed of sound in cm/s divided by 2
    distance = round(distance, 2)

    return distance

try:
    while True:
        dist = measure_distance()
        print(f"Distance: {dist} cm")
        time.sleep(1)

except KeyboardInterrupt:
    print("Measurement stopped by User")
    GPIO.cleanup()

				
			

In this code, we first import the necessary libraries, RPi.GPIO for controlling the GPIO pins on the Raspberry Pi and time for adding delays. We then set the GPIO mode to BCM (Broadcom SOC channel numbering). We define the TRIG and ECHO pins and set up the TRIG pin as an output and the ECHO pin as an input.

The measure_distance function is where the magic happens. It sends a 10μs high - level pulse to the TRIG pin to trigger the HC - SR04. Then, it waits for the ECHO pin to go high (indicating the start of the echo) and records the start time. It then waits for the ECHO pin to go low (indicating the end of the echo) and records the end time. The time difference between the start and end times is used to calculate the distance. The distance is calculated by multiplying the pulse duration by the speed of sound in cm/s (34300 cm/s) and dividing by 2 (since the sound travels to the obstacle and back).

In the try block, we continuously measure the distance and print it to the console every second. If the user presses Ctrl + C (KeyboardInterrupt), the program cleans up the GPIO pins and exits gracefully.

ESP32-Konfiguration

Pinbelegung

Der ESP32 ist ein leistungsstarker Mikrocontroller mit mehreren GPIO-Pins (General Purpose Input/Output). Wenn Sie den HC-SR04 an einen ESP32 anschließen, können Sie den HC-SR04 über den 5-V-Ausgang des ESP32 (VOUT-Pin) mit Strom versorgen. Die Trig- und Echo-Pins können Sie an beliebige freie GPIO-Pins anschließen. Sie können beispielsweise den Trig-Pin an GPIO 14 und den Echo-Pin an GPIO 15 anschließen. Achten Sie jedoch darauf, Pins zu wählen, die nicht bereits von anderen Komponenten in Ihrem Projekt verwendet werden.

Arduino IDE-Code

Der Code für die Verwendung des HC-SR04 mit einem ESP32 in der Arduino IDE ist dem Arduino-Code sehr ähnlich. Hier ist ein Beispiel:
				
					const int trigPin = 14;
const int echoPin = 15;

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.0343 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  delay(500);
}

				
			

In the setup function, we initialize the serial communication at a baud rate of 115200. We then set the trigPin as an output pin and the echoPin as an input pin.

In the loop function, the process of triggering the HC - SR04 and measuring the distance is the same as in the Arduino code. We send a 10μs high - level pulse to the trigPin to trigger the sensor, measure the duration of the high - level pulse on the echoPin using pulseIn , and calculate the distance.

Wenn Sie jedoch den ESP32 in der Arduino IDE verwenden, achten Sie darauf, das richtige ESP32-Board in der IDE auszuwählen. Wenn Sie den ESP32 mit IoT-Funktionen (Internet of Things) wie WiFi oder Bluetooth integrieren möchten, müssen Sie die Initialisierung dieser Funktionen in Ihrem Code vornehmen. Wenn Sie beispielsweise die Entfernungsdaten über WLAN senden möchten, müssen Sie Code hinzufügen, um eine Verbindung zu einem WLAN-Netzwerk herzustellen und einen Server oder Client zum Senden der Daten einzurichten.

Kreative Projektideen mit HC-SR04

Hindernisvermeidender Roboter

Der Roboter zur Hindernisvermeidung ist eine faszinierende und praktische Anwendung des Ultraschallsensormoduls HC-SR04. Seine Hauptfunktion besteht darin, sich sicher durch seine Umgebung zu bewegen, indem er Hindernisse auf seinem Weg erkennt. Dies wird durch den Einsatz mehrerer HC-SR04-Sensoren erreicht, die strategisch auf dem Roboter platziert sind.

Die Sensoren sind so konfiguriert, dass sie Hindernisse aus verschiedenen Richtungen erkennen. Beispielsweise ist eine Reihe von Sensoren an der Vorderseite des Roboters angebracht, um Hindernisse direkt in seinem Vorwärtsweg zu erkennen. Zusätzlich sind Sensoren an den Seiten des Roboters angebracht, um Hindernisse zu erkennen, die sich von den Seiten nähern könnten. Wenn ein Hindernis erkannt wird, berechnet das Steuerungssystem des Roboters, das häufig auf einem Mikrocontroller wie Arduino basiert, anhand der Daten der HC-SR04-Sensoren die Entfernung zum Hindernis.

Anhand dieser Entfernungsinformationen bestimmt das Steuerungssystem dann die geeignete Maßnahme, um das Hindernis zu umfahren. Dazu werden in der Regel die Motoren so gesteuert, dass der Roboter seine Richtung ändert. Wenn beispielsweise ein Hindernis auf der linken Seite des Roboters erkannt wird, kann das Steuerungssystem den linken Motor anweisen, langsamer zu fahren oder rückwärts zu fahren, während der rechte Motor mit normaler Geschwindigkeit weiterläuft. Dadurch dreht sich der Roboter nach rechts, weg vom Hindernis.

Um dieses Projekt zu realisieren, benötigen Sie mehrere wichtige Komponenten. Ein Arduino dient als Gehirn des Systems. Er verarbeitet die von den HC-SR04-Sensoren empfangenen Daten und sendet Befehle an die Motoren. Motoren sind erforderlich, um die Räder des Roboters anzutreiben und ihn so in Bewegung zu setzen. Ein Motortreiber wie der L298N ist für die Steuerung der Motoren unerlässlich. Der L298N kann die relativ hohen Stromanforderungen der Motoren bewältigen und ermöglicht es dem Arduino, die Geschwindigkeit und Richtung der Motoren effektiv zu steuern. Und natürlich werden mehrere HC-SR04-Sensoren für die Front- und Seitenerkennung benötigt. Durch die Kombination dieser Komponenten und das Schreiben des entsprechenden Codes zu ihrer Steuerung können Sie einen voll funktionsfähigen Roboter zur Hindernisvermeidung erstellen.

Intelligenter Mülleimer

Der intelligente Mülleimer ist ein hervorragendes Beispiel dafür, wie das Ultraschallsensormodul HC-SR04 zur Verbesserung der Funktionalität von Alltagsgegenständen eingesetzt werden kann. In dieser Anwendung ist der intelligente Mülleimer mit einer automatischen Deckelöffnung ausgestattet. Diese Funktion wird ausgelöst, wenn sich eine Person dem Mülleimer nähert.

Der HC-SR04-Sensor ist so am Mülleimer angebracht, dass er die Entfernung zu allen Objekten vor ihm erkennen kann. Wenn sich jemand dem Mülleimer nähert, misst der Sensor die Entfernung zwischen dem Mülleimer und der Person. Wenn die gemessene Entfernung unter einen voreingestellten Schwellenwert (z. B. 20 cm) fällt, bedeutet dies, dass sich eine Person so nah am Mülleimer befindet, dass sie ihn benutzen möchte. An diesem Punkt sendet der Sensor ein Signal an einen Servomotor.

Der Servomotor ist mit dem Deckel des Mülleimers verbunden und für dessen Öffnen und Schließen zuständig. Wenn er das Signal vom HC-SR04-Sensor empfängt, dreht sich der Servomotor, um den Deckel zu öffnen. Diese berührungslose Bedienung ist nicht nur für den Benutzer bequem, sondern trägt auch dazu bei, den Mülleimer sauber und hygienisch zu halten, da der Deckel nicht direkt berührt werden muss.

Beim Schreiben des Codes für dieses Projekt ist die Einstellung des Abstandsschwellenwerts ein entscheidender Schritt. Sie müssen diesen Wert sorgfältig auf der Grundlage der spezifischen Anforderungen Ihres intelligenten Mülleimers kalibrieren. Wenn der Schwellenwert zu hoch eingestellt ist, kann sich der Deckel unnötigerweise öffnen, wenn sich jemand noch in einiger Entfernung vom Mülleimer befindet. Ist der Schwellenwert hingegen zu niedrig eingestellt, öffnet sich der Deckel möglicherweise nicht rechtzeitig, wenn sich der Benutzer nähert. Ein gut kalibrierter Abstandsschwellenwert sorgt dafür, dass der intelligente Mülleimer optimal funktioniert.

Wasserstandsanzeiger

Der Wasserstandsmesser ist eine praktische Anwendung des Ultraschallsensormoduls HC-SR04, insbesondere in Situationen, in denen es notwendig ist, den Wasserstand in einem Tank zu überwachen. Dies kann in einem Wasserspeichertank für den Hausgebrauch, einem industriellen Wasserspeichertank oder sogar einem Aquarium der Fall sein.

Der HC-SR04-Sensor wird über dem Wassertank installiert. Er sendet Ultraschallwellen nach unten in Richtung Wasseroberfläche aus. Diese Wellen breiten sich durch die Luft aus und werden von der Wasseroberfläche zurückgeworfen. Der Sensor misst dann die Zeit, die die Wellen benötigen, um zur Wasseroberfläche und zurück zu gelangen. Anhand der bekannten Schallgeschwindigkeit in der Luft kann die Entfernung vom Sensor zur Wasseroberfläche berechnet werden.

In vielen Fällen ist der Wasserstandsmesser in ein IoT-System (Internet of Things) integriert. Er kann beispielsweise mit einer Blynk-App verbunden werden. Die berechneten Wasserstandsdaten werden an die App gesendet, sodass Benutzer den Wasserstand aus der Ferne überwachen können. Dies ist besonders nützlich für industrielle Anwendungen, bei denen die Echtzeitüberwachung des Wasserstands für das ordnungsgemäße Funktionieren der Prozesse entscheidend ist.

Ein wichtiger Aspekt, der bei der Einrichtung eines Wasserstandsmessers zu berücksichtigen ist, ist die Kalibrierung. Da der Sensor in einer bestimmten Höhe über dem Boden des Tanks installiert ist, muss diese Höhe bei den Entfernungsberechnungen berücksichtigt werden. Wenn der Sensor beispielsweise 50 cm über dem Boden des Tanks installiert ist und die berechnete Entfernung vom Sensor zur Wasseroberfläche 30 cm beträgt, dann beträgt der tatsächliche Wasserstand im Tank 20 cm. Durch die genaue Kalibrierung der Sensorhöhe und die Durchführung der erforderlichen Berechnungen können Sie sicherstellen, dass der Wasserstandsmesser genaue und zuverlässige Messwerte liefert.

Fehlerbehebung bei häufigen Problemen

Inkonsistente Messwerte

Eines der häufigsten Probleme, auf das Benutzer beim Ultraschallsensormodul HC-SR04 stoßen, sind inkonsistente Messwerte. Dies kann sehr frustrierend sein, insbesondere wenn Sie für Ihr Projekt auf genaue Entfernungsmessungen angewiesen sind.

Ursache: Mehrwegreflexionen oder instabile Leistung

Mehrwegreflexionen treten auf, wenn die vom Sensor ausgesendeten Ultraschallwellen vor dem Erreichen des Empfängers von mehreren Oberflächen reflektiert werden. Dies kann in komplexen Umgebungen mit vielen Objekten oder in Bereichen mit großen, reflektierenden Oberflächen vorkommen. In einem Raum mit vielen Möbelstücken und Spiegeln können die Ultraschallwellen beispielsweise von den Möbeln, Wänden und Spiegeln reflektiert werden, bevor sie vom Empfänger erfasst werden. Dadurch kann der Sensor die Entfernung zum gewünschten Objekt nur schwer genau berechnen, was zu inkonsistenten Messwerten führt.

Eine weitere Ursache ist eine instabile Stromversorgung. Wenn die Stromversorgung des HC-SR04 nicht stabil ist, kann dies zu Fehlfunktionen des Sensors führen. Spannungsschwankungen können die ordnungsgemäße Funktion des Ultraschallsenders und -empfängers beeinträchtigen und zu ungenauen Entfernungsmessungen führen. Wenn Sie beispielsweise eine schwache Batterie oder ein Netzteil mit schlechter Spannungsregelung verwenden, erhält der Sensor möglicherweise keine konstante 5-V-Stromversorgung, was sich auf seine Leistung auswirken kann.

Behebung: Fügen Sie eine Schutzhülle für den Sensor hinzu und verwenden Sie eine geregelte 5-V-Stromquelle.

Das Anbringen einer Schutzhülle um den Sensor kann dazu beitragen, die Auswirkungen von Mehrwegreflexionen zu reduzieren. Die Hülle kann so gestaltet werden, dass sie die Ultraschallwellen gezielter lenkt und so die Wahrscheinlichkeit verringert, dass die Wellen von unerwünschten Oberflächen zurückgeworfen werden. Eine einfache Hülle aus Pappe oder Kunststoff mit einer schmalen Öffnung an der Vorderseite kann in dieser Hinsicht wirksam sein.

Die Verwendung einer geregelten 5-V-Stromquelle ist für einen stabilen Betrieb von entscheidender Bedeutung. Ein Netzteil mit integrierter Spannungsregelung, wie z. B. ein hochwertiger Wandadapter oder ein spannungsgeregeltes Stromversorgungsmodul, stellt sicher, dass der HC-SR04 konstant mit 5 V versorgt wird. Dies trägt dazu bei, Probleme aufgrund von Spannungsschwankungen zu vermeiden und verbessert die Gesamtgenauigkeit und Konsistenz der Messwerte des Sensors.

Kein Ausgangssignal

Ein weiteres häufiges Problem tritt auf, wenn der HC-SR04 kein Ausgangssignal erzeugt. Dies kann auf verschiedene Probleme hindeuten, und es ist wichtig, jede Möglichkeit systematisch zu überprüfen, um den Sensor wieder funktionsfähig zu machen.
Überprüfen: Verkabelung (insbesondere VCC/GND), Spannungsteiler für Raspberry Pi und Codelogik für Trigger-/Echo-Timing überprüfen.
Überprüfen Sie zunächst sorgfältig die Verkabelung. Stellen Sie sicher, dass die VCC- und GND-Pins korrekt mit der Stromquelle bzw. der Masse verbunden sind. Eine lose oder falsche Verbindung kann dazu führen, dass der Sensor nicht richtig eingeschaltet wird oder dass es zu Kurzschlüssen kommt, die den normalen Betrieb des Moduls stören. In vielen Fällen kann das Problem durch eine einfache Sichtprüfung und das erneute Anschließen der Kabel behoben werden.

Wenn Sie den HC-SR04 mit einem Raspberry Pi verwenden, vergessen Sie nicht, die Spannungsteiler-Schaltung zu überprüfen. Wie bereits erwähnt, können die GPIO-Pins des Raspberry Pi nur 3,3 V verarbeiten, und häufig wird ein Spannungsteiler verwendet, um die 5-V-Ausgabe des Echo-Pins des HC-SR04 in ein 3,3-V-kompatibles Signal umzuwandeln. Wenn die Komponenten des Spannungsteilers (in der Regel Widerstände) beschädigt oder falsch angeschlossen sind, kann dies dazu führen, dass kein Ausgangssignal vom Raspberry Pi empfangen wird.

Die Codelogik für das Trigger-/Echo-Timing ist ebenfalls ein wichtiger Bereich, der überprüft werden muss. Stellen Sie sicher, dass der Code das richtige Triggersignal (einen 10-μs-Hochpuls) an den Trig-Pin sendet und dass er die Dauer des Hochpulses am Echo-Pin korrekt misst. Ein falscher Code kann verhindern, dass der Sensor ausgelöst wird, oder dazu führen, dass der Mikrocontroller das Echosignal falsch interpretiert, was zu keiner Ausgabe oder falschen Entfernungsberechnungen führt. Wenn beispielsweise die Verzögerungszeiten im Code falsch eingestellt sind, kann dies die ordnungsgemäße Abfolge der Auslösung des Sensors und des Auslesens des Echos stören.

Fehler außerhalb des Bereichs

Fehler außerhalb des Erfassungsbereichs können auftreten, wenn sich das zu erkennende Objekt entweder zu nah oder zu weit vom HC-SR04-Sensor entfernt befindet. Dies kann zu Problemen in Ihrem Projekt führen, insbesondere wenn Ihr Code nicht für solche Situationen ausgelegt ist.
Lösung: Implementieren Sie ein Timeout (z. B. 38 ms für kein Echo) und behandeln Sie Werte von 0 oder ∞ im Code angemessen.
Die Implementierung einer Zeitüberschreitung in Ihrem Code ist eine nützliche Methode, um Fälle zu behandeln, in denen das Objekt zu weit entfernt ist, als dass der Sensor innerhalb einer angemessenen Zeit ein Echo erkennen könnte. Wenn beispielsweise innerhalb von 38 ms kein Echo empfangen wird, ist dies ein guter Hinweis darauf, dass sich das Objekt außerhalb der Reichweite des Sensors befindet. In Ihrem Code können Sie einen Timer einrichten, der startet, wenn das Triggersignal gesendet wird, und stoppt, wenn ein Echo empfangen wird. Wenn der Timer den Timeout-Wert erreicht, ohne dass ein Echo empfangen wurde, können Sie davon ausgehen, dass sich das Objekt außerhalb der Reichweite befindet, und entsprechende Maßnahmen ergreifen, z. B. eine Fehlermeldung anzeigen oder einen Standardabstandswert festlegen.

Es ist auch wichtig, Werte von 0 oder ∞ (Unendlichkeit) im Code korrekt zu behandeln. Ein Entfernungswert von 0 kann darauf hinweisen, dass der Sensor zu nahe an einem Objekt ist, näher als seine minimale Erfassungsreichweite. In solchen Fällen sollten Sie in Ihrem Code einen Mindestabstandsschwellenwert festlegen und den Entfernungswert entsprechend anpassen. Wenn der Code einen extrem großen Entfernungswert berechnet (der sich der Unendlichkeit annähert), ist dies ebenfalls ein Hinweis auf einen Fehler, z. B. ein Problem mit der Echoerkennung oder falsche Berechnungen. Ihr Code sollte in der Lage sein, diese Fälle elegant zu behandeln, z. B. durch Protokollieren einer Fehlermeldung oder durch einen erneuten Versuch, die Entfernung zu messen.

HC-SR04 im Vergleich zu anderen Abstandssensoren

vs. Infrarotsensoren

Table 1: HC-SR04 (Ultrasonic) vs Infrared Sensors

HC-SR04

Range: 2cm–400cm (Abstract 1, 6)

Accuracy: ±3mm (ideal conditions, Abstract 1)

Voltage: 5V (fixed, Abstract 1)

Pros: No light interference, longer range (Abstract 5)

Cons: Reduced near-range accuracy, ultrasonic noise sensitivity (Abstract 1)

Infrared

Range: Typically <100cm (Abstract 1, 5)

Accuracy: ±5mm–1cm (affected by color/material, Abstract 5)

Voltage: 3.3V–5V (flexible, Abstract 5)

Pros: Small size, low cost (Abstract 1)

Cons: Ambient light/color interference (Abstract 5)

Tabelle 1 verdeutlicht den Kompromiss zwischen der robusten Fernerkennung (2 cm–400 cm) des HC-SR04 und der kompakten Größe/den geringen Kosten von Infrarotsensoren, wobei die Unempfindlichkeit des HC-SR04 gegenüber Lichtstörungen im Gegensatz zur Anfälligkeit von Infrarotsensoren gegenüber Umgebungslicht und Materialfarbe hervorzuheben ist.

vs. Lasersensoren

Table 2: HC-SR04 vs Laser/ToF (VL53L0X)

HC-SR04

Range: 2cm–400cm (Abstract 1, 4)

Accuracy: ±3mm (Abstract 4)

Update Rate: 60ms (Abstract 4)

Cost: ~$2–3 (Abstract 1)

Weakness: 15° cone angle, environmental noise (Abstract 1)

Laser/ToF (VL53L0X)

Range: 5cm–200cm (Abstract 1, 3)

Accuracy: ±1mm–3mm (Abstract 3)

Update Rate: 20ms (faster, Abstract 4)

Cost: ~$10–15 (Abstract 1)

Strength: 5° narrow beam, interference-resistant (Abstract 3)

Tabelle 2 vergleicht die Kosteneffizienz (2–3 US-Dollar) und den großen Erfassungsbereich (400 cm) des HC-SR04 mit der überragenden Präzision (±1 mm) und Geschwindigkeit (Aktualisierungsrate von 20 ms) von Laser-/ToF-Sensoren, die sich ideal für Anwendungen eignen, die eine hohe Genauigkeit in kontrollierten Umgebungen erfordern.

vs. USA – 100 Module

Table 3: HC-SR04 vs US-100 (Ultrasonic)

HC-SR04

Range: 2cm–400cm (Abstract 2, 6)

Accuracy: ±3mm (nominal, Abstract 2)

Voltage: 5V only (Abstract 6)

Feature: GPIO-only, no temperature compensation (Abstract 3)

Issue: Random values beyond 400cm (Abstract 6)

US-100

Range: 2cm–450cm (Abstract 2, 3)

Accuracy: ±2mm (better in tests, Abstract 3)

Voltage: 3.3V–5V (Abstract 3)

Feature: Temperature compensation (UART mode), error codes (Abstract 6)

Downside: Higher cost ($5–8), UART setup required (Abstract 3)

Tabelle 3 zeigt die verbesserte Reichweite (450 cm), die höhere Genauigkeit (±2 mm) und die 3,3 V/5 V-Kompatibilität des US-100 im Vergleich zur Einfachheit des HC-SR04 (nur GPIO) und hebt die Temperaturkompensationsfunktion des US-100 für den industriellen Einsatz zu höheren Kosten (5–8 $) hervor.

Fortgeschrittene Techniken und Optimierungen

Kalibrierung mehrerer Sensoren

Bei komplexeren Anwendungen, insbesondere in Szenarien, in denen eine 360°-Sicht unerlässlich ist, kann der Einsatz mehrerer HC-SR04-Sensoren einen entscheidenden Unterschied machen. In einer Roboteranwendung beispielsweise kann ein Roboter durch die strategische Anordnung mehrerer HC-SR04-Sensoren um seinen Körper herum Hindernisse aus allen Richtungen erkennen und so eine umfassende Sicht auf seine Umgebung erhalten.

Bei der Verwendung mehrerer Sensoren kann jedoch die Übersprechstörung zu einem erheblichen Problem werden. Eine Übersprechstörung tritt auf, wenn die von einem Sensor ausgesendeten Ultraschallwellen den Betrieb eines anderen Sensors stören. Dies kann zu ungenauen Messwerten führen, da die Sensoren die störenden Wellen möglicherweise als Echos von tatsächlichen Hindernissen interpretieren.

Um Cross-Talk-Interferenzen zu verringern, können verschiedene Techniken eingesetzt werden. Ein Ansatz besteht darin, die Sensoren zeitlich zu multiplexen. Dabei werden die Sensoren nacheinander aktiviert, wobei zwischen jeder Aktivierung ein ausreichender Zeitabstand liegt. Wenn Sie beispielsweise vier HC-SR04-Sensoren an einem Roboter haben, können Sie Sensor 1 aktivieren, warten, bis er seinen Messzyklus abgeschlossen hat, dann Sensor 2 aktivieren und so weiter. Auf diese Weise stellen Sie sicher, dass sich die Ultraschallwellen eines Sensors nicht mit denen eines anderen Sensors überlappen, wodurch die Wahrscheinlichkeit von Übersprechen verringert wird.

Eine weitere Technik ist die Verwendung von Abschirmmaterialien. Durch Anbringen einer physischen Barriere, wie z. B. einer dünnen Metallplatte oder einem schallabsorbierenden Material, zwischen den Sensoren können Sie verhindern, dass die Ultraschallwellen eines Sensors einen anderen erreichen. Dies kann besonders in Situationen nützlich sein, in denen die Sensoren sehr nahe beieinander platziert sind.

Bei der Verwendung mehrerer Sensoren ist auch die Kalibrierung von entscheidender Bedeutung. Jeder Sensor kann leicht unterschiedliche Eigenschaften aufweisen, wie z. B. Empfindlichkeit oder Abstrahlwinkel. Durch die Kalibrierung der Sensoren können Sie diese Unterschiede berücksichtigen und sicherstellen, dass die Daten aller Sensoren konsistent sind. Dazu kann es erforderlich sein, mit jedem Sensor die Entfernung zu einem bekannten Objekt zu messen und die Messwerte entsprechend den Unterschieden anzupassen.

Geräuschfilterung

In manchen Umgebungen können die Messwerte des HC-SR04 unruhig sein, mit kleinen Schwankungen in der gemessenen Entfernung, die durch verschiedene Faktoren wie elektrische Störungen, leichte Luftströmungen oder Interferenzen von anderen elektronischen Geräten in der Nähe verursacht werden können. Um dieses Problem zu beheben, können Rauschfiltertechniken angewendet werden.

Eine häufig verwendete Methode ist der gleitende Durchschnittsfilter. Der gleitende Durchschnittsfilter berechnet den Durchschnitt einer Reihe aufeinanderfolgender Entfernungsmessungen. Anstatt beispielsweise eine einzelne Entfernungsmessung zu verwenden, können Sie die letzten 5 Messungen nehmen und deren Durchschnitt berechnen. Dadurch werden die unregelmäßigen Messwerte geglättet, da sich die kleinen Schwankungen bei der Durchschnittsberechnung tendenziell gegenseitig aufheben. In Python könnte die Implementierung eines einfachen gleitenden Durchschnittsfilters für die Entfernungsmessungen des HC-SR04 wie folgt aussehen:
				
					distance_readings = []
num_readings = 5

def moving_average_filter(new_distance):
    distance_readings.append(new_distance)
    if len(distance_readings) > num_readings:
        distance_readings.pop(0)
    return sum(distance_readings) / len(distance_readings)

				
			

Eine weitere effektive Filtermethode ist der Medianfilter. Der Medianfilter ersetzt jeden Entfernungsmesswert durch den Medianwert einer Reihe aufeinanderfolgender Messwerte. Der Median ist im Vergleich zum Mittelwert weniger empfindlich gegenüber Extremwerten oder Ausreißern. Wenn Sie beispielsweise eine Reihe von 5 Entfernungsmesswerten [20, 22, 18, 50, 21] haben, beträgt der Medianwert 21. Durch die Verwendung des Medianfilters würde der Ausreißerwert von 50 das gefilterte Ergebnis nicht wesentlich beeinflussen. In Arduino könnte die Implementierung eines Medianfilters wie folgt aussehen:

				
					const int numReadings = 5;
int readings[numReadings];
int readIndex = 0;
int total = 0;
int averageDistance = 0;

void addReading(int newReading) {
  total = total - readings[readIndex];
  readings[readIndex] = newReading;
  total = total + readings[readIndex];
  readIndex = readIndex + 1;
  if (readIndex >= numReadings) {
    readIndex = 0;
  }
}

int getMedian() {
  int sortedReadings[numReadings];
  for (int i = 0; i < numReadings; i++) {
    sortedReadings[i] = readings[i];
  }
  for (int i = 0; i < numReadings - 1; i++) {
    for (int j = i + 1; j < numReadings; j++) {
      if (sortedReadings[i] > sortedReadings[j]) {
        int temp = sortedReadings[i];
        sortedReadings[i] = sortedReadings[j];
        sortedReadings[j] = temp;
      }
    }
  }
  return sortedReadings[numReadings / 2];
}

				
			

Benutzerdefinierte Arbeitsmodi

Einige der neueren Versionen des Ultraschallsensormoduls HC-SR04 bieten zusätzliche Flexibilität durch benutzerdefinierte Arbeitsmodi. Diese Modi können über Widerstandseinstellungen konfiguriert werden und ermöglichen unterschiedliche Kommunikationsprotokolle und Betriebseigenschaften.
Ein solcher Modus ist der GPIO-Modus (General Purpose Input/Output), der Standardmodus für die meisten grundlegenden Anwendungen. In diesem Modus arbeitet das Modul wie in den vorherigen Abschnitten beschrieben, wobei die Trig- und Echo-Pins zum Auslösen der Entfernungsmessung bzw. zum Empfangen des Echosignals verwendet werden.

Bei bestimmten HC-SR04-Versionen sind jedoch auch die Modi UART (Universal Asynchronous Receiver/Transmitter) und I2C (Inter-Integrated Circuit) verfügbar. Im UART-Modus kann das Modul über serielle Kommunikation mit einem Mikrocontroller kommunizieren. Dies kann in Anwendungen nützlich sein, in denen ein standardisierteres serielles Kommunikationsprotokoll bevorzugt wird, z. B. in einigen industriellen Steuerungssystemen oder bei der Integration mit Geräten, die über integrierte UART-Schnittstellen verfügen.

Der I2C-Modus hingegen ermöglicht die Kommunikation über einen I2C-Bus. Dies ist vorteilhaft in Multi-Geräte-Konfigurationen, in denen mehrere Sensoren oder Komponenten mit einem einzigen Mikrocontroller kommunizieren müssen. Der I2C-Bus ermöglicht eine effizientere Nutzung der Pins des Mikrocontrollers, da mehrere Geräte denselben Zweidrahtbus (SDA – Serial Data Line und SCL – Serial Clock Line) gemeinsam nutzen können.

Um das Modul für diese benutzerdefinierten Modi zu konfigurieren, müssen Sie die Dokumentation des Moduls zu Rate ziehen, um die geeigneten Widerstandswerte zu ermitteln. Um beispielsweise den UART-Modus zu aktivieren, müssen Sie möglicherweise einen bestimmten Widerstand zwischen zwei Pins des Moduls anschließen. Sobald die Widerstände korrekt konfiguriert sind, kann das Modul so programmiert werden, dass es im gewünschten Modus kommuniziert. Dazu muss möglicherweise unterschiedlicher Code in Ihren Mikrocontroller geschrieben werden, um die UART- oder I2C-Kommunikationsprotokolle zu verarbeiten. In einem Raspberry Pi-Projekt, das den I2C-konfigurierten HC-SR04 verwendet, würden Sie beispielsweise die smbus-Bibliothek in Python verwenden, um über den I2C-Bus mit dem Sensor zu kommunizieren.

Fazit

Das Ultraschallsensormodul HC-SR04 ist aufgrund seiner Erschwinglichkeit, Benutzerfreundlichkeit und Vielseitigkeit nach wie vor ein fester Bestandteil von Elektronikprojekten. Wenn Sie sich mit seiner Funktionsweise vertraut machen, es mit gängigen Mikrocontrollern verbinden und kreative Anwendungsmöglichkeiten erkunden, können Sie sein volles Potenzial für alles von einfachen Entfernungsmessungen bis hin zu komplexen IoT-Systemen ausschöpfen. Haben Sie Fragen oder Projektideen? Teilen Sie uns diese über das Floating-Formular mit! 🛠️

Teilen auf:

Nach oben scrollen

Instant Quote