Loyiha · Suv · Monitoring
Qachon boʻshashini oʻzi bashorat qiladigan suv baki
Bakda 62 % borligini bilish yaxshi. Uning 14 soatdan keyin boʻsh boʻlishini va toʻsatdan ortiqcha sarf yorilgan quvurga oʻxshashini bilish — mana shu chindan qutqaradi. Bitta suvga chidamli ultratovush datchigi va ESP32 sizga daraja, hajm, boʻshash prognozi, oqish alerti va avtomatik nasosni beradi — chip oʻzi beradigan dashboardda.
Oʻlchash — qopqoqdan bitta ping
JSN-SR04T (suvga chidamli HC-SR04) bak qopqogʻi ostiga oʻrnatiladi va suv yuzasiga
ping yuboradi. Aks-sado havo oraligʻini beradi; daraja bak balandligidan hisoblanadi:
levelPct = 100 · (1 − gapCm / TANK_CM), litr — sigʻimdan. Ulanish — standart ultratovush:
5 V quvvat, 3.3 V pin uchun ECHO’da boʻluvchi:
Prognoz — EMA, mashina oʻrganish emas
Boʻshash prognoziga bulutdagi model kerak emas. Sarf tezligini eksponensial oʻrtacha bilan silliqlang (bitta yuvilgan bachok prognozni choʻchitmasin) va qolgan darajani unga boʻling. Oqish detektori — oʻsha son + chegara: nasos oʻchiq boʻlsa-yu, suv maishiy meʼyordan ancha tez ketsa — nimadir oqyapti.
// --- the predictor: smooth the drain rate, project time-to-empty ---
float dPct = (prevPct - levelPct) * 240.0f; // %/min at 250 ms per tick
prevPct = levelPct;
if (!pump) ratePctMin += 0.05f * (dPct - ratePctMin); // EMA — calm, not jumpy
hoursLeft = ratePctMin > 0.01f ? levelPct / ratePctMin / 60.0f : 99;
// --- leak detection: dropping much faster than the household norm, pump off ---
bool leakNow = !pump && ratePctMin > 0.9f;
if (leakNow && !leak && evlog) evlog->print("LEAK suspected - close the valve");
leak = leakNow;
// --- auto-fill: pump on below 25 %, off above 90 % ---
if (levelPct < 25) pump = true;
else if (levelPct > 90) pump = false; Dashboard
Daraja bar-shkalasi, hajm, «Empty in» stat, trend grafigi, xom sensor sahifasi, oqish LED’i va nasos tumbleri — oʻnlab qatorda eʼlon qilinadi; butun UI’ni ESP oʻz access point’i orqali beradi:
dash.layout("Tank", RICON_WATER);
dash.gauge("Level", &levelPct, 0, 100, "%").variant("bar");
dash.stat("Volume", &liters, "L");
dash.stat("Empty in", &hoursLeft, "h"); // the prediction, live
dash.chart("Trend", &levelPct, "%");
dash.layout("Sensor", RICON_SIGNAL);
dash.metric("Air gap", &distCm, "cm"); // what the ultrasonic actually reads
dash.metric("Drain rate", &ratePctMin, "%/min");
dash.led("Leak suspected", &leak);
dash.toggle("Pump", &pump);
dash.beginAP("RisalDash-Tank", "12345678"); Kutubxonadagi namuna (examples/04_Templates/TankLevel) temirsiz
ishlaydi: bak boʻshaydi, toʻladi va vaqti-vaqti bilan «quvur yorilib», alert qanday ishlashini
koʻrasiz. Datchik kelganda bitta qatorni haqiqiy pingCm() ga almashtirasiz — bu
fake-sensor workflow.
Komponentlar roʻyxati
| Qism | Vazifa | ~Narx |
|---|---|---|
| ESP32 / ESP8266 | miya + Wi-Fi + dashboard | $3–5 |
| JSN-SR04T | suvga chidamli daraja | $3–4 |
| Rele moduli | nasos boshqaruvi | $1–2 |
| 5 V manba | quvvat | $2–3 |
Chegaralarni bugun sozlang — bak dam olish kunigacha kutadi.