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.
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.
Ich habe den genauen Sketch übernommen aber bei mir öffnet sich kein programm
Drück mal oben rechts auf die Lupe! Dann nur noch die baudrate einstellen,…
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
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 :)
Super danke
Eine zusätzliche Statusvariable ist dazu nicht erforderlich, zumal man ja den Zustand des Pins abfragen kann, der das Relais ansteuert.
Pingback: Arduino Einparkhilfe mit VL53L0X IR Laser Entfernungssensor und WS2812B NeoPixels – Makerblog.at
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