πŸ“

Ultraschall-Sensor

Projekt I02 - Entfernung messen mit Schallwellen

Intermediate
HC-SR04
Ultraschall
1
Lernziele

Was du lernst

  • Trigger-Signal senden - 10us Ultraschall-Impuls aussenden
  • Echo-Messung - Laufzeit des reflektierten Signals messen
  • pulseIn() Funktion - Pulsdauer in Mikrosekunden erfassen
  • Entfernung berechnen - Schallgeschwindigkeit und Weg-Zeit-Formel

Voraussetzungen

Grundlagen der digitalen Ein-/Ausgabe, Verstaendnis von Funktionen und Variablen

Komponenten

Was du brauchst

πŸ“‘

HC-SR04 Ultraschall-Sensor

Sendet Ultraschall-Impulse (40kHz) und misst die Zeit bis zum Echo. Damit laesst sich die Entfernung zu Objekten bestimmen.

Messbereich: 2cm - 400cm

πŸ”Œ

Die 4 Pins

  • VCC - Stromversorgung (5V)
  • TRIG - Trigger-Eingang (Pin 6)
  • ECHO - Echo-Ausgang (Pin 7)
  • GND - Masse

Hinweis

Der HC-SR04 arbeitet mit 5V-Logik und ist perfekt fuer den Arduino Uno geeignet. Keine zusaetzlichen Bauteile noetig!

2
Theorie

Wie funktioniert der Sensor?

Das Prinzip

  • Trigger-Puls loest Ultraschall aus
  • Schall breitet sich aus (343 m/s)
  • Schall trifft auf Objekt und wird reflektiert
  • Echo wird vom Sensor empfangen

Die Berechnung

Schallgeschwindigkeit: 343 m/s = 0.0343 cm/us

Das sind 29.1 us pro cm

Entfernung = (Zeit / 2) / 29.1

Zeitdiagramm

  TRIGGER:
  ───┐     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
     β”‚     β”‚
     β””β”€β”€β”€β”€β”€β”˜ (10us Puls)

  ECHO:
  ───────┐           β”Œβ”€β”€β”€
         β”‚           β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         |<-- Zeit -->|

  Zeit = Hin + Zurueck
  β†’ Teilen durch 2!
            

Messbereich: 2cm bis 400cm

Genauigkeit: ca. 3mm

Schaltplan

Verbindungen zum Arduino

Wokwi-Aufbau

     Arduino Uno          HC-SR04
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚           β”‚      β”‚  β”Œβ”€β”€β”    β”‚
    β”‚  5V ──────┼──────┼─ VCC     β”‚
    β”‚           β”‚      β”‚          β”‚
    β”‚  Pin 6 ───┼──────┼─ TRIG    β”‚
    β”‚           β”‚      β”‚          β”‚
    β”‚  Pin 7 ───┼──────┼─ ECHO    β”‚
    β”‚           β”‚      β”‚          β”‚
    β”‚  GND ─────┼──────┼─ GND     β”‚
    β”‚           β”‚      β”‚  β””β”€β”€β”˜    β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            

Verbindungen

  • VCC β†’ Arduino 5V
  • TRIG β†’ Arduino Pin 6
  • ECHO β†’ Arduino Pin 7
  • GND β†’ Arduino GND

In Wokwi

  1. Suche nach "ultrasonic"
  2. Waehle HC-SR04
  3. Verbinde die 4 Pins
3
Code

Schritt 1: Pin-Setup

// Schritt 1: Pin-Definitionen und Setup

#define TRIGGER_PIN 6  // Trigger an Pin 6
#define ECHO_PIN 7     // Echo an Pin 7

void setup() {
  Serial.begin(9600);

  // Trigger ist Ausgang (wir senden)
  pinMode(TRIGGER_PIN, OUTPUT);

  // Echo ist Eingang (wir empfangen)
  pinMode(ECHO_PIN, INPUT);

  Serial.println("HC-SR04 Ultraschall-Sensor");
}

void loop() {
  // Noch leer
}

Erklaerung

  • #define - Konstante ohne Speicher
  • TRIGGER ist OUTPUT (senden)
  • ECHO ist INPUT (empfangen)

Warum #define?

Praeprozessor ersetzt den Text vor dem Kompilieren. Spart Speicher im Vergleich zu const int.

3
Code

Schritt 2: Trigger-Signal senden

// Schritt 2: Trigger-Signal erzeugen

float measureDistance() {
  // Trigger auf LOW setzen (sauberer Start)
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);

  // 10 Mikrosekunden HIGH-Puls senden
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);

  // Echo messen (kommt als naechstes...)
  return 0;
}

Das Trigger-Signal

Der HC-SR04 benoetigt einen 10 Mikrosekunden langen HIGH-Puls am TRIG-Pin. Danach sendet er automatisch 8 Ultraschall-Impulse bei 40kHz aus.

delayMicroseconds()

delay() arbeitet in Millisekunden (1/1000 Sekunde). delayMicroseconds() arbeitet in Mikrosekunden (1/1.000.000 Sekunde) - viel praeziser!

3
Code

Schritt 3: Echo messen und berechnen

// Schritt 3: Echo-Dauer messen und Entfernung berechnen

float measureDistance() {
  // Trigger-Signal senden
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);

  // Echo-Puls messen (Timeout: 30ms = ca. 5m)
  long duration = pulseIn(ECHO_PIN, HIGH, 30000);

  if (duration == 0) {
    return -1;  // Timeout oder Fehler
  }

  // Entfernung = (Zeit / 2) / 29.1 us/cm
  float distance = (duration / 2.0) / 29.1;
  return distance;
}

pulseIn() erklaert

  • Pin - Welcher Pin wird gemessen
  • HIGH - Warte auf HIGH, miss Dauer
  • 30000 - Timeout in Mikrosekunden

Die Formel

Schall braucht 29.1us pro cm. Die gemessene Zeit ist Hin + Zurueck, daher teilen wir durch 2.

3
Code

Fertiger Code

// I02: HC-SR04 Ultraschall-Entfernungsmesser
#define TRIGGER_PIN 6
#define ECHO_PIN 7

void setup() {
  Serial.begin(9600);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.println("HC-SR04 Ultraschall-Sensor");
}

float measureDistance() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  long duration = pulseIn(ECHO_PIN, HIGH, 30000);
  if (duration == 0) return -1;
  return (duration / 2.0) / 29.1;
}

void loop() {
  float dist = measureDistance();
  if (dist > 0) {
    Serial.print("Entfernung: ");
    Serial.print(dist, 1);
    Serial.println(" cm");
  } else {
    Serial.println("Messfehler");
  }
  delay(500);
}

Ausprobieren

Simulation in Wokwi

Wokwi Projekt

Erstelle ein neues Projekt mit Arduino Uno:

So testest du

  • Fuege einen HC-SR04 Sensor hinzu (suche nach "ultrasonic")
  • Verbinde VCCβ†’5V, GNDβ†’GND, TRIGβ†’Pin 6, ECHOβ†’Pin 7
  • Kopiere den Code in die sketch.ino
  • Klicke auf Play und beobachte den Serial Monitor!
  • In Wokwi: Klicke auf den Sensor und ziehe den Abstandsregler
4
Challenges

Erweiterungen

Probiere diese Aufgaben aus

πŸ’‘

Challenge 1: Warn-LED

Fuege eine LED hinzu, die bei Entfernung unter 20cm leuchtet.

πŸ”Š

Challenge 2: Piezo-Warnung

Ein Buzzer piept schneller, je naeher ein Objekt kommt (wie ein Einparksensor).

πŸ“Š

Challenge 3: Mittelwert

Miss 5x und berechne den Durchschnitt fuer stabilere Werte.

🚦

Challenge 4: Ampel

3 LEDs (gruen/gelb/rot) zeigen Entfernungszonen an: >50cm, 20-50cm, <20cm.

πŸ“

Geschafft!

Du kannst jetzt Entfernungen messen

βœ…

Trigger-Signal

10us Puls zum Sensor senden

βœ…

pulseIn()

Echo-Dauer in Mikrosekunden

βœ…

Berechnung

Schallgeschwindigkeit 343 m/s

Naechstes Projekt

I03: Servo-Motor - Praezise Winkelsteuerung mit PWM

← β†’
1 / 12