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.

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:
Erklärung:
- 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.
- 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.
- 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.
- 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.
- 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
Raspberry Pi: 5 V (gemeinsame Masse mit dem Modul)
▶ 10-μs-High-Impuls zum Starten der Messung
▶ Low-Pegel zum Zurücksetzen
Raspberry Pi: Beliebiger GPIO (z. B. GPIO17)
▶ High-Dauer = Laufzeit der Ultraschallwellen (Hin- und Rückweg)
▶ Max. High-Zeit: 38 ms (Timeout bei fehlendem Hindernis)
Raspberry Pi: GPIO mit Spannungsteiler (5 V→3,3 V)
Raspberry Pi: GND
Erklärung:
Der Echo-Pin ist der Schlüssel zur Ermittlung der Entfernungsinformation. Sobald die Ultraschallwellen ausgesendet wurden, geht der Echo-Pin auf High. Er bleibt so lange auf High, bis die reflektierten Wellen vom Ultraschallempfänger aufgenommen werden. Die Dauer, für die der Echo-Pin auf High liegt, ist direkt proportional zu der Zeit, die die Ultraschallwellen bis zum Hindernis und zurück benötigen. Indem wir diese Zeitdauer messen, können wir die Entfernung zum Hindernis mit der folgenden Formel berechnen: . In einem C++-basierten Arduino-Projekt kannst du die Funktion pulseIn() verwenden, um die Dauer des High-Impulses am Echo-Pin zu messen.
Kernkomponenten und Funktionsweise
Wichtige Komponenten
- 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.
- 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.
- 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:
Entfernungsberechnung: Der letzte Schritt ist die Berechnung der Entfernung zum Hindernis. Die Formel zur Berechnung der Entfernung in Zentimetern lautet . Der Faktor 0,0343 ergibt sich aus der Schallgeschwindigkeit in Luft, die etwa 343 m/s beträgt. Da die Wellen zum Hindernis und wieder zurück laufen (Hin- und Rückweg), teilen wir die insgesamt zurückgelegte Strecke durch 2, um die einfache Entfernung zum Hindernis zu erhalten. Wenn beispielsweise die gemessene Zeit, in der der Echo-Pin auf High liegt, 2000 μs beträgt, ergibt sich die Entfernung wie folgt: cm. Diese Berechnung ist dieselbe, egal ob du den HC-SR04 in einem einfachen Hobbyprojekt oder in einer komplexen industriellen Anwendung einsetzt.
Schnittstelle zu gängigen Mikrocontrollern
Arduino-Einrichtungsanleitung
Schaltplan
- 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.
HC - SR04 Arduino
VCC ------------ 5V
GND ------------ GND
Trig ------------ Digital Pin 2
Echo ------------ Digital Pin 3
Code-Beispiel
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, damit wir die Entfernungsmesswerte im Serial Monitor der Arduino-IDE anzeigen können. Anschließend legen wir trigPin als Ausgang und echoPin als Eingang fest.
In der loop-Funktion setzen wir zunächst trigPin für 2 Mikrosekunden auf LOW, um einen sauberen Start sicherzustellen. Danach setzen wir ihn für 10 Mikrosekunden auf HIGH, um den Ultraschallsender des HC-SR04 auszulösen. Anschließend setzen wir trigPin wieder auf LOW.
Die Funktion pulseIn() wird dann verwendet, um die Dauer des High-Impulses am echoPin zu messen. Diese Dauer entspricht der Zeit, die die Ultraschallwellen bis zum Hindernis und zurück benötigt haben. Die Entfernung berechnen wir dann mit der Formel distance = duration * 0.0343 / 2, wobei 0.0343 die Schallgeschwindigkeit in cm/μs ist. Wir teilen durch 2, weil die Wellen zum Hindernis und wieder zurück laufen.
Zum Schluss geben wir die berechnete Entfernung im Serial Monitor aus und fügen vor der nächsten Messung eine Pause von 500 Millisekunden ein.
Tipps
- Genaue Messung der Dauer:
Bei der Verwendung der Funktion pulseIn() ist zu beachten, dass sie die Dauer eines Impulses misst. Beim HC-SR04 ist das die Zeit, in der der Echo-Pin auf High liegt. Um genaue Messungen zu gewährleisten, stelle sicher, dass keine anderen elektrischen Störungen die Impulsdauer beeinflussen können. Beachte außerdem, dass es zu einem Timeout kommen kann, wenn das Hindernis zu weit entfernt ist. Mit einem Timeout-Wert in der Funktion pulseIn() kannst du solche Fälle sauber abfangen. Zum Beispiel: long duration = pulseIn(echoPin, HIGH, 20000);, wobei 20000 der Timeout-Wert in Mikrosekunden ist.
- 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
Um dieses Problem zu lösen, kannst du eine Spannungsteilerschaltung verwenden. Ein einfacher Spannungsteiler aus einem 1-kΩ- und einem 2-kΩ-Widerstand kann das 5-V-Ausgangssignal des Echo-Pins des HC-SR04 in ein für den Raspberry Pi geeignetes 3,3-V-Signal umwandeln. Die Formel zur Berechnung der Ausgangsspannung eines Spannungsteilers lautet , wobei die Eingangsspannung ist (hier 5 V), der erste Widerstand (1 kΩ) und der zweite Widerstand (2 kΩ). Setzen wir die Werte ein, erhalten wir , was im sicheren Bereich für den GPIO-Pin des Raspberry Pi liegt.
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.
HC - SR04 Raspberry Pi
VCC ------------ 5V
GND ------------ GND
Trig ------------ GPIO 17
Echo (through voltage divider) ------------ GPIO 27
Python-Code
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 diesem Code importieren wir zunächst die erforderlichen Bibliotheken: RPi.GPIO zur Steuerung der GPIO-Pins des Raspberry Pi und time, um Verzögerungen einzufügen. Anschließend setzen wir den GPIO-Modus auf BCM (Broadcom-SOC-Kanalnummerierung). Wir definieren die Pins TRIG und ECHO und konfigurieren den TRIG-Pin als Ausgang und den ECHO-Pin als Eingang.
Die Funktion measure_distance ist das Herzstück des Programms. Sie sendet einen 10-μs-High-Impuls an den TRIG-Pin, um den HC-SR04 auszulösen. Dann wartet sie, bis der ECHO-Pin auf High geht (was den Beginn des Echos anzeigt), und speichert die Startzeit. Anschließend wartet sie, bis der ECHO-Pin auf Low geht (was das Ende des Echos anzeigt), und speichert die Endzeit. Aus der Zeitdifferenz zwischen Start- und Endzeit wird die Entfernung berechnet. Dazu wird die Impulsdauer mit der Schallgeschwindigkeit in cm/s (34300 cm/s) multipliziert und durch 2 geteilt (da der Schall zum Hindernis und wieder zurück läuft).
Im try-Block messen wir fortlaufend die Entfernung und geben sie jede Sekunde in der Konsole aus. Wenn der Benutzer Ctrl + C drückt (KeyboardInterrupt), räumt das Programm die GPIO-Pins auf und beendet sich ordnungsgemäß.
ESP32-Konfiguration
Pinbelegung
Arduino IDE-Code
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 der setup-Funktion initialisieren wir die serielle Kommunikation mit einer Baudrate von 115200. Anschließend legen wir trigPin als Ausgang und echoPin als Eingang fest.
In der loop-Funktion läuft das Auslösen des HC-SR04 und das Messen der Entfernung genauso ab wie im Arduino-Code. Wir senden einen 10-μs-High-Impuls an trigPin, um den Sensor auszulösen, messen mit pulseIn die Dauer des High-Impulses am echoPin und berechnen die Entfernung.
Kreative Projektideen mit HC-SR04
Hindernisvermeidender Roboter
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 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 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
Ursache: Mehrwegreflexionen oder instabile Leistung
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.
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
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
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
HC-SR04
Messbereich: 2 cm–400 cm (Abstract 1, 6)
Genauigkeit: ±3 mm (unter Idealbedingungen, Abstract 1)
Spannung: 5 V (fest, Abstract 1)
Vorteile: Keine Störung durch Licht, größere Reichweite (Abstract 5)
Nachteile: Geringere Genauigkeit im Nahbereich, Empfindlichkeit gegenüber Ultraschallrauschen (Abstract 1)
Infrarot
Messbereich: Typischerweise <100 cm (Abstract 1, 5)
Genauigkeit: ±5 mm–1 cm (abhängig von Farbe/Material, Abstract 5)
Spannung: 3,3 V–5 V (flexibel, Abstract 5)
Vorteile: Kompakte Bauform, geringe Kosten (Abstract 1)
Nachteile: Störungen durch Umgebungslicht und Farbe (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
HC-SR04
Messbereich: 2 cm–400 cm (Abstract 1, 4)
Genauigkeit: ±3 mm (Abstract 4)
Aktualisierungsrate: 60 ms (Abstract 4)
Kosten: ca. 2–3 $ (Abstract 1)
Schwäche: 15° Kegelwinkel, Umgebungsgeräusche (Abstract 1)
Laser/ToF (VL53L0X)
Messbereich: 5 cm–200 cm (Abstract 1, 3)
Genauigkeit: ±1 mm–3 mm (Abstract 3)
Aktualisierungsrate: 20 ms (schneller, Abstract 4)
Kosten: ca. 10–15 $ (Abstract 1)
Stärke: 5° schmaler Strahl, störungsunempfindlich (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
HC-SR04
Messbereich: 2 cm–400 cm (Abstract 2, 6)
Genauigkeit: ±3 mm (nominal, Abstract 2)
Spannung: nur 5 V (Abstract 6)
Merkmal: nur GPIO, keine Temperaturkompensation (Abstract 3)
Problem: Zufällige Werte jenseits von 400 cm (Abstract 6)
US-100
Messbereich: 2 cm–450 cm (Abstract 2, 3)
Genauigkeit: ±2 mm (in Tests besser, Abstract 3)
Spannung: 3,3 V–5 V (Abstract 3)
Merkmal: Temperaturkompensation (UART-Modus), Fehlercodes (Abstract 6)
Nachteil: Höhere Kosten (5–8 $), UART-Einrichtung erforderlich (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 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
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
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.
HC-SR04: Timing, Pegelanpassung und Fehlerquellen
Der HC-SR04 bestimmt Entfernung aus der Laufzeit eines Ultraschallimpulses mit Abstand = Echozeit × Schallgeschwindigkeit / 2. Modulvarianten können abweichen; Versorgung und Echopegel prüfen und einen 5-V-Ausgang vor einem reinen 3,3-V-Eingang passend teilen oder umsetzen.
- Trigger erzeugen: geforderte Pulsbreite des genauen Moduls liefern und den zurückkehrenden Echoimpuls messen.
- Zeitgrenze setzen: bei fehlendem Echo abbrechen, damit die Software nicht dauerhaft blockiert.
- Schallgeschwindigkeit korrigieren: Temperatur verändert die Umrechnung, Luftbewegung erzeugt Zusatzfehler.
- Geometrie beachten: weiche, schräge, schmale oder nahe Flächen absorbieren oder lenken den Impuls.
- Gegenseitige Störung vermeiden: mehrere Sensoren zeitlich staffeln und unmögliche Sprünge begrenzt filtern.




