Zpět na články

ESP32 + TDS senzor (měření kvality vody)

ESP32 a TDS senzor: měření kvality vody, zapojení, kód a praktické použití v IoT.

ESP32 + TDS senzor (měření kvality vody)

V tomto návodu se naučíš, jak použít TDS senzor (Total Dissolved Solids) s ESP32. Tento senzor měří množství rozpuštěných látek ve vodě (např. soli, minerály nebo kovy) a udává hodnotu v ppm (mg/l).

TDS hodnota slouží jako indikátor kvality vody, ale sama o sobě nestačí k určení, zda je voda pitná.

Co je TDS senzor

TDS (Total Dissolved Solids) měří množství rozpuštěných látek ve vodě. Čím více látek je rozpuštěno, tím vyšší je vodivost vody – a právě z ní se TDS vypočítává.

Použití:

  • akvária
  • hydroponie
  • bazény
  • filtrace vody
  • IoT monitorování kvality vody

Důležité:

  • neměří konkrétní látky
  • pouze celkové množství rozpuštěných částic
ESP32 Blog image

Parametry senzoru (přepsané z tabulky)

Použitý modul (např. Keyestudio TDS Meter V1.0) má tyto vlastnosti:

  • napájení: 3.3 V až 5.5 V
  • výstupní napětí: 0 až 2.3 V
  • proud: cca 3 až 6 mA
  • rozsah měření: 0 až 1000 ppm
  • přesnost: ±10 % (při 25 °C)
  • analogový výstup (ADC)
  • konektor pro sondu + řídicí modul
ESP32 Blog image

Zapojení k ESP32

Senzor vrací analogový signál, takže ho připojíš na ADC pin.

Zapojení:

  • GND → GND
  • VCC → 3.3 V
  • DATA → GPIO 27 (nebo jiný ADC pin)
ESP32 Blog image

Jak to funguje

  • senzor měří vodivost vody
  • ESP32 přečte analogovou hodnotu
  • ta se přepočítá na TDS v ppm

Pro stabilnější hodnoty se používá:

  • průměrování
  • median filtr
  • kompenzace teploty

Kompletní kód (ESP32 + TDS)

tds.cpp
1#include <Arduino.h> 2 3#define TdsSensorPin 27 4#define VREF 3.3 5#define SCOUNT 30 6 7int analogBuffer[SCOUNT]; 8int analogBufferTemp[SCOUNT]; 9 10int analogBufferIndex = 0; 11int copyIndex = 0; 12 13float averageVoltage = 0; 14float tdsValue = 0; 15 16float temperature = 25; 17 18// Median filtr 19int getMedianNum(int bArray[], int iFilterLen){ 20 int bTab[iFilterLen]; 21 for (byte i = 0; i<iFilterLen; i++) 22 bTab[i] = bArray[i]; 23 24 int i, j, bTemp; 25 for (j = 0; j < iFilterLen - 1; j++) { 26 for (i = 0; i < iFilterLen - j - 1; i++) { 27 if (bTab[i] > bTab[i + 1]) { 28 bTemp = bTab[i]; 29 bTab[i] = bTab[i + 1]; 30 bTab[i + 1] = bTemp; 31 } 32 } 33 } 34 35 if ((iFilterLen & 1) > 0) 36 bTemp = bTab[(iFilterLen - 1) / 2]; 37 else 38 bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2; 39 40 return bTemp; 41} 42 43void setup() { 44 Serial.begin(115200); 45 pinMode(TdsSensorPin, INPUT); 46} 47 48void loop() { 49 static unsigned long analogSampleTimepoint = millis(); 50 51 if(millis() - analogSampleTimepoint > 40U){ 52 analogSampleTimepoint = millis(); 53 54 analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin); 55 analogBufferIndex++; 56 57 if(analogBufferIndex == SCOUNT) 58 analogBufferIndex = 0; 59 } 60 61 static unsigned long printTimepoint = millis(); 62 if(millis() - printTimepoint > 800U){ 63 printTimepoint = millis(); 64 65 for(copyIndex = 0; copyIndex < SCOUNT; copyIndex++) 66 analogBufferTemp[copyIndex] = analogBuffer[copyIndex]; 67 68 averageVoltage = getMedianNum(analogBufferTemp, SCOUNT) * (float)VREF / 4096.0; 69 70 float compensationCoefficient = 1.0 + 0.02 * (temperature - 25.0); 71 float compensationVoltage = averageVoltage / compensationCoefficient; 72 73 tdsValue = (133.42 * compensationVoltage * compensationVoltage * compensationVoltage 74 - 255.86 * compensationVoltage * compensationVoltage 75 + 857.39 * compensationVoltage) * 0.5; 76 77 Serial.print("TDS Value: "); 78 Serial.print(tdsValue); 79 Serial.println(" ppm"); 80 } 81}

Jak kód funguje

  • každých ~40 ms se čte analogová hodnota
  • uloží se do pole (buffer)
  • použije se median filtr pro stabilní výsledek
  • napětí se přepočítá na ppm
  • výsledek se vypisuje do Serial Monitoru

Kalibrace a přesnost

Pro přesnější výsledky:

  • kalibruj senzor pomocí známého roztoku
  • přidej teplotní senzor
  • počítej s nepřesností ADC na ESP32

Pokud ti jde jen o orientační hodnoty, kalibrace není nutná.

Ukázkové hodnoty měření

Přibližné hodnoty z testování:

  • voda z kohoutku: ~100 ppm
  • čaj: ~230 ppm
  • balená voda: ~0 ppm (může být zkreslené)

Další příklady:

  • pivo: ~384 ppm
  • ocet: ~610 ppm
  • gin & tonic: ~43 ppm

Shrnutí

TDS senzor:

  • měří celkové množství rozpuštěných látek
  • funguje přes analogový vstup
  • je ideální pro IoT projekty

Použití:

  • akvária
  • monitoring vody
  • chytré domácnosti

Důležité:
➡️ Neříká, jestli je voda pitná – jen její „čistotu“

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.