Sensor TDS Arduino: Mengukur ppm, Kalibrasi, dan Memantau Kualitas Air
Cara memakai sensor TDS dengan Arduino: arti ppm, kompensasi suhu DS18B20, kalibrasi, nilai air minum, akuarium, dan hidroponik, serta pencatatan ESP32.
Gabungkan sensor TDS dengan Arduino dan kamu mendapatkan alat ukur kualitas air murah yang dalam beberapa detik menunjukkan jumlah mineral, garam, dan logam terlarut dalam air dalam satuan ppm (bagian per juta). TDS (Total Dissolved Solids) adalah ukuran paling praktis untuk menilai kesadahan air keran, memeriksa apakah filter air masih bekerja, mengetahui waktu mengganti air akuarium, atau mengukur konsentrasi larutan nutrisi hidroponik. Alat ukur TDS berbentuk pena bekerja dengan prinsip yang sama; dengan Arduino, kamu dapat mencatat pengukuran secara terus-menerus, menampilkannya di layar, dan memicu peringatan ketika ambang terlewati.
Dalam artikel ini, kita membahas langkah demi langkah arti ppm, bagaimana sensor sebenarnya mengukur konduktivitas, pengaruh suhu terhadap hasil dan cara mengoreksinya dengan DS18B20, kalibrasi menggunakan larutan referensi, kode Arduino Uno, tabel nilai untuk air minum, akuarium, dan hidroponik, pemantauan filter air, pencatatan dengan penanda waktu menggunakan ESP32, serta kode Raspberry Pi Pico. Pada bagian terakhir, kamu akan melihat perbedaan sensor TDS dan sensor pH serta kesalahan yang paling umum.

Apa itu TDS dan apa arti ppm?
TDS adalah jumlah total semua zat yang terlarut dalam satu liter air: sebagian besarnya berupa ion seperti kalsium, magnesium, natrium, kalium, bikarbonat, klorida, sulfat, dan nitrat. Satuannya adalah ppm (bagian per juta) atau padanannya dalam air, mg/L; 1 ppm berarti 1 miligram zat terlarut dalam 1 liter air. Misalnya, setiap liter air keran dengan TDS 250 ppm mengandung seperempat gram mineral. Air murni (distilasi) memiliki TDS sangat mendekati nol, sedangkan air laut sekitar 35.000 ppm.
Kamu perlu tahu sejak awal bahwa TDS saja tidak menunjukkan apakah air “bersih atau kotor”. Air mata air yang kaya mineral bisa memiliki TDS tinggi dan tetap sepenuhnya sehat; sebaliknya, air dengan TDS rendah mungkin mengandung bakteri, timbal, atau pestisida, karena zat-zat ini hampir tidak mengubah konduktivitas air. Sensor TDS sangat cocok untuk melacak kandungan mineral air dan perubahan kandungan tersebut; untuk keamanan mikrobiologis, kamu memerlukan analisis laboratorium.
Bagaimana sensor TDS bekerja? Dari konduktivitas ke ppm
Sensor TDS yang dijual untuk Arduino sebenarnya adalah alat ukur konduktivitas (EC). Air murni hampir tidak menghantarkan listrik; semakin banyak ion terlarut di dalamnya, semakin tinggi konduktivitasnya. Board memberikan tegangan kecil di antara dua elektrode pada ujung probe dan mengukur arus yang mengalir. Tegangan ini bolak-balik, bukan arus searah: dengan DC, gelembung gas akan menumpuk pada elektrode (polarisasi), pembacaan akan bergeser, dan elektrode cepat aus. Board mengubah hasilnya menjadi tegangan analog antara 0 dan 2,3 V; Arduino membacanya, mengonversinya terlebih dahulu menjadi konduktivitas (µS/cm), lalu menjadi TDS dengan faktor konversi.
Konversi dari konduktivitas ke TDS merupakan pendekatan: TDS (ppm) = EC (µS/cm) × k. Sebagian besar alat ukur, termasuk kode dalam artikel ini, memakai k = 0.5 (skala natrium klorida atau “500”). Beberapa alat ukur hidroponik memakai 0,7, sehingga dua alat ukur bisa menunjukkan 500 dan 700 ppm untuk air yang sama dan keduanya “benar”. Periksa faktor yang dipakai ketika membandingkan nilai, dan untuk hidroponik, gunakan EC (mS/cm) secara langsung jika memungkinkan.
| Fitur | Nilai (modul TDS umum) |
|---|---|
| Catu daya | 3,3–5,5 V |
| Output | Analog 0–2,3 V |
| Rentang pengukuran | 0–1000 ppm |
| Akurasi | Sekitar ±10% (pada 25 °C, terhadap skala penuh) |
| Eksitasi | Arus bolak-balik (mencegah polarisasi) |
| Probe | Tahan air, dua elektrode; hingga sekitar 55 °C |
| Board | Tidak tahan air, jaga tetap kering |
Kompensasi suhu: mengapa kamu memerlukan DS18B20
Konduktivitas air berubah secara nyata mengikuti suhu: ion bergerak lebih cepat ketika menghangat, sehingga air yang sama tampak sekitar 2% lebih konduktif untuk setiap kenaikan 1 °C. Pembacaan air yang sama pada 15 °C dan 30 °C berbeda sekitar sepertiganya; galat ini jauh lebih besar daripada galat pengukuran itu sendiri. Karena itu, pembacaan TDS dikoreksi ke 25 °C: tegangan terkoreksi = tegangan terukur / (1 + 0.02 × (T − 25)). Sensor terbaik untuk suhu air adalah DS18B20 yang tahan air dan berselubung baja tahan karat; letakkan dalam air yang sama, di sebelah probe TDS.

DS18B20 menggunakan protokol satu kabel data bernama OneWire dan memberikan akurasi ±0,5 °C. Sensor ini memerlukan resistor pull-up 4,7 kΩ antara jalur data dan VCC; jika kamu tidak tahu kode warnanya, periksa alat kode warna resistor. Untuk penjelasan sensor dan cara menghubungkan beberapa DS18B20 pada jalur yang sama, baca artikel sensor suhu DS18B20. Tanpa sensor suhu, kode mengasumsikan 25 °C, yang cukup untuk pengujian sederhana pada suhu ruangan.
Pengkabelan: Arduino Uno, ESP32, dan Pico
| Pin komponen | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| TDS VCC (+) | 5V | 3V3 | 3V3 (OUT) |
| TDS GND (−) | GND | GND | GND |
| TDS A (sinyal) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| DS18B20 VCC (merah) | 5V | 3V3 | 3V3 (OUT) |
| DS18B20 GND (hitam) | GND | GND | GND |
| DS18B20 DATA (kuning) | D2 + 4,7 kΩ ke VCC | GPIO 4 + 4,7 kΩ ke 3V3 | GP22 + 4,7 kΩ ke 3V3 |
Kode TDS Arduino: filter median dan kompensasi
- Instal library OneWire dan DallasTemperature dari Library Manager.
- Hubungkan modul TDS dan DS18B20 sesuai tabel; letakkan probe dan sensor suhu dalam air yang sama.
- Upload kode lalu buka Serial Monitor pada 115200 baud.
- Tunggu 20–30 detik hingga angka stabil; pembacaan awal berfluktuasi ketika probe baru dimasukkan ke air.
- Jika kamu memiliki larutan kalibrasi dengan nilai yang diketahui, masukkan probe ke dalamnya lalu ketik, misalnya, cal:707 di Serial Monitor.
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <EEPROM.h>
4
5const int TDS_PIN = A0; // TDS modülü sinyal (A) / TDS module signal (A)
6const int DS_PIN = 2; // DS18B20 veri, 4,7 kΩ pull-up / DS18B20 data, 4.7 kΩ pull-up
7const float VREF = 5.0; // Uno ADC referansı / Uno ADC reference
8const int ORNEK = 30; // medyan filtresi örnek sayısı / samples for the median filter
9
10OneWire oneWire(DS_PIN);
11DallasTemperature ds(&oneWire);
12
13int ornekler[ORNEK];
14int indeks = 0;
15float kFaktor = 1.0; // kalibrasyon katsayısı (EEPROM'da) / calibration factor (in EEPROM)
16float sicaklik = 25.0;
17float gerilim = 0;
18unsigned long sonOrnek = 0, sonOlcum = 0;
19
20int medyan() { // gürültüye karşı ortanca değer / median against noise
21 int t[ORNEK];
22 memcpy(t, ornekler, sizeof(t));
23 for (int i = 1; i < ORNEK; i++) { // ekleme sıralaması / insertion sort
24 int x = t[i], j = i - 1;
25 while (j >= 0 && t[j] > x) { t[j + 1] = t[j]; j--; }
26 t[j + 1] = x;
27 }
28 return (t[ORNEK / 2] + t[ORNEK / 2 - 1]) / 2;
29}
30
31float tdsHesapla(float volt, float derece, float k) {
32 float komp = 1.0 + 0.02 * (derece - 25.0); // %2/°C sıcaklık kompanzasyonu / 2 %/°C compensation
33 float v = volt / komp; // 25 °C'ye indirgenmiş gerilim / voltage at 25 °C
34 float ec = 133.42 * v * v * v - 255.86 * v * v + 857.39 * v; // iletkenlik, µS/cm / conductivity
35 return ec * 0.5 * k; // TDS (ppm) = EC x 0,5 / TDS (ppm) = EC x 0.5
36}
37
38void setup() {
39 Serial.begin(115200);
40 ds.begin();
41 ds.setWaitForConversion(false); // 750 ms beklemeden ölç / measure without blocking 750 ms
42 ds.requestTemperatures();
43 EEPROM.get(0, kFaktor);
44 if (isnan(kFaktor) || kFaktor < 0.5 || kFaktor > 2.0) kFaktor = 1.0; // boş EEPROM / empty EEPROM
45 Serial.println("Kalibrasyon / calibration: cal:707 gibi yaz / type e.g. cal:707");
46}
47
48void loop() {
49 if (millis() - sonOrnek >= 40) { // 40 ms'de bir örnek / one sample every 40 ms
50 sonOrnek = millis();
51 ornekler[indeks] = analogRead(TDS_PIN);
52 indeks = (indeks + 1) % ORNEK;
53 }
54
55 if (millis() - sonOlcum >= 1000) { // saniyede bir sonuç / one result per second
56 sonOlcum = millis();
57 float t = ds.getTempCByIndex(0);
58 if (t != DEVICE_DISCONNECTED_C) sicaklik = t; // sensör yoksa 25 °C / 25 °C if no sensor
59 ds.requestTemperatures(); // bir sonraki okuma için / for the next reading
60 gerilim = medyan() * VREF / 1024.0;
61 float tds = tdsHesapla(gerilim, sicaklik, kFaktor);
62 Serial.print("Sicaklik / temp: ");
63 Serial.print(sicaklik, 1);
64 Serial.print(" C TDS: ");
65 Serial.print(tds, 0);
66 Serial.println(" ppm");
67 }
68
69 if (Serial.available()) { // "cal:707" -> bilinen sıvıya göre K / K from a known solution
70 String s = Serial.readStringUntil('\n');
71 s.trim();
72 if (s.startsWith("cal:")) {
73 float hedef = s.substring(4).toFloat();
74 float ham = tdsHesapla(gerilim, sicaklik, 1.0);
75 if (hedef > 0 && ham > 10) {
76 kFaktor = hedef / ham;
77 EEPROM.put(0, kFaktor); // kalıcı kaydet / save permanently
78 Serial.print("Yeni K / new K: ");
79 Serial.println(kFaktor, 3);
80 }
81 }
82 }
83}
84| Bagian kode | Apa fungsinya? |
|---|---|
| analogRead setiap 40 ms | Menyimpan 30 pembacaan terakhir (1,2 detik) dalam ring buffer |
| medyan() | Berbeda dari rata-rata, sepenuhnya mengabaikan lonjakan mendadak (derau, gelembung) |
| 1 + 0.02 × (T − 25) | Menormalkan tegangan ke 25 °C; pada 30 °C, pembaginya 1,10 |
| 133.42 v³ − 255.86 v² + 857.39 v | Kurva empiris konversi tegangan menjadi konduktivitas untuk board sensor ini |
| × 0.5 | Faktor yang mengonversi konduktivitas menjadi TDS (skala 500) |
| setWaitForConversion(false) | Terus mengambil sampel tanpa menunggu konversi DS18B20 selama 750 ms |
| cal:707 dan EEPROM | Menghitung faktor K dari larutan yang diketahui nilainya dan menyimpannya secara permanen |
Polinomial orde tiga dalam kode adalah kurva empiris yang mengubah tegangan output board menjadi konduktivitas; pengali sederhana tidak cukup karena rangkaian pada board tidak linear. Kurva ini berlaku untuk board TDS tipe Gravity yang umum; jika kamu memakai board lain, gunakan rumus produsen atau buat kurva sendiri menggunakan beberapa larutan dengan nilai yang diketahui. Ingat bahwa pada Uno 5 V, pembacaan analog mengacu pada 5,0 V, sedangkan pada ESP32 dan Pico mengacu pada 3,3 V; jika VREF tidak diatur sesuai board-mu, hasilnya sudah keliru sejak awal.
Mengalibrasi sensor TDS dengan larutan referensi
Setiap probe dan board memiliki sedikit perbedaan; untuk hasil paling akurat, kalibrasi sensor menggunakan cairan dengan nilai yang diketahui. Larutan standar kalium klorida (KCl) 1413 µS/cm, yang tersedia dari pemasok laboratorium dan elektronik, adalah pilihan paling umum; dengan faktor 0,5, nilainya setara dengan sekitar 707 ppm. Larutan natrium klorida 342 ppm yang disertakan bersama beberapa alat ukur TDS pena juga bisa dipakai. Untuk mengalibrasi, bilas probe dengan air bersih, keringkan dengan menepuknya perlahan memakai tisu, masukkan ke larutan, tunggu 1–2 menit, lalu ketik cal: diikuti nilai ppm larutan di Serial Monitor. Kode menyimpan rasio antara nilai terukur dan nilai sebenarnya sebagai faktor K di EEPROM, sehingga pengaturan tetap tersimpan setelah daya dimatikan.
Tabel TDS: air minum, akuarium, dan hidroponik
Mengetahui arti angka yang kamu peroleh sama pentingnya dengan sensor itu sendiri. Menurut penilaian rasa Organisasi Kesehatan Dunia, air di bawah 300 ppm memiliki rasa sangat baik, 300–600 ppm baik, 600–900 ppm cukup, 900–1200 ppm buruk, dan di atas 1200 ppm tidak dapat diterima. Rentang ini menilai rasa dan kelayakan penggunaan, bukan batas kesehatan. Tabel berikut merangkum nilai tipikal untuk penggunaan umum.
| Jenis air | TDS tipikal (ppm) | Keterangan |
|---|---|---|
| Air distilasi, output osmosis balik (RO) | 0–50 | Filter bekerja dengan baik |
| Mata air pegunungan, air kemasan rendah mineral | 20–150 | Sangat ringan, lunak |
| Air keran (tergantung kota) | 100–500 | Bervariasi menurut sumber; kenaikan mendadak perlu diperhatikan |
| Air mineral kemasan | 300–1500+ | Sengaja berkandungan mineral tinggi |
| Akuarium air tawar (umum) | 150–350 | Ukur sebelum dan sesudah penggantian air |
| Akuarium udang (Caridina) | 80–150 | Diatur dengan menambahkan mineral ke air RO |
| Akuarium cichlid Afrika | 300–500 | Menyukai air sadah yang kaya mineral |
| Air laut | Sekitar 35.000 | Jauh di luar jangkauan sensor ini |
Dalam hidroponik, larutan nutrisi biasanya dinyatakan sebagai konduktivitas (EC) dan bervariasi menurut tanaman. Namun, perhatikan: jangkauan sensor ini berakhir pada 1000 ppm, dan larutan untuk tanaman yang memerlukan banyak nutrisi seperti tomat dan paprika melebihi nilai tersebut. Dalam kondisi itu, encerkan sampel dengan air distilasi pada rasio yang diketahui, ukur lalu kalikan hasilnya, atau gunakan sensor EC dengan jangkauan lebih luas.
| Tanaman | EC yang disarankan (mS/cm) | Perkiraan TDS (skala 0,5) |
|---|---|---|
| Selada, bayam | 0,8–1,2 | 400–600 ppm |
| Basil, mint | 1,0–1,6 | 500–800 ppm |
| Stroberi | 1,0–1,5 | 500–750 ppm |
| Mentimun | 1,7–2,5 | 850–1250 ppm (perlu pengenceran) |
| Tomat, paprika | 2,0–3,5 | 1000–1750 ppm (perlu pengenceran) |
Memantau filter air
Kegunaan sensor TDS yang paling bermanfaat di rumah adalah memantau filter osmosis balik (RO). Membran RO yang baik menahan sebagian besar mineral dalam air masuk; dengan input 300 ppm, output biasanya sekitar 10–30 ppm. Kinerjanya dihitung dengan tingkat penolakan = (1 − output / input) × 100: jika air masuk 300 ppm dan air keluar 15 ppm, tingkatnya 95%. Seiring membran menua, TDS output perlahan naik; ketika tingkat penolakan mulai turun di bawah 80–85%, waktunya mengganti membran dan prafilter sudah dekat. Arduino dengan dua probe dan dua DS18B20 yang mengukur sisi masuk dan keluar secara bersamaan dapat membuat grafik perubahan ini selama berbulan-bulan.
Mencatat TDS dengan ESP32
Dengan ESP32, kamu bisa mencatat pembacaan TDS sekali per menit dengan penanda waktu dan mengirimkannya ke internet nanti. Kode di bawah mengambil waktu dari internet melalui NTP, mengukur suhu air dan TDS setiap menit, lalu menambahkan baris “date,temperature,tds” ke file bernama “/tds.csv” pada sistem file LittleFS di memori flash board itu sendiri. Kamu bisa membuka file ini di Excel nanti untuk membuat grafik. ADC ESP32 tidak linear, sehingga kode memakai analogReadMilliVolts() yang menggunakan data kalibrasi tersimpan pada chip. Hubungkan sinyal TDS ke salah satu pin ADC1 (GPIO 32–39) yang tetap bekerja ketika Wi-Fi aktif; pin ADC2 tidak bisa dipakai bersamaan dengan Wi-Fi. Waktu NTP dibahas dalam artikel jam NTP ESP32.
1#include <WiFi.h>
2#include <LittleFS.h>
3#include <OneWire.h>
4#include <DallasTemperature.h>
5#include <time.h>
6
7const char* WIFI_SSID = "AgAdi";
8const char* WIFI_PASS = "Sifre123";
9const int TDS_PIN = 34; // ADC1 kanalı, Wi-Fi ile çalışır / ADC1 channel, works with Wi-Fi
10const int DS_PIN = 4;
11const float K_FAKTOR = 1.0; // Arduino'daki gibi kalibre et / calibrate as on the Arduino
12const unsigned long ARALIK_MS = 60000; // dakikada bir kayıt / one log per minute
13
14OneWire oneWire(DS_PIN);
15DallasTemperature ds(&oneWire);
16unsigned long sonKayit = 0;
17
18float gerilimOku() { // 30 örneğin ortancası, volt / median of 30 samples, volts
19 int mv[30];
20 for (int i = 0; i < 30; i++) { mv[i] = analogReadMilliVolts(TDS_PIN); delay(5); }
21 for (int i = 1; i < 30; i++) {
22 int x = mv[i], j = i - 1;
23 while (j >= 0 && mv[j] > x) { mv[j + 1] = mv[j]; j--; }
24 mv[j + 1] = x;
25 }
26 return mv[15] / 1000.0;
27}
28
29float tdsHesapla(float v, float derece) {
30 v = v / (1.0 + 0.02 * (derece - 25.0)); // sıcaklık kompanzasyonu / temperature compensation
31 return (133.42 * v * v * v - 255.86 * v * v + 857.39 * v) * 0.5 * K_FAKTOR;
32}
33
34void setup() {
35 Serial.begin(115200);
36 ds.begin();
37 LittleFS.begin(true); // ilk açılışta biçimlendir / format on first boot
38 WiFi.begin(WIFI_SSID, WIFI_PASS);
39 while (WiFi.status() != WL_CONNECTED) delay(500);
40 configTzTime("<+03>-3", "pool.ntp.org"); // zaman damgası için NTP / NTP for timestamps
41}
42
43void loop() {
44 if (millis() - sonKayit < ARALIK_MS && sonKayit != 0) return;
45 sonKayit = millis();
46
47 ds.requestTemperatures(); // ~750 ms bekler / waits ~750 ms
48 float derece = ds.getTempCByIndex(0);
49 if (derece == DEVICE_DISCONNECTED_C) derece = 25.0;
50 float tds = tdsHesapla(gerilimOku(), derece);
51
52 struct tm t;
53 char zaman[20] = "saat-yok";
54 if (getLocalTime(&t, 2000)) strftime(zaman, sizeof(zaman), "%Y-%m-%d %H:%M:%S", &t);
55
56 char satir[64];
57 snprintf(satir, sizeof(satir), "%s,%.1f,%.0f", zaman, derece, tds);
58 File f = LittleFS.open("/tds.csv", FILE_APPEND); // tarih,sicaklik,tds / date,temp,tds
59 if (f) { f.println(satir); f.close(); }
60 Serial.println(satir);
61}
62Jika ingin mencatat data secara online, kamu bisa mengirim baris yang sama ke spreadsheet Google Sheets atau ke Home Assistant melalui MQTT sebagai pengganti LittleFS; penjelasannya ada dalam artikel mencatat data ESP32 ke Google Sheets dan MQTT dan Home Assistant. Memori flash memiliki ketahanan tulis terbatas; satu baris pendek per menit tidak menjadi masalah, tetapi daripada menulis setiap detik, sebaiknya kumpulkan pembacaan di RAM lalu tulis secara berkelompok.
TDS dengan Raspberry Pi Pico (MicroPython)
Pada Pico, hubungkan sinyal TDS ke GP26 (ADC0) dan DS18B20 ke GP22. Dalam MicroPython, modul onewire dan ds18x20 yang diperlukan DS18B20 sudah tersedia dalam firmware, sehingga tidak perlu instalasi tambahan. ADC Pico mengembalikan nilai antara 0 dan 65535 melalui read_u16(); kita mengonversinya menjadi tegangan relatif terhadap 3,3 V. Rumus dan kompensasinya sama seperti kode Arduino; kamu bisa menemukan K_FAKTOR dengan metode kalibrasi Arduino lalu memasukkannya ke kode.
1from machine import ADC, Pin
2import onewire, ds18x20, time
3
4adc = ADC(26) # GP26 = ADC0, TDS sinyali / TDS signal
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22))) # DS18B20 veri pini / data pin
6roms = ds.scan()
7K_FAKTOR = 1.0 # kalibrasyon katsayısı / calibration factor
8
9def gerilim_oku(n=31): # ortanca ile gürültü filtresi / median noise filter
10 olcumler = []
11 for _ in range(n):
12 olcumler.append(adc.read_u16())
13 time.sleep_ms(5)
14 olcumler.sort()
15 return olcumler[n // 2] * 3.3 / 65535
16
17def tds_hesapla(v, derece):
18 v = v / (1.0 + 0.02 * (derece - 25.0)) # 25 °C'ye indir / normalise to 25 °C
19 ec = 133.42 * v ** 3 - 255.86 * v ** 2 + 857.39 * v
20 return ec * 0.5 * K_FAKTOR
21
22while True:
23 derece = 25.0
24 if roms:
25 ds.convert_temp()
26 time.sleep_ms(750) # DS18B20 dönüşüm süresi / conversion time
27 derece = ds.read_temp(roms[0])
28 tds = tds_hesapla(gerilim_oku(), derece)
29 print("Sicaklik: {:.1f} C TDS: {:.0f} ppm".format(derece, tds))
30 time.sleep(1)
31Sensor TDS vs sensor pH
Sensor TDS dan pH sering tertukar dalam proyek kualitas air, padahal keduanya mengukur hal yang sama sekali berbeda. TDS menunjukkan jumlah ion dalam air, sedangkan pH menunjukkan seberapa asam atau basa air tersebut (aktivitas ion hidrogen). Tambahkan beberapa tetes air lemon ke segelas air, maka pH turun tajam sementara TDS hampir tidak berubah; tambahkan sejumput garam, maka TDS melonjak sementara pH hampir tetap sama. Dalam akuarium dan hidroponik, keduanya biasanya dipantau bersama.
| Fitur | Sensor TDS | Sensor pH |
|---|---|---|
| Yang diukur | Jumlah ion terlarut (konduktivitas) | Keasaman / kebasaan (0–14) |
| Satuan | ppm (mg/L) atau µS/cm | Satuan pH |
| Probe | Sepasang elektrode logam yang kuat | Elektrode kaca yang rapuh |
| Kalibrasi | Satu titik (misalnya 1413 µS/cm) | Dua atau tiga titik (larutan penyangga pH 4, 7, 10) |
| Perawatan | Pembersihan sesekali | Disimpan basah, kalibrasi rutin, probe diganti setiap 1–2 tahun |
| Harga | Murah | Lebih mahal |
| Penggunaan umum | Pemantauan filter, kesadahan, konsentrasi nutrisi | Pengaturan pH akuarium, kolam, hidroponik |
Ide proyek sensor TDS
- Alarm filter: bunyikan buzzer dan tampilkan “ganti filter” di layar ketika output RO melebihi 50 ppm.
- Pemantau akuarium: tampilkan TDS, suhu, dan level air pada satu layar serta beri pengingat waktu mengganti air.
- Kendali nutrisi hidroponik: tambahkan nutrisi dengan pompa peristaltik ketika EC turun; gabungkan dengan Proyek Rumah Kaca Pintar.
- Catatan air keran: catat TDS air rumahmu selama berhari-hari dan lihat perubahan pasokan air pada grafik.
- Air untuk menyiram tanaman: bandingkan air hujan, air keran, dan air hasil penyaringan, lalu pilih yang terbaik untuk tanaman yang peka terhadap garam.
- Eksperimen sekolah: larutkan garam dan gula dalam jumlah berbeda untuk menunjukkan hubungan antara konduktivitas dan jenis zat terlarut.
Kesalahan umum dan solusinya
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| Nilai terus berfluktuasi | Probe baru dimasukkan atau ada gelembung | Tunggu 20–30 detik, goyangkan probe perlahan, gunakan filter median |
| Hasil berbeda dalam air hangat dan dingin | Tidak ada kompensasi suhu | Tambahkan DS18B20 dan masukkan suhu ke rumus |
| Semua nilai meleset sekitar 50% | VREF salah (3,3 V alih-alih 5 V atau sebaliknya) | Atur referensi ADC board-mu dengan benar |
| Hasil berbeda dari alat ukur pena | Faktor konversi berbeda (0,5 / 0,7) atau belum dikalibrasi | Gunakan skala yang sama dan kalibrasi dengan larutan yang diketahui nilainya |
| Pembacaan mencapai batas maksimum pada nilai tinggi | Jangkauan sensor adalah 1000 ppm | Encerkan sampel atau gunakan sensor EC berjangkauan luas |
| Hasil tidak masuk akal ketika dipakai bersama sensor pH | Kedua probe saling mengganggu dalam air yang sama | Ukur secara bergantian atau gunakan modul berisolasi |
| Pembacaan ESP32 keliru ketika Wi-Fi mulai aktif | Sinyal terhubung ke pin ADC2 | Gunakan salah satu pin ADC1, GPIO 32–39 |
Sensor TDS adalah alat termurah dan termudah untuk mengubah kualitas air menjadi angka: dengan kompensasi suhu yang tepat dan kalibrasi sederhana, kamu dapat memantau air keran, filter, akuarium, atau larutan hidroponikmu secara andal. Ketika menafsirkan hasil, ingat bahwa TDS tidak mengukur keamanan mikrobiologis. Di aplikasi BlueGrays, kamu akan menemukan proyek langkah demi langkah dengan skema rangkaian dan kode untuk stasiun penyiraman pintar serta pencatat suhu dengan penanda waktu, dan kamu bisa menambahkan sensor TDS ke proyek tersebut.
Pertanyaan umum
Berapa nilai TDS yang seharusnya?
Untuk air minum, penilaian rasa Organisasi Kesehatan Dunia menilai di bawah 300 ppm sebagai sangat baik dan 300–600 ppm sebagai baik, sedangkan di atas 1200 ppm dianggap tidak dapat diterima dari segi rasa. Output filter osmosis balik biasanya 10–50 ppm. Untuk akuarium dan hidroponik, nilai ideal tergantung hewan atau tanamannya.
Apa yang diukur alat ukur TDS, dan apakah hasilnya menunjukkan air aman?
Alat ukur TDS memperkirakan jumlah mineral dan garam terlarut berdasarkan konduktivitas air. Kontaminan seperti bakteri, virus, timbal, atau pestisida hampir tidak mengubah konduktivitas, sehingga TDS rendah tidak membuat air otomatis aman. TDS sebaiknya dipakai untuk memantau kinerja filter dan perubahan kandungan mineral.
Bagaimana cara mengalibrasi sensor TDS?
Bersihkan probe dan masukkan ke larutan kalibrasi yang diketahui nilainya, seperti standar KCl 1413 µS/cm (sekitar 707 ppm). Setelah pembacaan stabil, rasio antara nilai terukur dan nilai sebenarnya disimpan sebagai faktor, dan semua pembacaan berikutnya dikalikan dengan faktor tersebut. Kompensasi suhu harus aktif selama kalibrasi.
Apa perbedaan TDS dan EC?
EC (konduktivitas listrik) mengukur secara langsung seberapa baik air menghantarkan listrik, dalam µS/cm atau mS/cm. TDS adalah perkiraan jumlah zat terlarut (ppm) yang dihitung dari konduktivitas tersebut dengan suatu faktor, biasanya 0,5 atau 0,7. EC lebih umum dalam hidroponik, sedangkan TDS untuk air minum.
Bolehkah sensor TDS terus berada di dalam air?
Probe tahan air dan dapat terus berada dalam akuarium atau tangki hidroponik, tetapi harus dibersihkan setiap beberapa minggu; board sinyal tidak tahan air dan harus tetap kering. Probe tidak boleh digunakan dalam air di atas sekitar 55 °C. Untuk penggunaan jangka panjang, ulangi kalibrasi sesekali guna mengoreksi pergeseran pembacaan.
Bisakah sensor TDS Arduino mengukur pH?
Tidak. Sensor TDS hanya mengukur konduktivitas dan padatan terlarut yang diturunkan darinya; pH, atau keasaman, memerlukan sensor pH terpisah dengan elektrode kaca. Keduanya bisa dipakai dalam proyek yang sama, tetapi karena bisa saling mengganggu pembacaan dalam wadah yang sama, ukur secara bergantian atau gunakan modul berisolasi.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Stasiun Penyiraman Pintar
Tukang kebun yang menyiram tanamanmu sendiri, supaya tanaman tidak kering ketika kamu berlibur. Sensor kelembapan tanah mengukur seberapa basah tanahnya; ketika kering, Arduino menyalakan pompa air be

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)
Proyek ini mengukur suhu dan kelembapan sekitar dengan sensor DHT22 dan menampilkan datanya secara real-time di LCD I2C 16x2. Data dibaca dari sensor dengan protokol satu kabel lewat library Adafruit DHT. Proyek ini menjadi dasar untuk stasiun cuaca IoT, otomasi rumah pintar, atau sistem pemantauan lingkungan di rumah kaca. Komunikasi dengan DHT22 dilakukan lewat pin GPIO 4 ESP32.

Suhu dan Kelembapan dengan DHT11
Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

Mengukur Suhu dengan NTC dan Layar LCD 2x16
Ukur suhu di sekitarmu dengan sensor yang mirip manik-manik kecil. Komponen bernama NTC ini makin mudah dilewati listrik ketika makin hangat; Arduino membaca perubahan itu, mengubahnya menjadi derajat

Voltmeter Digital dengan Layar LCD
Cari tahu berapa tegangan yang diberikan baterai atau adaptor daya dengan alat ukur buatanmu sendiri. Pembagi dari dua resistor menurunkan tegangan tinggi ke tingkat yang bisa dibaca board, dan Arduin

Mengukur Intensitas Cahaya dengan LDR
Ingin melihat seberapa terang kamarmu dalam bentuk angka? LDR, komponen kecil yang bereaksi terhadap cahaya, mengukur cahaya di sekitarnya, dan Arduino menulis nilainya ke layar komputermu setiap sete
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

