Wasseruhr anbinden

Begonnen von Edi77, 01 Mai 2017, 03:21:53

Vorheriges Thema - Nächstes Thema

Haecksler

Zitat von: UweH am 28 Mai 2017, 16:11:21
Doch, mit einer Laser-Diode. Hab ich gefühlt schon 10x erwähnt. So mache ich das.

Du hast es bistimmt schon irgendwann mal erwähnt, aber darf ich trozdem nochmals fragen, was du für eine Diode (Leistung & Wellenlänge) im Einsatz hast.
Dank!

Edi77

#16
Hast du auch noch einen Link zur Verwendung der Hardware?
Nicht nur die verwendete Diode ist interessant sondern auch mit welche m Sensor die Abtastung erfolgte.
Master FHEM 6 als VM auf ESX Ubuntu 20.04 LTS mit MAXCube/MAX!/FS20|TabletUI|Flightradar|Tasmota|TTN Lora|CCU3 HomematicIP|RPi mit GammaScout|MQTT EasyESP 8266|LuftdatenInfo|deCONZ HUEDev|probemon|Siemens Logo|P4D|3D PRINTER RAISE3D


Dietmar63

Diesen Link habe ich hier noch nicht gesehen :

https://forum.fhem.de/index.php/topic,47676.0.html


Dirk und Trilu haben leider wenig Zeit.

Für die Software kann man bestimmt die Asksinpp/Asksin++ von papa verwenden.
Beispiele auf denen man aufsetzen kann hat er genug.

Es gibt inzwischen sogar eine eigene hardware(papa) , die als Tür Fensterkontakt Sensor konzipiert ist, die aber auch für andere Sachen genutzt werden kann.

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

roedert

#19
Das Thema ist zwar schon ein wenig alt .... aber da ich momentan auch dran bin und eine ganz gute Lösung gefunden habe, einige Anmerkungen.
Nach diversen Anleitungen im Internet habe ich eine ganz gute Lösung gefunden: mir 2 hellen grünen LEDs wird die Wasseruhr beleuchtet, ein Fototransistor erkennt dann den vorbeilaufenden roten Zeiger. Trick ist es, den Fototransistor in ein ca 3cm langes dünnes Rohr (3mm Innnendurchmesser) zu setzen - somit werden die Streuungen umgangen. Ein kleiner Arduino dahinter wertet die Messwerte aus und generiert ein sauberen Impuls. Anbei mal ein Plot der aufgezeichneten Messwerte. Trotz der Streuungen im Messwert ist ein sauberes Signal erkennbar.
Bei Interesse gebe ich gerne mehr Infos inclusive der Links. Ist alles nicht auf meinem Mist gewachsen, sondern aus mehren Quellen aus dem Internet zusammengesammelt und dann "optimiert"

Octopus180

Hallo roedert,

Kannst du das ganze genauer erklären und mehr Informationen geben. Danke

roedert


Octopus180

Danke, Fotos wären super

roedert

Hier eine kleine Liste der Änderungen gegenüber weiter oben verlinkten Anleitungen:
- komplette Scheibe die straff in der Wasseruhr sitzt mit Ablesemöglichkeit des Zählerstandes und der ersten Nachkommastelle
- 2 grüne helle LEDs (hell, nicht die Standrad-LEDs) ein wenig schräg links und rechts des "Sensorrohres", die den Zeiger gut ausleuchten
- durch die helle Beleuchtung spielt normales Umgebungslicht kaum eine Rolle
- Reset-Taster am Arduino nano entfernt, da der mit dem Optokoppler auf der aufgesetzten Platine im Weg war
- die LEDs habe ich wegen dem etwas höheren Strom direkt an 5V abgeklemmt statt an den Arduino-Ausgang 2

roedert

Nachtrag:
Nachdem der Testaufbau abgebaut und das "Fertiggerät" nun installiert ist, gab es doch einige Probleme.
Am Computer angeschlossen hat das Teil prima funktioniert und über den Arduino-Plotter konnte man auch prima "tunen". Als ich es aber nun mit einem USB-Netzteil betrieben habe, war die Erkennung nicht mehr so gut - evtl. sind die Sensorwerte auch von der Stromversorgung abhängig. Per USB-Netzteil angeschlossen habe ich aber keine Debugmöglichkeit über USB mehr.
Ich werde jetzt also noch etwas an der Software "schrauben". Auf die Schnelle habe ich eine "Selbstkalibrierung" implementiert. Beim Start werden über 1 min der Min und Max-Wert ermittelt, den der Sensor liefert. In der Zeit sollte das Wasser laufen und der Zeiger auch einige Male am Sensor vorbeikommen. Wenn die erfolgreich ist werden aus den Min- und Maxwert die Schwellwert errechnet .... lowLevel = Min+((Max-Min)/4) und highLevel = Max-((Max-Min)/4).
Das sieht momentan ganz gut aus.

Je nach Zeit und Lust werde ich das aber noch "vertiefen":
- Selbstkalibrierung schreibt die ermittelten Wert ins EEPROM, wenn beim nächsten Start die Kalibrierung nicht erfolgreich war, alte Werte aus EEPROM lesen
- Selbstkalibrierung auf Plausibiltät prüfen - Differenz zwischen Min und Max muss genügend groß sein, es müssen mindestens 2-3 Zeigerumdrehungen erkannt worden sein
- statt Arduino Nano einen nodeMCU nehmen mit einfachen Webinterface zu Debugzwecken

Prof. Dr. Peter Henning

Eine Selbstkalibrierung nach dem Stand der Technik funktioniert etwas anders. Dabei wird jeweils gleitend (also immer wieder aktualisiert) der Mittelwert ermittelt. Messwerte oberhalb dieses gleitenden Mittelwertes gelten als "high", solche darunter als "Low". Ist ganz einfach umzusetzen.

LG

pah


roedert

#27
Zitat von: Prof. Dr. Peter Henning am 21 Oktober 2017, 20:24:02
Eine Selbstkalibrierung nach dem Stand der Technik funktioniert etwas anders.

Deshalb war der Begriff Selbstkalibrierung auch in Anführungsstrichen ... es war eine erste "quick and dirty" Lösung. Ich denk mal das ganze wird im Laufe der Zeit noch verbessert und verdient dann vielleicht auch irgendwann diesen Begriff.

andies

Ich hätte großes Interesse an einer genaueren Beschreibung (mit Fotos?).


Gesendet von iPad mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Prof. Dr. Peter Henning

@juergs: da reicht ein Blick ins FHEMWIki, den Code habe ich vor etlichen Jahren dort eingestellt.

https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen

LG

pah