Komponen · 10 mnt baca

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.

Sensor TDS untuk kualitas air dan konduktivitas
Sensor TDS: probe tahan air dengan dua elektrode dan board yang memproses sinyal; board memiliki pin VCC, GND, dan output analog (A).

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.

FiturNilai (modul TDS umum)
Catu daya3,3–5,5 V
OutputAnalog 0–2,3 V
Rentang pengukuran0–1000 ppm
AkurasiSekitar ±10% (pada 25 °C, terhadap skala penuh)
EksitasiArus bolak-balik (mencegah polarisasi)
ProbeTahan air, dua elektrode; hingga sekitar 55 °C
BoardTidak 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.

Sensor suhu DS18B20
DS18B20: sensor suhu digital satu kabel; versi tahan airnya dimasukkan ke air di sebelah probe TDS untuk kompensasi suhu.

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 komponenArduino UnoESP32Raspberry Pi Pico
TDS VCC (+)5V3V33V3 (OUT)
TDS GND (−)GNDGNDGND
TDS A (sinyal)A0GPIO 34 (ADC1)GP26 (ADC0)
DS18B20 VCC (merah)5V3V33V3 (OUT)
DS18B20 GND (hitam)GNDGNDGND
DS18B20 DATA (kuning)D2 + 4,7 kΩ ke VCCGPIO 4 + 4,7 kΩ ke 3V3GP22 + 4,7 kΩ ke 3V3
Board sinyal modul TDS tidak tahan air; hanya probe yang masuk ke air. Jangan biarkan probe menyentuh dasar atau sisi wadah, beri jarak setidaknya beberapa sentimeter; pembacaan bergeser dalam wadah logam. Jika kamu menjalankan probe TDS dan probe pH bersamaan dalam wadah yang sama, kedua sensor bisa saling mengganggu pembacaan; lakukan pengukuran secara bergantian atau gunakan modul yang mengisolasi salah satunya secara listrik.

Kode TDS Arduino: filter median dan kompensasi

  1. Instal library OneWire dan DallasTemperature dari Library Manager.
  2. Hubungkan modul TDS dan DS18B20 sesuai tabel; letakkan probe dan sensor suhu dalam air yang sama.
  3. Upload kode lalu buka Serial Monitor pada 115200 baud.
  4. Tunggu 20–30 detik hingga angka stabil; pembacaan awal berfluktuasi ketika probe baru dimasukkan ke air.
  5. Jika kamu memiliki larutan kalibrasi dengan nilai yang diketahui, masukkan probe ke dalamnya lalu ketik, misalnya, cal:707 di Serial Monitor.
C++ (Arduino IDE)
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 kodeApa fungsinya?
analogRead setiap 40 msMenyimpan 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 vKurva empiris konversi tegangan menjadi konduktivitas untuk board sensor ini
× 0.5Faktor yang mengonversi konduktivitas menjadi TDS (skala 500)
setWaitForConversion(false)Terus mengambil sampel tanpa menunggu konversi DS18B20 selama 750 ms
cal:707 dan EEPROMMenghitung 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.

Jika tidak memiliki larutan kalibrasi, cara sementara adalah mengukur air yang sama dengan alat ukur TDS pena yang bagus lalu membandingkan kedua nilainya. Kamu juga bisa membuat larutan sendiri: 0,5 gram garam murni (NaCl) dalam 1 liter air distilasi menghasilkan sekitar 500 ppm; akurasi timbanganmu langsung memengaruhi hasil. Ulangi kalibrasi setiap beberapa bulan dan jangan pernah menuangkan larutan bekas kembali ke botol.

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 airTDS tipikal (ppm)Keterangan
Air distilasi, output osmosis balik (RO)0–50Filter bekerja dengan baik
Mata air pegunungan, air kemasan rendah mineral20–150Sangat ringan, lunak
Air keran (tergantung kota)100–500Bervariasi menurut sumber; kenaikan mendadak perlu diperhatikan
Air mineral kemasan300–1500+Sengaja berkandungan mineral tinggi
Akuarium air tawar (umum)150–350Ukur sebelum dan sesudah penggantian air
Akuarium udang (Caridina)80–150Diatur dengan menambahkan mineral ke air RO
Akuarium cichlid Afrika300–500Menyukai air sadah yang kaya mineral
Air lautSekitar 35.000Jauh 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.

TanamanEC yang disarankan (mS/cm)Perkiraan TDS (skala 0,5)
Selada, bayam0,8–1,2400–600 ppm
Basil, mint1,0–1,6500–800 ppm
Stroberi1,0–1,5500–750 ppm
Mentimun1,7–2,5850–1250 ppm (perlu pengenceran)
Tomat, paprika2,0–3,51000–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.

Filter karbon dan sedimen menghilangkan bau, rasa, klorin, dan endapan, tetapi hampir tidak mengurangi mineral terlarut; wajar jika TDS setelah melewati filter ini tetap sama seperti sebelumnya. Hanya sistem RO dan pertukaran ion (pelunak air) yang dapat dipantau secara bermakna dengan TDS. Selain itu, TDS rendah pada output filter tidak berarti air aman secara mikrobiologis.

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.

C++ (Arduino IDE)
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}
62

Jika 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.

MicroPython
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)
31

Sensor 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.

FiturSensor TDSSensor pH
Yang diukurJumlah ion terlarut (konduktivitas)Keasaman / kebasaan (0–14)
Satuanppm (mg/L) atau µS/cmSatuan pH
ProbeSepasang elektrode logam yang kuatElektrode kaca yang rapuh
KalibrasiSatu titik (misalnya 1413 µS/cm)Dua atau tiga titik (larutan penyangga pH 4, 7, 10)
PerawatanPembersihan sesekaliDisimpan basah, kalibrasi rutin, probe diganti setiap 1–2 tahun
HargaMurahLebih mahal
Penggunaan umumPemantauan filter, kesadahan, konsentrasi nutrisiPengaturan 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

GejalaKemungkinan penyebabSolusi
Nilai terus berfluktuasiProbe baru dimasukkan atau ada gelembungTunggu 20–30 detik, goyangkan probe perlahan, gunakan filter median
Hasil berbeda dalam air hangat dan dinginTidak ada kompensasi suhuTambahkan 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 penaFaktor konversi berbeda (0,5 / 0,7) atau belum dikalibrasiGunakan skala yang sama dan kalibrasi dengan larutan yang diketahui nilainya
Pembacaan mencapai batas maksimum pada nilai tinggiJangkauan sensor adalah 1000 ppmEncerkan sampel atau gunakan sensor EC berjangkauan luas
Hasil tidak masuk akal ketika dipakai bersama sensor pHKedua probe saling mengganggu dalam air yang samaUkur secara bergantian atau gunakan modul berisolasi
Pembacaan ESP32 keliru ketika Wi-Fi mulai aktifSinyal terhubung ke pin ADC2Gunakan salah satu pin ADC1, GPIO 32–39
Bilas probe dengan air bersih setelah setiap pengukuran dan simpan dalam keadaan kering. Jika probe terus berada di dalam air (akuarium, hidroponik), bersihkan lapisan biologisnya dengan sikat lembut setiap beberapa minggu; elektrode yang kotor akan memberikan pembacaan lebih rendah seiring waktu.

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.

Lihat semua proyek
Stasiun Penyiraman Pintar
#83Mahir
Premium

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

5.0(42)
57
Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
#144Mahir
Premium

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.

4.7(7)
12
Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)
#117Menengah

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.

4.8(38)
56
Suhu dan Kelembapan dengan DHT11
#55Menengah

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

4.7(47)
73
Mengukur Suhu dengan NTC dan Layar LCD 2x16
#44Pemula
Premium

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

4.5(33)
44
Voltmeter Digital dengan Layar LCD
#56Menengah
Premium

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

4.5(27)
36
Mengukur Intensitas Cahaya dengan LDR
#11Pemula

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

4.6(81)
138