Forum: Mikrocontroller und Digitale Elektronik Wasserzähler detektieren mit TCRT5000


von Pete K. (pete77)


Lesenswert?

Hallo,
ich versuche gerade meinen Wasserzähler mit einem TCRT5000 Modul von 
Aliexpress zu detektieren.

Leider scheint der TCRT schon die Glasscheibe als Relfexion zu erkennen 
und schaltet daher sofort durch.
Abstand Sensor->Glasscheibe ca. 2mm, bis zum Rädchen in der Wasseruhr 
noch einmal geschätzte 4mm.

Hat jemand so etwas schon einmal gemacht? Gibt es Erfahrungen?

Wasserzähler ist ein Sensus620, das Modul ist das hier: 
https://www.hotmcu.com/ir-reflective-sensor-tcrt5000-p-184.html

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hälst Du das Ding senkrecht auf die Glasscheibe? Versuchs mal gekippt, 
so daß das von der Scheibe reflektierte Licht nicht wieder in der 
Reflexlichtschranke landet.

von Börge (Gast)


Lesenswert?


von Pete K. (pete77)


Lesenswert?

So, ich habe es jetzt hinbekommen, dass die silberne Scheibe detektiert 
wird. Allerdings werden manchmal ein paar (10) Liter zuviel gezählt. 
Aber nicht immer.
Getriggert wird auf die steigende Flanke.

Auswertung erfolgt auf einem Raspi mit:
1
#!/usr/bin/python
2
import time, sys, os
3
import datetime
4
import MySQLdb
5
import RPi.GPIO as GPIO
6
7
8
Counter = 0
9
Sendout = 0
10
timeSend=time.time()
11
channel=25   # GPIO Pin
12
13
GPIO.setmode(GPIO.BCM)
14
15
16
GPIO.setup(channel, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
17
18
def writeDatabase():
19
        global Counter
20
21
        db = MySQLdb.connect("hostname", "xxx", "yyy", "zzz")
22
23
        stmt="INSERT INTO wasser (Liter) VALUES(" + str(Counter) +  ")"
24
        cur = db.cursor()
25
        cur.execute(stmt)
26
        db.commit()
27
        Counter=0
28
        db.close()
29
30
        return
31
32
def Interrupt(channel):
33
        global Counter
34
35
        Counter = Counter + 1
36
        #print "Counter " + str(Counter)
37
38
39
40
GPIO.add_event_detect(25, GPIO.RISING, callback = Interrupt, bouncetime = 400)
41
42
try:
43
        while True:
44
                time.sleep(0.1)
45
46
                # save every quarterly hour to the database
47
                if (time.time()-timeSend)>900:
48
                        writeDatabase()
49
                        timeSend=time.time()
50
51
52
except KeyboardInterrupt:
53
        GPIO.cleanup()
54
        print "\nBye...\n"

: Bearbeitet durch User
von Börge (Gast)


Lesenswert?

und wie hast Du nun den TCRT5000 angebracht ?
Zeig doch mal ein Bild bitte...

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Pete K. schrieb:
> ich versuche gerade meinen Wasserzähler mit einem TCRT5000 Modul von
> Aliexpress zu detektieren.
> Leider scheint der TCRT schon die Glasscheibe als Relfexion zu erkennen
> und schaltet daher sofort durch.
> Abstand Sensor->Glasscheibe ca. 2mm, bis zum Rädchen in der Wasseruhr
> noch einmal geschätzte 4mm.
> Wasserzähler ist ein Sensus620, das Modul ist das hier:
> https://www.hotmcu.com/ir-reflective-sensor-tcrt5000-p-184.html
Wenn du das Modul statisch, so wie es ist, verwendest, reagiert es auch 
auf Umgebungslicht und statische Reflexe.

Eine Möglichkeit ist es, das Signal zu differenzieren und dann eine 
definierte Triggerschwelle zu setzen. Das siehst du nur noch die 
Hell-Dunkel-Änderungen von der drehenden Scheibe.
Allerdings kommt es dann auch möglicherweise zu Zählverlusten, falls der 
Zähler bei sehr geringen Verbräuchen nur schleicht.

Die statische Messung kannst du auch machen, dann solltest du den Sender 
vom Empfänger aber besser entkopplen (mit vorgesetzten Blenden bzw. 
Röhrchen.), so daß tatsächlich nur der Reflex von der Zählscheibe auf 
die Empfangsoptik fällt. Der Sendestrahl kann auch so eingegrenzt 
werden, dass auf dem recht kleinen Zaählrad nur ein kleiner lichtpunkt 
projiziert wird.

Aber auch da kann es zu Fehlzählungen kommen, weil die Schaltung keine 
Hysterese hat. Diese kannst du aber auch programmtechnisch einführen.
Gruß Öletronika

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Pete K. schrieb:
> Getriggert wird auf die steigende Flanke.
Und wie sieht das Signal jetzt aus?

Ein Interrupt ist für so ein schnarchlangsames Signal der vollkommen 
falsche Ansatz. Oder wieviel tausend(!) Impulse erwartest du pro 
Sekunde(!)?

: Bearbeitet durch Moderator
von Pete K. (pete77)



Lesenswert?

Lothar M. schrieb:
> Ein Interrupt ist für so ein schnarchlangsames Signal der vollkommen
> falsche Ansatz. Oder wieviel tausend(!) Impulse erwartest du pro
> Sekunde(!)?

Aber das ist so schön einfach mit dem Interrupt ;-)

Ok, ich werde es mal mit GPIO Auswertung versuchen.

Anbei zwei Bilder vom Aufbau sowie der "Messung" von gestern und heute. 
Der Deckel ist bis auf ca. 1/2 cm geschlossen.

von Pete K. (pete77)


Lesenswert?

Kurze Rückmeldung: Mit GPIO-Polling scheint das besser zu funktionieren. 
Aber ein paar Liter zuviel zählt er manchmal schon noch. Ich werde mal 
die Klappe noch etwas mehr abdichten (obwohl der Sensor ja einen 
daylight blocking Filter hat).

von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?

Daylight blocking Filter ist gut und schön.
Aber technische Lampen werfen Ihre 50 und 100Hz rein.

von Pete K. (pete77)


Lesenswert?

Hier ist noch eine weitere Möglichkeit mit induktivem Näherungsschalter:
http://blog.steveundkristin.de/2015/09/13/fhem-wasserzaehler-auslesen-mit-hilfe-von-mysensors/

von Sven B. (scummos)


Lesenswert?

Lothar M. schrieb:
> Pete K. schrieb:
>> Getriggert wird auf die steigende Flanke.
> Und wie sieht das Signal jetzt aus?
>
> Ein Interrupt ist für so ein schnarchlangsames Signal der vollkommen
> falsche Ansatz. Oder wieviel tausend(!) Impulse erwartest du pro
> Sekunde(!)?

Hö, aber wieso soll man jetzt keinen Interrupt nehmen, nur weil das 
Ereignis nicht so oft passiert? Das leuchtet mir nicht ein. Wenn ich in 
mein Notebook ein USB-Gerät einstecke, generiert das auch einen 
Interrupt, und das passiert vielleicht dreimal am Tag ...

Es mag aus anderen Gründen (Rauschen) in dem Fall nicht die beste Lösung 
sein, ok.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Pete K. schrieb:
> Aber das ist so schön einfach mit dem Interrupt ;-)

Interrupt ist schon der richtige Weg, aber nicht vom Sensor, sondern vom 
Timer. Im Timerinterrupt liest du dann den Zustand vom Sensor ab.

von Harlekin (Gast)


Lesenswert?

Pete K. schrieb:
> Getriggert wird auf die steigende Flanke.

Zur Filterung könnte man die Zeit zwischen steigender und fallender 
Flanke messen. Ist diese zu kurz, werden die Pulse als Störung 
ignoriert. Ist in der Flankendetektion bereits ein Filter integriert?

Liesse sich ein Wake Up mit den Flanken auslösen?
Während der meisten Zeit fliesst kein Wasser. Ausser der Spülkasten 
leckt.

von Pieter (Gast)


Lesenswert?

moin moin,

habe hier ReflexKoppler EE-SPY402 von omron liegen.
Da die Dinger sehr empfindlich sind, Sende-Empfänger sind mit Cu-Blech 
abgeschirmt.
Ev. mal in diese Richtung prüfen.

Würde mich zum auslesen des Gaszählers interessieren.

von Tom (Gast)


Lesenswert?

Hi,

Man kann den Wasserzähler sehr gut mit einem billigen Lasermodul und 
Fotodiode/transistor auslesen. Der Laserpunkt wird auf das Flügelrad 
gerichtet. Je nachdem ob das Flügelrad oder der Zwischenraum getroffen 
wird wird das ganze Zählergehäuse weniger oder mehr ausgeleuchtet. Die 
Fotodiode muss gar nicht genau ausgerichtet werden. Eine Abdeckung 
schützt vor Fremdlicht.

Ich habe noch ein altes Foto gefunden. Mittlerweile gibt es eine 
3d-gedruckte Version der Halterung für Laser und Diode. Foto liefere ich 
nach.

BG, Tom

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Ahh, das falsche alte Foto ;).

von Thomas H. (flaretom)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

Hier das versprochene Foto.

BG, Tom

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.