مشروع · مناخ · أتمتة
ترموستات يُدفّئ ويُبرّد معًا
معظم ترموستاتات الهواة تتوقّف عند «مدفأة تعمل، مدفأة تتوقّف». الغرفة المريحة فعلًا تحتاج النصف الآخر أيضًا: مروحة تبريد تنطلق تلقائيًّا عند تجاوز الحرارة، وتنبيه سخونة لليوم الذي يعلق فيه مرحّل المدفأة. DHT22 واحد ومرحّلان وESP32 تفعل الثلاثة — مع نقطة الضبط ورسم التاريخ وسجلّ الأحداث على لوحة يقدّمها الشريحة بنفسها.
لماذا التخلفيّة لا عتبة بسيطة
بدّل المدفأة عند نقطة الضبط تمامًا فسترتجف تشغيلًا وإيقافًا كلّ بضع ثوانٍ حول الحدّ — والمرحّلات تكره ذلك. نطاق التخلفيّة (دفّئ تحت −0.3 °م، أوقف فوق +0.3 °م) يجعل كلّ دورة طويلة وهادئة. التبريد التلقائيّ نطاق ثانٍ أوسع في الجهة الأخرى: المروحة عند +1.5 °م فوق الضبط، وتتوقّف مع التعافي. وتنبيه السخونة أبعد منهما ويعمل حتّى في وضع Hold — فالمرحّل العالق لا يبالي بأتمتتك:
if (!hold) {
// Heating hysteresis: heat below setpoint-0.3, stop above setpoint+0.3.
if (roomT < setpoint - 0.3f) heating = true;
else if (roomT > setpoint + 0.3f) heating = false;
// Auto-cooling: fan on when the room runs 1.5 C past the setpoint, off on recovery.
if (roomT > setpoint + 1.5f) { if (!fan && evlog) evlog->print("Overshoot - fan ON"); fan = true; }
else if (roomT < setpoint + 0.5f) fan = false;
}
// Overheat alert regardless of hold: something is wrong (sun on the sensor, heater stuck).
bool hot = roomT > setpoint + 4.0f;
if (hot && !overheat && evlog) evlog->print("OVERHEAT - check the heater");
overheat = hot; اللوحة
نقطة ضبط حيّة (أداة number)، وحالتا المرحّلين، وليد التنبيه ورسم الاتجاه — لوحة
التحكّم كلّها في عشرات الإعلانات:
dash.layout("Climate", RICON_THERMOMETER);
dash.gauge("Room temp", &roomT, 0, 40, "C");
dash.gauge("Humidity", &roomH, 0, 100, "%").variant("semi");
dash.chart("Trend", &roomT, "C"); // the history everyone wants
dash.layout("Control", RICON_POWER);
dash.number("Setpoint", &setpoint, 5, 35, 1);
dash.led("Heating", &heating); // relay 1
dash.led("Cooling fan", &fan); // relay 2 — auto-cooling
dash.led("Overheat!", &overheat); // buzzer + red LED
dash.toggle("Hold", &hold);
dash.beginAP("RisalDash-Thermostat", "12345678"); المثال المرفق (examples/04_Templates/Thermostat) يعمل على غرفة نهار/ليل وهميّة من
RisalFakeEnv، فيعمل جانبا التخلفيّة أمام عينيك: الصباح يدفّئ، والظهر
يتجاوز فتدور المروحة. بدّل سطرًا واحدًا بـ dht.readTemperature() الحقيقيّ ووصّل
المرحّلين حين ترضى عن النطاقات.
نحو منتج
احفظ نقطة الضبط في NVS لتنجو من إعادة التشغيل؛ أضِف MQTT + اكتشاف Home Assistant فيظهر الترموستات ككيان مناخ؛ أو دَع وكيل الذكاء الاصطناعيّ يقرأ الغرفة ويحرّك الضبط عبر MCP. نسخة الغرفة الكاملة — بالحركة والغاز — هي مراقب الغرفة.
اضبط نطاقات التخلفيّة على غرفة وهميّة الليلة — ووصّل المرحّلات لاحقًا.