TDS sensörü, sudaki çözünmüş tuz ve minerallerin toplam miktarını suyun elektrik iletkenliğinden tahmin eder ve sonucu ppm (yaklaşık mg/L) olarak verir. Arduino, Gravity TDS sensörü, DS18B20 sıcaklık sensörü ve OLED ekranla farklı suları karşılaştıran bir ölçer yapılabilir. TDS değeri tek başına suyun içilebilir olduğunu göstermez.
Musluk suyu, şişe suyu ve arıtılmış su arasındaki farkı sayılarla göstermek, fen bilimleri ve kimya derslerine uygun güzel bir öğrenci projesidir. Bu yazıda bir TDS sensörü, sıcaklık sensörü, OLED ekran ve Arduino ile su kalitesi ölçer yapıyoruz. TDS değerinin ne anlama geldiğini ve neyi ölçmediğini de dürüstçe açıklıyoruz. Malzeme listesi, bağlantı, kod, güvenlik notları ve TÜBİTAK 4006 sunum önerileri yazıda yer alıyor.
TDS nedir, sensör neyi ölçer?
TDS (Total Dissolved Solids, toplam çözünmüş katı madde), suda çözünmüş halde bulunan tuz, mineral ve diğer maddelerin toplam miktarını gösteren bir değerdir. Birimi ppm'dir; suda 1 ppm yaklaşık 1 mg/L demektir.
TDS sensörü bu maddeleri tek tek tartmaz. Suya batırılan iki metal uç arasından küçük bir alternatif akım geçirir ve suyun elektrik iletkenliğini ölçer. Suda çözünmüş iyonlar (kalsiyum, magnezyum, sodyum, klorür, bikarbonat gibi) arttıkça iletkenlik de artar. Sensör kartı bu iletkenliği bir dönüşüm katsayısıyla ppm değerine çevirir. Bu yüzden sonuç bir tahmindir.
TDS değeri suyun içilebilir olduğunu gösterir mi?
Hayır, TDS değeri tek başına suyun içilebilir ya da güvenli olduğunu göstermez. Düşük TDS'li bir su bakteri içerebilir, yüksek TDS'li bir su ise yalnızca mineralce zengin olabilir. İçme suyunun güvenliği ancak yetkili laboratuvarların mikrobiyolojik ve kimyasal analizleriyle belirlenir.
| TDS ölçümü neyi gösterir? | TDS ölçümü neyi göstermez? |
|---|---|
| Sudaki çözünmüş iyonların toplam miktarını (yaklaşık) | Bakteri, virüs ve parazitleri |
| Arıtma cihazının (ör. ters ozmoz) mineralleri ne kadar tuttuğunu | Kurşun, arsenik gibi düşük derişimdeki zararlı maddeleri ayrı ayrı |
| Suya tuz ya da mineral karıştığında oluşan değişimi | Şeker, alkol ve iyon oluşturmayan pek çok organik maddeyi |
| İki su örneği arasındaki farkı | Hangi maddenin suda olduğunu |
Dünya Sağlık Örgütü (WHO), TDS için sağlığa dayalı bir sınır değer koymaz; değer daha çok suyun tadıyla ilişkilendirilir. WHO'ya göre TDS'si yaklaşık 600 mg/L'nin altındaki su genellikle tat açısından iyi kabul edilir, 1000 mg/L'nin üstünde ise tat belirgin biçimde bozulur. Aşağıdaki aralıklar yalnızca genel bir fikir verir:
| TDS (ppm) | Genel yorum |
|---|---|
| 0 – 50 | Çok az mineral: damıtık su ya da ters ozmoz cihazı çıkışı |
| 50 – 300 | Düşük-orta mineralli; birçok şişe suyu ve musluk suyu bu aralıkta olabilir |
| 300 – 600 | Mineralce zengin; tadı fark edilebilir |
| 600 – 1000 | Yüksek; tat bozulabilir, kireçlenme artar |
| 1000 üstü | Bu sensörün ölçüm aralığının dışında |
Hangi malzemeler gerekir?
Arduino Uno, Gravity TDS sensör kiti, su geçirmez DS18B20 sıcaklık sensörü, 0,96 inç OLED ekran ve bir 4,7 kΩ direnç yeterlidir. Sıcaklık sensörü gereklidir, çünkü suyun iletkenliği sıcaklıkla yaklaşık %2/°C değişir.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino Uno R3 (CH340, USB kablolu) | 1 | Ölçer, hesaplar, ekrana yazar |
| DFRobot Gravity TDS ölçüm sensörü kiti | 1 | Suyun iletkenliğini ölçer (0-1000 ppm) |
| Su geçirmez DS18B20 sıcaklık sensörü | 1 | Su sıcaklığını ölçer, düzeltme için |
| 0,96 inç 128x64 I2C OLED ekran (SSD1306) | 1 | Sonucu gösterir |
| 4,7 kΩ direnç (direnç seti) | 1 | DS18B20 veri hattı için pull-up |
| Jumper kablo, breadboard, temiz cam bardaklar | 1 set | Bağlantı ve su örnekleri |
Kit; prob, sinyal dönüştürücü kart ve bağlantı kablosuyla gelir. Kart 3,3-5,5V ile çalışır ve 0-2,3V arasında analog çıkış verir. Üreticinin belirttiği doğruluk, 25 °C'de tam ölçeğin ±%10'udur; yani sonuçlar ±100 ppm'e kadar sapabilir. Bu yüzden ölçer, kesin değer yerine karşılaştırma için idealdir.
Devre nasıl bağlanır?
TDS kartının A (sinyal) ucu A1'e, DS18B20'nin sarı veri kablosu D2'ye, OLED ekranın SDA ucu A4'e, SCL ucu A5'e bağlanır. Tüm modüller Arduino'nun 5V ve GND pinlerinden beslenir.
- TDS kartını bağlayın: + → 5V, − → GND, A → A1. Probu kartın üzerindeki sokete takın.
- DS18B20'yi bağlayın: kırmızı → 5V, siyah → GND, sarı → D2. Sarı kablo ile 5V arasına 4,7 kΩ direnç koyun.
- OLED ekranı bağlayın: VCC → 5V, GND → GND, SDA → A4, SCL → A5.
- Kütüphane Yöneticisi'nden "OneWire", "DallasTemperature", "Adafruit SSD1306" ve "Adafruit GFX" kütüphanelerini kurun.
- Kodu yükleyin. TDS probunu ve DS18B20'yi aynı bardaktaki suya batırın; Arduino ve kartlar masada, sudan uzakta kalsın.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_SSD1306.h>
const byte TDS_PIN = A1, DS_PIN = 2;
const float VREF = 5.0; // Arduino Uno analog referansi
const float KAL = 1.0; // kalibrasyon katsayisi
OneWire ow(DS_PIN);
DallasTemperature ds(&ow);
Adafruit_SSD1306 ekran(128, 64, &Wire, -1);
int ornek[30];
byte sira = 0;
unsigned long sonOrnek = 0, sonGoster = 0;
int medyan() { // 30 olcumun ortanca degeri
int k[30];
memcpy(k, ornek, sizeof(k));
for (byte i = 1; i < 30; i++) {
int v = k[i]; int j = i - 1;
while (j >= 0 && k[j] > v) { k[j + 1] = k[j]; j--; }
k[j + 1] = v;
}
return k[15];
}
void setup() {
Serial.begin(9600);
ds.begin();
ds.setResolution(10); // olcum ~190 ms surer
ekran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
ekran.setTextColor(SSD1306_WHITE);
}
void loop() {
if (millis() - sonOrnek >= 40) { // saniyede 25 ornek
sonOrnek = millis();
ornek[sira] = analogRead(TDS_PIN);
sira = (sira + 1) % 30;
}
if (millis() - sonGoster < 1000) return;
sonGoster = millis();
ds.requestTemperatures();
float t = ds.getTempCByIndex(0);
if (t < -50) t = 25.0; // sensor yoksa 25 C kabul et
float v = medyan() * VREF / 1024.0;
float vk = v / (1.0 + 0.02 * (t - 25.0)); // 25 C'ye gore duzelt
float tds = (133.42 * vk * vk * vk - 255.86 * vk * vk + 857.39 * vk) * 0.5 * KAL;
ekran.clearDisplay();
ekran.setTextSize(1); ekran.setCursor(0, 0);
ekran.print(F("TDS (ppm)"));
ekran.setTextSize(3); ekran.setCursor(0, 16);
ekran.print(tds, 0);
ekran.setTextSize(1); ekran.setCursor(0, 54);
ekran.print(F("Su: ")); ekran.print(t, 1); ekran.print(F(" C"));
ekran.display();
Serial.print(t, 1); Serial.print(F(" C, ")); Serial.print(tds, 0); Serial.println(F(" ppm"));
}
Koddaki üçüncü dereceden denklem, üreticinin bu prob için yayımladığı gerilim-iletkenlik eğrisidir; 0,5 çarpanı iletkenliği TDS'ye çeviren katsayıdır. 30 ölçümün ortanca değeri (medyan) alındığı için tek tük hatalı okumalar sonucu bozmaz. DS18B20'nin kullanımı DS18B20 sıcaklık sensörü yazısında, ekran ayrıntıları ise SSD1306 OLED ekran yazısında anlatılıyor.
Ölçer nasıl kalibre edilir?
En kolay yol, ölçeri değeri bilinen bir çözeltiyle ya da güvenilir bir ticari TDS kalemiyle karşılaştırıp KAL katsayısını ayarlamaktır. Örneğin kalem 200 ppm, sizin ölçeriniz 180 ppm gösteriyorsa KAL = 200 / 180 ≈ 1,11 yazarsınız.
Ölçümden önce probu saf suyla çalkalayıp kurulayın. Her ölçümde probu bardağın ortasına, kenarlara değmeyecek biçimde batırın ve değer sabitlenene kadar 10-20 saniye bekleyin.
Hangi güvenlik kurallarına dikkat edilmeli?
Bu proje yalnızca USB'nin 5V gerilimiyle çalışır; sensör ya da devre şebeke elektriğine, su ısıtıcısına veya akvaryum ısıtıcısına bağlanmaz.
- Suya yalnızca prob ve DS18B20'nin metal ucu girer; Arduino, kartlar ve kablo bağlantıları kuru kalmalıdır.
- Üretici, probun 55 °C'nin üstündeki suda kullanılmamasını belirtir; sıcak su ölçmeyin.
- Deneyde tuz eklediğiniz ya da ölçüm yaptığınız suları içmeyin.
- Kimyasal, deterjan ya da bilinmeyen sıvıları ölçmeyin; deneyleri bir yetişkin gözetiminde yapın.
Projeyi nasıl sunarsınız?
Projeyi, aynı sıcaklıktaki farklı su örneklerini ölçüp karşılaştırma tablosu ve grafikle sunabilirsiniz. Ölçüm sonuçlarınızı kendiniz alın; aşağıdaki fikirler deney planı içindir.
- Örnekler: Damıtık su, musluk suyu, iki farklı marka şişe suyu, varsa arıtma cihazı çıkışı.
- Etiket karşılaştırması: Şişe sularının etiketindeki mineral değerlerini toplayıp ölçerin sonucuyla karşılaştırın; farkı tartışın.
- Tuz deneyi: 200 mL damıtık suya birer tutam tuz ekleyip her seferinde ölçün; tuz miktarı ile ppm arasındaki ilişkiyi grafiğe dökün.
- Sıcaklık deneyi: Aynı suyu soğukken ve ılıkken ölçün, sıcaklık düzeltmesi açıkken ve kapalıyken sonuçları karşılaştırın.
- Dürüst sonuç: Raporunuza "TDS, suyun güvenli olduğunu göstermez" cümlesini mutlaka ekleyin; jüri bu bilinci önemser.
Sık sorulan sorular
Damıtık suda neden tam sıfır görmüyorum?
Ölçerin doğruluğu tam ölçeğin ±%10'u, yani yaklaşık ±100 ppm olduğu için düşük değerlerde birkaç ppm ya da onlarca ppm sapma normaldir. Ayrıca damıtık su açık havada karbondioksit çözer ve iletkenliği biraz artar. Probu da önceki örnekten kalan sudan arındırmak için iyice çalkalayın.
Ölçer 1000 ppm'in üstünü gösterebilir mi?
Bu sensör kiti 0-1000 ppm aralığı için tasarlanmıştır; daha yüksek değerlerde sonuç güvenilir değildir. Deniz suyu ya da çok tuzlu çözeltiler binlerce ppm'dir ve bu kitle ölçülmez. Yüksek değerler için endüstriyel TDS ya da iletkenlik vericileri kullanılır.
Değer sürekli dalgalanıyorsa ne yapmalıyım?
Probun bardağın kenarına değmediğinden ve suyun hareketsiz olduğundan emin olun. USB kablosunu dizüstü bilgisayarın şarj adaptörü takılıyken kullanmak gürültüyü artırabilir; adaptörü çıkarıp deneyin. TDS probunu pH probu gibi başka sensörlerle aynı kapta kullanmak da ölçümü etkileyebilir.
Bu ölçerle akvaryum ya da hidroponik suyu ölçülebilir mi?
Evet, 1000 ppm'in altındaki akvaryum ve hidroponik sularındaki değişimi izlemek için kullanılabilir. Bu alanlarda çoğu zaman mutlak değerden çok değişim önemlidir; ölçümleri her gün aynı sıcaklıkta yapın. Hassas besin ayarı için kalibre edilmiş ticari ölçerlerle kontrol edin.
Özet
- TDS, sudaki çözünmüş iyonların toplamını iletkenlikten tahmin eder; birimi ppm (≈ mg/L) olarak verilir.
- TDS değeri suyun içilebilir olduğunu göstermez; bakteri ve pek çok zararlı madde bu ölçümde görünmez.
- TDS kartı A1'e, DS18B20 D2'ye (4,7 kΩ pull-up ile), OLED SDA/SCL A4/A5'e bağlanır.
- Kit 0-1000 ppm ölçer, doğruluğu ±%10 tam ölçektir; sıcaklık düzeltmesi %2/°C ile yapılır.
- Proje en iyi, farklı suları karşılaştıran bir deney olarak sunulur.
