Problem mit HC-SR04 Sensoren

Guten Tag,

ich habe gerade ein Problem mit HC-SR04 Sensoren. Ich habe drei Stück an meinem diymoore Motor Shield verbaut. Die beiden Sensoren sr04vR und sr04vL funktionieren bis auf 3cm Abstand so wie sie sollen. Wenn ich meine Hand direkt vor die Sensoren halte, sollten diese meines erachtens zwar 0 cm anzeigen, aber für mein Projekt passen die 3cm Genauigkeit auch.

Der hintere IR macht mir allerdings Probleme. Er spring willkürlich im Stillstand (nichts vor dem Sensor) um mehrere Zentimeter hin und her. Auf eine Entfernung zwischen 30 und 15 cm misst er relativ genau.
Wenn ich meine Hand oder Gegenstand näher als 15cm hin bewege, zeigt er mir meißt kontant einen sehr hohen Wert von 2118 cm an.

Was ich schon versucht habe:

Anderen Sensor genommen. Bereits zwei weitere. Immer das selbe Spiel.
Pins geändert. Keine Lösung.
Gitter vor den Senoren durchgepustet.

Vor den Sensoren herrscht ausreichend Platz.

Hier noch mein Sketch

#include "SR04.h"
#define TRIGR_PIN 10
#define ECHOR_PIN 7
#define TRIGH_PIN 30
#define ECHOH_PIN 31
#define TRIGL_PIN 6
#define ECHOL_PIN 5
SR04 sr04vR = SR04(ECHOR_PIN,TRIGR_PIN);
SR04 sr04vL = SR04(ECHOL_PIN,TRIGL_PIN);
SR04 sr04H = SR04(ECHOH_PIN,TRIGH_PIN);
long a;
long b;
long c;

void setup() {

 Serial.begin(9600);
 delay(1000);
}

void loop() {
  Serial.print("Abstände:");
  Serial.println();
  a=sr04vR.Distance();
  b=sr04vL.Distance();
  c=sr04H.Distance();
   Serial.print(a);
   Serial.println("cm rechts");
   Serial.print(b);
   Serial.println("cm links");
   Serial.print(c);
   Serial.println("cm hinten");
   delay(6000);
}

Hat das Problem schon mal jemand gehabt oder kann es nachstellen und weiß eine Lösung?

Vielen Dank für Hilfe

Das sind keine IR-Sensoren, sondern Ultraschall-Sensoren.
Die erzeugen einen Ultraschall der sich auch über die Befestigung am Gehäuse fortpflanzen kann.
Daher sollte man auf die Befestigung besonders achten.

Auch müssen zwischen den einzelnen Auswertungen Pausen eingelegt werden, da die Sensoren sich sonst gegenseitig beeinflussen.

Hi,

danke für die Richtigstellung. Leider immer noch das selbe Problem. Befestig war er mit Heißkleber. Hat nicht funktioniert. Hab den einen Sensor dann wieder abgemacht.

Pausen habe ich eingebaut, von 1ms bis einer Sekunde. Keine Änderung. Was ich nicht verstehe ist, wenn ich die Hand direkt davor halte, dass er diese hohen Werte auswirft.

Du solltest das nach und nach aufbauen.
Erst einen Sensor, wenn der gut geht, den zweiten....usw.
Mit Pausen dazwischen, die sehe ich in deinem Sketch nicht.

SvenKi99:
Was ich nicht verstehe ist, wenn ich die Hand direkt davor halte, dass er diese hohen Werte auswirft.

Es gibt einen Mindestabstand von etwa 2 oder 3 cm.
Eine Messung mit 0 ist also nicht realistisch.
Hier so etwas ähnliches wie ein Datenblatt: https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf

Hi

Ich denke (nicht verifiziert), daß die Lib eh blockierend arbeitet - somit wären Pausen, sofern nicht mit einem TimeOut gearbeitet wird, nicht zielführend.
Das entnehme ich der Zuweisung in die Variablen mit der Methode .Distance.

Hast Du Mal versucht, die Reihenfolge der Sensoren abzuändern?
Wandert dann der Fehler?

MfG

versuch mal

a) eine andere Library, bei mir funktioniert die NewPing.h sehr gut. die kommt mit einem "MultiSensor" Beispiel: NewPing3Sensors. In dem Beispielsketch siehst du ein delay(50) zwischen den Abfragen

b) in meiner konkreten Anwendung mit 5 Sensoren für meinen robot, frage ich pro Loop durchgang nur einen Sensor ab, nicht blockierend nach Muster BlinkWithoutDelay mit 30ms Intervall zur Absicherung. Die restliche Zeit tut der Sketch ohnehin auch etwas, da brauch ich kein dediziertes delay und das funktioniert auch sehr gut.

Beinflussen tun sich die gar nicht:

Hallo und danke für die vielen Antworten.

@HotSystems: ich habe die Sensoren nacheinander aufgebaut und beim letzte funktioniert es nicht.
Die Pausen waren in meinem Sketch des ersten Beitrag noch nicht drin. Hab ich dann nach deinem Vorschlag eingebaut. Hat leider aber nichts gebracht.

@postmaster-ino: Hab ich gemacht. Problem wandert mit.

@noiasca: Hab mir die Library mal installiert und den Beispiel Sketch hochgeladen. Das Problem hat sich gebessert. Es erscheinen sehr viele korrekte Messungen, aber ca 40% der Messungen bring er mir eine 0.
Warum auch immer.

Denke kann aber erst mal mit den Werten leben, da ich bisher nur rumexperimentiere und lernen will, also noch kein Projekt, bei dem es auf jeden Millimeter ankommt.

Grüße

Hi

Dann liegt's irgendwie am Sensor - vll. ein Kondensator in Dessen Nähe defekt?
KA, aber irgendwas muß sich Da ab Sensor bis zum Arduino von den funktionierenden Sensoren unterscheiden.

MfG