LevelSender - Tankfüllstand mit JeeLink empfangen

Begonnen von HCS, 04 Mai 2014, 12:03:46

Vorheriges Thema - Nächstes Thema

HCS

#30
Nun mal eine etwas längere Abhandlung über HC-SR04, SRF02 und Rohre:

Vorbedingungen: Ich habe in der Firmware den SRF02 implementiert und das Trigger-Timing für den HC-SR04 verbessert.
Außerdem war beim HC-SR04 die Berechnung der Schallgeschwindigkeit falsch, was sich mit zunehmender Distanz um einige cm ausgewirkt hat.

Der Testaufbau sieht so aus (siehe Testaufbau-SRF02.jpg):
Ein 2m langes DN 70 HT-Rohr (ein 100er hatte ich leider keins mehr)
Auf der "nicht Muffen" Stirnseite eine Pappabdeckung mit einem (bzw. zwei) Loch für den SRF02.
Vom anderen Ende aus wird mit dem Wasserstandsimulator (siehe Wasserstand-Simulator.jpg) ein bestimmter Wasserstand simuliert.

Ich habe mit HC-SR04 und SRF02 jeweils 5 Messreihen aufgenommen, jeweils mit einer Entfernung zum simulierten Wasserstand von 195cm, 180cm, 140cm, 100cm und 25cm
Es wurden jeweils 300 Messwerte pro Entfernung aufgenommen, in einem 2 Sekunden Interval.
Ergebnis siehe Messreihe-SRF02.jpg und Messreihe-HC-SR04.jpg

Beobachtungen:
Den HC-SR04 muss man sehr sorgfältig mittig und gerade ausrichten, sonst misst er mal einen realen Wert und manchmal Unsinn
Zwei getestete HC-SR04 sind in diesem Punkt unterschiedlich "sensibel"
Wenn man eine funktionierende Ausrichtung gefunden hat, misst er recht konstant
Der SRF02 ist von der Positionierung her absolut unkritisch, der hat sogar dann korrekt gemessen, wenn ich ihn nur grob in das Rohr hineingehalten habe
Der SRF02 hat mit Entfernungen unter 25cm (entgegen der Herstellerangabe von 15cm) deutliche Probleme
Der SRF02 misst konstanter als der HC-SR04 (siehe Messreihen)
Wenn man zwei Rohre zusammensteckt, misst man genau bis zur Steckverbindung. Der Absatz reflektiert wohl genug Schall.
Das Rohr sollte innen sauber sein, sonst misst man wie ich nach 1,6m eine Spinnwebe und wundert sich

Fazit:
Das Rohr sollte ca. 30cm aus dem maximalen Füllstand herausragen, damit der Sensor nicht absäuft und der SRF02 genug Abstand hat, wegen seinen 25cm
In der oberen Abdeckung und im Bereich, der oberhalb des maximalen Füllstands liegt, sollte man einige kleine Löcher bohren, um diesen Rohrbereich zu belüften
Am unteren Ende das Rohr kronenförmig einsägen, dass auch Wasser von unten steigen kann

Generell sollte man beide Sensoren verwenden können. Welcher für den jeweiligen Einsatzfall besser ist, muss man evtl. testen. Man kann es ja erst mal mit einem spottbilligen HC-SR04 versuchen, und ggf. auf einen SRF02, der locker das Doppelte kostet, umsteigen.


@tpm88: Du könntest das mit Deinem 100er Rohr und der neuen Version mit dem HC-SR04 nochmal testen

Aktuelle Version:  http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/36_LevelSender.zip

tpm88

Zitat von: HCS am 30 Juli 2014, 13:16:49
Nun mal eine etwas längere Abhandlung über HC-SR04, SRF02 und Rohre:

Vorbedingungen: Ich habe in der Firmware den SRF02 implementiert und das Trigger-Timing für den HC-SR04 verbessert.
Außerdem war beim HC-SR04 die Berechnung der Schallgeschwindigkeit falsch, was sich mit zunehmender Distanz um einige cm ausgewirkt hat.

...
@tpm88: Du könntest das mit Deinem 100er Rohr und der neuen Version mit dem HC-SR04 nochmal testen

Aktuelle Version:  http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/contrib/arduino/36_LevelSender.zip

Wow - einwandfreie Arbeit! Danke für die umfangreichen Tests. Dann müsste es bei mir mit dem 100er Rohr eigentlich auch noch klappen. Ich habe just Anfang der Woche zusätzlich einen SRF02 bekommen. Somit habe ich jetzt auch beide Optionen. Der HC-SR04 hätte natürlich weiterhin den Riesenvorteil, daß das Rohr nicht 25cm oben aus dem Wassertank herausragen muß. Das sieht sonst rein optisch ein wenig lustig aus...

Sobald ich neue Ergebnisse habe, werde ich berichten. Muß aber urlaubsbedingt vermutlich bis Ende August warten...

Tobias
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

tpm88

Hallo HCS,

habe versucht,  den neuen Sketch  (Version 1.04) zu kompilieren - aber ohne Erfolg.

Den ersten Fehler konnte ich noch beheben:
SRF02.cpp: In member function 'float SRF02::ReadDistance()':
SRF02.cpp:12: error: 'Wire' was not declared in this scope


Hierzu habe ich den Include von
#include <wire.h> auf
#include <Wire.h> abgeändert (jeweils in LevelSender und SRF02.cpp).

Dann erhalte ich aber folgenden Fehler:

core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to `setup'
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop'


Da stecke ich fest. Zur Info - ich benutze die Arduino IDE v1.0.5-r2 auf Win7 Professional. Der IDE habe ich die Library "jeelibmaster" hinzugefügt. Mit der gleichen Umgebung konnte ich den LevelSender Sketch v1.0.0 problemlos übersetzen.

Gruss
Tobias

Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

HCS

Zitat von: tpm88 am 01 August 2014, 17:27:53
Da stecke ich fest. Zur Info - ich benutze die Arduino IDE v1.0.5-r2 auf Win7 Professional. Der IDE habe ich die Library "jeelibmaster" hinzugefügt. Mit der gleichen Umgebung konnte ich den LevelSender Sketch v1.0.0 problemlos übersetzen.
Ja stimmt, ist mir gar nicht aufgefallen, da ich nicht mit der Arduino IDE (die eine echte Zumutung ist) sondern mit Visual Micro entwickle, und da geht es.

Das Problem ist wohl, dass die Arduino IDE mit einer Klasse, die den gleichen Namen wie der Sketch hat, nur zufällig klar kommt.
Ich habe die LevelSender.cpp und .h in LevelSenderLib umbenannt.

Kannst Du es bitte mal mit der angehängten Version versuchen, wenn es bei Dir dann auch geht, dann checke ich es ein.

tpm88

Zitat von: HCS am 01 August 2014, 22:07:42
Kannst Du es bitte mal mit der angehängten Version versuchen, wenn es bei Dir dann auch geht, dann checke ich es ein.
Danke, damit funktioniert es wieder einwandfrei.

Wir hatten schon einmal über einen benutzerspezifischen Temperatur Offset für den TMP36 nachgedacht. Vorschlag für die Configuration Sektion:
#define TMP36_OFFSET                -2.5  // apply offset to mesaured temperature of TMP36
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

HCS

#35
Zitat von: tpm88 am 01 August 2014, 22:25:39
Wir hatten schon einmal über einen benutzerspezifischen Temperatur Offset für den TMP36 nachgedacht. Vorschlag für die Configuration Sektion:
#define TMP36_OFFSET                -2.5  // apply offset to mesaured temperature of TMP36
Ja, werde ich so übernehmen.

Nachtrag: Ist eingebaut und commited

cotecmania

Hallo,

hat jemand eine Idee, wie man den Füllstand einfach im Floorplan anzeigen kann ?
Dachte an was grafisches, welches denn Füllstand von oben nach unten grün anzeigt (0 bis x liter), zusätzlich mit Füllstand als Text.
Ab einem bestimmten Wert wird die Restmenge rot angezeigt

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI


Franz Tenbrock

Hallo
da mein Dougie counter mit srf02 defekt ist ( Feuchtigkeit ?! im Dom der Zisterne )
bin ich auf der Sucher nach was neuem ..
Habe FS20, MaxLan, nanocul 433
jetzt noch eine andere Funkfrequenz bedeutet auch neben Sender einen neuen Empfänger  panstamp jeelink
Gut fände ich bei der Entfernungsmessung wenn man die billigen Sensoren von den KFZ PDC verwenden könnte, die haben schon ein 3 m Kabel dran und sind wasserdicht ?
das mit den ardunios flashen kann ich ja mittlerweile :-) und cubie läuftnun auch bestens ( Gruß an HCS ohne den ich das nicht geschafft hätte )

also eine Funkfrequenz die einfach die meisten nutzen 433, 868 Hm oder FS20
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

waschbaerbauch

Vielen Dank an HCS für diese tolle Idee und Beschreibung!  8)

Habe das letzte Wochenende mal zwei JeeLinks v6 und die beschriebenen Aufsteckplatinen dafür gelötet.
Der erste Funktionstest mit 'messen bis zur Decke' hat zumindest schon mal Werte ergeben :D

Jetzt warte ich nur noch auf die Batteriehalter und dann kann es ab in die Zisternen gehen.

Danke!

HCS

Freut mich, dass es noch einen Bastler gibt, der das umsetzt.
Viel Erfolg.

Meine Batterieprognose scheint sich zu erfüllen, meine laufen nun seit Mai 2014 mit dem ersten Satz Batterien (draußen den Winter durch, wo es bitter kalt war)

ext23

Wenn es das mal endlich für panStamps geben würde ;-) Ich hab hier auch noch eine Hand voll HC-SR04 rumliegen die eigentlich in meine Wassertonnen sollen.
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Franz Tenbrock

Hallo
die Füllstandmessung interessiert mich sehr
habe aber noch keinen Jeelink, würde ihn auch gerne mit Ardunio selber bauen wie in Gummibär Techblog beschrieben

http://blog.gummibaer-tech.de/jeelink-868-mhz-selbstbau/

Passende Ardunios sollten in den nächsten Tagen bei mir eintreffen. Der Funkchip ist hier in Deutschland zu bekommen und einen SRF04 hab ich noch
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

oli82

Hi HCS.

Irgendwie klappt bei mir die Übertragung der Messwerte nicht.
Da ich bisher noch keinen HC-SR04 habe, hab ich die Schaltung mal mit einem Arduino Nano, RFM12B und Temp Sensor aufgebaut.

Laut meinem Jeelink stimmt die CRC Berechnung nicht, denn ich sehe keine Werte in FHEM:

Sender
Values: -1.0 cm   20.00 C   11.87 V
Sent with 17241
4968 ms powered


Empfänger:
End receiving, HEX raw data: B8 A2 7D DF 9A E0 68 91 7 3E B9 D4 B9 40 FE 68
## CRC FAIL ##
No valid Temperature: 104.50
No valid Level: 513.50


Kannst du mir da weiter helfen?
Danke

HCS

Bin nicht sicher, ob das ohne Sensor, also wenn ein negativer Level ansteht, funktioniert, mit der CRC-Berechnung.
Kannst ja mal zum Testen den default von -1 auf etwas positives ändern, ob es dann geht.