EC-Wert messen mit Arduino UNO
Das ist ein vollwertiger Auszug aus dem Buch Elektronik und Heimautomation DIY.
Die elektrische Leitfähigkeit (EC) verrät, wie gut Wasser elektrischen Strom leitet – und damit, wie viele gelöste Ionen darin schwimmen. Aus diesem Wert lässt sich zusätzlich der TDS-Wert abschätzen, also die Gesamtmenge der gelösten Stoffe. Beides ist mit einem günstigen Sensor und einem Arduino schnell gemessen.
Ganz reines Wasser ist nämlich ein ziemlich schlechter Leiter: Es enthält kaum frei bewegliche Ladungsträger. Erst wenn sich Salze und Mineralien darin lösen, entstehen Ionen, die den Stromfluss überhaupt möglich machen.
Was die Leitfähigkeit über das Wasser verrät
Löst sich ein Salz im Wasser, zerfällt es in positiv und negativ geladene Ionen. Diese werden von Wassermolekülen umhüllt und können sich frei in der Flüssigkeit bewegen. Je mehr solcher Ionen vorhanden sind, desto besser leitet das Wasser – und desto höher fällt der EC-Wert aus.
Wichtig dabei: Die Leitfähigkeit sagt nichts über einen bestimmten Stoff aus. Sie ist ein Summenwert für alle gelösten, elektrisch leitfähigen Teilchen zusammen. Angegeben wird sie meist in Mikrosiemens pro Zentimeter (µS/cm) oder Millisiemens pro Zentimeter (mS/cm). Niedrige Werte stehen für sehr reines Wasser, hohe Werte für viele gelöste Stoffe.
So funktioniert die Messung
Für die Messung tauchen zwei Elektroden in die Flüssigkeit ein. Das Messmodul legt zwischen ihnen eine Spannung an – und damit kommen die gelösten Ionen in Bewegung: Positiv geladene Ionen wie Natrium (Na⁺) wandern zur negativen Elektrode, negativ geladene wie Chlorid (Cl⁻) zur positiven.

Durch diese gerichtete Bewegung der Ladungsträger fließt ein messbarer Strom. Wie stark er ist, hängt direkt von der Anzahl frei beweglicher Ionen ab: Viele Ionen bedeuten viel Strom und eine hohe Leitfähigkeit, ionenarmes Wasser lässt dagegen nur wenig Strom durch. Der EC-Sensor erfasst genau diesen Stromfluss und rechnet ihn in die elektrische Leitfähigkeit um.
Warum die Temperatur mitgemessen werden muss
Die Leitfähigkeit reagiert stark auf die Wassertemperatur. Je wärmer das Wasser, desto schneller bewegen sich die Ionen – und desto höher steigt der gemessene Wert, obwohl sich an der Zusammensetzung nichts geändert hat. Damit Messungen bei unterschiedlichen Temperaturen vergleichbar bleiben, wird der Wert auf eine Referenztemperatur von 25 °C umgerechnet. Pro Grad Abweichung beträgt die Korrektur rund 2 %. Die Temperatur liefert uns dafür wieder ein DS18B20 Sensor.
Technische Details
- Spannung: 3,3 – 5,5 Volt
- Ausgangssignal: 0 – 2,3 Volt
- Genauigkeit: ± 10 % @ 25 °C
- Betriebsstrom: 3 – 6 mA
- Messbereich: 0 – 1000 ppm
- Modulgröße: 42 x 32 mm

Hier findet ihr das benötigte Material!
EC oder TDS – was misst der Sensor eigentlich?
Im Handel werden die meisten dieser Module als „TDS-Sensor“ verkauft. Genau genommen messen sie aber gar nicht die gelösten Stoffe selbst, sondern die elektrische Leitfähigkeit – und berechnen daraus einen geschätzten TDS-Wert. Genau so gehen wir auch im Sketch vor.
TDS (Total Dissolved Solids) steht für die Gesamtmenge aller im Wasser gelösten Stoffe – vor allem Mineralien, Salze und andere Partikel, die man mit bloßem Auge nicht sieht. Während die Leitfähigkeit beschreibt, wie gut die Ionen Strom transportieren, geht es beim TDS-Wert um die reine Konzentration. Angegeben wird er in ppm (parts per million) oder mg/L, wobei 1 ppm ungefähr 1 Milligramm gelöster Stoffe pro Liter entspricht.
Weil ein Großteil der gelösten Stoffe als leitfähige Ionen vorliegt, hängen beide Werte eng zusammen: Steigt die Leitfähigkeit, steigt in der Regel auch der TDS-Wert. Die Umrechnung erfolgt über einen Faktor, der von der Zusammensetzung des Wassers abhängt und typischerweise zwischen 0,5 und 0,7 liegt. Der TDS-Wert bleibt deshalb immer ein Näherungswert.
// ppm = µS/cm × Faktor
// 0.5 = allgemein / NaCl | 0.64 = KCl | 0.67 = gemischte Ionen
#define TDS_FACTOR 0.5Was der TDS-Wert nicht verrät: welche Stoffe im Wasser sind. Zwei Proben mit identischem TDS-Wert können völlig unterschiedlich zusammengesetzt sein. Für eine schnelle Einschätzung der Wasserqualität reicht er trotzdem gut aus – deshalb wird er gerne bei Trinkwasser, in der Aquaristik, bei Hydroponik und in der Wasseraufbereitung eingesetzt.
Richtwerte für Trinkwasser
- 50 – 300 ppmIdeal für Trinkwasser
- 300 – 500 ppmNoch akzeptabel
- 500 – 900 ppmZunehmend belastet
- 900 – 1200 ppmQualitativ schlecht
- über 1200 ppmIn der Regel nicht mehr als Trinkwasser geeignet
Kalibrierung des EC-Sensors
Ohne Kalibrierung weiß der Arduino nicht, welche Spannung zu welcher Leitfähigkeit gehört. Im Sketch gibt es dafür zwei Wege, die über CALIBRATION_MODE ausgewählt werden:
// 0 = Messen | 1 = Kalibrieren mit 1.413 mS/cm Lösung | 2 = eigene Referenz
#define CALIBRATION_MODE 1Mode 1 nutzt eine handelsübliche Kalibrierlösung mit 1.413 mS/cm. Bei Mode 2 misst du dein Wasser vorher mit einem externen Messgerät (zum Beispiel dem günstigen TDS/EC-Tester aus der Materialliste) und trägst diese Werte als Referenz im Code ein:
#define REF_EC_USER 0.364 // mS/cm (= 364 µS/cm)
#define REF_TDS_USER 182 // ppmNach dem Hochladen startet das Display direkt im Kalibrierungsmodus und führt dich durch drei Schritte:
Ablauf der Kalibrierung
- Temperatur stabilisieren: Der DS18B20 muss über 10 Messungen in Folge stabil bleiben (Schwankung max. 0,2 °C). Das Display zeigt dabei „Waiting for temp… X / 10“.
- Sonde eintauchen: Je nach Modus kommt die Sonde in die 1.413 mS/cm Lösung oder in das bereits extern gemessene Wasser. Jetzt wartet der Arduino, bis die Sensorspannung über 15 Messungen weniger als 0,01 V schwankt („Stabilizing: X / 15“).
- K-Faktor speichern: Aus Referenzwert, Temperatur und Spannung wird der Kalibrierfaktor K berechnet und im EEPROM abgelegt. Auf dem Display erscheint „DONE!“ zusammen mit dem K-Wert.
kValue = (refEC * tempCoeff) / voltage;
EEPROM.put(EEPROM_K_ADDR, kValue);Weil der K-Wert im EEPROM liegt, bleibt die Kalibrierung auch nach dem Ausschalten erhalten. Die EEPROM-Adresse beginnt bei 12, damit sie nicht mit der pH-Kalibrierung aus dem PH-Sensor Beitrag kollidiert – beide Sensoren können also auf demselben Arduino laufen. Zum Schluss wird CALIBRATION_MODE wieder auf 0 gesetzt und der Sketch erneut hochgeladen. Ab jetzt zeigt das Display EC und TDS automatisch temperaturkompensiert an.
Der Sketch auf GitHub
Den kompletten Sketch – inklusive Kalibrier-Zustandsmaschine, Mittelwertbildung über 10 Einzelmessungen und flackerfreier Display-Ausgabe – findet ihr im Buch bzw. auf GitHub.
Aufbau mit einem Arduino Uno und Display
Der Aufbau ist derselbe wie beim PH-Sensor: TFT-Display für die Anzeige, DS18B20 für die Wassertemperatur und dazu das EC-Modul. Das Modul wird mit 5 V (alternativ 3,3 V) und GND versorgt, sein analoger Ausgang geht an den Eingang A1 des Arduino Uno. Auf der gegenüberliegenden Seite des Moduls wird die Elektrode über den XH2.54-2P-Stecker eingesteckt.
Der DS18B20 hängt am digitalen Pin D2 und braucht zwischen Daten-Pin und 5 V einen 4,7 kΩ Pull-up-Widerstand. Das Display belegt die SPI-Pins D13 (Clock) und D11 (MOSI) sowie D10 (CS), D9 (DC), D8 (Reset) und D6 für die Hintergrundbeleuchtung.

Wenn dir dieser Beitrag geholfen hat, freue ich mich über einen kleinen Beitrag für die Kaffeekasse.

