🚀 EaSun - PowMr Grid Load - Nastavení Rychlosti PWM pro Topení

1. Úvod a Problém

💡 Proč jsou tyto změny nutné?

Topná tělesa potřebují čas na zahřátí a stabilizaci. Rychlé změny PWM způsobují:

  • Teplotní šoky - rychlé změny teploty poškozují topná tělesa
  • Nestabilní topení - místnost se neohřeje rovnoměrně
  • Zbytečné opotřebení - časté zapínání/vypínání SSR relé
  • Nedostatečné využití solární energie - systém reaguje příliš rychle na krátkodobé změny

2. Rozdíly mezi verzemi

Aspekt EaSun - PowMr -Grid-Load-Vypocet32.ino EaSun - PowMr -Grid-Load-Vypocet8x.ino
Rychlost reakcí Pomalé (čítače kroků) Rychlé (okamžité výpočty)
Mechanismus zpomalení SolarKrokPlus/Minus čítače (3,5,8) smoothPwmRegulation() funkce
Zpoždění mezi změnami Automatické (čítače) Žádné (původně)
Uživatelské nastavení Žádné Webové rozhraní
Vhodnost pro topení ✅ Vhodné ❌ Nevhodné (původně)

🔍 Detailní analýza problémů

// PŮVODNÍ PROBLÉM v EaSun - PowMr -Grid-Load-Vypocet8x.ino: void OvladaniPwmSSR(){ PWMNastav = VypocetSolarSpotrebaRefactored(); // Okamžitý výpočet PWMvalue = (int)(PWMNastav * 2.55); // Okamžitá aplikace analogWrite(PWMpin, PWMvalue); // Bez zpoždění! }

📊 Problém s rychlými změnami

Příklad problému: Pokud solární výroba klesne z 3000W na 2800W, systém okamžitě sníží PWM z 80% na 75%. Pro topení je to příliš rychlá změna!

3. Implementované řešení

⚠️ Řešení je připraveno

Vytvořeno webové rozhraní a funkce smoothPwmRegulation(), ale NENÍ INTEGROVÁNA do hlavního kódu:

  • ✅ Funkce smoothPwmRegulation() implementována
  • ✅ Webové rozhraní připraveno
  • ✅ SPIFFS ukládání funkční

🚨 POTŘEBNÉ KROKY PRO AKTIVACI

📋 Manuální integrace funkce smoothPwmRegulation()

Pro aktivaci plynulé PWM regulace je třeba provést tyto kroky:

  1. Přidat #include do hlavního souboru:
    #include "PlynulaRegulace.h"
  2. Upravit funkci OvladaniPwmSSR() v hlavním souboru:
    void OvladaniPwmSSR(){ PWMNastav = VypocetSolarSpotrebaRefactored(); // PŘIDAT TUTO ŘÁDKU pro plynulou regulaci: if (enableSlowPwmMode) { PWMNastav = smoothPwmRegulation(PWMNastav); } PWMvalue = (int)(PWMNastav * 2.55); analogWrite(PWMpin, PWMvalue); }
  3. NEBO includovat vypocet03.h (kde je funkce už volána):
    #include "vypocet03.h" // Obsahuje 3x volání smoothPwmRegulation()

📍 Aktuální stav volání funkce

🔍 Kde se funkce POUŽÍVÁ (ale soubor není includován)

Funkce smoothPwmRegulation() se volá v souboru vypocet03.h na těchto místech:

  • Řádek 53: optimizedPwm = smoothPwmRegulation(targetPwm);
  • Řádek 61: optimizedPwm = smoothPwmRegulation(targetPwm);
  • Řádek 70: optimizedPwm = smoothPwmRegulation(targetPwm);

❌ Problém: Soubor vypocet03.h není includován v hlavním kódu!

🎯 Cílové řešení

// IMPLEMENTACE PO AKTIVACI: void OvladaniPwmSSR(){ PWMNastav = VypocetSolarSpotrebaRefactored(); // Aplikace plynulé regulace pouze pokud je povolena if (enableSlowPwmMode) { PWMNastav = smoothPwmRegulation(PWMNastav); // ✅ BUDE AKTIVNÍ! } PWMvalue = (int)(PWMNastav * 2.55); analogWrite(PWMpin, PWMvalue); }

4. Webové rozhraní

🌐 HTML formulář pro nastavení PWM

Nastavení rychlosti PWM pro topení

Výběr automaticky přednastaví hodnoty, které můžete ručně upravit
Doporučeno: 1.0-3.0 pro pomalé topení, 5.0+ pro rychlé reakce
0.1 = pomalé, 0.5 = střední, 0.9 = rychlé
1000ms = 1 sekunda, doporučeno 1000-3000ms

5. Parametry a nastavení

Parametr Rozsah Výchozí Doporučení pro topení Popis
Rychlost změn 0.1 - 20.0 %/s 2.0 %/s 1.0 - 2.0 %/s Maximální změna PWM za sekundu
Faktor vyhlazování 0.01 - 1.0 0.2 0.1 - 0.2 Plynulost přechodů (nižší = plynulejší)
Zpoždění 100 - 10000 ms 1000 ms 2000 - 3000 ms Minimální čas mezi změnami
Pomalý režim Zapnuto/Vypnuto Zapnuto Zapnuto Zapne/vypne všechny mechanismy zpomalení

🎛️ Kompletní přehled doporučených konfigurací

🏠 Domácí topení (doporučeno pro většinu uživatelů)

  • Rychlost změn PWM: 1.5 %/s
  • Faktor vyhlazování: 0.15
  • Zpoždění mezi změnami: 2000 ms (2 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Bytové topení, rodinné domy, standardní radiátory
  • Charakteristika: Plynulé, stabilní změny bez teplotních šoků

⚡ Rychlé reakce (průmyslové aplikace)

  • Rychlost změn PWM: 5.0 %/s
  • Faktor vyhlazování: 0.5
  • Zpoždění mezi změnami: 500 ms (0.5 sekundy)
  • Pomalý režim: Vypnuto
  • Vhodné pro: Průmyslové procesy, rychlé regulace
  • Charakteristika: Rychlá odezva na změny výroby

💧 Teplá voda (bojler, zásobník)

  • Rychlost změn PWM: 1.0 %/s
  • Faktor vyhlazování: 0.1
  • Zpoždění mezi změnami: 3000 ms (3 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Ohřev teplé vody, bojlery, zásobníky
  • Charakteristika: Velmi plynulé ohřívání bez teplotních gradientů

🔥 Teplovodní topení (podlahové)

  • Rychlost změn PWM: 0.8 %/s
  • Faktor vyhlazování: 0.08
  • Zpoždění mezi změnami: 4000 ms (4 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Podlahové topení, teplovodní systémy
  • Charakteristika: Nejpomalejší režim pro tepelně setrvačné systémy

🔥 Elektrické radiátory

  • Rychlost změn PWM: 2.5 %/s
  • Faktor vyhlazování: 0.25
  • Zpoždění mezi změnami: 1500 ms (1.5 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Elektrické topné panely, konvektory
  • Charakteristika: Rychlejší než podlahové, pomalejší než průmyslové

🏭 Průmyslové sušení

  • Rychlost změn PWM: 8.0 %/s
  • Faktor vyhlazování: 0.8
  • Zpoždění mezi změnami: 200 ms (0.2 sekundy)
  • Pomalý režim: Vypnuto
  • Vhodné pro: Průmyslové sušárny, výrobní procesy
  • Charakteristika: Velmi rychlé reakce pro precizní řízení

🏊 Bazénové topení

  • Rychlost změn PWM: 1.2 %/s
  • Faktor vyhlazování: 0.12
  • Zpoždění mezi změnami: 2500 ms (2.5 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Ohřev bazénů, velkoobjemové nádrže
  • Charakteristika: Stabilní ohřev velkých objemů vody

🚗 Garážové topení

  • Rychlost změn PWM: 3.0 %/s
  • Faktor vyhlazování: 0.3
  • Zpoždění mezi změnami: 800 ms (0.8 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Garáže, dílny, sklady
  • Charakteristika: Rychlejší ohřev prostorů s menší tepelnou setrvačností

🏢 Kancelářské topení

  • Rychlost změn PWM: 1.8 %/s
  • Faktor vyhlazování: 0.18
  • Zpoždění mezi změnami: 1800 ms (1.8 sekundy)
  • Pomalý režim: Zapnuto
  • Vhodné pro: Kanceláře, obchodní prostory
  • Charakteristika: Komfortní topení s optimální rychlostí reakce

🔧 Testovací režim (pouze pro ladění!)

  • Rychlost změn PWM: 10.0 %/s
  • Faktor vyhlazování: 1.0
  • Zpoždění mezi změnami: 100 ms (0.1 sekundy)
  • Pomalý režim: Vypnuto
  • Vhodné pro: Testování, ladění systému
  • ⚠️ POZOR: Pouze pro krátkodobé testování - nevhodné pro běžný provoz!

📊 Přehledná tabulka všech konfigurací

Konfigurace Rychlost (%/s) Vyhlazování Zpoždění (ms) Pomalý režim Vhodnost použití
🏠 Domácí topení 1.5 0.15 2000 ✅ Zapnuto Bytové topení, rodinné domy
⚡ Rychlé reakce 5.0 0.5 500 ❌ Vypnuto Průmyslové procesy
💧 Teplá voda 1.0 0.1 3000 ✅ Zapnuto Bojlery, zásobníky
🔥 Podlahové topení 0.8 0.08 4000 ✅ Zapnuto Teplovodní systémy
🔥 Elektrické radiátory 2.5 0.25 1500 ✅ Zapnuto Topné panely, konvektory
🏭 Průmyslové sušení 8.0 0.8 200 ❌ Vypnuto Sušárny, výrobní procesy
🏊 Bazénové topení 1.2 0.12 2500 ✅ Zapnuto Bazény, velkoobjemové nádrže
🚗 Garážové topení 3.0 0.3 800 ✅ Zapnuto Garáže, dílny, sklady
🏢 Kancelářské topení 1.8 0.18 1800 ✅ Zapnuto Kanceláře, obchodní prostory
🔧 Testovací režim 10.0 1.0 100 ❌ Vypnuto ⚠️ Pouze testování!

💡 Jak vybrat správnou konfiguraci?

Podle typu topení:

  • Nejpomalejší (setrvačné systémy): Podlahové topení → Teplá voda → Bazény
  • Střední rychlost (standardní topení): Domácí → Kancelářské → Radiátory
  • Rychlejší (méně setrvačné): Garáže → Rychlé reakce → Průmyslové
  • Nejrychlejší (testování): Pouze pro ladění systému

Doporučení: Začněte s konfigurací "Domácí topení" a podle potřeby upravte parametry.

6. Technická implementace

🔧 Klíčové funkce

1. Nové proměnné

//---- Proměnné pro konfigurovatelnou rychlost PWM změn ------- float userMaxPwmChangePerSecond = 2.0; // Uživatelsky nastavitelná rychlost (výchozí 2%/s) float userPwmSmoothingFactor = 0.2; // Uživatelsky nastavitelný faktor vyhlazování (výchozí 0.2) bool enableSlowPwmMode = true; // Povolení pomalého režimu PWM int pwmChangeDelayMs = 1000; // Zpoždění mezi změnami v ms (výchozí 1s)

2. Aktuální funkce smoothPwmRegulation() (z PlynulaRegulace.h)

/** * @brief Funkce pro plynulou regulaci PWM s omezením rychlosti změn * * BEZPEČNOSTNÍ KONTROLY: * - Ochrana před NaN a neplatnými hodnotami * - Automatická inicializace při prvním volání * - Ohraničení vstupních hodnot na 0-100% * * ALGORITMUS: * 1. Bezpečnostní kontroly vstupních hodnot * 2. Kontrola časového zpoždění (pokud enableSlowPwmMode = true) * 3. Omezení rychlosti změn podle userMaxPwmChangePerSecond * 4. Exponenciální vyhlazování podle userPwmSmoothingFactor * 5. Ohraničení výsledku na 0-100% * 6. Aktualizace globálních proměnných */ float smoothPwmRegulation(float targetPwm) { // BEZPEČNOSTNÍ KONTROLY - ochrana před NaN a neplatnými hodnotami if (isnan(targetPwm) || targetPwm < -10.0f || targetPwm > 110.0f) { if (WebSerialAno == 14) { Serial.print(F("PWM Smoothing: Neplatne targetPwm=")); Serial.print(targetPwm); Serial.println(F(" - resetuji na 0%")); } lastPwmValue = 0.0f; lastPwmUpdate = millis(); return 0.0f; } // Ohraničení vstupního PWM na rozumné hodnoty targetPwm = (targetPwm < 0.0f) ? 0.0f : ((targetPwm > 100.0f) ? 100.0f : targetPwm); // Kontrola platnosti lastPwmValue if (isnan(lastPwmValue) || lastPwmValue < -10.0f || lastPwmValue > 110.0f) { if (WebSerialAno == 14) { Serial.println(F("PWM Smoothing: Neplatne lastPwmValue - inicializuji")); } lastPwmValue = targetPwm; lastPwmUpdate = millis(); return targetPwm; } unsigned long currentTime = millis(); float timeDelta = (currentTime - lastPwmUpdate) / 1000.0f; // Převod na sekundy if (timeDelta <= 0) timeDelta = 0.001f; // Ochrana proti dělení nulou // Použití uživatelsky nastavených hodnot místo globálních float maxChange = userMaxPwmChangePerSecond * timeDelta; float pwmDifference = targetPwm - lastPwmValue; // Kontrola zpoždění mezi změnami (pouze pokud je pomalý režim zapnut) if (enableSlowPwmMode && (currentTime - lastPwmUpdate) < pwmChangeDelayMs) { return lastPwmValue; // Vrátit předchozí hodnotu, pokud je příliš brzy } // Omezení rychlosti změn if (abs(pwmDifference) > maxChange) { if (pwmDifference > 0) { targetPwm = lastPwmValue + maxChange; } else { targetPwm = lastPwmValue - maxChange; } } // Vyhlazování s uživatelským faktorem float smoothedPwm = lastPwmValue + (targetPwm - lastPwmValue) * userPwmSmoothingFactor; // Ohraničení na 0-100% smoothedPwm = (smoothedPwm < 0.0f) ? 0.0f : ((smoothedPwm > 100.0f) ? 100.0f : smoothedPwm); // Aktualizace globálních proměnných lastPwmValue = smoothedPwm; lastPwmUpdate = currentTime; // Debug výstup if (WebSerialAno == 14) { Serial.print(F("PWM Smoothing: Target=")); Serial.print(targetPwm, 1); Serial.print(F("%, Smoothed=")); Serial.print(smoothedPwm, 1); Serial.print(F("%, MaxChange/s=")); Serial.print(userMaxPwmChangePerSecond, 1); Serial.print(F("%, SmoothingFactor=")); Serial.print(userPwmSmoothingFactor, 2); Serial.print(F(", SlowMode=")); Serial.print(enableSlowPwmMode ? "ON" : "OFF"); Serial.println(); } return smoothedPwm; }

3. HTTP handler pro ukládání

server.on("/getpwmsettings", HTTP_GET, [] (AsyncWebServerRequest *request) { String inputPwmSpeed, inputPwmSmoothing, inputPwmDelay, inputSlowMode; if (request->hasParam("pwm_speed")) { // Získání parametrů z formuláře inputPwmSpeed = request->getParam("pwm_speed")->value(); inputPwmSmoothing = request->getParam("pwm_smoothing")->value(); inputPwmDelay = request->getParam("pwm_delay")->value(); inputSlowMode = request->getParam("slow_mode")->value(); // Validace a uložení do SPIFFS float pwmSpeed = inputPwmSpeed.toFloat(); if (pwmSpeed >= 0.1 && pwmSpeed <= 20.0) { write_file(SPIFFS, "/pwm_speed.ea", inputPwmSpeed.c_str()); } // Aktualizace globálních proměnných userMaxPwmChangePerSecond = pwmSpeed; userPwmSmoothingFactor = inputPwmSmoothing.toFloat(); pwmChangeDelayMs = inputPwmDelay.toInt(); enableSlowPwmMode = (inputSlowMode == "1"); // Potvrzovací stránka request->send(200, "text/html", confirmationHtml); } });

4. Načítání při startu

// Načtení PWM nastavení v setup() funkci String pwmSpeedStr = read_file(SPIFFS, "/pwm_speed.ea"); if(pwmSpeedStr != "null" && pwmSpeedStr != ""){ userMaxPwmChangePerSecond = pwmSpeedStr.toFloat(); if (userMaxPwmChangePerSecond < 0.1 || userMaxPwmChangePerSecond > 20.0) { userMaxPwmChangePerSecond = 2.0; // Výchozí hodnota } Serial.print(F("PWM Rychlost: "));Serial.print(userMaxPwmChangePerSecond);Serial.println(F("%/s")); }

7. Použití a doporučení

📋 Postup nastavení (po aktivaci funkce)

  1. Připojte se k EaSun - PowMr přes WiFi
  2. Přejděte na stránku http://[IP-EaSun - PowMr ]/solar
  3. Scrollujte dolů k sekci "Nastavení rychlosti PWM pro topení"
  4. Vyberte doporučenou konfiguraci ze select dropdown (volitelné)
  5. Upravte parametry podle potřeby (můžete ručně upravit přednastavené hodnoty)
  6. Klikněte "Uložit nastavení PWM"
  7. Počkejte na potvrzení a automatické přesměrování

🎯 Scénáře použití

🏠 Domácí topení (podlahové, radiátory)

Problém: Rychlé změny způsobují teplotní šoky a nestabilní topení.

Řešení: Rychlost 1.5%/s, vyhlazování 0.15, zpoždění 2000ms

🏭 Průmyslové topení (rychlé reakce)

Problém: Potřeba rychlých reakcí na změny výroby.

Řešení: Rychlost 5.0%/s, vyhlazování 0.5, zpoždění 500ms

🌡️ Teplá voda (bojler)

Problém: Potřeba plynulého ohřevu bez teplotních šoků.

Řešení: Rychlost 1.0%/s, vyhlazování 0.1, zpoždění 3000ms

8. Řešení problémů

❓ Časté problémy a řešení

🔧 PWM se nemění vůbec

Příčina: Pomalý režim je zapnutý s příliš velkým zpožděním

Řešení: Snižte zpoždění na 500ms nebo vypněte pomalý režim

⚡ PWM se mění příliš rychle

Příčina: Vysoká rychlost změn nebo vypnutý pomalý režim

Řešení: Snižte rychlost na 1.0-2.0%/s a zapněte pomalý režim

🔄 Nastavení se neukládá

Příčina: Problém s SPIFFS pamětí

Řešení: Restartujte EaSun - PowMr a zkuste znovu

📊 Debug informace

// Pro debug nastavte WebSerialAno = 14 v kódu // V Serial Monitoru uvidíte: PWM Smoothing: Target=75.0%, Smoothed=72.3%, MaxChange/s=2.0%, SmoothingFactor=0.20, SlowMode=ON

🔍 Kontrola nastavení

// V Serial Monitoru při startu uvidíte: PWM Rychlost: 2.0%/s PWM Vyhlazování: 0.20 PWM Zpoždění: 1000ms PWM Pomalý režim: Zapnuto

⚠️ SHRNUTÍ AKTUÁLNÍHO STAVU

Funkce smoothPwmRegulation() je implementována a připravena k použití:

  • ✅ Kód je napsán - PlynulaRegulace.h obsahuje plně funkční implementaci
  • ✅ Webové rozhraní je připraveno - formulář pro nastavení parametrů
  • ✅ SPIFFS ukládání funguje - nastavení se ukládají do paměti
  • 🔧 Potřeba manuální integrace - přidat include a volání funkce

Po aktivaci bude systém poskytovat plnou kontrolu nad rychlostí PWM změn pro stabilní a efektivní topení.