Project start: January 2023
EC Sensor
In der Hydroponik sind der PH und EC Wert die wichtigsten Messgrößen zur Einstellung der Nährstofflösung.
Beide möchte ich gerne automatisiert messen. PH Sonden sind jedoch nicht ganz trivial nachzubauen.
Die Elektrische Leitfähigkeit (engl. electrical Conductivity), kurz EC, hingegen kann theoretisch ganz einfach durch den Widerstand zwischen zwei Metallstäben im Wasser bestimmt werden.
Nichts anderes macht das Peaktech 5306 3 in 1 PH-Meter.
Einen einfachen Spannungsteiler zu bauen und eine Gleichspannung anzuelgen ist jedoch nicht der beste Weg.
An einer der Elektroden würde sich langsam durch elektrolyse gasbläschen bilden, die neben anderen polarisationseffekten das Messergebnis verfälschen.
Es ist also eine Wechselspannung notwendig. Ebenfalls sollte die Elektrode aus dem gleichen Grund zwischen den Messungen stromlos gemacht werden können.
Auf
publiclab.org (link down)
publiclab.org (Archive.org) hab ich einen Schalplan für einen EC Sensor gefunden, der genau diese Ideen umsetzt.
Getrennt von der
Dokumentation zur Hydroponik möchte ich den Bau und die Kalibration hier berschreiben.
bhickman hat die Schaltung bereits sehr ausführlich beschrieben. Auch die Kommentare darunter sind für das Verständnis sehr hilfreich.
Kurz Zusammengefasst bildet (in meinem leicht angepassten Schaltplan) R13 bis R16 mit der Probe an R6 einen Spannungsteiler.
An der anderen Seite der Probe liegt eine virtuelle Masse mit 1.65V an, die durch R1 und R2 von einer 3.3V Referenzspannung über einen Opamp erzeugt wird.
Beide Kontakte der Probe lassen sich galvanisch durch ein 5V Relais trennen.
Von einem Microcontroller wird ein 5kHz Rechtecksignal an U1A angelegt welches die Wechselspannung für den Spannungsteiler darstellt.
Die nachfolgende Schaltung gibt die peak to peak Spannungsdifferenz als analoge Spannung aus.
Diese wird dann durch einen ADC digitalisiert.
Wenn das Relais nicht angezogen ist befindet sich ein Kalibrationswiderstand Rcal1 anstelle der Probe in der Schaltung.
Der Spannungswert davon kann zur Kompensation von Temperatureinflüssen auf die Opamps oder anderen Teilen des Signalweges verwendet werden.
20230518_conductivity_sensor_schematic.pdf
Ein erster Test mit zwei Edelstahlstangen und etwas Salzwasser zeigt, dass die Schaltung funktioniert.
Als erstes galt es, die Elektroden in einem fixen Abstand und mit definierter Kontaktfläche zum Wasser in ein PVC Rohr einzubauen.
Die Elektroden bestehen aus 2.5mm Edelstahlstangen in einem Abstand von 5mm (mitte zu mitte) und sind 10mm lang.
Das verwendete Kabel war 3-Adrig, weshalb ich einen Widerstand noch mit eingebaut habe. Dieser fand jedoch später keine Verwendung.
Mit 2-Komponentenepoxy wurden die Verbindungsstellen des Kabels mit den Elektroden wasserdicht im 12mm PVC Rohr eingeklebt.
Einen DS18B20 Temperatursensor in wasserdichtem Edelstahlgehäuse habe ich ebenfalls zur einfacheren Montage in so ein PVC Rohr gesteckt.
Nachdem die Messschaltung auf dem Breadboard sich als tauglich erwies wurde sie auf als PCB geäzt. Für so einfache Schaltungen geht das immernoch schneller als sie zu bestellen. Auch, wenn es preislich keinen großen Unterschied mehr macht.
Ein ESP32 misst durch einen ADS1115 16-Bit I2C ADC die Spannung des EC Sensors.
Leider ist es damit nicht getan, denn die Spannung verhällt sich nicht linear zum EC-Wert.
Conductivity-Sensor Git:git.ctdo.de/interfisch/conductivity-sensor
PCB Vorlage:20230518_conductivity_sensor_board_print.pdf
Um diese Kurve zu bestimmen habe ich den Wert des ADC, die Temperatur sowie den EC Wert mit meinem Peaktech 3-in-1 Meter zu verschiedenen konzentrationen NaCl in destilliertem Wasser notiert.
Das Peaktech EC-Meter wurde zuvor natürlich selbst kalibriert.
Die Temperatur der Lösung ist wichtig, da die Leitfähigkeit von Salzwasser mit zunehmender Temperatur steigt.
Diese habe ich versucht auf 25°C über die Messreihe konstant zu halten.
Welche Konzentration welchem EC Wert entspricht kann unter
www.researchgate.net/.../conductivityvsconcentrationNaCl25degress-4.pdf nachgeschlagen werden.
Zum Aufbau:
In einem 500mL Becherglas hängen das Peaktech EC-Meter, der DS18B20 Temperatursensor und die DIY EC-Probe.
Temperatur und ADC Wert der EC-Probe werden über den ESP32 auf Knopfdruck an einen Laptop übertragen. Der EC-Wert muss jeweils manuell abgelesen und notiert werden.
Das Becherglas mit einem Rührfisch steht auf einem Magnetrührer, der langsam die Lösung bewegt und eine einheitliche Konzentration im Behälter erzeugt.
Begonnen wird mit etwa 300mL destilliertem Wasser.
Ein Messwert wird erfasst. Nach und nach wird eine 3000mg/L NaCl Lösung Tropfenweise hinzugegeben und weitere Messungen aufgenommen.
Wichtig war es mir hierbei 20 bis 30 Messungen in einem Bereich von 0 bis 5000µS/cm zu bekommen. Zum oberen Ende hin habe ich höhrere Konzentrationen hinzugegeben.
Die letzte Messreihe kann hier eingesehen werden:
20230509_NaCl_manuell.csv
Geplottet sieht es recht vielversprechend aus. Die blauen Punkte sind die Messpunkte. Auf der X-Achse der ADC Wert, die y-Achse zeigt den EC-Wert des EC-Meters an.
Approximiert habe ich diese Kurve durch ein Polynom. Die finale Approximation "adcTest" ist in Orange dargestellt.
Ein
Python Script automatisierte den Prozess durch verwendung von curve_fit aus scipy.
Hier habe ich mir die Approximationen von Polynomen verschiedener Grade angesehen und das kleinste Polynom, welches den Bereich ab adc=6000 bzw. EC 500µS/cm gut darstellt, verwendet.
Das Polynom 5. Grades gefiel mir dabei sehr gut: f(x) = 1.8535134644431135e-16*x^5 -5.4460235093798435e-12*x^4 +5.98673062873e-08*x^3 -0.000279737392438965*x^2 +0.5836096440900665*x^1 -323.68589929771457*x
Dieses kam in den Code des
Hydroponic-Controller. Unterhalb von adc=6000 (0µS/cm bis etwa 500µS/cm) wird linear approximiert.
Wie zuvor geschrieben ändert sich die Leitfähigkeit der Flüssigkeit mit zunehmender Temperatur.
Die im Wasser vorhandenen Nährstoffe, deren Konzentration mit über den EC-Wert annähern, bleibt jedoch gleich.
Hierzu kann die Specific Conductance "SC" errechnet werden, welche den equivalenten EC bei 25°C angibt. Für Salze ist eine lineare korrektur von 1.5% bis 2.2% pro Grad Celsius ausreichend.
Mit der Formel: (Quelle:
aqion.de)
EC = [ 1 + a * (t – 25) ] * SC
Umgeformt nach SC:
SC = EC / [ 1 + a * ( t - 25 ) ]
und a = 0.02 berechne ich diesen Wert gleich mit.
Die Platine des EC Sensor zusammen mit dem ESP32 fand in einer Brotdose Platz und misst alle 10 Minuten den EC-Wert der Nährstofflösung des
Hydroponiksystems
Nach etwa zwei Monaten hatten die Edelstahlelektroden eine bräunliche Ablagerung gebildet.
Die gemessene Leitfähigkeit stieg Tag für Tag.
In der oben verlinkten Anleitung wurden Graphitstäbe verwendet. Aus Kosten- und Verfügbarkeitsgründen hatte ich mich für Edelstahl entschieden, in der Hoffnung, dass dies auch funktioniert.
Um auszuschliessen, dass der Edelstahl das Problem ist habe ich mir Graphitstäbe mit 2.5mm Durchmesser online bestellt und den Sensor umgebaut.
Eine Neukalibration war damit nötig, konnte aber wie oben beschrieben erneut durchgeführt werden.
Der Sensor mit Graphitstäben hat den Rest von 2023 ohne Probleme durchgehalten und, soweit ich beurteilen kann, korrekt gemessen. Leider ist er mir beim Umbau in 2024 dann abgebrochen.
Darauf hin habe ich zwei neue EC Sensoren für das
Horizontale NFT und das
DB System gebaut.
Damit die Elektronik etwas besser vor Regen geschützt ist habe ich ihr ein bessere Gehäuse spendiert.
Hier sind auch doppelt so viele Kabel zu sehen wie vorher, da dieser Messcontroller zwei Hydroponiksysteme misst.
Das hat sich allerdings als fehleranfällig erwiesen, weshalb ich später zwei separate Schaltungen aufbauen werde.
Hydroponic Controller
Da inzwischen ein Dutch Bucket System für Tomaten auf dem Balkon hinzukam wollte ich dessen separates Reservoir ebenso loggen.
Am einfachsten ist es, die gleiche Schaltung nochmal aufzubauen. So lassen sich die Systeme später auch räumlich separieren, da der Controller aufgrund der kurzen Kabelwege, insbesonders für I2C, nah am Reservoir positioniert sein muss.
20240820_hydroponic-controller_schematic.pdf
Der ESP32 ist hier ein ESP32-S3-DevKitC-1 (N16R8) Devboard, welches auf das PCB aufgesteckt wird.
Die Schaltung der EC Probe hat bislang gut funktioniert und wurde unverändert übernommen. Lediglich die Opamps wurden durch ihre SMD Variante ersetzt.
Weiterhin ist der ADS1115 ADC IC vom Devboard direkt auf das PCB gewandert. Hier war es am einfachsten das Bauteil mitsamt Kondensatoren und Induktivitäten vom Devboard abzulöten und auf der neuen Platine zu verwenden.
Der ADC kommt in einem TSSOP-10 Package daher mit 0.5mm Pinpitch, sodass das PCB diesmal lieber bestellt wurde.
Vorgesehen sind folgende Sensoren:
- Temperatur DS18B20 (1-Wire)
- Flow YF-S201 (Frequenz)
- Wasserstand VL53L0X (I2C)
- EC (Analog)
Die drei bislang unbenutzen Analogeingänge des ADC sind ebenfalls durch Schraubklemmen nutzbar.
Das PCB ist an die Maße des
Polycarbonat Gehäuses (122 x 120 x 55 mm, IP66, Lichtgrau, Glasklarer Deckel) angepasst.
Durch Abstandshülsen unter der Platine sind die USB-C Buchsen des ESP nutzbar, ohne den ESP herausnehmen zu müssen.
12V Spannung kommen über einen XT60 Stecker. Da runde Löcher einfacher zu bohren sind als rechteckige ist er in einem runden Einbauhalter eingelassen.
Frecad Projekt:
20240729_xt60_mount_round.FCStd
3D Modell:
20240729_xt60_mount_round.step
Die Kabel zu den Sensoren werden durch PG Verschraubungen wasserdicht durchgeführt
Files