Der HC-SR04 ist ein sehr beliebter Low-Cost Entfernungssensor, der sich einfach mit dem Arduino abfragen lässt. Der HC-SR04 arbeitet mit Ultraschall, sendet also hochfrequente Schallwellen aus und setzt ein Pin auf HIGH, sobald das zurückgeworfene Echo vom Sensor registriert wird. Aus der zwischen Signal und Echo vergangenen Zeit lässt sich dann die Entfernung des nächsten Hindernisses berechnen.

HC-SR04 bei Amazon (5er Pack)

Der Distanzsensor wird über die 5V vom Arduino mit Strom versorgt und benötigt zwei weitere I/O-Pins zur Messung. Über das Trigger-Pin wird die Messung gestartet, d.h. eine Schallwelle ausgesendet. Das Echo-Pin des Sensor ändert seinen Zustand, sobald der vom Hindernis reflektierte Schall den Sensor erreicht.

Im folgenden Video wird die Funktionsweise und der Betrieb am Arduino erklärt:

Die NewPing-Library zur einfachen Ansteuerung des HC-SR04 Entfernungssensors wird hier erklärt http://playground.arduino.cc/Code/NewPing und die jeweils aktuelle Version steht bei Bitbucket zum Download bereit.

Der im Video verwendete Arduino Sketch:

// http://playground.arduino.cc/Code/NewPing
#include <NewPing.h>
 
#define TRIG_PIN 5
#define ECHO_PIN 11
#define MAX_DIST 400
 
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DIST); // NewPing initialisieren
 
void setup() {
 Serial.begin(9600);
}
 
void loop() {
 delay(50);
 unsigned int distanceCM = sonar.ping_cm();
 Serial.print(distanceCM);
 Serial.println("cm");
}

Ich verwende die Sensoren von Elegoo, derzeit gibt es die Familienpackung mit 5 Stück HC-SR04 für unter 10 Euro bei Amazon. Ideal z.B. für Roboterprojekte, wo Hindernisse in mehreren Richtungen erkannt werden müssen.

8 thoughts on “Ultraschall Entfernungssensor HC-SR04 am Arduino

  • 26. April 2019 at 13:54
    Permalink

    Ich habe den genauen Sketch übernommen aber bei mir öffnet sich kein programm

    Reply
  • 8. Juni 2019 at 23:23
    Permalink

    Drück mal oben rechts auf die Lupe! Dann nur noch die baudrate einstellen,…

    Reply
  • 1. September 2020 at 15:01
    Permalink

    Sehr schöner Sketch
    Könnte man mit dem Sketch auch 2 Relais schalten? Z.B bei 30cm schaltet Relais 1 bei 10 cm Relais 2? Ich versteh die ganzen if Anweisungen noch nicht

    Reply
    • 2. September 2020 at 10:02
      Permalink

      Hallo Dieter, ja man kann damit Relais schalten. Die IFs wären dann in der Art
      if (distanceCM < 10) { // Hier Aktion ausführen } else if (distanceCM < 30) { // Hier Aktion ausführen }
      zu machen. Da aber pro Sekunde viele Messungen durchgeführt werden und du wahrscheinlich das Relais nur beim ersten Auftreten des Zustands schalten willst (also sobald die 9,9cm erreicht sind, aber nicht bei jeder darauf folgenden Messung auch noch), müsste eine zusätzliche Statusvariable die letzte Aktion protokollieren und auch noch abgefragt werden. Ist eine schöne Herausforderung für ein verregnetes Wochenende :)

      Reply
      • 10. September 2020 at 9:16
        Permalink

        Eine zusätzliche Statusvariable ist dazu nicht erforderlich, zumal man ja den Zustand des Pins abfragen kann, der das Relais ansteuert.

        Reply
  • Pingback: Arduino Einparkhilfe mit VL53L0X IR Laser Entfernungssensor und WS2812B NeoPixels – Makerblog.at

  • 25. Oktober 2020 at 20:16
    Permalink

    Hallo
    Habe alles genau so gemacht wie im Video…..
    bekomme aber immer eine Fehlermeldung…..
    #include
    ^~~~~~~~~~~
    compilation terminated.
    Bibliothek NewPing im Ordner: C:\Users\Targar\Desktop\Arduino\libraries\NewPing (legacy) wird verwendet
    exit status 1
    C:\Users\Targar\Desktop\Arduino\libraries\NewPing/NewPing.h: Permission denied
    grüße Patrick

    Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.