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
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.
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.
Başlangıç kodu
#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
- 2. üniteden sonraVeri 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 - 4. üniteden sonraKeş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 - 6. üniteden sonraModel 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 - 7. üniteden sonraCihaz 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 - 8. üniteden sonraUyarı, 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