IoT-Wasserqualitätssensor-System – Arduino-basierte Echtzeitüberwachung
Komponenten und Materialien
| Arduino UNO | × | 1 |
| Jumper-Kabel (männlich/weiblich) | × | 1 |
| HC-05 Bluetooth-Modul | × | 1 |
| RGB-LED (gemeinsame Kathode) | × | 1 |
| Widerstand 330 Ω | × | 3 |
| Drehpotentiometer | × | 1 |
| RGB LCD Shield Kit, 16x2 Zeichen | × | 1 |
| Widerstand 1 kΩ | × | 1 |
Benötigte Werkzeuge und Maschinen
- Abisolierzange & Seitenschneider, 26–14 AWG
Apps und Online-Dienste
- Arduino IDE
- Ardutooth (App)
Über dieses Projekt
Wasser ist eine lebenswichtige Ressource. Wir müssen sicherstellen, dass es eine gute Qualität für den Gebrauch hat.
Was ist TDS?
TDS steht für Total Dissolved Solids (gesamte gelöste Feststoffe). Es gibt die Menge der in einer bestimmten Wassermenge gelösten Feststoffe in ppm (parts per million) an. TDS wird basierend auf der elektrischen Leitfähigkeit [S/m] berechnet. Je höher die Leitfähigkeit, desto höher der TDS-Wert. Hier sind typische TDS-Werte verschiedener Wasserarten:
- Reines Wasser: 80–150 ppm
- Leitungswasser: 250–350 ppm
- Grundwasser: 500–1000 ppm
- Meerwasser: ca. 30.000 ppm
Die WHO empfiehlt für Trinkwasser einen TDS-Wert unter 300 ppm. Wasser unter 100 ppm sollte jedoch nicht getrunken werden, da es essentielle Mineralien fehlen. Wasser über 300 ppm gilt als zu „hart“, da es mehr Mineralien enthält als nötig.
Normalerweise misst man TDS mit einem TDS-Stift. Da dieser sich nicht in Arduino integrieren lässt, gibt es spezielle TDS-Messmodule für Arduino. In diesem Projekt wurde jedoch auf ein solches Modul verzichtet.

Die Schaltung
Arduino
- 5 V des Arduino an eine Stromschiene des Breadboards
- GND des Arduino an die andere Stromschiene
- Ein Ende eines 1-kΩ-Widerstands an GND, das andere ans Breadboard. Analoger Pin A0 an den Widerstand. Einen Draht an den Widerstand und einen an 5 V anschließen. Die freien Enden dieser Drähte an Krokodilklemmen verbinden.

LCD-Display
- VSS an GND-Schiene
- VDD an 5-V-Schiene
- V0 an Mittelanschluss des Potentiometers
- Potentiometer-Enden an 5 V und GND
- RS an Arduino Pin 7
- R/W an GND
- E an Arduino Pin 8
- D4 an Arduino Pin 10
- D5 an Arduino Pin 11
- D6 an Arduino Pin 12
- D7 an Arduino Pin 13

HC-05 Bluetooth-Modul
- VCC an 5-V-Schiene
- GND an GND
- TX an Arduino Pin 3 (dient als RX)
- RX an Arduino Pin 2 (dient als TX)

RGB-LED
- Gemeinsame Kathode (längster Pin) an GND
- Rot (rechts von Kathode) an PWM-Pin 9 über 330-Ω-Widerstand
- Grün (links von Kathode) an PWM-Pin 6 über 330-Ω-Widerstand
- Blau (äußerst links) an PWM-Pin 5 über 330-Ω-Widerstand

Herleitung zur Berechnung des Widerstands zwischen den freien Drähten
Wir nutzen das Ohmsche Gesetz: V = I × R.

Obwohl ein Draht zwischen den beiden Widerständen (R₁ = 1000 Ω, R₂ = Widerstand zwischen den freien Drähten) zum analogen Pin A0 führt, kann der Widerstand dieses Drahts vernachlässigt werden; es fließt minimaler Strom hindurch. Daher sind R₁ und R₂ in Reihe geschaltet.
Daraus folgt: V₁ = I·R₁ und V₂ = I·R₂. Also V₂/V₁ = R₂/R₁. V₂ ist unbekannt, aber in einer Reihenschaltung gilt V₁ + V₂ = V = 5 V, also V₂ = 5 – V₁.
Einsetzen ergibt: (5 – V₁)/V₁ = R₂/R₁. Definieren wir buffer = (5 – V₁)/V₁, so ist R₂ = buffer × R₁.
Funktionsweise
Wir berechnen den Widerstand des Testwassers und daraus den spezifischen Widerstand (Widerstandswiderstand). Dabei müssen Länge und Querschnittsfläche des Behälters berücksichtigt werden:
R = ρ·L/A ⇒ ρ = R·A/L
Aus dem spezifischen Widerstand erhalten wir die Leitfähigkeit:
c = 1/ρ
Schließlich berechnen wir TDS aus der Leitfähigkeit:
TDS = c × 7000
Bibliotheken
Sie können die Bibliotheken herunterladen und in die Arduino IDE importieren oder über Werkzeuge → Bibliotheken verwalten suchen und installieren.

Code
Wasserqualitäts-Überwachungscode
// Bibliotheken einbinden
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
// Bluetooth: BTserial mit RX=3, TX=2
SoftwareSerial BTserial(3, 2); // RX | TX
// Variablendeklaration
float reads;
int pin = A0;
float vOut = 0;
float vIn = 5;
float R1 = 1000;
float R2 = 0;
float buffer = 0;
float TDS;
float R = 0;
float r = 0;
float L = 0.06; // Abstand der Drähte in m
double A = 0.000154; // Querschnittsfläche in m²
float C = 0; // Leitfähigkeit in S/m
float Cm = 0; // Leitfähigkeit in mS/cm
int rPin = 9, bPin = 5, gPin = 6;
int rVal = 255, bVal = 255, gVal = 255;
LiquidCrystal lcd(7, 8, 10, 11, 12, 13);
void setup() {
Serial.begin(9600);
BTserial.begin(9600);
lcd.begin(16, 2);
pinMode(rPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(pin, INPUT);
lcd.print("Conductivity: ");
}
void loop() {
reads = analogRead(A0);
vOut = reads * 5.0 / 1023.0;
Serial.println(reads);
buffer = (vIn / vOut) - 1;
R2 = R1 * buffer;
Serial.println(R2);
delay(500);
// Widerstand in Widerstandswiderstand umrechnen
r = R2 * A / L;
// Leitfähigkeit
C = 1 / r;
Cm = C * 10;
// TDS
TDS = Cm * 700;
lcd.setCursor(0, 1);
lcd.println(C);
// RGB-LED je nach Messwert färben
if (reads < 600) {
if (reads <= 300) setColor(255, 0, 255);
else if (reads > 200) setColor(200, 0, 255);
} else {
if (reads <= 900) setColor(0, 0, 255);
else if (reads > 700) setColor(0, 255, 255);
}
// Daten per Bluetooth an Ardutooth-App senden
BTserial.print(C); BTserial.print(",");
BTserial.print(TDS); BTserial.print(";");
delay(500);
}
void setColor(int red, int green, int blue) {
analogWrite(rPin, 255 - red);
analogWrite(gPin, 255 - green);
analogWrite(bPin, 255 - blue);
}
Gehäuse & Custom Parts
Ich habe ein altes Reagenzglas verwendet. Löcher an beiden Enden gebohrt, Drähte eingeführt und mit Kitt fixiert.

Schaltpläne
Herstellungsprozess
- Raspberry Pi & HDC2010: Kompletter I2C Temperatur- & Feuchtigkeitssensor Setup-Guide
- Raspberry Pi 3 mit DHT11 verbinden und Daten an ThingsIo.ai Cloud hochladen
- Intelligenter Mülleimer: Zellulare IoT-Lösung für automatisiertes Abfallmanagement
- Helium-basierter solarbetriebener Luftqualitätssensor: Design- und Deployments-Guide
- Phantom YoYo Hochsensibler Wassersensor mit MCP3008 ADC am Raspberry Pi
- Präzise Temperatur- & Feuchtigkeitsüberwachung mit SHT15 unter Windows 10 IoT Core
- Multi-Position Temperatursensor-System für Smart-Home-Integration
- Smarte Arduino-Trinkflasche: Echtzeit-Überwachung & Trinkerinnerung
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Fortschrittlicher kohlenstoffbasierter NO₂-Sensor verbessert Innenraumluftüberwachung