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
AliExpress
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.
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
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.,
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.
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″>
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.
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
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 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.,
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.