Aufrufe: 164 Autor: Grace Veröffentlichungszeit: 26.07.2021 Herkunft: Website
Der Der Ultraschallsensor HC-SR04 ist eines der beliebtesten Distanzmessmodule für Arduino-Projekte. Es wird häufig in Hindernisvermeidungsrobotern, Parksensoren, Füllstandserkennung, intelligenten Mülleimern, Entfernungsmessern und anderen berührungslosen Sensoranwendungen eingesetzt.
Das Modul sendet über einen Sender 40-kHz-Ultraschallwellen aus. Wenn die Schallwelle auf ein Objekt trifft, wird sie zum Empfänger zurückreflektiert. Durch Messung der Echozeit und Nutzung der Schallgeschwindigkeit kann Arduino den Abstand zwischen Sensor und Objekt berechnen.
| Parameter | Wert |
| Typische Arbeitsspannung | 5V DC |
| Statischer Arbeitsstrom | Bei einigen Modulversionen weniger als 5 mA |
| Betriebsfrequenz | 40kHz Ultraschallwelle |
| Erkennungsentfernung | Gemeinsamer Bereich: 2 cm bis 400 cm; Einige Versionen mit angepasster Verstärkung unterstützen möglicherweise eine größere Reichweite. |
| Erfassungswinkel | Normalerweise innerhalb von 15 Grad; Einige Versionen mit höherer Verstärkung können etwa 30 Grad erreichen. |
| Präzision | Bis zu etwa 0,3 cm unter geeigneten Testbedingungen |
| Blinde Zone | Mindestmessabstand ca. 2 cm |
Das Ultraschallmodul HC-SR04 verfügt über vier Pins: VCC, TRIG, ECHO und GND. Arduino sendet einen kurzen Triggerimpuls an den TRIG-Pin und liest dann den Rückimpuls vom ECHO-Pin.
| HC-SR04 Pin | Arduino-Verbindung | Funktion |
| VCC | 5V | Stromversorgung für das Ultraschallmodul. |
| TRIG | Digitaler Pin 9 | Triggereingang. Arduino wendet einen 10us-Impuls an, um die Entfernungsmessung zu starten. |
| ECHO | Digitaler Pin 10 | Echo-Ausgabe. Arduino liest die Impulsbreite, um die Entfernung zu berechnen. |
| GND | GND | Erdungsanschluss. |
Der HC-SR04 arbeitet mit Flugzeitmessung. Arduino sendet ein Triggersignal mit hohem Pegel von mindestens 10 Mikrosekunden an den TRIG-Pin. Das Modul sendet dann automatisch acht 40-kHz-Ultraschallimpulse und wartet auf das reflektierte Echo.
Wenn das reflektierte Ultraschallsignal erkannt wird, gibt der ECHO-Pin einen Impuls mit hohem Pegel aus. Die Dauer dieses Impulses ist die Hin- und Rücklaufzeit der Ultraschallwelle.
Entfernung = Echo-Hochpegelzeit × Schallgeschwindigkeit / 2
Im Arduino-Code lautet die übliche vereinfachte Formel:
Distanz in cm = Dauer × 0,0343 / 2
Der Timing-Prozess ist einfach: Arduino hält TRIG kurzzeitig auf Low, sendet einen 10-us-High-Impuls und setzt TRIG dann wieder auf Low zurück. Der HC-SR04 sendet einen Ultraschallstoß und setzt ECHO auf High, bis das reflektierte Signal zurückkehrt oder die Messung abläuft.
Um instabile Messwerte zu vermeiden, lassen Sie zwischen den Messungen eine kurze Verzögerung ein. Üblicherweise wird ein Messzyklus von etwa 60 ms verwendet, damit das vorherige Ultraschallecho Zeit hat, vor dem nächsten Auslöser zu verschwinden.
Die Arduino- Funktion pulsIn() wird verwendet, um zu messen, wie lange ein digitaler Pin HIGH oder LOW bleibt. Für HC-SR04 verwendet Arduino pulseIn(echoPin, HIGH) , um die High-Pegel-Impulsbreite vom ECHO-Pin zu lesen.
| Syntax | Bedeutung |
| pulsIn(pin, Wert) | Liest die Dauer eines HIGH- oder LOW-Impulses. |
| pulsIn(pin, wert, timeout) | Liest den Impuls mit einem Timeout-Wert in Mikrosekunden. |
Es wird empfohlen, ein Timeout zu verwenden. Wenn kein Echo zurückgegeben wird, kann die Funktion aufhören zu warten und 0 zurückgeben, anstatt das Programm zu lange zu blockieren.
Die Verkabelung ist unkompliziert. Verbinden Sie VCC mit 5 V, GND mit GND, TRIG mit einem Arduino-Digitalausgangspin und ECHO mit einem Arduino-Digitaleingangspin. Das folgende Beispiel verwendet Arduino Uno, TRIG an Pin 9 und ECHO an Pin 10.
Das folgende typische Arduino-Programm sendet einen 10us-Triggerimpuls, liest die ECHO-Impulsbreite, berechnet die Entfernung in Zentimetern und druckt das Ergebnis im seriellen Monitor aus.
const int trigPin = 9; const int echoPin = 10; lange Dauer; float distanceCm; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); VerzögerungMikrosekunden(2); digitalWrite(trigPin, HIGH); VerzögerungMikrosekunden(10); digitalWrite(trigPin, LOW); Dauer = PulseIn(echoPin, HIGH, 30000); if (duration == 0) { Serial.println('Out of range'); } else { distanceCm = Dauer * 0,0343 / 2; Serial.print('Entfernung: '); Serial.print(distanceCm); Serial.println(' cm'); } Verzögerung(60); }
Wenn im seriellen Monitor Abstandswerte angezeigt werden, funktionieren der Ultraschallsensor HC-SR04 und die Arduino-Verkabelung ordnungsgemäß. Anschließend können Sie die Distanzdaten zur Hinderniserkennung, Roboterbewegungssteuerung, automatischen Türen, Parkerinnerungen oder Flüssigkeitsstandprojekten verwenden.
Halten Sie das gemessene Objekt innerhalb des empfohlenen Entfernungsbereichs und außerhalb der 2-cm-Blindzone.
Verwenden Sie für eine bessere Ultraschallreflexion eine ebene und feste Zieloberfläche.
Vermeiden Sie die Messung weicher, eckiger, poröser oder schallabsorbierender Materialien.
Verwenden Sie eine stabile 5-V-Stromversorgung und halten Sie die Verkabelung kurz und sicher.
Fügen Sie eine Zeitüberschreitung zu „pulseIn()“ hinzu, um ein langes Blockieren zu verhindern, wenn kein Echo zurückgegeben wird.
Durchschnittliche oder mittlere Filterung mehrerer Messwerte, um Rauschen zu reduzieren.
Um eine höhere Genauigkeit zu erzielen, kompensieren Sie die Temperatur, da sich die Schallgeschwindigkeit mit der Lufttemperatur ändert.
| Anwendung | Wie HC-SR04 verwendet wird |
| Roboter zur Hindernisvermeidung | Erkennt Objekte in der Nähe und hilft dem Roboter, die Richtung zu ändern. |
| Parkabstandssensor | Misst den Abstand zwischen dem Fahrzeug und einem Hindernis. |
| Erkennung des Flüssigkeitsstands | Misst berührungslos den Abstand vom Sensor zur Flüssigkeitsoberfläche. |
| Intelligenter Mülleimer | Erkennt eine Hand oder einen Gegenstand in der Nähe und löst das automatische Öffnen des Deckels aus. |
Um einen Ultraschallsensor HC-SR04 mit Arduino zu verwenden, verbinden Sie VCC mit 5 V, GND mit GND, TRIG mit einem digitalen Ausgangspin und ECHO mit einem digitalen Eingangspin. Senden Sie einen 10us-Triggerimpuls, lesen Sie die Echodauer mit pulseIn() ab und berechnen Sie die Entfernung mit der Flugzeitformel.
Der HC-SR04 ist kostengünstig, einfach zu bedienen und für viele Arduino-Entfernungsmessprojekte geeignet. Um optimale Ergebnisse zu erzielen, achten Sie auf Zieloberfläche, Messwinkel, Blindzone, stabile Leistung, Timeout-Handhabung und Temperatureffekte.
Arduino sendet einen 10us-Impuls an den TRIG-Pin. Der HC-SR04 sendet acht 40-kHz-Ultraschallimpulse aus und setzt den ECHO-Pin auf High, bis der reflektierte Schall zurückkehrt. Arduino misst diese Impulszeit und berechnet die Entfernung.
Die Formel lautet Distanz = Dauer × Schallgeschwindigkeit / 2. In Zentimetern ist eine gängige Arduino-Formel DistanzCm = Dauer × 0,0343 / 2, wobei die Dauer in Mikrosekunden gemessen wird.
Die gemessene Echozeit ist die Hin- und Rücklaufzeit vom Sensor zum Objekt und zurück zum Sensor. Eine Division durch 2 ergibt den Einwegabstand zwischen dem Sensor und dem Objekt.
Sie können die meisten digitalen Arduino-Pins verwenden. In vielen Beispielen ist TRIG mit dem digitalen Pin 9 und ECHO mit dem digitalen Pin 10 verbunden. Der Code muss mit den in Ihrer Verkabelung verwendeten Pins übereinstimmen.
Häufige Ursachen sind lose Verkabelung, instabile 5-V-Stromversorgung, falsche TRIG- oder ECHO-Pin-Nummern, kein Objekt in Reichweite, schräge Zieloberflächen, weiche Materialien, blockierte Sensorköpfe oder kein Timeout in der Funktion „pulseIn()“.
Die Blindzone ist der Mindestabstand, bei dem das Modul nicht zuverlässig messen kann. Bei HC-SR04 beträgt die Blindzone normalerweise etwa 2 cm. Nähere Objekte können zu instabilen Messwerten führen.
Ja, HC-SR04 kann für einfache berührungslose Wasserstandsprojekte verwendet werden, wenn der Sensor vor Feuchtigkeit geschützt und über der Flüssigkeitsoberfläche montiert wird. Für Feucht-, Außen- oder Industrietanks wird ein wasserdichter Ultraschallsensor empfohlen.
Verwenden Sie eine stabile Stromversorgung, halten Sie den Sensor senkrecht zum Ziel, vermeiden Sie weiche oder schräge Oberflächen, fügen Sie ein PulsIn-Timeout hinzu, nehmen Sie mehrere Messungen vor, verwenden Sie die Medianfilterung und lassen Sie zwischen den Messungen etwa 60 ms liegen.