Die Wasserqualität kann durch eine Vielzahl unterschiedlicher Sensoren gemessen werden. Einer der gebräuchlichsten Sensoren ist ein TDS-Sensor, der die Konzentration gelöster Feststoffe (Salze und Mineralien) in Wasser misst und sehr einfach mit einem ESP32 oder ESP8266 ausgelesen werden kann. Die TDS-Konzentration wird üblicherweise in Teilen pro Million (ppm) oder Milligramm pro Liter (mg/L) gemessen und je nach Anwendung ist ein anderer Wert erstrebenswert. Während bspw. der TDS-Gehalt für Trinkwasser weniger als 500 ppm betragen sollte, sollte der TDS-Gehalt in Hydrokultursystemen mit Fruchtpflanzen wie Tomaten und Gurken bei etwa 1000-1200 ppm liegen. Indem wir diese Werte regelmäßig messen, können wir reagieren und z.B. Nährstoffe hinzufügen.
In diesem Tutorial schauen wir uns an, wie wir den ESP32 einen TDS Sensor zur Bestimmung der Wasserqualität auslesen können und diesen Wert in Home Assistant via ESPHome anzeigen lassen und anschließend bspw. darauf reagieren können.
Benötigtes Zubehör zur Messung der Wasserqualität
Der TDS Sensor kommt mit einem kleinen PCB, welches wir an den ESP32 anschließen. Zusätzlich zum analogen Wert müssen wir auch noch die Wassertemperatur messen. Dafür nehmen wir einen wasserfesten Temperatursensor.
Insgesamt benötigen wir folgende Teile:
- ESP32 (alternativ einen ESP8266)
- TDS Sensor
- Temperatursensor: DS18B20 (wasserdicht)
- Raspberry Pi (mit Home Assistant installiert)
- Jumper Kabel
- Widerstände (4,7k Ω)
- Micro-USB-Kabel für den ESP
- Breadboard
Falls du den TDS Sensor mit einem Raspberry Pi nutzen willst, so ist dies ebenfalls möglich, da wir einfach nur das analoge Signal auslesen müssen. Den DS18B20 lesen wir über 1-Wire Protokoll aus.
Generelles zur Bestimmung der Wasserqualität
Es gibt eine Vielzahl von Sensoren, mit denen wir die Wasserqualität am ESP (oder Raspberry Pi) messen können. Zu den am häufigsten verwendeten Sensoren gehören Folgende:
- TDS-Sensoren messen die Konzentration gelöster Feststoffe in Wasser. Sie verwenden typischerweise die elektrische Leitfähigkeit, um die gesamte Anzahl (ppm) der gelösten Feststoffe zu messen, die in einer Flüssigkeit vorhanden sind.
- pH-Sensoren werden verwendet, um den Säure- oder Alkaligehalt von Wasser zu messen. Ein pH-Sensor besteht typischerweise aus einer Glaselektrode, welche ein analoges Signal abgibt, welches wir mit einem ESP oder Raspberry Pi messen können.
- Ein Leitfähigkeitssensor misst die elektrische Leitfähigkeit des Wassers. Dieser Wert kann zur Messung der Ionenkonzentration im Wasser verwendet werden und ist eng mit der TDS-Messung verbunden.
- Mit Temperatursensoren können wir die Temperatur des Wassers messen, was auf das Vorhandensein einer thermischen Verschmutzung hinweisen kann.
- Gelöster Sauerstoff: DO-Sensoren werden verwendet, um die Menge an im Wasser gelöstem Sauerstoff zu messen, was für Wasserlebewesen wichtig ist.
- Chlorsensoren werden verwendet, um die Chlormenge im Wasser zu messen, was für die Desinfektion und Hygiene wichtig ist.
- Mit Trübungssensoren messen wir die Trübung oder Klarheit von Wasser. Die Trübung ist ein indirektes Maß für die Menge an Schwebstoffen im Wasser.
- ORP-Sensoren (Oxidations-Reduktions-Potential) messen das Potenzial von Wasser, Elektronen entweder aufzunehmen oder abzugeben. Dies ist nützlich bei der Bestimmung der Wasserqualität, da es einen Hinweis auf die Fähigkeit des Wassers gibt, Leben zu erhalten.
Wichtig zu beachten ist, dass einige der oben genannten Sensoren möglicherweise mehr als einen Parameter messen und mit anderen Instrumenten kombiniert werden können, um ein vollständiges Wasserqualitätsüberwachungssystem zu bilden. Die Auswahl der Sensoren hängt von den spezifischen Wasserqualitätsparametern ab, die gemessen werden müssen, und von der Anwendung, für die das Wasser verwendet wird.
Manche Sensoren, wie unser TDS-Sensor, sind ausschließlich in Kombination mit anderen Sensoren (in unserem Fall mit einem Wassertemperatursensor) aussagekräftig.
Aufbau und Verkabelung des ESP32 TDS Sensors
Wir fahren mit dem Anschluss der Sensoren an unserem ESP32 bzw. ESP8266 fort. Beide Sensoren werden an 3.3V (rot) und GND (schwarz) des ESP angeschlossen. Dazu schließen wir den Datenpin des Temperatursensors an GPIO13 (grün) an (hier geht es zum Pin-Layout des ESP32). Zusätzlich setzen wir einen 4,7k Ω Pull-Up Widerstand (Anschluss an 3.3V).
Nun kommt der TDS Sensor an die Reihe: Der Datenpin (Gelb) wird an einen freien ADC Pin angeschlossen. Du kannst für beide Sensoren auch jeden anderen freien kompatiblen GPIO wählen.
Ebenso kannst du natürlich auch einen ESP8266 nutzen. Der Nachteil dabei ist aber, dass der ESP8266 lediglich einen ADC Pin hat und daher z.B. nicht in Verbindung mit einem pH-Sensor genutzt werden kann. Die Pins kannst du entsprechend im Code anpassen.
TDS Sensor Code für den ESP32 in ESPHome
In ESPHome wechseln wir zu den Konfigurationen und erstellen eine neue Konfiguration. Die generierte YAML Datei erweitern wir mit folgendem Code:
# ... dallas: - pin: GPIO13 sensor: # Temperature In °C - platform: dallas address: 0x8b041783a3fcff28 name: "Water Temperature" id: probe01 accuracy_decimals: 0 unit_of_measurement: "°C" # Raw TDS Reading - platform: adc pin: GPIO36 name: "TDS 01 Raw" attenuation: 6db # only for ESP32 id: tds01_raw update_interval: 10s unit_of_measurement: "v" accuracy_decimals: 3 internal: true # only for ESP8266 # filters: # - multiply: 3.3 # Temperature Compensated Voltage - platform: template name: "TDS 01 TCV" id: temp01_comp_v unit_of_measurement: 'v' accuracy_decimals: 3 lambda: 'return ((id(tds01_raw).state) / (1 + (0.02 * ((id(probe01).state) - 25.0))));' update_interval: 10s internal: true # Temperature Compensated TDS - platform: template name: "TDS-01" id: tds01_55g icon: "hass:water-opacity" unit_of_measurement: 'PPM' accuracy_decimals: 0 lambda: return (133.42*(id(temp01_comp_v).state)*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) - 255.86*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) + 857.39*(id(temp01_comp_v).state))*0.5;
Erklärung zum Code:
- Die Adresse (bei mir:
0x8b041783a3fcff28
) des DS18B20 wird bei dir abweichen. Diese steht in der Konsole, sobald du den Temperatursensor angeschlossen hast und den ESP startest. - Falls du einen ESP8266 verwendest, so musst du die Zeile
attenuation: 6db
auskommentieren und die unteren Zeilen einkommentieren. Der ESP8266 reguliert den analogen Wert nämlich in einen Bereich von 0 bis 1V, statt bis 3.3V. Daher multiplizieren wir den ausgelesenen analogen Wert mit 3.3. internal: true
besagt, dass wir diesen Wert nicht nach außen geben – er kann also nicht auf dem Dashboard angezeigt werden.- Statt einer eigenen Kalibrierung (mit destilliertem Wasser), nutzen wir die unten dargestellte Formel, um den TDS Wert zu bestimmen.
Anschließend können wir die Werte entweder direkt per Konsole ablesen, oder wir wechseln zu „Settings“ → „Devices & Services“ → „ESPHome“ und wählen dort den Namen unseres ESP’s aus. Sofern du beide Sensoren ins Wasser tauchst, sieht die Ausgabe so aus:
Home Assistant Dashboard einrichten
Zu guter Letzt wollen wir den Wert noch auf dem Dashboard von Home Assistant anzeigen. Dazu kannst du auf deinem Dashboard eine neue Kachel erstellen und ihr folgenden Inhalt geben (passe die Entitäten ggf. an):
square: true columns: 2 type: grid cards: - type: gauge entity: sensor.tds_01 unit: PPM name: TDS min: 0 severity: green: 100 yellow: 400 red: 0 needle: true max: 1000 - type: gauge entity: sensor.probe_01 needle: true severity: green: 15 yellow: 30 red: 0 max: 35 min: 10
Das Ergebnis sieht dann folgendermaßen aus: