In Projekten wie dem automatischen Gewächshaus ist es wichtig zu wissen, wie viel Wasser z.B. an die Pflanzen zur Bewässerung gelangt. Dazu gibt es eine günstige Variante, die wir mittels der Programmiersprache Python schnell auslesen können und ebenfalls in unser Smart Home System integrieren können. Wir können dazu in beliebiger Frequenz (bspw. jede Sekunde) den Raspberry Pi Water Flow Sensor abfragen, um festzustellen wie viel Liter pro Sekunde oder Minute durchfließen.
Den genauen Aufbau und den Code dazu findest du in diesem Tutorial.
Zubehör
Je nach Projekt wirst du noch einiges weiteres Zubehör verwenden. In diesem Tutorial beschränken wir uns jedoch nur auf das Auslesen des Sensors und gehen daher nur von den absolut notwendigen Teilen aus. Diese sind:
- Raspberry Pi
- Wasserfluss Sensor (Modell YF-S201)
- Jumper Kabel
- optional: Wasserpumpe (Spannung abhängig von der benötigten Leistung)
Um nun einen Schlauch verbinden zu können, brauchen wir noch einen sogenannten Hahnverbinder. Dazu gibt es zwei Möglichkeiten:
- Selber drucken (3D Drucker benötigt) mithilfe dieser Datei
- Kaufen (Halb Zoll)
Anschluss des Wasserfluss Sensor YF-S201 am Raspberry Pi
Im Datenblatt des Sensors finden wir unterschiedliche Angaben, wovon die wichtigsten sind:
- Eingangsspannung: 3.5 – 24V
- Flow Range: 1-30 Liter pro Minute
- F = 7Q (L/MIN)
- Beispielfrequenzen:
- 2L/MIN=16HZ
- 4L/MIN=32.5HZ
- 6L/MIN=49.3HZ
- 8L/MIN=65.5HZ
- 10L/MIN=82HZ
- einen einzigen Signal Pin (Gelb)
Der Anschluss am Raspberry Pi mittels Jumper Kabel ist durch die drei Pins entsprechend einfach:
- GND (schwarz) an GND (Pin 6)
- VCC (rot) an 3.3V (Pin 1)
- Signal (gelb) an GPIO 13 (Pin 33)
Obwohl laut Datenblatt mindestens 3.5V benötigt werden, konnte ich das Signal auch bei 3.3V erfolgreich auslesen. Sollte dies nicht möglich sein, kannst du 5V verwenden und einen größeren Widerstand zwischen Signal Output und GPIO setzen.
Im Prinzip ist auch jeder andere freie GPIO Pin verwendbar:
Nun bleibt noch die Verbindung der Schläuche. Wir benötigen dazu den Hahnverbinder für den Flow Meter, den wir am besten selber drucken können:
Falls du einen anderen Raspberry Pi Water Flow Sensor nutzt, dann achte auf die Beschreibung. Bei dem hier verwendeten, gab es folgende Angaben:
- Innendurchmesser: 11 mm
- Außendurchmesser: 20 mm
Dementsprechend kann ein Teil mittels Tools wie Tinkercad einfach bearbeitet werden. Gleiches gilt übrigens auch für Schlauchanschlüsse: Sofern du Wasserschläuche mit unterschiedlichen Maßen verbinden willst, bieten sich diese Verbindungsstücke zum selber drucken an.
Raspberry Pi Water Flow Sensor per Python auslesen
Wir erstellen nun ein neues Python Skript mit folgendem Inhalt:
sudo nano water_flow.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/usr/bin/python import RPi.GPIO as GPIO import time, sys #import paho.mqtt.publish as publish FLOW_SENSOR_GPIO = 13 #MQTT_SERVER = "192.168.1.220" GPIO.setmode(GPIO.BCM) GPIO.setup(FLOW_SENSOR_GPIO, GPIO.IN, pull_up_down = GPIO.PUD_UP) global count count = 0 def countPulse(channel): global count if start_counter == 1: count = count+1 GPIO.add_event_detect(FLOW_SENSOR_GPIO, GPIO.FALLING, callback=countPulse) while True: try: start_counter = 1 time.sleep(1) start_counter = 0 flow = (count / 7.5) # Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min. print("The flow is: %.3f Liter/min" % (flow)) #publish.single("/Garden.Pi/WaterFlow", flow, hostname=MQTT_SERVER) count = 0 time.sleep(5) except KeyboardInterrupt: print('\nkeyboard interrupt!') GPIO.cleanup() sys.exit() |
Speichere und beende den Editor mit STRG + O, STRG + X.
Nun zur Erklärung des Codes:
- Zeile 1-13: Imports und Definitionen
- Zeile 15-18: Funktion, die aufgerufen wird, wenn sich die anliegende Spannung am GPIO ändert
- Zeile 20: Definition, welche Funktion aufgerufen werden soll (von HIGH auf LOW -> also FALLING)
- Zeile 22: Endlosschleife
- Zeile 24-27: Zunächst „aktivieren“ wir den Counter (
start_counter = 1
) und warten dann eine Sekunde. Danach deaktivieren wir den Counter wieder und berechnen den Flow pro Minute. - Optional (Zeilen 4, 7, 29): Sofern wir das Ergebnis per MQTT senden möchten.
Je nach Datenblatt und Implementierung findet man Werte pro Pulsfrequenz (Hz) von 7.5Q, wobei Q die Flow Rate in Liter/min angibt. Das bedeutet 7.5Hz = 1L/min. Dieser Wert kann abweichen (im verlinkten Datenblatt sind es eher 8 – 8.2Hz) und sollte entsprechend angepasst werden.
Integration ins Smart Home (OpenHAB etc.)
Wer seine Beete bewässert, möchte mit Sicherheit wissen, wie viel Wasser im Laufe der Zeit geflossen ist. Hierfür eignet sich MQTT recht gut, da wir über eine Schnittstelle kommunizieren können. Am Beispiel von OpenHAB ist das besonders einfach, da vieles bereits inklusive ist.
Alles was es dafür braucht ist einen Persistance Layer (Datenbank, in der die Werte gespeichert werden). Anschließend können die Werte in einen vordefinierten Channel per MQTT gesendet werden (Infos dazu hier). Im obigen Codebeispiel sind entsprechende Zeilen auskommentiert.
Zu guter Letzt würde es sich empfehlen das Python Skript in den Autostart zu setzen, damit es regelmäßig Daten sendet.
7 Kommentare
Das ist ein typischer Fall der nicht mal einen ESP12 – Modul vernünftig auslasten würde!
Dieser istsehr viel preiswerter, viel kleiner, braucht viel weniger Strom und lässt sich bequem über die Arduino IDE programmieren.
Die pure Verschwendung !
Da hast du vollkommen Recht, aber normalerweise hat man nicht nur einen Sensor am Raspberry Pi und/oder am ESP. Das Programm kann auch einfach für einen ESP-01 umgeschrieben werden.
wenn es nur um die wassermenge geht hast du recht, aber der raspberry pi macht ja noch mehr und nicht alles lässt sich so einfach mit einem esp12 modul machen.
In der Regel läuft auf dem Raspberry Pi oder einem ESP12 noch mehr als nur das. Als Standalone macht es natürlich auf einem Pi wenig Sinn und ein ESP-01 wäre die bessere Alternative.
LG, Felix
Auf jeden Fall wieder eine schöne Idee zum basteln! Danke dafür.
Hallo ich bin ein absoluter neuling mit dem raspberry und habe zu dem flow sensor eine frage … und zwar würde ich bei meinem Projekt gerne den flow sensor als „schalter“ nutzen soll heißen das bei einer bestimmten durchflussmenge (zb 0.5l) das Signal dann dem Ventil sagt schließen. Ist das auch möglich ? Hier im Artikel geht es wenn ich es richtig verstanden habe ja nur um die Ausgabe der Durchflussmenge.
Mfg Thomas
The program is good but will it work if the flowrate is more than30 L/min and less than 1L/min or it will show some value or error because i cannot find anything about it in the program.