Ultraschallsensor HC-SR04 und Arduino – Vollständige Anleitung
In diesem Tutorial lernen wir, wie der HC-SR04 Ultraschallsensor funktioniert und wie man es mit Arduino verwendet . Dies ist der beliebteste Sensor zum Messen von Entfernungen und zum Erstellen von Hindernisvermeidungsrobotern mit Arduino.
Ich habe den HC-SR04-Ultraschallsensor bereits zum Erstellen mehrerer cooler Arduino-Projekte verwendet, und Sie können sie sich hier ansehen:
Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen. Es enthält zusätzliche Informationen und Beispiele für den Sensor, einschließlich Spezifikationen, Pinbelegungen, Schaltplänen, Codes und mehr.
Der HC-SR04 ist ein erschwinglicher und einfach zu verwendender Entfernungsmesssensor, der einen Bereich von 2 cm bis 400 cm (etwa einen Zoll bis 13 Fuß) hat.
Der Sensor besteht aus zwei Ultraschallwandlern. Einer ist ein Sender, der Ultraschallimpulse ausgibt, und der andere ist ein Empfänger, der nach reflektierten Wellen lauscht. Es ist im Grunde ein SONAR, das in U-Booten zur Erkennung von Unterwasserobjekten verwendet wird.
Hier sind die wichtigsten Spezifikationen:
Hier ist die Pinbelegung des Sensors:
Der Sensor hat 4 Pins. VCC und GND Gehen Sie zu 5V und GND Pins auf dem Arduino und dem Trig und Echo Gehen Sie zu einem beliebigen digitalen Arduino-Pin. Verwenden des Triggers Pin senden wir die Ultraschallwelle vom Sender und mit dem Echo Pin hören wir auf das reflektierte Signal.
Es sendet einen Ultraschall mit 40.000 Hz aus, der durch die Luft wandert, und wenn sich ein Objekt oder Hindernis auf seinem Weg befindet, wird er zum Modul zurückgeworfen. Unter Berücksichtigung der Laufzeit und der Schallgeschwindigkeit können Sie die Entfernung berechnen.
Um den Ultraschall zu erzeugen, müssen wir den Trig-Pin für 10 µs auf einen High-Zustand setzen. Dadurch wird ein Ultraschallstoß mit 8 Zyklen ausgesendet, der sich mit Schallgeschwindigkeit fortbewegt. Die Echo-Stifte gehen sofort hoch, nachdem dieser 8-Zyklus-Ultraschallstoß gesendet wurde, und er beginnt zu lauschen oder darauf zu warten, dass diese Welle von einem Objekt reflektiert wird.
Wenn kein Objekt oder reflektierter Impuls vorhanden ist, wird der Echo-Pin nach 38 ms abgeschaltet und kehrt in den niedrigen Zustand zurück.
Wenn wir einen reflektierten Impuls erhalten, wird der Echo-Pin früher als diese 38 ms abfallen. Je nachdem, wie lange der Echo-Pin HIGH war, können wir die Entfernung bestimmen, die die Schallwelle zurückgelegt hat, also die Entfernung vom Sensor zum Objekt.
Dazu verwenden wir folgende Grundformel zur Entfernungsberechnung:
Entfernung =Geschwindigkeit x Zeit
Wir kennen tatsächlich sowohl die Geschwindigkeit als auch die Zeitwerte. Die Zeit ist die Zeit, die der Echo-Stift HIGH war, und die Geschwindigkeit ist die Schallgeschwindigkeit, die 340 m / s beträgt. Es gibt einen zusätzlichen Schritt, den wir tun müssen, und das ist, das Endergebnis durch 2 zu teilen. Und das liegt daran, dass wir die Dauer messen, die die Schallwelle benötigt, um zum Objekt zu gelangen und zurückzuprallen.
Nehmen wir an, der Echo-Pin war 2 ms lang HIGH. Wenn wir das Entfernungsergebnis in cm erhalten möchten, können wir den Schallgeschwindigkeitswert von 340 m/s in 34 cm/ms umrechnen.
Distanz =(Geschwindigkeit x Zeit) / 2 =(34 cm/ms x 1,5 ms) / 2 =25,5 cm.
Wenn also der Echo-Pin für 2 ms HIGH war (was wir mit pulseIn() messen Funktion), beträgt der Abstand vom Sensor zum Objekt 34 cm.
So müssen wir den HC-SR04-Sensor an ein Arduino-Board anschließen.
Die Erdungs- und die VCC-Pins des Moduls müssen mit der Erdung und den 5-Volt-Pins auf dem Arduino-Board verbunden werden und die Trig- und Echo-Pins mit einem beliebigen digitalen I/O-Pin auf dem Arduino-Board. Sie können diese für dieses Tutorial benötigten Komponenten von einer der folgenden Websites beziehen:
Hier ist ein Code zum Messen der Entfernung mit dem Ultraschallsensor HC-SR04 und Arduino.
Zuerst müssen wir die Trig- und Echo-Pins definieren. In diesem Fall sind es die Pins Nummer 9 und 10 auf dem Arduino Board und sie heißen trigPin und echoPin. Dann brauchen wir eine Long-Variable mit dem Namen "duration" für die Fahrzeit, die wir vom Sensor erhalten, und eine Integer-Variable für die Entfernung.
Im Setup müssen wir den trigPin als Ausgang und den echoPin als Eingang definieren und auch die serielle Kommunikation starten, um die Ergebnisse auf dem seriellen Monitor anzuzeigen.
In der Schleife müssen wir zuerst sicherstellen, dass der trigPin frei ist, also müssen Sie diesen Pin für nur 2 µs auf einen LOW-Zustand setzen. Um nun die Ultraschallwelle zu erzeugen, müssen wir den trigPin für 10 µs auf HIGH State setzen.
Verwenden von pulseIn() Funktion lesen wir die Reisezeit und geben diesen Wert in die Variable „Dauer“ ein. Diese Funktion hat 2 Parameter, der erste ist der Name des Echo-Pins und der zweite ist der Status des Impulses, den wir lesen, entweder High oder Low.
In diesem Fall müssen wir diesen auf HIGH setzen, da die HC-SR04-Sensoren den Echo-Pin auf High setzen, nachdem sie den 8-Zyklus-Ultraschall-Burst vom Sender gesendet haben. Dies startet tatsächlich das Timing und sobald wir die reflektierte Schallwelle empfangen, geht der Echo-Pin auf Low, was das Timing stoppt. Am Ende gibt die Funktion die Länge des Impulses in Mikrosekunden zurück.
Um die Entfernung zu erhalten, multiplizieren wir die Dauer mit 0,034 und dividieren sie durch 2, wie wir diese Gleichung zuvor erklärt haben.
Am Ende drucken wir den Wert der Entfernung auf dem seriellen Monitor aus.
Hier ist ein weiteres Beispiel, wie man den Ultraschallsensor mit Arduino verwendet und die Ergebnisse auf einem LCD anzeigt.
Sie können den Ultraschallsensor und das LDC wie folgt verbinden:
Der Code, der die Entfernung misst, ist ziemlich identisch mit dem einfachen Beispiel. Anstatt die Ergebnisse auf dem seriellen Monitor auszudrucken, drucken wir sie hier auf dem LCD aus. Wenn Sie weitere Informationen zur Verwendung und Verbindung eines LCD mit Arduino benötigen, können Sie mein spezielles Tutorial dafür lesen.
Es gibt tatsächlich eine einfachere und bessere Möglichkeit, den Arduino für die Entfernungsmessung mit dem HC-SR04-Ultraschallsensor zu programmieren, und zwar mit der NewPing-Bibliothek.
In dem zuvor erläuterten Code haben wir den Sensor manuell ausgelöst und die empfangene Signalimpulsdauer gemessen. Dann haben wir anhand dieser Ergebnisse die Entfernung darauf basierend berechnet. Mit der NewPing-Bibliothek können wir die Entfernung mit nur einer einzigen Codezeile ermitteln.
Hier ist ein Beispielcode:
Es ist viel einfacher als das vorherige Beispiel. Wir verwenden einfach den Aufruf ping_cm() -Methode auf das NewPing-Sonarobjekt und wir erhalten die Entfernung in Zentimetern. Wenn wir den Abstand in Zoll wollen, können wir das ping_in() verwenden stattdessen.
Die Bibliothek hat auch einige andere nützliche Funktionen. Zum Beispiel mit dem ping_median(iterations [, max_cm_distance]) -Methode können wir genauere Ergebnisse erhalten, da sie einen Median oder den Mittelwert aus mehreren Messungen zurückgibt. Mit den Iterationen Parameter stellen wir die Anzahl der Abtastungen ein, die das Programm zur Berechnung des Mittelwerts verwendet. Der Standardwert ist 5 Iterationen. Der ping_median() gibt die empfangene Pulsdauer in Mikrosekunden zurück.
Für weitere Informationen und Details können Sie jedoch die NewPing-Wiki-Seite besuchen.
Der HC-SR04-Sensor ist ziemlich genau, aber da seine Arbeit von der Schallgeschwindigkeit abhängt, sollten wir für genauere Ergebnisse auch die Lufttemperatur berücksichtigen. Die Schallgeschwindigkeit kann sich erheblich ändern, wenn sich die Lufttemperatur ändert. Beispielsweise beträgt die Schallgeschwindigkeit bei 20 °C etwa 340 m/s, aber bei -20 °C beträgt die Schallgeschwindigkeit etwa 315 m/s. Auch die relative Luftfeuchtigkeit beeinflusst die Geschwindigkeit.
Wenn wir also diesen Sensor verwenden, um Entfernungen bei verschiedenen Temperaturen zu messen, sollten wir eine Temperaturkompensation implementieren, und das können wir mit der folgenden Formel tun:
Geschwindigkeit =331,4 + 0,6 x Temperatur + 0,0124 x relative_Luftfeuchtigkeit
Hier ist ein Beispiel:
Neben dem HC-SR04-Ultraschallsensor werden wir den DHT11 / DHT22-Sensor verwenden, um die Temperatur und die Luftfeuchtigkeit der Umgebung zu messen und den Schallgeschwindigkeitswert entsprechend anzupassen.
Also lesen wir zuerst die Temperatur- und Feuchtigkeitswerte vom DHT22-Sensor und verwenden diese Werte dann, um die Schallgeschwindigkeit zu berechnen. Dann erhalten wir die Laufzeit der Schallwellen in Mikrosekunden, wandeln sie in Sekunden um und berechnen die Entfernung vom Sensor zu den Objekten in Zentimetern.
Ich habe ein 3D-Modell des HC-SR04-Ultraschallsensors erstellt, falls Sie eines benötigen, wenn Sie Ihr nächstes Projekt damit machen. Sie können es über den unten stehenden Link herunterladen.
Sie können dieses 3D-Modell bei Thangs finden und herunterladen.
Hier sind die Abmessungen des HC-SR04-Sensors:
Bitte beachten Sie, dass diese je nach Hersteller manchmal etwas abweichen können.
Wir haben also so ziemlich alles abgedeckt, was wir über die Verwendung des HC-SR04-Ultraschallsensors mit Arduino wissen müssen. Es ist ein großartiger Sensor für viele DIY-Elektronikprojekte, bei denen wir eine berührungslose Abstandsmessung, Präsenz- oder Objekterkennung, Füllstand oder Position von etwas usw. benötigen.
Die Projekte, die ich mit diesem Sensor gemacht habe, habe ich bereits am Anfang des Beitrags erwähnt. Hier sind einige andere coole Projekte mit dem HC-SR04-Sensor und Arduino:
Ich hoffe, Ihnen hat dieses Tutorial gefallen und Sie haben etwas Neues gelernt. Fühlen Sie sich frei, Fragen in den Kommentaren unten zu stellen, und vergessen Sie nicht, sich meine vollständige Sammlung von über 30 Arduino-Projekten anzusehen.
Überblick über die HC-SR04-Hardware
Betriebsspannung 5 V DC Betriebsstrom 15 mA Betriebsfrequenz 40 KHz Mindestbereich 2 cm / 1 Zoll Maximale Reichweite 400 cm / 13 Fuß Genauigkeit 3 mm Messwinkel <15° Dimension 45 x 20 x 15 mm Pinbelegung des Ultraschallsensors HC-SR04
Wie funktioniert der Ultraschall-Abstandssensor HC-SR04?
So verbinden Sie den HC-SR04-Ultraschallsensor mit Arduino
HC-SR04 Ultraschallsensor Arduino Code
/*
Ultrasonic Sensor HC-SR04 and Arduino Tutorial
by Dejan Nedelkovski,
www.HowToMechatronics.com
*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
}
Codesprache:Arduino (arduino) Code-Erklärung
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
Codesprache:Arduino (arduino) void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
Codesprache:Arduino (arduino) // Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Codesprache:Arduino (arduino) // Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
Codesprache:Arduino (arduino) // Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
Codesprache:Arduino (arduino) Beispiel für einen Arduino-Ultraschallsensor und ein LCD-Display
/*
Ultrasonic Sensor HC-SR04 and Arduino Tutorial
by Dejan Nedelkovski,
www.HowToMechatronics.com
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034 / 2;
distanceInch = duration * 0.0133 / 2;
lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Distance: "); // Prints string "Distance" on the LCD
lcd.print(distanceCm); // Prints the distance value from the sensor
lcd.print(" cm");
delay(10);
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distanceInch);
lcd.print(" inch");
delay(10);
}
Codesprache:Arduino (arduino) Beispielcode mit der NewPing-Bibliothek
#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
Codesprache:Arduino (arduino) Verbesserung der Genauigkeit des Abstandssensors HC-SR04 mit dem Temperatursensor DHT22
Arduino-Code
/*
Example made by Dejan, How To Mechatronics,
https://howtomechatronics.com/
*/
#include <NewPing.h> // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h" // https://github.com/RobTillaart/DHTlib
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object
int readDHT, temp, hum;
float speedOfSound, distance, duration;
void setup() {
Serial.begin(9600);
}
void loop() {
delay(100);
// Read temperature and humidity from DHT22 sensor
readDHT = DHT.read22(dht22); // Reads the data from the sensor
temp = DHT.temperature; // Gets the values of the temperature
hum = DHT.humidity; // Gets the values of the humidity
speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s
duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
duration = duration/1000000; // Convert mircroseconds to seconds
distance = (speedOfSound * duration)/2;
distance = distance * 100; // meters to centimeters
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
Codesprache:Arduino (arduino) HC-SR04 Abmessungen und 3D-Modell
Schlussfolgerung
Herstellungsprozess
- Was ist der Ultraschallsensor HC-SR04:Funktionsweise und Anwendungen
- Arduino-Sensor – Typen und Anwendungen
- Ultraschallsensor (HC-SR04) + Raspberry Pi
- HC-SR04 Ultraschall-Reichweitensensor auf dem Raspberry Pi
- DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
- FlickMote
- IOT - Smart Jar mit ESP8266, Arduino und Ultraschallsensor
- Mini-Radar mit Arduino
- Ultraschallbereichsdetektor mit Arduino
- Ultraschallsensor mit Alarm, LCD und Temperatur