Zu einer automatischen Pool-Dosierung fehlten mir noch die Mess-Elektroden und vor allem das, womit ich sie auslesen und die Werte zu FHEM übertragen kann. In FHEM kann dann die ganze Dosierlogik stattfinden und die Dosierpumpen entsprechend geschaltet werden. Das Auslesen von feinen elektrischen Spannungen auf den ph-/Redox-Elektroden ist nicht trivial. Es gibt auf dem Markt kaum fertige Geräte mit Netzanbindung, um ph/ORP-Werte auszulesen. Ich habe mich daher für einen Eigenbau mit Arduino entschieden und in den Wintermonaten wochenlang dran geschraubt.
Arduino-Uno-Clones und passende Erweiterungsmodule dazu bekommt man bei Aliexpress für sehr kleines Geld. Es gibt im Angebot auch ein ph-Verstärker-Modul mit einer BNC-Buchse für ca. 16 USD inkl. Versand, was ich letztendlich auch genommen habe. In diesem Modul werden die paar Millivolt, die eine Sonde produziert, in eine am Arduino-Analogeingang messbare Spannung von 0 bis 5 Volt umgewandelt (Anschlusspin Po). In dem Modul ist vermutlich auch etwas für eine Temperatur-Bereinigung des ph-Wertes verbaut (Pins To und Do). Wie das genau funktioniert, konnte ich jedoch nicht rausfinden. Es gibt auch andere ph-Module für Arduino, die etwas mehr kosten, z.B. von Atlas Scientific, von Phidgets oder von Dfrobot. Alle haben ohne weitere Zusätze wahrscheinlich ein Problem: Die fehlende galvanische Trennung. Spätestens sobald man zwei Elektroden an einem Arduino anschließt und im gleichen Wasser hält, liefern sie beide Schrottwerte, da die Ströme zwischen den Elektroden fließen. (Wobei ein Blogger aus Frankreich mit Phidgets-Modulen das irgendwie geschafft hat, ph- und ORP-Elektrode an einem Arduino zu betreiben.)
Ein fertiges Verstärker-Modul mit galvanischer Trennung habe ich nicht gefunden. Es gibt ein-zwei Projekte im Internet, aber nichts lieferbares. Einen Messverstärker selbst zusammenzulöten, erschien mir zu aufwändig, zumal ich nur rudimentäre Kenntnisse der Elektronik habe. Deswegen habe ich die galvanische Trennung so hergestellt, dass ich pro Elektrode einen eigenen Arduino Uno nehme und diesen über einen eigenen linearen Stromwandler auf AMS1117-5.0 Basis und einen isolierenden DC-DC-Wandler mit Strom versorge (ich habe die Murata-Module NME0505SC mit 1 Watt genommen). Somit wird jeder Arduino Uno als Ganzes schon in der Stromversorgung galvanisch entkoppelt. Die Versorgungsspannung muss übrigens auch sehr stabil sein, da sonst die analogen Readings des Arduino, die die Versorgungsspannung als Referenz nehmen, driften. Deswegen ist jeweils ein eigener linearer Regler vorgeschaltet.
Die beiden Arduinos mit Verstärker-Modulen machen bei mir wenig anderes als die analogen Eingänge zu lesen, die Werte zu glätten und mit den eigenen sehr günstigen 433MHz-Radio-Modulen rauszufunken. So bleibt die galvanische Trennung intakt. Eine Temperatur-Kompensation habe ich gar nicht implementiert, denn diese ist im ph-Bereich um 7.0 eh kleiner als jede Messtoleranz. In den Mess-Arduinos habe ich auch die Kalibrierungslogik für die Elektroden einprogrammiert. Für den eigentlichen Kalibrierungsvorgang haben diese Module zwei Taster (für Kalibrierpunkte ph 7.0 und ph 4.0 – man kann natürlich beliebige andere Werte einprogrammieren) bzw. einen Taster (Kalibrierpunkt ORP 465 mV) bekommen. Somit ist die Kalibrierung super einfach: Die Elektrode in die Pufferlösung reinhalten, bis sich der Wert stabilisiert, und einmal drücken. Einen Redox-Verstärker habe ich übrigens mit einer kleinen Modifikation aus einem ph-Verstärker gemacht. Die ph-/ORP-Sonden liefern ja beide Millivolts, nur in etwas unterschiedlichen Ranges.
Ein dritter Arduino Uno empfängt bei mir dann auf 433MHz die ph- bzw. Redox-Werte von den beiden Mess-Arduinos. An der Nummer Drei werden drahtgebunden auch andere Sensoren angeschlossen: für Druck, Temperatur und Durchfluss. Mit einem Ethernet-Shield für Arduino wird hier auch ein minimalistischer Webserver aufgemacht und FHEM kann alle Werte ablesen. Für eine stabile Internet-Verbindung musste ich dem W5100-Chip auf dem Ethernet-Shield die Beine Nr. 64 und 65 durchschneiden. So läuft er fest auf 10 Mbit/Fullduplex und nicht im Auto-Modus, was zumindest mit meiner Fritzbox 7390 oft zu Aussetzern geführt hatte. An diesem dritten Arduino habe ich auch ein I2C 20×4-LCD-Display angeschlossen, wo die Werte permanent visialisiert werden.
Ein großes praktisches Problem schon beim Messen im Glas Wasser war das Rauschen. Vor allem die Schaltnetzteile induzieren Störungen auf die sensiblen Elektroden und hauptsächlich auf ihre Kabel. Die abgelesenen Werte zeigen im Ergebnis eine große Streuung von bis zu einigen Prozent. Ich habe dann per Zufall rausgefunden, dass die Streuung wesentlich geringer ausfällt, wenn man den Minuspol des Gleichstromausgangs vom Netzteil einfach erdet. Zum Befestigen der Komponenten im Gehäuse hat sich eine transparente 2mm-PVC-Platte als sehr praktisch erwiesen. Ein Gehäuse mit transparentem Deckel erspart Ausschnitte für LCD. Bei Fragen zu Details und Verbesserungsvorschlägen immer gern.