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.
Zondlar
| Zond | Oʻlchaydi | Interfeys | Eʼtibor |
|---|---|---|---|
| pH zond + plata | kislotalilik 0–14 | analog | 4.0 / 6.86 buferlar bilan kalibrlang |
| TDS oʻlchagich | erigan moddalar (ppm) | analog | ~2 %/°C aldaydi — kompensatsiya! |
| Loyqalik | xiralik (NTU) | analog | optikani toza saqlang |
| DS18B20 | suv harorati | 1-Wire | poʻ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):
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 / sisterna — bak 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.