Okullar için Robotik ve Mühendislik · anaokulundan liseye

Tarayıcı simülasyonu + gerçek donanım seçeneğiBitirme

Akıllı sera (ya da akıllı ev) sistemi

İki ESP32 düğümü, bir MQTT broker'ı, kural motoru ve canlı pano: sıcaklık, nem, ışık ve toprak nemine göre pencere, fan, ısıtıcı ve sulamayı yöneten, bağlantı koptuğunda güvenli kalan bir sistem.

Senaryo

Bir okul serası hafta sonları kimsesiz kalıyor. Sıcak günlerde bitkiler yanıyor, soğuk gecelerde donuyor. Senden sensör düğümü ve eyleyici düğümünden oluşan, MQTT ile haberleşen, kurallarla kendini yöneten ve öğretmene telefondan canlı durum ve uyarı gösteren bir sistem isteniyor. Aynı tasarım bir evin ısıtma ve aydınlatmasına da uyarlanabilir.

Gereksinimler (test edilebilir)

  • G1: Sensör düğümü sıcaklık, nem, basınç ve ışığı en çok 60 s aralıkla, ölü bantla (değişince bildir) ve en az 15 dakikada bir kalp atışıyla yayımlar.
  • G2: Konu ağacı belgelenmiştir (sera/<düğüm>/<ölçüm>, sera/<düğüm>/komut/<eyleyici>, sera/<düğüm>/durum); durum konusu kalıcıdır ve son vasiyetle "offline" olur.
  • G3: Eyleyici komutları idempotenttir (mutlak değer + komut kimliği); aynı komutun iki kez gelmesi durumu bozmaz.
  • G4: Kurallar cihaz üstünde çalışır; Wi-Fi ya da broker 5 dakikadan uzun koparsa ısıtıcı kapanır, pencere yarı açık kalır (güvenli varsayılan).
  • G5: Sıcaklık 36 °C'yi aşınca 30 s içinde uyarı yayımlanır; histerezisle aynı olay için tekrar eden uyarı gönderilmez.
  • G6: Pano son 24 saati gösterir, çizimde min/max seyreltme kullanır ve tüm düğümlerin çevrim içi durumunu gösterir.
  • G7: Bağlantı TLS'lidir, her düğümün kendi kimliği ve ACL kaydı vardır; parolalar depoda yoktur.
  • G8: Pille çalışan sensör düğümünün hesaplanan pil ömrü en az 30 gündür (derin uyku ile).

Mimari

  • Sensör düğümü (ESP32 + DHT22 + BME280 + LDR): uyan, oku, bağlan, yayımla, derin uyku; okuma sayacı RTC belleğinde.
  • Eyleyici düğümü (ESP32 + röle/MOSFET + servo + OLED): komut konularına abone, kural motoru ve güvenli varsayılan burada; durumu kalıcı mesajla bildirir.
  • Broker (Mosquitto, TLS 8883, parola dosyası + ACL); bulutta ya da okul sunucusunda.
  • Pano (Node-RED, Grafana ya da bu dersteki pano yapısı): telemetri konularına abone, halka tampon ve uyarı listesi.
  • Yazılım katmanları: sürücü (sensör okuma) / alan mantığı (kurallar, histerezis, saf fonksiyon) / iletişim (MQTT, Wi-Fi yeniden bağlanma). Alan mantığı donanımsız test edilir.

Testler

  • Birim: kural motoru ve histerezis için en az 10 test (eşik altı, eşik üstü, BEKLE süresi, güvenli varsayılan).
  • Birim: konu ve yük biçimi için ayrıştırma testleri (bozuk JSON, eksik alan, yanlış tip).
  • Tümleşik: broker'ı durdur, 6 dakika bekle: eyleyici güvenli varsayılana geçiyor ve vasiyet "offline" yayımlanıyor mu?
  • Tümleşik: aynı komutu üç kez gönder: röle durumu ve komut sayacı doğru mu?
  • Kabul: tarayıcıdaki kural motoru simülasyonunda üç hava senaryosunda (sıcak, soğuk, bulutlu) konfor en az %85, aşırı sıcak 0 dakika.
  • Güvenlik: anonim istemci bağlanamıyor; bir düğüm başka düğümün komut konusuna yazamıyor.

Demo

  • 5 dakikalık canlı gösterim: pano, sıcaklığı elle artırınca (saç kurutma makinesi ya da simülasyon) pencere ve fanın açılması, uyarının gelmesi.
  • Kabloyu çek: panoda düğümün "offline" olduğunu ve eyleyicinin güvenli varsayılana geçtiğini göster.
  • Mimari çizimi, konu ağacı ve test raporunu (geçen/kalan) sun; pil ömrü hesabını göster.

Simülasyonda çalış

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).

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

Başlangıç kodu

Arduino C++: eyleyici düğümü iskeleti
#include <WiFi.h>
#include <PubSubClient.h>
#include "secrets.h"            // WIFI_SSID, WIFI_PASS, MQTT_USER, MQTT_PASS (git'e girmez)

struct Env { float temp; float hum; float soil; };
struct Acts { bool window; bool fan; bool heater; bool pump; };

// Alan mantığı: saf fonksiyon, donanımsız test edilir
Acts decide(const Env& e, const Acts& now) {
  Acts a = now;
  if (e.temp > 30) a.window = true;  else if (e.temp < 26) a.window = false;   // histerezis
  if (e.temp > 33) a.fan = true;     else if (e.temp < 29) a.fan = false;
  if (e.temp < 14) a.heater = true;  else if (e.temp > 17) a.heater = false;
  if (e.soil < 35) a.pump = true;    else if (e.soil > 60) a.pump = false;
  return a;
}

// Bağlantı 5 dakikadan uzun koparsa güvenli varsayılan
Acts failsafe(const Acts& now) { Acts a = now; a.heater = false; a.window = true; a.pump = false; return a; }

WiFiClient net;            // teslimde WiFiClientSecure + CA sertifikası
PubSubClient mqtt(net);
Env env{20, 60, 50};
Acts acts{};
unsigned long lastSeen = 0;

void setup() { /* Wi-Fi, MQTT, son vasiyet, abonelikler (ünite 2, 4, 5) */ }

void loop() {
  if (mqtt.connected()) { mqtt.loop(); lastSeen = millis(); }
  acts = (millis() - lastSeen > 5UL * 60 * 1000) ? failsafe(acts) : decide(env, acts);
  // eyleyicilere yaz, durum değiştiyse kalıcı durum mesajı yayımla
}

Teslimler

  1. 3. üniteden sonra
    Gereksinim ve pin planı

    G1–G8'i kendi serana uyarla, her biri için ölçülebilir kabul ölçütü yaz; iki düğümün pin planını planlayıcıda hatasız çıkar ve REST ile yerel durum sayfası tasarla.

    HTTP, REST ve JSON: ESP32 bir web sunucusu
  2. 5. üniteden sonra
    Konu ağacı ve MQTT sözleşmesi

    Konu ağacını, yük biçimlerini, QoS ve retain kararlarını ve son vasiyeti bir sayfalık sözleşme olarak yaz; broker simülasyonunda dene.

    MQTT güvenilirliği: QoS, kalıcı mesaj, son vasiyet
  3. 7. üniteden sonra
    Uçtan uca ilk sürüm

    Sensör düğümü yayımlıyor, eyleyici düğümü idempotent komutla röle ve servoyu sürüyor, pano canlı çiziyor (Wokwi ya da gerçek kart).

    Uzaktan eyleyiciler ve canlı pano
  4. 9. üniteden sonra
    Güç ve güvenlik

    Derin uyku ile pil ömrü hesabı (en az 30 gün), TLS, cihaz başına kimlik ve ACL; güvenlik denetiminde risk puanı 20'nin altında.

    IoT güvenliği ve Bluetooth Low Energy
  5. 10. üniteden sonra
    Kural motoru, testler ve demo

    Cihaz üstü kurallar ve güvenli varsayılan; test raporu; 5 dakikalık demo videosu ve mimari çizimi.

    Akıllı ev ve akıllı sera: kural motoru ve sistem mimarisi
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ç