Forum: Mikrocontroller und Digitale Elektronik Ultraschallsensor DYP-ME007Y


von Felix K. (felix_d274)


Lesenswert?

Hallo liebe Forenleser,

ich möchte zur Füllstandsmessung einer Zisterne einen Ultraschallsensor 
einsetzen. Die Daten des Sensors möchte ich mit Hilfe eines Arduino Uno 
auswerten.

Derzeit nutze ich als Sensor ein HC-SR04 Ultraschallmodul für den 
Arduino. Die Ergebnisse mit dem Modul sind gut.

Da das Wasser in der Zisterne bis an den Sensor steigt, benötige ich 
eine wasserdichte Lösung. Dazu habe ich das Ultraschallmodul DYP-ME007Y 
gekauft.

Leider könnte ich mit diesem Sensor bisher (noch im Tockentest auf dem 
Schreibtisch) keine Messwerte aufnehmen. Laut Händler ist die 
Ansteuerung des DYP-ME007Y genau wie beim HC-SR04.

Hier im Forum habe ich bereits den Hinweis zur Kürzung der Zuleitung 
gefunden. Das hat nicht geholfen. Ich habe auch schon einen 2. Sensor 
gleichen Typs ausprobiert. Mit dem funktioniert es auch nicht.

Ich habe folgenden Programmcode schon ausprobiert:
1
int pingPin = 13;
2
int inPin = 12;
3
4
void setup() {
5
Serial.begin(9600);
6
}
7
8
void loop()
9
{
10
// establish variables for duration of the ping,
11
// and the distance result in inches and centimeters:
12
long duration, inches, cm;
13
14
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
15
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
16
pinMode(pingPin, OUTPUT);
17
digitalWrite(pingPin, LOW);
18
delayMicroseconds(10);
19
digitalWrite(pingPin, HIGH);
20
delayMicroseconds(50);
21
digitalWrite(pingPin, LOW);
22
23
// The same pin is used to read the signal from the PING))): a HIGH
24
// pulse whose duration is the time (in microseconds) from the sending
25
// of the ping to the reception of its echo off of an object.
26
pinMode(inPin, INPUT);
27
duration = pulseIn(inPin, HIGH);
28
29
// convert the time into a distance
30
inches = microsecondsToInches(duration);
31
cm = microsecondsToCentimeters(duration);
32
33
Serial.println(cm, DEC);
34
35
delay(1000);
36
}

Und
1
int trigger=13; //Trigger-Pin des Ultraschallsensors an Pin7 des Arduino-Boards 
2
int echo=12; // Echo-Pim des Ultraschallsensors an Pim6 des Arduino-Boards 
3
long dauer=0; // Das Wort dauer ist jetzt eine Variable, unter der die Zeit gespeichert wird, die eine Schallwelle bis zur Reflektion und zurück benötigt. Startwert ist hier 0.
4
long entfernung=0; // Das Wort „entfernung“ ist jetzt die variable, unter der die berechnete Entfernung gespeichert wird. Info: Anstelle von „int“ steht hier vor den beiden Variablen „long“. Das hat den Vorteil, dass eine größere Zahl gespeichert werden kann. Nachteil: Die Variable benötigt mehr Platz im Speicher.
5
void setup()
6
{
7
Serial.begin (9600); //Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
8
pinMode(trigger, OUTPUT); // Trigger-Pin ist ein Ausgang
9
pinMode(echo, INPUT); // Echo-Pin ist ein Eingang
10
}
11
void loop()
12
{
13
digitalWrite(trigger, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
14
delay(5); //Dauer: 5 Millisekunden
15
digitalWrite(trigger, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
16
delay(10); //Dieser „Ton“ erklingt für 10 Millisekunden.
17
digitalWrite(trigger, LOW);//Dann wird der „Ton“ abgeschaltet.
18
dauer = pulseIn(echo, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Millisekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
19
entfernung = (dauer/2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
20
if (entfernung >= 500 || entfernung <= 0) //Wenn die gemessene Entfernung über 500cm oder unter 0cm liegt,…
21
{
22
Serial.println("Kein Messwert"); //dann soll der serial monitor ausgeben „Kein Messwert“, weil Messwerte in diesen Bereichen falsch oder ungenau sind.
23
}
24
else //  Ansonsten…
25
{
26
Serial.print(entfernung); //…soll der Wert der Entfernung an den serial monitor hier ausgegeben werden.
27
Serial.println(" cm"); // Hinter dem Wert der Entfernung soll auch am Serial Monitor die Einheit "cm" angegeben werden.
28
}
29
delay(1000); //Das delay von einer Sekunde sorgt in ca. jeder neuen Sekunde für einen neuen Messwert.
30
}

Wenn ich die Ausgabe im seriellen Monitor betrachte ändert sich die Zahl 
überhaupt nicht, wenn ich den Sensor gegenüber der Zimmerwand bewege 
(Bewegungsbereich: 0m bis 2m). Der HC-SR04 liefert mit beiden Codes 
realistische Ergebnisse.

Kann mir jemand von Euch bei diesem Problem weiterhelfen? Das wäre 
super. Oder hat jemand von Euch schon einmal ein Datenblatt zu dem 
Sensormodul gefunden? Ich kann leider auch keine Dokumentation zu dem 
Sensor finden.

Wenn jemand einen besseren wasserdichten Ultraschallsensor kennt, der 
leicht mit einem Arduino anzusteuern geht (also mit integrierter/ 
zusätzlicher Auswerteelektronik), wäre ich für einen Tipp sehr dankbar.

In jedem Fall wünsche ich allen einen schönen 4. Advent!

Viele Grüße
Felix

: Bearbeitet durch User
von Krazy-8 (Gast)


Lesenswert?

Felix K. schrieb:
> In jedem Fall wünsche ich allen einen schönen 4. Advent!

Danke Felix.

von Alexxx (Gast)


Lesenswert?

>> Da das Wasser in der Zisterne bis an den Sensor steigt...
Du hast wohl das Datenblatt nicht angeschaut?
Da steht (mehrmals): "Minimal Range 30cm".

von Felix K. (felix_d274)


Lesenswert?

Der minimale Abstand war mir bewusst. Innerhalb der letzten 30 cm bis 
zur Oberkante ist mir der Füllstand der Zisterne auch egal. Ich möchte 
vor allem bei relativ wenig Wasser gute Ergebnisse. Um im Sommer besser 
haushalten zu können.

Wenn die Zisterne nur noch 30cm bis zur Oberkannte oder weniger hat, 
gilt sie als voll. Die genaue Implementierung mache ich dazu aber erst, 
wenn ich überhaupt Messwerte von dem Sensor erhalte.

Vielen Dank trotzdem für deine Antwort.

von Georg G. (df2au)


Lesenswert?

Felix K. schrieb:
> // The same pin is used to read the signal from the PING))): a HIGH
> // pulse whose duration is the time (in microseconds) from the sending
> // of the ping to the reception of its echo off of an object.

Wie passt das zu
> int pingPin = 13;
> int inPin = 12;

von Felix K. (felix_d274)


Lesenswert?

Dieser Kommentar ist verwirrend. Ich werde ihn entfernen. Die 
Ansteuerungselektronik für den Sensor besitzt wie der HC-SR04 4 
Kontakte:

-V+
-Trig
-Echo
-GND

Danke für den Hinweis.

von Felix K. (Firma: Zuse hüller hille) (felixkeller)


Lesenswert?

Hallo Miteinander habe leider auch das gleiche Problem.

Arbeite mit dem Dyp-Me007y und einem Atmega16.

Jedoch liefert mir mein Programm immer das gleiche Ergebnis egal wie 
weit ich von Objekten entfernt bin.

Kann mir vielleicht jemand weiterhelfen kann dann auch gerne meinen Code 
zeigen wenn jemand sich dafür interessiert mir zu helfen.

Noch einen schönen Sonntag Abend und ich hoffe auf eure Hilfe!

von Uli (Gast)


Lesenswert?

Hallo, falls ihr euer Problem noch nicht lösen konntet, seht euch die 
Rezension hier : 
https://www.amazon.de/product-reviews/B00UFMHSG2/ref=cm_cr_dp_see_all_btm?ie=UTF8&reviewerType=all_reviews&showViewpoints=1&sortBy=recent 
an.
Ich konnte mein Problem damit lösen.
Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.