HC-SR04 Ultraschallsensor mit Arduino meistern: Komplettes Tutorial
Einführung
In diesem Tutorial lernen Sie, wie der HC-SR04 Ultraschallsensor funktioniert und wie man ihn mit Arduino zur Entfernungsmessung einsetzt. Er ist der beliebteste Sensor für Distanzmessung und Hindernisvermeidung bei Arduino-Robotern.
Projekte mit HC-SR04:
- Arduino Radar (Sonar)
- Entfernungsmesser & digitale Wasserwaage
- Sicherheits- & Alarmsystem
- Arduino Ameisen-Hexapod
Video oder schriftliches Tutorial unten. Enthält Spezifikationen, Pinout, Verdrahtung, Codes, NewPing-Library, Temperaturkompensation mit DHT22.
HC-SR04 Hardware-Übersicht
Günstiger, einfach zu nutzender Distanzsensor: 2 cm – 400 cm (ca. 1 Zoll – 13 ft).
Zwei Ultraschall-Wandler:
- Sender: sendet 40 kHz Ultraschall-Impulse
- Empfänger: detektiert reflektierte Wellen
Prinzip wie SONAR in U-Booten.
Technische Daten
| Betriebsspannung | 5 V DC |
| Stromaufnahme | 15 mA |
| Frequenz | 40 kHz |
| Min. Reichweite | 2 cm / 1 Zoll |
| Max. Reichweite | 400 cm / 13 ft |
| Genauigkeit | 3 mm |
| Messwinkel | < 15° |
| Abmessungen | 45 × 20 × 15 mm |
HC-SR04 Pinbelegung
- VCC → Arduino 5 V
- GND → Arduino GND
- Trig (Trigger) → beliebiger Digitalpin (Output)
- Echo → beliebiger Digitalpin (Input)
Trig: 10 µs High-Puls startet 8-Zyklus-Ultraschallburst. Echo: geht HIGH, wartet auf Reflexion, geht LOW bei Empfang (oder Timeout nach 38 ms).
Funktionsprinzip
Ultraschall (40 kHz) breitet sich aus, reflektiert an Objekt. Aus Laufzeit und Schallgeschwindigkeit wird Distanz berechnet.
- Trig 10 µs HIGH → 8 Zyklen Ultraschall gesendet.
- Echo geht sofort HIGH, startet Zeitmessung.
- Kein Objekt → Echo nach 38 ms Timeout LOW.
- Objekt erkannt → Echo früher LOW. Dauer = Hin- + Rückweg.
Formel: Distanz = (Schallgeschwindigkeit × Zeit) / 2
- Zeit = Echo-HIGH-Dauer (µs) via
pulseIn() - Schallgeschwindigkeit ≈ 340 m/s = 0,034 cm/µs
- Division durch 2, da Hin- und Rückweg
Beispiel: Echo HIGH 2 ms (2000 µs) → Distanz = (0,034 × 2000) / 2 = 34 cm.
HC-SR04 an Arduino anschließen
- VCC → 5 V, GND → GND
- Trig → Digitalpin 9, Echo → Digitalpin 10 (beispielhaft)
Benötigte Bauteile
- HC-SR04 Ultraschallsensor
- Arduino Board
- Steckbrett & Jumper-Kabel
HC-SR04 Arduino Code (Basis)
/* Ultrasonic Sensor HC-SR04 & Arduino
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Trigger-Puls
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Echo-Laufzeit messen
duration = pulseIn(echoPin, HIGH);
// Distanz berechnen (cm)
distance = duration * 0.034 / 2;
// Ausgabe
Serial.print("Distance: ");
Serial.println(distance);
}
Code-Erklärung
pulseIn(echoPin, HIGH)misst Dauer des HIGH-Pegels in µs.- Formel:
distance = duration * 0.034 / 2(cm). - Serieller Monitor zeigt Distanz.
HC-SR04 mit LCD-Display
Ergebnis auf 16×2 LCD statt Serial Monitor:
/* Ultrasonic Sensor HC-SR04 & Arduino with LCD
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
lcd.begin(16, 2);
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);
lcd.print("Distance: ");
lcd.print(distanceCm);
lcd.print(" cm");
delay(10);
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distanceInch);
lcd.print(" inch");
delay(10);
}
NewPing Library – Einfachere Programmierung
NewPing kapselt Trigger/Messung/Rechnung. Einzeiler für Distanz:
#include <NewPing.h>
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50); // 20 Pings/sec max
int distance = sonar.ping_cm(); // Distanz in cm (0 = außerhalb)
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
}
Weitere Features:
ping_in()→ Distanz in Zollping_median(iterationen[, max_cm])→ Median mehrerer Messungen (Standard 5) für höhere Genauigkeit. Rückgabe: µs.
Genauigkeitsverbesserung: Temperaturkompensation mit DHT22
Schallgeschwindigkeit hängt von Temperatur (und Luftfeuchte) ab. Bei 20 °C ≈ 340 m/s, bei -20 °C ≈ 315 m/s.
Formel: v = 331,4 + 0,6 × T + 0,0124 × RH (T in °C, RH in %)
Arduino Code mit DHT22 & NewPing
/* HC-SR04 with Temperature Compensation
* by Dejan, How To Mechatronics, https://howtomechatronics.com/
*/
#include <NewPing.h>
#include "dht.h" // https://github.com/RobTillaart/DHTlib
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
#define DHT22_PIN 5
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT;
void setup() {
Serial.begin(9600);
}
void loop() {
delay(100);
int chk = DHT.read22(DHT22_PIN);
float temp = DHT.temperature;
float hum = DHT.humidity;
float vSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // m/s
unsigned int duration = sonar.ping_median(10); // µs
float durationSec = duration / 1000000.0; // s
float distance = (vSound * durationSec) / 2.0; // m
distance *= 100; // cm
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
HC-SR04 Abmessungen & 3D-Modell
3D-Modell (STL/STEP) auf Thangs zum Download.
Hinweis: Maße können je Hersteller leicht abweichen.
Fazit
Der HC-SR04 ist ideal für berührungslose Distanzmessung, Objekterkennung, Füllstandsmessung etc. Weitere Projektideen:
- Berührungsloser Mülleimer (Bewegungssensor)
- Gesten-gesteuertes Licht
- Mini-Akustische Levitation
- Hindernisvermeidender Roboter
Viel Erfolg! Fragen in den Kommentaren. Meine 30+ Arduino-Projekte anschauen.
Herstellungsprozess
- HC-SR04 Ultraschallsensor: Funktionsweise und Hauptanwendungen
- Arduino-Sensoren: Typen, Anwendungen und reale Projekte
- HC-SR04 Ultraschallsensor an Raspberry Pi 3 anschließen – Komplettanleitung
- HC-SR04 Ultraschallsensor an Raspberry Pi anschließen – Praktischer Leitfaden
- DHT11 Temperatur- & Feuchtesensor mit LED-Anzeige & Piezo-Summer
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Kompaktes Arduino-Radar mit HC-SR04 Ultraschallsensor & 1,8″ Display
- Ultraschall-Entfernungsmesser mit Arduino UNO und SR04-Sensor bauen
- Arduino Ultraschall-Distanz & Temperatur-Monitor mit LCD-Alarmsystem