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

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

Sıcaklık tahmini ve anomali uyarısı

Sera sıcaklığını 30 dakika sonrası için tahmin eden, tahmin artığı beklenmedik biçimde büyüyünce (takılı kalan ısıtıcı gibi) uyarı veren ve cihaz üstünde çalışan küçük bir model: veriden C koduna, testten demoya.

Senaryo

Seranın ısıtıcı rölesi bazen yapışıyor ve kimse fark etmeden sıcaklık saatlerce yükseliyor. Sabit bir "30 °C üstü alarm" eşiği öğle sıcağında boşuna çalıyor, gece ise geç kalıyor. Senden geçmiş veriden "normal"i öğrenen, normalden sapmayı erken yakalayan, yanlış alarmı az ve ESP32'de çalışabilecek kadar küçük bir tahmin ve uyarı sistemi isteniyor. Veri: /veri/ml/sera-sensorleri.csv (7 gün, 10 dakikada bir) ya da kendi kaydın.

Gereksinimler (test edilebilir)

  • G1: Temizleme hattı belgelenmiştir; 85 °C ve −40 °C sıçramaların tamamı işaretlenir, eksikler doldurulur, gerçek değere göre RMSE raporlanır.
  • G2: Model 30 dakika sonrasını tahmin eder ve zamana göre bölünmüş test kümesinde "değişmez" tabanından en az %30 daha düşük RMSE verir.
  • G3: Doğrulama dürüsttür: rastgele bölme kullanılmaz, eğitim ve test arasında ufuk kadar boşluk vardır; özelliklerde gelecekten bilgi yoktur (testle kanıtlanır).
  • G4: Uyarı 5. gündeki ısıtıcı arızasını başladıktan sonra en çok 60 dakika içinde yakalar; 7 günde en çok 2 yanlış alarm verir.
  • G5: Uyarı histerezislidir (açma eşiği > kapama eşiği) ve aynı olay için bekleme süresi içinde tekrarlanmaz.
  • G6: Model C koduna çevrilir; sabit noktalı sürümün float sürüme göre en büyük hatası 0,05 °C'nin altındadır ve toplam int32'ye sığar.
  • G7: Cihaz üstü kod en çok 1 KB ağırlık ve tampon belleği kullanır; tahmin başına süresi ölçülür ya da hesaplanır.

Mimari

  • Veri katmanı: kaydedici (ESP32 + DHT22/BME280/LDR) ya da CSV; şema: dakika, saat, sicaklik, nem, basinc, isik, mesafe, ariza.
  • Hat (Python, tarayıcıda): Hampel → doğrusal ara değer → özellik tablosu (gecikmeler, kayan ortalama/σ, sin/cos saat, ışık) → ridge → değerlendirme.
  • Dışa aktarım: ağırlıklar → C başlık dosyası (float ve Q-biçimi); aynı tamsayı hesabını yapan Python/JS işleviyle birebir sınanır.
  • Cihaz: halka tamponda son 12 örnek, özellik hesabı, tahmin, artık z-skoru, histerezisli uyarı durum makinesi; uyarı MQTT ile yayımlanır (IoT dersi).
  • Her adım saf fonksiyondur; dosya okuma, ağ ve ekran kenarda kalır, böylece hat ve cihaz mantığı donanımsız test edilir.

Testler

  • Birim: temizleme işlevleri için kenar durumları (baştaki NaN, art arda NaN, tek sıçrama, basamak).
  • Birim: sızıntı testi: hedefi gelecekte bozunca (h adım sonrasını değiştirince) hiçbir özellik değişmemeli.
  • Birim: sabit noktalı tahmin ile float tahmin 100 rastgele girdide 0,05 °C içinde.
  • Tümleşik: kayan pencereli doğrulamanın 4 katında da model tabanı geçiyor.
  • Kabul: uyarı simülasyonunda arıza yakalanıyor, gecikme ≤ 60 dk, yanlış alarm ≤ 2.

Demo

  • Defter ya da tarayıcı çalıştırıcısında hattı baştan sona çalıştır: temizleme grafiği, özellik tablosu, model ve taban RMSE'si.
  • Üretilen C kodunu göster; Wokwi ya da gerçek ESP32'de kaydedilmiş veriyi yeniden oynatarak uyarının arıza anında yandığını göster.
  • Yanlış alarm ve gecikme ödünleşimini eşik değiştirerek anlat; test raporunu sun.

Simülasyonda çalış

3B sera: ölçüm, tahmin ve anomali

Yedi günlük sera verisini 3B serada oynat. Yatakların rengi sıcaklığı, direkteki etiket gerçek ve tahmin değerini, öndeki sütunlar son iki saatin tahmin artığını gösterir. 5. günde ısıtıcı takılınca artık büyür, fener sarıdan kırmızıya döner.

3B sahne yükleniyor…

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

5. gün 08:00 · gerçek 19,15 °C, tahmin (30 dk önce) 18,72 °C, z = 1,10 Durum: normal
7 günde uyarılar: 3. gün 08:30, 4. gün 08:30, 5. gün 13:50, 5. gün 19:10

Sıcaklık tahmini ve anomali uyarısı

Model ilk dört günde (arızasız) eğitilir, sonra her örnekte tahmin artığının z-skoru hesaplanır. Açma ve kapama eşiği (histerezis), ardışık örnek sayısı ve bekleme süresiyle uyarıyı ayarla: 5. gündeki ısıtıcı arızasını yakala, yanlış alarmı az tut.

Gerçek ve tahmin sıcaklık (1–4. günlerde eğitildi)1216.821.626.431.20.061.452.834.225.616.99gün°C
Artık z-skoru, eşikler ve uyarılar (halkalar)-8-327120.061.452.834.225.616.99açkapagün
Isıtıcı arızası 50 dk sonra YAKALANDI · 2 yanlış alarm · toplam 4 uyarı · eğitim artığı σ = 0,388 °C

Modeli mikrodenetleyiciye taşı: C kodu üreteci

Eğitilmiş ağırlıklardan C fonksiyonu üret: ESP32 için float, FPU'su olmayan Uno için sabit noktalı tamsayı (Q-biçimi). Q bit sayısını değiştir; nicemleme hatasını, int32 taşma payını, bellek ve süre tahminini gör.

// 741 satırda eğitildi, ufuk 60 dk, Q12, girdiler ×100 #include <stdint.h> #define Q 12 static const int32_t W[10] = { 3633, 1424, 400, -689, -732, -482, 2906, 2577, 3169, 15184 }; static const int32_t B = 638926; int16_t predict_temp_c(int16_t temp, int16_t temp_lag1, int16_t temp_lag2, int16_t temp_lag3, int16_t temp_lag6, int16_t temp_mean6, int16_t temp_std6, int16_t hour_sin, int16_t hour_cos, int16_t light) { const int16_t x[10] = { temp, temp_lag1, temp_lag2, temp_lag3, temp_lag6, temp_mean6, temp_std6, hour_sin, hour_cos, light }; int32_t acc = B; for (uint8_t i = 0; i < 10; i++) acc += W[i] * (int32_t)x[i]; return (int16_t)(acc >> Q); }
Float'a göre nicemleme hatası: en çok 0,0368 °C, ortalama 0,0133 °C En kötü toplam 25.919.164 / 2 147 483 647 (%1,2) → int32'ye sığar
10 ağırlık: 44 B · Uno yazılım float ≈ 88 µs, Uno sabit nokta ≈ 25 µs, ESP32 FPU ≈ 0,17 µs / tahmin

Başlangıç kodu

Arduino C++: tahmin ve anomali uyarısı iskeleti
#include "model.h"        // predict_temp(...) ve RESID_SD: Python hattının ürettiği dosya

const uint8_t N = 12;      // halka tampon: son 2 saat (10 dk aralık)
float buf[N]; uint8_t head = 0, count = 0;
float lag(uint8_t k) { return buf[(head + N - 1 - k) % N]; }   // k = 0 en yeni örnek

const float Z_ON = 3.0, Z_OFF = 1.5;   // histerezis
const uint8_t MIN_RUN = 2, COOLDOWN = 18;
bool alarmOn = false; uint8_t run = 0; uint16_t sinceAlert = 1000;
float pending[3]; uint8_t pHead = 0;   // h = 3 adım önceki tahminler

void onSample(float temp, float hourOfDay, float light) {
  buf[head] = temp; head = (head + 1) % N; if (count < N) count++;
  if (count < N) return;                       // tampon dolmadan tahmin yok
  float z = (temp - pending[pHead]) / RESID_SD;  // 3 adım önce bu an için yapılan tahminin artığı
  pending[pHead] = predict_temp(lag(0), lag(1), lag(2), lag(3), lag(6) /* … özellikler */, hourOfDay, light);
  pHead = (pHead + 1) % 3;
  sinceAlert++;
  if (!alarmOn) {
    run = fabsf(z) >= Z_ON ? run + 1 : 0;
    if (run >= MIN_RUN) { alarmOn = true; if (sinceAlert >= COOLDOWN) { sinceAlert = 0; /* MQTT ile uyarı yayımla */ } }
  } else if (fabsf(z) < Z_OFF) { alarmOn = false; run = 0; }
}

Teslimler

  1. 2. üniteden sonra
    Veri ve temizleme raporu

    Kendi kaydın ya da sera-sensorleri.csv; temizleme hattı, işaretlenen noktalar, doldurma ve gerçeğe göre RMSE tablosu.

    Temizleme: aykırı değer, eksik veri ve yumuşatma
  2. 4. üniteden sonra
    Keşifçi analiz

    Histogram, günlük profil, korelasyon ısı haritası ve üç cümlelik yorum; cihaz üstü Welford istatistiği.

    Gömülü veri analizi ve görselleştirme
  3. 6. üniteden sonra
    Model ve dürüst değerlendirme

    Özellik tablosu, sızıntı testi, ridge modeli; zamana göre bölme ve kayan pencereyle tabana karşı RMSE (G2, G3).

    Eğit ve değerlendir: ridge, karar kütüğü ve dürüst doğrulama
  4. 7. üniteden sonra
    Cihaz kodu

    Float ve sabit noktalı C kodu, nicemleme hatası ve taşma denetimi, bellek ve süre hesabı (G6, G7).

    Modeli mikrodenetleyiciye taşı: ağırlıklardan C koduna
  5. 8. üniteden sonra
    Uyarı, testler ve demo

    Histerezisli uyarı, değerlendirme (gecikme, yanlış alarm), test raporu ve 5 dakikalık demo.

    Sıcaklık tahmini ve anomali uyarısı: bitirme projesine hazırlık
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ç