RisalDash RisalDash

Loyiha · Suv sifati · Avtomatlashtirish

Koʻrsatkichga qarab harakat qiladigan suv sifati

Akvarium, gidroponika idishi va quduq bitta savol beradi: suv hali yaxshimi? Toʻrt zond javob beradi — pH, TDS, loyqalik va harorat — ammo xom raqamlar harorat kompensatsiyasisiz aldaydi, muammoni faqat koʻrsatadigan monitor esa yarim yigʻilma. Bu loyiha suvga Good / Fair / Poor bahо beradi va buzilishda toza suv nasosini oʻzi yoqadi.

LoyihaSuv sifatipHTDSESP32
ESP32 suv sifati loyihasi: pH, TDS, loyqalik, DS18B20 va avto-nasos

Zondlar

ZondOʻlchaydiInterfeysEʼtibor
pH zond + platakislotalilik 0–14analog4.0 / 6.86 buferlar bilan kalibrlang
TDS oʻlchagicherigan moddalar (ppm)analog~2 %/°C aldaydi — kompensatsiya!
Loyqalikxiralik (NTU)analogoptikani toza saqlang
DS18B20suv harorati1-Wirepoʻlat suvga chidamli versiya

DS18B20 4.7 k tortuvchi bilan 1-Wire orqali ulanadi; uch analog zond ADC pinlarga (ESP32’da ADC1, GPIO32–39 — Wi-Fi yoniqda ADC2 ishlamaydi):

DS18B20 ESP32’ga maʼlumot liniyasida 4.7k tortuvchi bilan ulangan
DS18B20 1-Wire’da — maʼlumotga 4.7 k tortuvchi kerak. BoardLab’da yigʻilgan.

Hamma oʻtkazib yuboradigan qism: harorat kompensatsiyasi

Oʻtkazuvchanlik harorat bilan oshadi, shuning uchun 30 °C suvdagi TDS zond xuddi shu suvni 25 °C da koʻrsatganidan ~10 % koʻp koʻrsatadi. Bu «hammasi joyida» bilan yolgʻon trevoga orasidagi farq. Bitta qator tuzatadi — dashboard esa xom va kompensatsiyalanganini yonma-yon koʻrsatadi:

// Temperature compensation: a TDS/EC probe drifts ~2 %/°C — normalise to 25 °C.
tds = tdsRaw / (1.0f + 0.02f * (waterT - 25.0f));
ec  = tds * 2.0f;

// Quality score from all three probes (drinking-ish thresholds; tune per use).
int score = 0;
if (tds > 500 || ph < 6.5f || ph > 8.5f || turb > 50) score = 2;        // poor
else if (tds > 300 || ph < 6.8f || ph > 8.0f || turb > 25) score = 1;   // fair
if (score == 2 && quality != 2 && evlog) evlog->print("POOR water - pump + check filter");
quality = score;

// Auto-actuation: poor quality kicks the fresh-water pump in until it recovers.
if (score == 2) pump = true;
else if (score == 0) pump = false;

Dashboard

Ogʻir ishni presetlar qiladi — dash.sensor("tds"|"ph"|"turbidity"|"ds18b20", …) toʻgʻri vidjet, birlik va diapazonga ochiladi; beyj xulosa chiqaradi, tumbler nasos relesini boshqaradi:

dash.layout("Water", RICON_WATER);
dash.sensor("tds", &tds, &ec);           // TDS ppm gauge + EC metric (compensated)
dash.sensor("ph", &ph);                  // pH gauge 0..14
dash.sensor("turbidity", &turb);         // NTU gauge
dash.sensor("ds18b20", &waterT);         // water temperature
dash.badge("Quality", &quality).labels("Good", "Fair", "POOR");

dash.layout("Control", RICON_GAUGE);
dash.metric("TDS raw", &tdsRaw, "ppm");  // before compensation — see the difference
dash.led("Alert", &alarmOut);
dash.toggle("Fresh-water pump", &pump);
dash.beginAP("RisalDash-Water", "12345678");

Kutubxonadagi namuna (examples/04_Templates/WaterQuality) dreyflaydigan fake zondlarda ishlaydi — Good→Fair→POOR oʻtishlar, jurnal qatori va avto-nasos bir tomchi suvsiz ishga tushadi. Haqiqiy zondlarni kelganda kalibrlaysiz; sketch oʻzgarmaydi.

Bu yigʻilma qayerga mos

Akvarium — isitgich relesini qoʻshsangiz, tayyor AquariumController. Gidroponika — eritmalar uchun muhim EC allaqachon dashboardda. Quduq / sisternabak monitori bilan juftlikda: daraja + sifat bitta chipda. Alertlar MQTT / Home Assistant ga ketadi, har bir zondni AI-agent MCP orqali oʻqiydi.

Chegaralarni bugun fake’larda sozlang — haqiqiy zondlarni yetkazib berilgan kuni kalibrlaysiz.