RisalDash RisalDash

Loyiha · Smart city · Monitoring

Mashinani oʻzi chaqiradigan aqlli axlat qutisi

Yarim boʻsh qutilarni aylanadigan axlat mashinasi yoqilgʻi yoqadi; toshib ketgan quti esa iflos qiladi. Yechim — qopqoqdagi $2 lik ultratovush datchigi va ESP32: har bir qutining toʻlishini oʻlchaymiz, barcha nuqtalarni bitta dashboardda koʻrsatamiz va quti toʻlishi bilan alert koʻtaramiz. Mana butun yigʻilma — avval uni umuman temirsiz ishga tushirish mumkin.

LoyihaSmart cityHC-SR04UltratovushESP32
ESP32 aqlli axlat qutisi loyihasi: ultratovush toʻlish darajasi, multi-quti dashboard va alertlar

Qanday oʻlchanadi — suv baki datchigi, teskari

Qopqoq ostidagi HC-SR04 pastga ping yuboradi va axlatgacha boʻlgan havo oraligʻini aytadi. Qisqa aks-sado = toʻla quti — suv darajasi mantigʻi, teskarisiga. Bitta qator aks-sadoni dispetcherga kerak narsaga aylantiradi:

fill = 100.0 * (1.0 - gapCm / BIN_CM);   // BIN_CM = boʻsh quti chuqurligi

Koʻchada suvga chidamli JSN-SR04T oling — matematika oʻsha, kallagi germetik. Ulanish — standart HC-SR04 (5 V + 3.3 V pin uchun ECHO’da boʻluvchi):

HC-SR04 ESP32’ga ECHO’da kuchlanish boʻluvchisi bilan ulangan
HC-SR04 ESP32’da — TRIG toʻgʻridan, ECHO 1k/2k boʻluvchi orqali. BoardLab’da yigʻilgan.

Dashboard — barcha qutilar bitta ekranda

ESP butun UI’ni oʻzi beradi (bulut va ilovasiz): har qutiga bar-shkala, uch holatli status-beyj (OK / Almost / FULL), «Bin B FULL — dispatch pickup» yozadigan hodisalar jurnali va haqiqiy chiroq yoki zummerga ulanadigan LED chiqishi. Chegaralar: 75 % dan yuqori — ogohlantirish, 90 % dan yuqori — trevoga.

#include <RisalUI.h>
#include <RisalFake.h>                      // test with no hardware; remove when the sensor arrives

RisalUI dash("Trash Bins");

const float BIN_CM = 60;                    // sensor-to-bottom depth of the bin
float fill[3] = {35, 62, 88};               // fill % per bin
int   state[3] = {0, 0, 0};                 // 0 ok · 1 almost full · 2 full
bool  alarmOut = false;
LogWidget* evlog = nullptr;

void setup() {
  dash.layout("Bins", RICON_HOME);
  dash.gauge("Bin A - Park", &fill[0], 0, 100, "%").variant("bar");
  dash.gauge("Bin B - Market", &fill[1], 0, 100, "%").variant("bar");
  dash.gauge("Bin C - School", &fill[2], 0, 100, "%").variant("bar");
  dash.badge("A status", &state[0]).labels("OK", "Almost", "FULL");
  evlog = &dash.log("Events", 6);
  dash.led("Pickup needed", &alarmOut);
  dash.beginAP("RisalDash-Trash", "12345678");
}

void loop() {
  dash.update();
  // real bin: fill = 100.0 * (1.0 - pingCm() / BIN_CM);
  for (int i = 0; i < 3; i++) {
    int s = fill[i] > 90 ? 2 : (fill[i] > 75 ? 1 : 0);
    if (s == 2 && state[i] != 2 && evlog)
      evlog->print(String("Bin ") + char('A' + i) + " FULL - dispatch pickup");
    state[i] = s;
  }
  alarmOut = state[0] == 2 || state[1] == 2 || state[2] == 2;
}

Sketch hech narsa ulamasdan shundayligicha ishlaydi — uchta simulyatsiya qilingan quti har xil tezlikda toʻladi va toʻlganda «olib ketiladi», shuning uchun chegaralar va alertlarni bugunoq sozlab, keyin bitta qatorni haqiqiy pingCm() ga almashtirasiz. Bu — fake-sensor workflow. Toʻliq namuna kutubxonada: examples/04_Templates/TrashBin.

Tuman miqyosiga

Har qutiga bitta ESP (LoRa yoki Wi-Fi), yoki sketchdagidek uchta qutini kuzatadigan bitta ESP. Har bir vidjet ayni paytda MCP-tool — AI-agent «qaysi qutilarni olib ketish kerak?» degan savolga toʻgʻridan temirdan javob beradi. Park uchun xuddi shu kod MQTT ga publish qiladi va Home Assistant’da avtomatik paydo boʻladi.

Komponentlar roʻyxati

QismVazifa~Narx
ESP32 DevKit (yoki ESP8266)miya + Wi-Fi + dashboard$3–5
HC-SR04 / JSN-SR04Ttoʻlish darajasi$1–4
LED + zummer (ixt.)joyida «toʻldi» indikatori$1
18650 + TP4056 yoki 5 V manbaquvvat$2–4

Butun dashboardni bugun yigʻing — qutilar keyin kelsa ham boʻladi.