Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

10. ünite / 10

Akıllı ev ve akıllı sera: kural motoru ve sistem mimarisi

EĞER … İSE … kurallarıyla seranın pencere, fan, ısıtıcı ve sulamasını yönet; histerezis, BEKLE ve çevrim dışı güvenli varsayılanlarla bitirme projesinin mimarisini kur.

Bu ünitenin sonunda

  • EĞER/İSE/VE/BEKLE diliyle sera kuralları yazıp 24 saatlik benzetimde puanlamak
  • Histerezis ve en kısa bekleme süresiyle röle anahtarlamasını azaltmak
  • Cihaz üstü (yerel) kurallarla bulut kurallarını ayırmak ve çevrim dışı güvenli varsayılan tanımlamak
  • Bitirme projesinin cihaz, broker, kural motoru ve pano mimarisini çizmek

Ders notları

Önceki ünitelerin hepsi burada birleşir: sensörler telemetri yayımlar, eyleyiciler komut alır, pano durumu gösterir. Eksik olan karar veren parçadır: kural motoru. Bu derste kurallar iki dilli küçük bir dille yazılır:

EĞER sicaklik > 33 İSE fan = 1 BEKLE 5   |   IF temp > 33 THEN fan = 1 HOLD 5

Kuralların anlamı

  • Her dakika kurallar sırayla değerlendirilir; koşulu tutan kural eyleyiciyi ayarlar, aynı eyleyicide sonraki kural kazanır.
  • Eyleyici yeni bir kural gelene kadar değerini korur. "33 üstünde aç" ve "29 altında kapat" iki kural birlikte histerezis oluşturur.
  • BEKLE n: o eyleyici son değişimden bu yana n dakika geçmeden yeniden değiştirilemez. Röleyi, kompresörü ve pompayı sık anahtarlamadan korur.
  • Koşullar VE ile birleşir: EĞER toprak < 35 VE saat >= 6 İSE sulama = 1 gece sulamayı engeller.

Yerel mi, bulutta mı?

Isıtıcıyı kapatmak gibi güvenlik kuralları cihazda çalışmalıdır: Wi-Fi kopunca sera yanmamalı. Bulut kuralları (hava tahminine göre sulamayı ertelemek, birden çok seranın enerji bütçesi) daha esnektir ama gecikmeli ve bağlantıya bağımlıdır. İyi tasarım "yerel önce"dir: bulut kuralları güncellenebilir bir kural setini cihaza retained bir konuyla gönderir, cihaz doğrulayıp uygular. Bağlantı yoksa cihaz son geçerli kural setiyle, o da yoksa güvenli varsayılanlarla (ısıtıcı kapalı, pencere yarı açık) çalışır. Sensör arızasında (NaN ya da imkânsız değer) ısıtıcı asla açık kalmamalıdır.

Bitirme projesinin mimarisi

Akıllı sera dört katmandan oluşur: (1) ESP32 düğümleri: DHT22/BME280, LDR, toprak nemi, MOSFET ile fan ve pompa, servo ile pencere; (2) TLS'li MQTT broker ve ACL; (3) kural motoru: güvenlik kuralları cihazda, iyileştirme kuralları sunucuda; (4) pano: canlı grafik, gölge durumu, uyarılar. Kurallarını konfor yüzdesi, aşırı sıcak/soğuk dakika, anahtarlama sayısı ve enerjiyle puanla; bir sonraki derste sabit eşikler yerine öğrenilmiş bir anomali uyarısı kuracaksın.

Simülasyonlar

Akıllı sera: kural motoru

EĞER … İSE … kurallarıyla pencere, fan, ısıtıcı, sulama ve alarmı yönet. 24 saatlik sera gününü dış hava ve bulutlulukla benzet; konfor yüzdesi, aşırı sıcak/soğuk dakika, röle anahtarlama sayısı ve enerjiyle kurallarını puanla.

Sera günü: sıcaklık, nem, toprak nemi; seçilen eyleyicinin açık olduğu yer gölgeli1.2825.65074.498.704.789.5714.319.123.9saat
Konfor (18–30 °C): %62,6 · aşırı sıcak 0 dk · aşırı soğuk 0 dk · kuru toprak 0 dk Anahtarlama: pencere 2, fan 0, isitici 4, sulama 4, alarm 0 · enerji 6,31 kWh Puan: 47
10 kural geçerli

3B akıllı sera: cihazlar, broker ve MQTT paketleri

Seranın 24 saatini kural motoruyla oynat. Sensör düğümü her 10 dakikada sıcaklık yayımlar, eyleyici düğümü durum değiştirince kalıcı durum mesajı yollar; her paket broker'dan geçerek abonelerine uçar. Panodan elle komut gönder, pencere, fan, ısıtıcı ve sulamanın sahnede değiştiğini izle.

3B sahne yükleniyor…

Sürükle: döndür · iki parmak / tekerlek: yakınlaş · sağ tuş: kaydır

  • telemetri
  • komut
  • durum (retained)
11:00 · içeride 26,8 °C, dışarıda 22,0 °C, toprak %54 pencere kapalı · fan kapalı · ısıtıcı kapalı · sulama kapalı · havada 2 paket
  1. 11:00sera/01/sicaklik 26.8 sensor → broker → actuator, dashboard
  2. 10:50sera/01/sicaklik 26.2 sensor → broker → actuator, dashboard
  3. 10:40sera/01/sicaklik 25.7 sensor → broker → actuator, dashboard
  4. 10:30sera/01/sicaklik 25.1 sensor → broker → actuator, dashboard
Panodan elle komut
Komut paketi pano → broker → eyleyici yolunu izler. Cihazdaki kurallar bir sonraki değişimde yeniden karar verir: hangisi kazanmalı, düşün (10. ünite).

Kod

Arduino C++: cihaz üstünde histerezis, BEKLE ve çevrim dışı güvenli varsayılan
struct Act { int pin; bool on; uint32_t lastChange; uint32_t holdMs; };
Act fan    = { 26, false, 0, 5UL * 60000 };   // BEKLE 5 dk: röleyi koru
Act heater = { 27, false, 0, 10UL * 60000 };

bool set(Act& a, bool want) {
  if (want == a.on) return false;
  if (millis() - a.lastChange < a.holdMs) return false;  // çok erken: değiştirme
  a.on = want; a.lastChange = millis();
  digitalWrite(a.pin, want);
  return true;
}

void rules(float t, bool online) {
  // Histerezis: 33 üstünde aç, 29 altında kapat; arada önceki durum kalır
  if (t > 33) set(fan, true);
  else if (t < 29) set(fan, false);
  if (t < 14) set(heater, true);
  else if (t > 17) set(heater, false);
  if (isnan(t) || t > 45) set(heater, false);   // sensör arızası: ısıtıcıyı asla açık bırakma
  if (!online) { /* bulut yok: yerel kurallar çalışmaya devam eder */ }
}
MicroPython: kuralları JSON olarak MQTT'den alan küçük motor
import json
OPS = {">": lambda a, b: a > b, "<": lambda a, b: a < b, ">=": lambda a, b: a >= b, "<=": lambda a, b: a <= b}
kurallar = []                               # retained "sera/01/kurallar" konusundan gelir

def kurallari_al(msg):
    global kurallar
    yeni = json.loads(msg)
    if all(r["op"] in OPS for r in yeni):   # doğrula, sonra değiştir: bozuk kural seti çalışmayı durdurmaz
        kurallar = yeni

def degerlendir(ortam, eyleyici):
    for r in kurallar:                       # sırayla; aynı eyleyicide sonraki kazanır
        if all(OPS[c["op"]](ortam[c["s"]], c["v"]) for c in r["kosul"]):
            eyleyici[r["act"]] = r["val"]
    return eyleyici

Kendin dene

Kural motorunda varsayılan kuralları çalıştır ve konfor yüzdesini, fan anahtarlama sayısını ve enerjiyi not et. Fanın BEKLE süresini kaldır: anahtarlama sayısı ne oldu? Dış sıcaklığı düşürüp bulutluluğu artır ve ısıtıcı kurallarını konforu %90'ın üstüne çıkaracak, enerjiyi en az tutacak şekilde ayarla. Sözdizimi hatalı bir satır ekle ve hatanın satır numarasıyla gösterildiğini gör. Wokwi'de ESP32 + DHT22 + LED (fan) + servo (pencere) ile C++ kurallarını dene.

Sık yapılan hatalar

  • Aynı eşikte açıp kapatmak (EĞER > 30 aç, EĞER < 30 kapat): değer 30 civarında gezinince röle titreşir.
  • Güvenlik kuralını yalnız bulutta çalıştırmak: bağlantı kopunca ısıtıcı açık kalabilir.
  • Kural sırasını önemsememek: aynı eyleyicide sonraki kural kazanır, genel kural özel kuralı ezebilir.
  • Sensör NaN döndüğünde son kararı korumak: arızalı sensörle ısıtıcı saatlerce açık kalabilir.
  • Yeni kural setini doğrulamadan uygulamak: tek bir bozuk satır tüm otomasyonu durdurabilir.

Yazılım mühendisliği bağlantısı

Kural motoru küçük bir alan özgü dildir (DSL): ayrıştırıcı, değerlendirici ve benzetici ayrı ve saf parçalardır.

  • Ayrıştırıcıya hatalı girdiler için testler yaz: bilinmeyen sensör, eksik İSE, değer 0/1 dışında. Hata satır numarasıyla dönmeli.
  • Benzetimi bir regresyon testi olarak kullan: kural setini değiştiren her commit "konfor ≥ %90, ısıtıcı anahtarlaması ≤ 6" gibi bir ölçütü geçmeli.

Kendini sına

  1. "EĞER sicaklik > 33 İSE fan = 1" ve "EĞER sicaklik < 29 İSE fan = 0" kuralları varken sıcaklık 31 °C. Fan ne yapar?

  2. BEKLE 10 olan ısıtıcı 08:00'de açıldı. Kural 08:04'te kapatmak istiyor. Ne olur?

  3. Wi-Fi kopunca ısıtıcının güvenli durumu nasıl sağlanır?

  4. Aynı dakikada iki kural pencereyi farklı değerlere ayarlıyor. Hangisi kazanır?

Bu üniteden sonra bitirme projesinde

Parçalar ve ilgili sayfalar

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç