Parçalar · 9 dk okuma

TDS Sensörü Arduino: ppm Ölçümü, Kalibrasyon ve Su Kalitesi

TDS sensörü Arduino ile nasıl kullanılır? ppm ne demek, DS18B20 ile sıcaklık kompanzasyonu, kalibrasyon, içme suyu, akvaryum ve hidroponik değerleri, ESP32.

TDS sensörü Arduino ile birleşince, suyun içinde ne kadar çözünmüş mineral, tuz ve metal bulunduğunu birkaç saniyede ppm (milyonda bir) olarak gösteren ucuz bir su kalitesi ölçerin olur. TDS (Total Dissolved Solids), yani toplam çözünmüş katı madde, musluk suyunun sertliğini, su arıtma cihazının hâlâ çalışıp çalışmadığını, akvaryum suyunun değişim zamanını ya da hidroponik besin çözeltisinin yoğunluğunu anlamak için kullanılan en pratik ölçüdür. Kalem tipi TDS ölçerlerin içinde de aynı prensip çalışır; Arduino ile yaptığında bu ölçümü sürekli kaydedebilir, ekranda gösterebilir ve eşik aşılınca uyarı verebilirsin.

Bu yazıda ppm'in ne anlama geldiğini, sensörün aslında iletkenliği nasıl ölçtüğünü, sıcaklığın sonuca etkisini ve DS18B20 ile nasıl düzeltileceğini, kalibrasyon sıvısıyla ayarı, Arduino Uno kodunu, içme suyu, akvaryum ve hidroponik için değer tablolarını, su arıtma filtresinin takibini, ESP32 ile zaman damgalı kayıt ve Raspberry Pi Pico kodunu adım adım anlatıyoruz. Son bölümde TDS sensörünün pH sensöründen farkını ve en sık yapılan hataları göreceksin.

TDS su kalitesi ve iletkenlik sensörü
TDS sensörü: su geçirmez iki elektrotlu prob ve sinyali işleyen kart; kartın VCC, GND ve analog çıkış (A) pinleri vardır.

TDS nedir, ppm ne demek?

TDS, bir litre suyun içinde çözünmüş hâlde bulunan tüm maddelerin toplam miktarıdır: kalsiyum, magnezyum, sodyum, potasyum, bikarbonat, klorür, sülfat ve nitrat gibi iyonlar en büyük payı oluşturur. Birimi ppm (parts per million, milyonda bir parça) ya da bunun suda karşılığı olan mg/L'dir; 1 ppm, 1 litre suda 1 miligram çözünmüş madde demektir. Örneğin 250 ppm'lik bir musluk suyunun her litresinde çeyrek gram mineral vardır. Saf (damıtılmış) suyun TDS'si sıfıra çok yakındır, deniz suyununki ise yaklaşık 35.000 ppm'dir.

TDS'nin tek başına "suyun temiz ya da kirli" olduğunu söylemediğini baştan bilmek önemlidir. Mineralli bir kaynak suyunun TDS'si yüksek olabilir ve gayet sağlıklıdır; buna karşılık TDS'si düşük bir su bakteri, kurşun ya da tarım ilacı içerebilir, çünkü bunlar suyun iletkenliğini neredeyse hiç değiştirmez. TDS sensörü, suyun mineral yükünü ve bu yükteki değişimi izlemek için mükemmeldir; mikrobiyolojik güvenlik için laboratuvar analizi gerekir.

TDS sensörü nasıl çalışır? İletkenlikten ppm'e

Arduino için satılan TDS sensörleri aslında bir iletkenlik (EC) ölçeridir. Saf su elektriği neredeyse hiç iletmez; içinde çözünmüş iyonlar arttıkça iletkenlik de artar. Probun ucundaki iki elektrot arasına kart küçük bir gerilim uygular ve geçen akımı ölçer. Bu gerilim doğru akım değil alternatif akımdır: DC kullanılsaydı elektrotlarda gaz kabarcıkları birikir (polarizasyon), ölçüm kayar ve elektrotlar hızla aşınırdı. Kart sonucu 0–2,3 V arasında bir analog gerilime çevirir; Arduino bu gerilimi okur, önce iletkenliğe (µS/cm), sonra bir dönüşüm katsayısıyla TDS'ye çevirir.

İletkenlikten TDS'ye geçiş yaklaşık bir hesaptır: TDS (ppm) = EC (µS/cm) × k. Çoğu ölçer ve bu yazıdaki kod k = 0,5 kullanır (sodyum klorür ölçeği). Bazı hidroponik ölçerler 0,7 kullanır; bu yüzden aynı suyu iki farklı ölçer 500 ve 700 ppm olarak gösterebilir, ikisi de "doğrudur". Değerleri karşılaştırırken hangi katsayının kullanıldığına dikkat et, hidroponikte ise mümkünse doğrudan EC (mS/cm) değeriyle çalış.

ÖzellikDeğer (yaygın TDS modülü)
Besleme3,3–5,5 V
Çıkış0–2,3 V analog
Ölçüm aralığı0–1000 ppm
DoğrulukYaklaşık ±%10 (25 °C'de, tam ölçeğe göre)
UyarımAlternatif akım (polarizasyonu önler)
ProbSu geçirmez, iki elektrotlu; en fazla yaklaşık 55 °C
KartSu geçirmez değildir, kuru yerde durmalı

Sıcaklık kompanzasyonu: neden DS18B20 gerekir?

Suyun iletkenliği sıcaklıkla belirgin şekilde değişir: iyonlar ısındıkça daha hızlı hareket eder ve aynı su her 1 °C'de yaklaşık %2 daha iletken görünür. 15 °C'deki bir su ile aynı suyun 30 °C'deki ölçümü arasında yaklaşık üçte bir oranında fark çıkar; bu, ölçümün kendisinden çok daha büyük bir hatadır. Bu yüzden TDS ölçümleri 25 °C'ye göre düzeltilir: düzeltilmiş gerilim = ölçülen gerilim / (1 + 0,02 × (T − 25)). Suyun sıcaklığını ölçmek için en uygun sensör, su geçirmez paslanmaz kılıflı DS18B20'dir; probu TDS probunun yanına, aynı suya daldırırsın.

DS18B20 sıcaklık sensörü
DS18B20: tek kablolu dijital sıcaklık sensörü; su geçirmez kılıflı sürümü TDS probunun yanına daldırılarak sıcaklık kompanzasyonu yapılır.

DS18B20, OneWire adı verilen tek veri kablolu bir protokolle çalışır ve ±0,5 °C doğruluk verir. Veri hattı ile VCC arasına 4,7 kΩ'luk bir pull-up direnci gerekir; direncin renk kodunu bilmiyorsan direnç renk kodu aracına bakabilirsin. Sensörün ayrıntıları ve birden fazla DS18B20'yi aynı hatta bağlamak için DS18B20 sıcaklık sensörü yazısını okuyabilirsin. Sıcaklık sensörün yoksa kod 25 °C kabul eder; ölçümlerin oda sıcaklığında yapıldığı basit testler için bu da iş görür.

Bağlantı: Arduino Uno, ESP32 ve Pico

Parça piniArduino UnoESP32Raspberry Pi Pico
TDS VCC (+)5V3V33V3 (OUT)
TDS GND (−)GNDGNDGND
TDS A (sinyal)A0GPIO 34 (ADC1)GP26 (ADC0)
DS18B20 VCC (kırmızı)5V3V33V3 (OUT)
DS18B20 GND (siyah)GNDGNDGND
DS18B20 DATA (sarı)D2 + 4,7 kΩ VCC'yeGPIO 4 + 4,7 kΩ 3V3'eGP22 + 4,7 kΩ 3V3'e
TDS modülünün sinyal kartı su geçirmez değildir; yalnızca prob suya girmelidir. Probu kabın dibine ya da kenarına değdirme, en az birkaç santimetre uzakta tut; metal kaplarda ölçüm sapar. TDS probunu pH probuyla aynı kapta aynı anda çalıştırırsan iki sensör birbirinin ölçümünü bozabilir; ya aynı anda ölçme ya da birini elektriksel olarak yalıtan bir modül kullan.

Arduino TDS kodu: medyan filtre ve kompanzasyon

  1. Kütüphane Yöneticisi'nden OneWire ve DallasTemperature kütüphanelerini kur.
  2. TDS modülünü ve DS18B20'yi tablodaki gibi bağla; probu ve sıcaklık sensörünü aynı suya daldır.
  3. Kodu yükle ve Seri Monitör'ü 115200 baud'da aç.
  4. Sayılar oturana kadar 20–30 saniye bekle; prob suya yeni girdiğinde ilk ölçümler dalgalanır.
  5. Elinde bilinen bir kalibrasyon sıvısı varsa probu ona daldır ve Seri Monitör'e örneğin cal:707 yaz.
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
Kod parçasıNe yapar?
Her 40 ms'de analogReadSon 30 ölçümü (1,2 saniye) halka şeklinde bir dizide tutar
medyan()Ortalamadan farklı olarak ani sıçramaları (parazit, kabarcık) tamamen yok sayar
1 + 0,02 × (T − 25)Gerilimi 25 °C'ye indirger; 30 °C'de bölen 1,10 olur
133,42 v³ − 255,86 v² + 857,39 vBu sensör kartı için deneysel olarak çıkarılmış gerilim-iletkenlik eğrisi
× 0,5İletkenliği TDS'ye çeviren katsayı (500 ölçeği)
setWaitForConversion(false)DS18B20'nin 750 ms'lik dönüşümünü beklemeden örneklemeye devam eder
cal:707 ve EEPROMBilinen sıvıya göre K katsayısını hesaplar ve kalıcı olarak saklar

Koddaki üçüncü dereceden polinom, sensör kartının çıkış gerilimini iletkenliğe çeviren deneysel bir eğridir; karttaki devre doğrusal olmadığı için basit bir çarpan yetmez. Bu eğri yaygın Gravity tipi TDS kartı için geçerlidir; farklı bir kart kullanıyorsan üreticinin formülünü kullan ya da birkaç bilinen sıvıyla kendi eğrini çıkar. Unutma, 5 V ile beslenen Uno'da analog okuma 5,0 V'a göre, ESP32 ve Pico'da 3,3 V'a göre hesaplanır; VREF değerini kartına göre seçmezsen sonuçlar baştan yanlış çıkar.

Kalibrasyon sıvısıyla TDS sensörü ayarı

Her prob ve kart arasında küçük farklar vardır; en doğru sonucu almak için sensörü değeri bilinen bir sıvıyla kalibre etmelisin. Laboratuvar ve elektronik malzemesi satıcılarında bulunan 1413 µS/cm'lik potasyum klorür (KCl) standart çözeltisi en yaygın seçenektir; 0,5 katsayısıyla yaklaşık 707 ppm'e karşılık gelir. Bazı kalem TDS ölçerlerle birlikte gelen 342 ppm'lik sodyum klorür çözeltisi de kullanılabilir. Kalibrasyon için probu temiz suyla durula, kâğıt havluyla kurula, çözeltiye daldır, 1–2 dakika bekle ve Seri Monitör'e cal: ile birlikte çözeltinin ppm değerini yaz. Kod, ölçtüğü değerle gerçek değer arasındaki oranı K katsayısı olarak EEPROM'a kaydeder; kart kapansa bile ayar kaybolmaz.

Kalibrasyon sıvısı yoksa geçici bir yöntem olarak iyi bir kalem TDS ölçerle aynı suyu ölçüp iki değeri karşılaştırabilirsin. Kendi çözeltini de hazırlayabilirsin: 1 litre damıtık suya 0,5 gram saf tuz (NaCl) koyarsan yaklaşık 500 ppm'lik bir çözelti elde edersin; tartının hassasiyeti sonucu doğrudan etkiler. Kalibrasyonu birkaç ayda bir tekrarla ve kullanılmış çözeltiyi şişeye geri dökme.

TDS değer tablosu: içme suyu, akvaryum ve hidroponik

Ölçtüğün sayının ne anlama geldiğini bilmek, sensörün kendisi kadar önemlidir. Dünya Sağlık Örgütü'nün tat değerlendirmesine göre 300 ppm'in altındaki su tat açısından mükemmel, 300–600 ppm iyi, 600–900 ppm orta, 900–1200 ppm zayıf, 1200 ppm'in üzeri ise kabul edilemez sayılır. Bunlar sağlık sınırı değil, tat ve kullanım rahatlığı için verilen aralıklardır. Aşağıdaki tablo yaygın kullanım alanları için tipik değerleri özetliyor.

Su türüTipik TDS (ppm)Yorum
Damıtık su, ters ozmoz (RO) çıkışı0–50Arıtma iyi çalışıyor
Dağ kaynağı, düşük mineralli şişe suyu20–150Çok hafif, yumuşak
Musluk suyu (şehre göre)100–500Kaynağa göre değişir; ani artış dikkat ister
Mineralli şişe suyu300–1500+Bilinçli olarak yüksek mineral
Tatlı su akvaryumu (genel)150–350Değişimlerden önce ve sonra ölç
Karides akvaryumu (Caridina)80–150RO suyuna mineral eklenerek ayarlanır
Afrika çiklit akvaryumu300–500Sert ve mineralli su sever
Deniz suyuYaklaşık 35.000Bu sensörün aralığının çok dışında

Hidroponikte besin çözeltisi genellikle iletkenlik (EC) olarak ifade edilir ve bitkiye göre değişir. Ancak dikkat: bu sensörün ölçüm aralığı 1000 ppm'de biter, domates ve biber gibi besin isteyen bitkilerin çözeltisi bu sınırı aşar. Bu durumda ya çözeltiden bir örneği bilinen oranda damıtık suyla seyreltip ölçer ve sonucu çarparsın ya da doğrudan daha geniş aralıklı bir EC sensörü kullanırsın.

BitkiÖnerilen EC (mS/cm)Yaklaşık TDS (0,5 ölçeği)
Marul, ıspanak0,8–1,2400–600 ppm
Fesleğen, nane1,0–1,6500–800 ppm
Çilek1,0–1,5500–750 ppm
Salatalık1,7–2,5850–1250 ppm (seyreltme gerekir)
Domates, biber2,0–3,51000–1750 ppm (seyreltme gerekir)

Su arıtma filtresi takibi

TDS sensörünün evde en faydalı kullanımı ters ozmoz (RO) arıtma cihazını izlemektir. RO membranı sağlıklıyken giren suyun minerallerinin büyük kısmını tutar; giriş 300 ppm iken çıkış genellikle 10–30 ppm civarındadır. Performansı tutma oranı = (1 − çıkış / giriş) × 100 formülüyle hesaplarsın: 300 ppm girip 15 ppm çıkıyorsa oran %95'tir. Membran yaşlandıkça çıkış TDS'si yavaş yavaş yükselir; oran %80–85'in altına inmeye başladığında membran ve ön filtreleri değiştirme zamanı yaklaşmıştır. İki prob ve iki DS18B20 ile giriş ve çıkışı aynı anda ölçen bir Arduino, bu değişimi aylar boyunca grafik olarak gösterebilir.

Karbon ve sediment filtreleri koku, tat, klor ve tortuyu tutar ama çözünmüş mineralleri neredeyse hiç azaltmaz; bu filtrelerin çıkışında TDS'nin girişle aynı kalması normaldir. TDS ile yalnızca RO ve iyon değiştirici (yumuşatıcı) sistemlerin performansı anlamlı şekilde izlenebilir. Ayrıca arıtma çıkışında düşük TDS görmek suyun mikrobiyolojik olarak güvenli olduğunu göstermez.

ESP32 ile TDS kaydı

ESP32 ile TDS ölçümlerini dakikada bir, zaman damgasıyla kaydedebilir ve ileride internete gönderebilirsin. Aşağıdaki kod saati NTP ile internetten alır, her dakika suyun sıcaklığını ve TDS değerini ölçer ve kartın kendi flaş belleğindeki LittleFS dosya sistemine "/tds.csv" adlı bir dosyaya "tarih,sıcaklık,tds" satırları ekler. Bu dosyayı daha sonra Excel'de açıp grafik çizebilirsin. ESP32'nin ADC'si doğrusal değildir; kod bu yüzden kart üzerindeki kalibrasyon verisini kullanan analogReadMilliVolts() fonksiyonunu kullanır. TDS sinyalini Wi-Fi açıkken de çalışan ADC1 pinlerinden birine (GPIO 32–39) bağlamalısın; ADC2 pinleri Wi-Fi ile birlikte kullanılamaz. NTP saatinin ayrıntıları ESP32 NTP saat yazısında.

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

Kaydı internete taşımak istersen aynı satırı LittleFS yerine bir Google E-Tablolar sayfasına ya da MQTT ile Home Assistant'a gönderebilirsin; ayrıntılar ESP32 Google Sheets ve ESP32 MQTT yazılarında. Flaş bellek sınırlı bir yazma ömrüne sahiptir; dakikada bir kısa satır sorun yaratmaz, ama her saniye yazmak yerine ölçümleri bellekte toplayıp aralıklı yazmak iyi bir alışkanlıktır.

Raspberry Pi Pico ile TDS (MicroPython)

Pico'da TDS sinyalini GP26'ya (ADC0), DS18B20'yi GP22'ye bağlarsın. MicroPython'da DS18B20 için gereken onewire ve ds18x20 modülleri firmware içinde hazır gelir, ek kurulum gerekmez. Pico'nun ADC'si read_u16() ile 0–65535 arasında bir değer döndürür; bunu 3,3 V'a göre gerilime çeviririz. Formül ve kompanzasyon Arduino koduyla aynıdır; K_FAKTOR değerini Arduino'daki kalibrasyon yöntemiyle bulup koda yazabilirsin.

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

TDS sensörü ile pH sensörü farkı

Su kalitesi projelerinde TDS ve pH sensörleri sık karıştırılır, oysa tamamen farklı şeyleri ölçerler. TDS suyun içindeki iyonların miktarını, pH ise suyun asitliğini ya da bazlığını (hidrojen iyonu etkinliğini) gösterir. Bir bardak suya birkaç damla limon suyu eklersen pH belirgin şekilde düşer ama TDS çok az değişir; bir tutam tuz eklersen TDS fırlar, pH neredeyse aynı kalır. Akvaryum ve hidroponikte genellikle ikisi birlikte izlenir.

ÖzellikTDS sensörüpH sensörü
Ölçtüğü şeyÇözünmüş iyon miktarı (iletkenlik)Asitlik / bazlık (0–14)
Birimppm (mg/L) ya da µS/cmpH birimi
ProbDayanıklı iki metal elektrotKırılgan cam elektrot
KalibrasyonTek nokta (ör. 1413 µS/cm)İki ya da üç nokta (pH 4, 7, 10 tampon)
BakımAra sıra temizlikIslak saklama, düzenli kalibrasyon, 1–2 yılda prob değişimi
FiyatUcuzDaha pahalı
Tipik kullanımArıtma takibi, sertlik, besin yoğunluğuAkvaryum, havuz, hidroponik pH ayarı

TDS sensörü ile proje fikirleri

  • Arıtma filtresi alarmı: RO çıkışında TDS 50 ppm'i geçince buzzer çal ve ekranda "filtre değiştir" yaz.
  • Akvaryum monitörü: TDS, sıcaklık ve su seviyesini tek ekranda göster, su değişim zamanını hatırlat.
  • Hidroponik besin kontrolü: EC düşünce peristaltik pompayla besin ekle; akıllı sera projesiyle birleştir.
  • Musluk suyu kaydı: Evdeki suyun TDS'sini günlerce kaydet ve şebeke değişimlerini grafikte gör.
  • Bitki sulama suyu: Yağmur suyu, musluk suyu ve arıtılmış suyu karşılaştır; tuzlanmaya hassas bitkiler için en uygununu seç.
  • Okul deneyi: Farklı miktarda tuz ve şeker çözerek iletkenlik ile çözünen madde türü arasındaki ilişkiyi göster.

Sık yapılan hatalar ve çözümleri

BelirtiOlası nedenÇözüm
Değer sürekli dalgalanıyorProb suya yeni girdi ya da kabarcık var20–30 saniye bekle, probu hafifçe salla, medyan filtre kullan
Sıcak ve soğuk suda farklı sonuçSıcaklık kompanzasyonu yokDS18B20 ekle ve sıcaklığı formüle ver
Bütün değerler yaklaşık %50 farklıVREF yanlış (5 V yerine 3,3 V ya da tersi)Kartının ADC referansını doğru yaz
Kalem ölçerden farklı sonuçFarklı dönüşüm katsayısı (0,5 / 0,7) ya da kalibrasyonsuzAynı ölçeği kullan, bilinen sıvıyla kalibre et
Yüksek değerlerde tavan yapıyorSensörün aralığı 1000 ppmÖrneği seyrelt ya da geniş aralıklı EC sensörü kullan
pH sensörüyle birlikte saçma sonuçlarİki prob aynı suda birbirini etkiliyorSırayla ölç ya da yalıtımlı modül kullan
ESP32'de Wi-Fi açılınca okuma bozuluyorSinyal ADC2 pinine bağlıGPIO 32–39 arasındaki ADC1 pinlerinden birini kullan
Probu her ölçümden sonra temiz suyla durula ve kuru sakla. Sürekli suda kalacaksa (akvaryum, hidroponik) birkaç haftada bir yüzeyindeki biyolojik tabakayı yumuşak bir fırçayla temizle; kirli elektrotlar zamanla daha düşük değer gösterir.

TDS sensörü, su kalitesini sayıya döken en ucuz ve en kolay araçtır: doğru sıcaklık kompanzasyonu ve basit bir kalibrasyonla musluk suyunu, arıtma cihazını, akvaryumu ve hidroponik çözeltini güvenle izleyebilirsin. Sonuçları yorumlarken TDS'nin mikrobiyolojik güvenliği ölçmediğini aklında tut. BlueGrays uygulamasında akıllı sulama istasyonu ve zaman damgalı sıcaklık kaydedici projelerini adım adım devre şemaları ve kodlarıyla bulabilir, TDS sensörünü bu projelere ekleyebilirsin.

Sıkça sorulan sorular

TDS değeri kaç olmalı?

İçme suyu için Dünya Sağlık Örgütü'nün tat değerlendirmesine göre 300 ppm'in altı mükemmel, 300–600 ppm iyi kabul edilir; 1200 ppm'in üzeri tat açısından kabul edilemez sayılır. Ters ozmoz arıtma çıkışında genellikle 10–50 ppm görülür. Akvaryum ve hidroponikte ideal değer canlıya ve bitkiye göre değişir.

TDS ölçer ne ölçer, suyun temiz olduğunu gösterir mi?

TDS ölçer suyun iletkenliğinden yola çıkarak içindeki çözünmüş mineral ve tuz miktarını tahmin eder. Bakteri, virüs, kurşun ya da tarım ilacı gibi kirleticiler iletkenliği pek değiştirmediği için TDS düşük diye su güvenli sayılmaz. TDS, arıtma performansını ve mineral yükündeki değişimi izlemek için kullanılmalıdır.

TDS sensörü nasıl kalibre edilir?

Probu temizleyip değeri bilinen bir kalibrasyon çözeltisine, örneğin 1413 µS/cm KCl standardına (yaklaşık 707 ppm) daldırırsın. Ölçüm oturunca okunan değer ile gerçek değerin oranı bir katsayı olarak kaydedilir ve sonraki tüm ölçümler bu katsayıyla çarpılır. Kalibrasyon sırasında sıcaklık kompanzasyonunun açık olması gerekir.

TDS ile EC arasındaki fark nedir?

EC (elektriksel iletkenlik) suyun elektriği ne kadar iyi ilettiğini µS/cm ya da mS/cm cinsinden doğrudan ölçer. TDS ise bu iletkenlikten bir katsayıyla, genellikle 0,5 ya da 0,7 ile hesaplanan tahmini çözünmüş madde miktarıdır (ppm). Hidroponikte EC, içme suyunda ise TDS daha yaygın kullanılır.

TDS sensörü sürekli suda kalabilir mi?

Prob su geçirmezdir ve akvaryum ya da hidroponik tankında sürekli kalabilir, ancak birkaç haftada bir temizlenmesi gerekir; sinyal kartı ise su geçirmez değildir ve kuru yerde durmalıdır. Prob yaklaşık 55 °C'nin üzerindeki sularda kullanılmamalıdır. Uzun süreli kullanımda ölçüm kayması için kalibrasyonu ara sıra tekrarla.

Arduino TDS sensörü ile pH ölçülür mü?

Hayır. TDS sensörü yalnızca iletkenliği ve buna bağlı çözünmüş madde miktarını ölçer; pH yani asitlik için cam elektrotlu ayrı bir pH sensörü gerekir. İkisi aynı projede kullanılabilir, ama aynı kapta aynı anda çalıştıklarında birbirlerinin ölçümünü bozabilecekleri için sırayla ölçmek ya da yalıtımlı modül kullanmak gerekir.

Tüm projeleri gör
Akıllı Sulama İstasyonu
#83İleri
Premium

Akıllı Sulama İstasyonu

Tatile gidince çiçeklerin kurumasın diye kendi kendine sulayan bir bahçıvan. Toprak nem sensörü toprağın ne kadar ıslak olduğunu ölçer; toprak kuruyunca Arduino su pompasını birkaç saniye çalıştırır v

5.0(42)
57
ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
#144İleri
Premium

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)

ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile dakikada bir sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki /temp_log.csv dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,

4.7(7)
12
ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
#117Orta

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)

DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

4.8(38)
56
DHT11 İle Sıcaklık Ve Nem
#55Orta

DHT11 İle Sıcaklık Ve Nem

Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

4.7(47)
73
NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
#44Başlangıç
Premium

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü

Ortamın sıcaklığını küçük bir boncuk gibi görünen sensörle ölç. NTC adlı bu parça ısındıkça elektriği daha kolay geçirir; Arduino bu değişimi okuyup bir formülle santigrat dereceye çevirir ve iki satı

4.5(33)
44
LCD Ekran ile Dijital Voltmetre
#56Orta
Premium

LCD Ekran ile Dijital Voltmetre

Pilin ya da adaptörün ne kadar gerilim verdiğini kendi yaptığın ölçü aletiyle öğren. İki dirençten oluşan bir bölücü yüksek gerilimi kartın okuyabileceği seviyeye indirir, Arduino da gerçek değeri hes

4.5(27)
36
Ldr İle Işık Şiddeti Okuma
#11Başlangıç

Ldr İle Işık Şiddeti Okuma

Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

4.6(81)
139