Articles

Verwendung eines HC-SR04 Ultraschall-Abstandssensors mit Arduino

Der HC-SR04 ist ein kostengünstiger, einfach zu bedienender Ultraschall-Abstandssensor mit einer Reichweite von 2 bis 400 cm. Es wird häufig in hindernisvermeidenden Robotern und Automatisierungsprojekten verwendet. In diesem Tutorial erfahren Sie, wie der Sensor funktioniert und wie Sie ihn mit Arduino verwenden.

Ich habe 5 Beispiele mit einem Schaltplan und Code beigefügt, damit Sie mit Ihrem Sensor experimentieren können., Wir werden uns zuerst ein Beispiel ansehen, das keine Arduino-Bibliothek verwendet. Als nächstes zeige ich Ihnen, wie Sie mit der NewPing-Bibliothek einen kompakteren Code erstellen können.

Billige Ultraschall-Entfernungs – / Näherungssensoren sind großartig, aber in einigen Projekten benötigen Sie möglicherweise einen wasserdichten Sensor wie den JSN-SR04T oder einen IR-Sensor, der nicht durch Temperaturänderungen beeinflusst wird.,on

20×4 character I2C LCD (optional) × 1 Amazon
AliExpress DHT11 sensor (optional) × 1 Amazon

Software

Arduino IDE

Makerguides.,com ist Teilnehmer am Amazon Services LLC Associates-Programm, einem Partner-Werbeprogramm, das Websites die Möglichkeit bietet, Werbegebühren zu verdienen, indem sie Werbung schalten und auf Produkte verlinken Amazon.com.

Wie funktioniert ein Ultraschall-Abstandssensor?

Ultraschallsensoren arbeiten, indem sie Schallwellen mit einer Frequenz aussenden, die für einen Menschen zu hoch ist, um sie zu hören. Diese Schallwellen bewegen sich mit der Schallgeschwindigkeit von etwa 343 m/s durch die Luft., Wenn sich ein Objekt vor dem Sensor befindet, werden die Schallwellen zurückreflektiert und der Empfänger des Ultraschallsensors erkennt sie. Durch Messen, wie viel Zeit zwischen dem Senden und Empfangen der Schallwellen vergangen ist, kann der Abstand zwischen dem Sensor und dem Objekt berechnet werden.

Ultraschall-Distanz-sensoren-Prinzips. Quelle: https://www.maxbotix.com/

Bei 20°C, die Schallgeschwindigkeit etwa 343 m/s oder 0.034 cm/µs., Nehmen wir an, die Zeit zwischen dem Senden und Empfangen der Schallwellen beträgt 2000 Mikrosekunden. Wenn Sie die Schallgeschwindigkeit mit der Zeit multiplizieren, zu der die Schallwellen gereist sind, erhalten Sie die Entfernung, die die Schallwellen zurückgelegt haben.

Entfernung = Geschwindigkeit x Zeit

Aber das ist nicht das Ergebnis, das wir suchen. Der Abstand zwischen dem Sensor und dem Objekt beträgt eigentlich nur die Hälfte dieses Abstandes, da die Schallwellen vom Sensor zum Objekt und zurück vom Objekt zum Sensor gereist sind. Sie müssen also das Ergebnis durch zwei teilen.,

Abstand (cm) = Schallgeschwindigkeit (cm/µs) × Zeit (µs) / 2

Und so wird dies für das Beispiel:

Abstand (cm) = 0,0343 (cm/µs) × 2000 (µs) / 2 = 34,3 cm

Temperaturabhängigkeit der Schallgeschwindigkeit

Die Schallgeschwindigkeit hängt tatsächlich stark von der Temperatur und in weit geringerem Maße von der Luftfeuchtigkeit ab. Wikipedia besagt, dass die Schallgeschwindigkeit mit etwa 0,6 m/s pro Grad Celsius zunimmt., Für die meisten Fälle bei 20°C können Sie nur 343 m / s verwenden, aber wenn Sie genauere Messwerte erhalten möchten, können Sie die Schallgeschwindigkeit mit der folgenden Formel berechnen:

V (m/s) = 331,3 + (0,606 × T)

V = Schallgeschwindigkeit (m/s)
T = Lufttemperatur (°C)

Diese Formel enthält nicht die Luftfeuchtigkeit, da ihre Auswirkung auf die Schallgeschwindigkeit nur sehr gering ist.

Nachfolgend finden Sie ein Tutorial zur Verwendung eines Temperatur-und Feuchtigkeitssensors DHT11 zur Kalibrierung der Schallgeschwindigkeit und zur genaueren Abstandsmessung mit dem HC-SR04.,

Funktionsweise des HC-SR04

An der Vorderseite des HC-SR04-Sensors befinden sich zwei silberne Zylinder (Ultraschallwandler), einer ist der Sender der Schallwellen und der andere ist der Empfänger. Damit der Sensor einen Schallstoß erzeugen kann, müssen Sie den Trig-Pin für mindestens 10 µs hoch einstellen. Der Sensor erzeugt dann einen 8-Takt-Ultraschallstoß bei 40 kHz.

Dieser Sonic Burst bewegt sich mit Schallgeschwindigkeit und springt zurück und wird vom Empfänger des Sensors empfangen. Der Echo-Pin gibt dann die Zeit aus, die die Schallwellen in Mikrosekunden zurücklegten.,

Sie können die Funktion pulseIn() im Arduino-Code verwenden, um die Länge des Impulses vom Echo-Pin zu lesen. Danach können Sie die oben genannte Formel verwenden, um den Abstand zwischen dem Sensor und dem Objekt zu berechnen.,ncy

40 kHz Messbereich 2 – 400 cm Auflösung 3 mm Messwinkel 15 Grad Eingangssignal auslösen 10 µs hoher Puls Kosten Überprüfen preis

Für weitere informationen können sie überprüfen sie das datenblatt unten:

Verdrahtung – Anschluss HC-SR04 zu Arduino UNO

Die verdrahtung diagramm unten zeigt um den HC-SR04 Sensor an den Arduino anzuschließen.,

HC-SR04 with Arduino wiring diagram

Die folgenden Codebeispiele verwenden den digitalen Pin 2 und 3 für den Trigger bzw.,C-SR04 Connections

HC-SR04 Arduino
VCC 5 V
Trig Pin 2
Echo Pin 3
GND GND

Example code for HC-SR04 with Arduino

Now that you have wired up the sensor it is time to connect the Arduino to the computer and upload some code., Sie können den folgenden Beispielcode mit der Arduino IDE auf Ihren Arduino hochladen. Als Nächstes werde ich Ihnen erklären, wie der code funktioniert.

Wie der Code funktioniert

Zunächst werden der Trigger-Pin und der Echo-Pin definiert. Ich nenne Sie trigPin und EchoPin. Der Trigger-Pin ist mit digitalem Pin 2 und der Echo-Pin mit digitalem Pin 3 am Arduino verbunden.

Die Anweisung #define wird verwendet, um einem konstanten Wert einen Namen zu geben., Der Compiler ersetzt alle Verweise auf diese Konstante durch den definierten Wert, wenn das Programm kompiliert wird. Überall, wo Sie trigPin, ersetzt der Compiler ihn beim Kompilieren des Programms durch den Wert 2.

// Define Trig and Echo pin:#define trigPin 2#define echoPin 3

Als nächstes definierte ich zwei Variablen: duration und distance. Duration speichert die Zeit zwischen dem Senden und Empfangen der Schallwellen. Die Entfernungsvariable wird verwendet, um die berechnete Entfernung zu speichern.,

// Define variables:long duration;int distance;

Im setup() setzen Sie zunächst den trigPin als Ausgabe und das echoPin als Eingabe. Als Nächstes initialisieren Sie die serielle Kommunikation mit einer Baudrate von 9600. Später zeigen Sie die gemessene Entfernung im seriellen Monitor an, auf die Sie mit Strg+Umschalt+M oder Tools > Serial Monitor zugreifen können. Stellen Sie sicher, dass die Baudrate auch im seriellen Monitor auf 9600 eingestellt ist.

In der loop() lösen Sie den Sensor aus, indem Sie den trigPin auf 10 µs HOCH stellen., Beachten Sie, dass Sie, um ein sauberes Signal zu erhalten, zunächst den trigPin löschen, indem Sie ihn für 5 Mikrosekunden NIEDRIG einstellen.

Als nächstes müssen Sie die Länge des vom echoPin gesendeten Impulses ablesen. Ich benutze dafür die Funktion pulseIn(). Diese Funktion wartet, bis der Pin von NIEDRIG nach HOCH wechselt, startet das Timing, wartet dann, bis der Pin NIEDRIG ist, und stoppt das Timing.

Danach können Sie die Entfernung berechnen, indem Sie die in der Einführung dieses Tutorials erwähnte Formel verwenden.

Schließlich wird der berechnete Abstand im seriellen Monitor gedruckt.,

Beispielcode HC-SR04 mit Arduino und NewPing library

Die von Tim Eckel geschriebene NewPing Library kann mit vielen Ultraschall-Abstandssensoren verwendet werden. Die neueste Version dieser Bibliothek kann hier heruntergeladen werden auf bitbucket.org. Möglicherweise stellen Sie fest, dass der folgende Code, der die NewPing-Bibliothek verwendet, viel kürzer ist als der zuvor verwendete Code. Abgesehen davon enthält die NewPing-Bibliothek einige andere nette Funktionen. Es ermöglicht Ihnen, eine maximale Entfernung zum Lesen einzustellen, es wird nicht für eine volle Sekunde zurückbleiben, wenn kein Echo empfangen wird und es hat einen eingebauten Medianfilter.,

Sie können die Bibliothek installieren, indem Sie > Include Library > hinzufügen .ZIP-Bibliothek in der Arduino IDE.

Die Bibliothek enthält einige Beispiele, die Sie verwenden können, aber Sie müssen sie so ändern, dass sie zu Ihrem Hardware-Setup passen. Ich habe unten einen modifizierten Beispielcode eingefügt, der mit demselben Verdrahtungs-Setup wie zuvor verwendet werden kann.

Sie können auch distance = sonar.ping_cm() oder distance = sonar.ping_in() verwenden, um den gemessenen Abstand in ganzen Zentimetern oder Zoll zurückzugeben., Mit dieser Funktion müssen Sie keine Dauermessung durchführen und die Entfernung berechnen.

Schnittstelle von Ultraschallsensoren im 3-Pin-Modus

Die NewPing-Bibliothek macht es auch einfach, mit Ultraschallsensoren zu kommunizieren, während nur 1 E / A-Pin verwendet wird. Dies kann praktisch sein, wenn Sie nur sehr wenige E / A-Pins zur Verfügung haben oder wenn Sie einen 3-poligen Ultraschallsensor wie den Parallax Ping verwenden möchten.

Um ein 3-Pin-Setup (GND, 5V und SIG) zu erstellen, müssen Sie sowohl den Trigger-Pin als auch den Echo-Pin an denselben digitalen Pin am Arduino anschließen., Im Code müssen Sie nur die Zeile 6-7 ändern und denselben Pin sowohl für den trigPin als auch für das echoPin definieren. Zum Beispiel digitaler Pin 2.

//Define Trig and Echo pin#define trigPin 2#define echoPin 2

Verwendung des digitalen Filters ping_median ()

Die Hauptsache an der neuen Medianbibliothek ist, dass sie über einen integrierten Medianfilter verfügt. Dieser Filter kann die Genauigkeit Ihrer HC-SR04 Messwerte erheblich verbessern. Die ping_median() Funktion nimmt viele Dauermessungen in einer Reihe, wirft die außerhalb des Bereichs Messwerte und dann gemittelt die restlichen., Standardmäßig dauert es 5 Lesungen, aber Sie können angeben, wie viele es dauern soll. Ersetzen Sie Zeile 19 durch die folgenden Zeilen.

int iterations = 5;duration = sonar.ping_median(iterations);

Beispielcode HC-SR04 mit I2C LCD und Arduino

Um die gemessene Entfernung auf einem 2004 oder 1602 I2C LCD anzuzeigen, müssen Sie nur die folgenden Verbindungen herstellen und den folgenden Code hochladen. Der Sensor HC-SR04 ist wie zuvor angeschlossen.

HC-SR04 mit Arduino und I2C-LCD-Schaltplan.,

I2C LCD Connections

I2C LCD Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location., Ein Arduino UNO mit dem R3-Layout (1.0 Pinout), hat auch die SDA (Data Line) und SCL (Clock Line) Pin-Header in der Nähe des AREF-Pin. Überprüfen Sie die Tabelle unten für weitere details.,f43445″>

Arduino Uno A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Arduino Leonardo 2 3 Arduino Due 20 21
I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Stellen Sie sicher, dass Sie genau diese Bibliothek installiert haben! Es enthält auch den Draht.h-Bibliothek, mit der Sie mit I2C-Geräten kommunizieren können. Diese Bibliothek sollte mit der Arduino IDE vorinstalliert sein.

Wenn Sie mehr darüber erfahren möchten, wie Sie ein I2C-LCD mit Arduino steuern, können Sie sich das vollständige Tutorial hier ansehen.

  • So steuern Sie ein Zeichen-I2C-LCD mit Arduino

Beachten Sie, dass ich ein 20 x 4 LCD-Display verwendet habe. Wenn sie eine andere größe LCD (16×2 ist auch gemeinsame) sie ändern müssen linie 20 zu LiquidCrystal_I2C lcd(0x27,16,2);., Wenn Ihr LCD nicht über die Standard-I2C-Adresse 0x27 verfügt, lesen Sie das vollständige I2C-Tutorial, in dem ich erkläre, wie Sie die Adresse ermitteln können.

Beispielcode HC-SR04 mit DHT11 Temperatursensor und Arduino

Wie bereits erwähnt, hängt die Schallgeschwindigkeit stark von der Lufttemperatur ab. Wenn Sie große Entfernungen (3-4 m) messen möchten, ist es eine gute Idee, Ihrem Setup einen Temperatur – und Feuchtigkeitssensor DHT11 oder DHT22 hinzuzufügen. Auf diese Weise können Sie die Schallgeschwindigkeit in Echtzeit kalibrieren und dadurch die Genauigkeit Ihrer Messungen erhöhen.,

Das Hinzufügen eines DHT11-Sensors ist wirklich einfach. Der folgende Schaltplan zeigt Ihnen, welche Verbindungen Sie herstellen müssen. Beachten Sie, dass ich einen DHT11 mit einer Breakout-Platine verwende, sodass ich nur 3 Pins verkabeln muss. Achten Sie darauf, das Etikett des Sensors zu überprüfen, die Reihenfolge der Stifte kann je nach Hersteller unterschiedlich sein. Der Sensor HC-SR04 ist wie zuvor angeschlossen.

HC-SR04 mit Arduino DHT11 und Verdrahtung Diagramm.,

DHT11 Connections

DHT11 Arduino
VCC (+) 5 V
Signal (s) Pin 4
GND (-) GND

The code below uses the Adafruit DHT Humidity & Temperature Sensor library which you can download here on GitHub., Diese Bibliothek funktioniert nur, wenn Sie auch die Adafruit_Sensor-Bibliothek installiert haben, die auch auf GitHub verfügbar ist. Sie können die beiden Bibliotheken auch herunterladen, indem Sie auf die folgenden Schaltflächen klicken:

Sie können auf die Schaltfläche oben rechts im Codefeld klicken, um den Code zu kopieren.

Beispiel-code-HC-SR04 mit DHT11 und I2C LCD

HC-SR04 mit Arduino, DHT11 und die I2C-LCD-Schaltplan.

Der folgende Code kann verwendet werden, um alle 3 obigen Beispiele zu kombinieren., Es zeigt sowohl die Temperatur, die Schallgeschwindigkeit als auch die gemessene Entfernung auf dem LCD an.

HC-SR04 Abmessungen

Nachfolgend finden Sie die Abmessungen des HC-SR04 Ultraschallsensors. Ich habe festgestellt, dass es einige kleine Unterschiede zwischen den Herstellern gibt, daher empfehle ich eine doppelte Überprüfung anhand Ihres eigenen Sensors.

HC-SR04 Abmessungen

HC-SR04 CAD

Ich habe grundlegende CAD-Zeichnungen des HC-SR04 Ultraschallsensors erstellt, die Sie unten herunterladen können.,

Fazit

In diesem Artikel habe ich Ihnen gezeigt, wie der Ultraschall-Abstandssensor HC-SR04 funktioniert und wie Sie ihn mit Arduino verwenden können. Ich hoffe, Sie fanden es nützlich und informativ. Wenn Sie es getan haben, teilen Sie es bitte mit einem Freund, der auch Elektronik mag!

Persönliches Projekt: Vor ein paar Monaten habe ich mit einigen Freunden eine interaktive Wandinstallation gebaut. Wir haben rund 30 Ultraschall-Entfernungssensoren verwendet, um Personen zu erkennen, die vor der Wand laufen. Die Wand enthielt Lichter und Soundeffekte, die sich je nachdem änderten, wie weit die Menschen standen.,

Photo: Guus Schoonewille

Ich würde gerne wissen, welche Projekte Sie mit dem Abstandssensor HC-SR04 bauen (oder bereits gebaut haben). Wenn Sie Fragen, Vorschläge haben oder der Meinung sind, dass in diesem Tutorial etwas fehlt, hinterlassen Sie bitte unten einen Kommentar.