Ustatnia modyfikacja 21 listopada 2023 przez Olek

Po zainstalowaniu fotowoltaiki i zebraniu na koncie około 3MWh energii trzeba było się zastanowić jak ją wykorzystać. Niestety pomby ciepła nie mam i raczej nie będę miał bo zwykłe powietrzne to nie ta sprawność a koszt znaczące. Jednie może w przyszłości pomba gruntowa z pionowymi odwiertami ale to przyszłość. Na razie najprostszym rozwiązaniem było dogrzewanie powietrza. Rozprowadzenie już mam dzięki rekuperacji. Oryginalne rozwiązanie do istniejącego rekuperatora drogie i jak zwykle trzeba będzie potem kombinować jak nad tym przejąć kontrolę. Dlatego postanowiłem samemu takie urządzenie zbudować.

Znalazłem fajną niedrogą nagrzewnicę EKA 200-6,0-3f SALDA1 i postanowiłem ją u siebie zainstalować. Nagrzewnice zainstalowałem na kanale wylotowym z rekuperatora do pomieszczeń. Aby się zmieściła musiałem też zmodyfikować fragment kanału powrotu. To jest tylko sam aspekt fizycznego montażu nagrzewnicy.

Trzeba jeszcze ją jakoś sterować. Nagrzewnica ma zainstalowane 3 grzałki o łącznej mocy 6kW, zasilana z 3x400V. Czyli grzałki 400V zasilane z trzech faz. Okład oparty na trikach sterownych metodą PWM. Regulator PID zbindowany programowo na bazie mikrokontrolera ESP32 prostym mały wyświetlaczem OLED 0,96 ” i trzema przyciskami. komunikacja z systemem za pomocą WIFi. Początkowo napisałem swój własny kod i komunikowałem się z Home Assistant za pomocą protokołu MQTT. Później jednak przeszedłem na moim zdaniem prostsze rozwiązanie a mianowicie skorzystałem z mechanizmów ESPOHome. W tej wersji już nie wykorzystuje wyświetlacza i przycisków. Zresztą sterownik umieściłem jak najbliżej nagrzewnicy czyli pod sufitem i w zamkniętej obudowie co bardzo utrudnia bezpośredni dostęp do niego.

Oprócz sterownika zamontowałem też stycznik 3 fazowy który jest sterowany równolegle i bezpośrednie z termostatów w nagrzewnicy. To ze względów bezpieczeństwa by konwencjonalne zabezpieczenia w nagrzewnicy miały priorytet przed moim sterownikiem. Tutaj już są większe moce i bezpieczeństwo i niezawodność na pierwszym planie. Oprócz stycznika mamy również dodatkowe czujniki temperatur które obsługuje sterownik. Jeden zainstalowany na wylocie z nagrzewnicy sprawdzający temperaturę nagrzanego powietrza, drugi na radiatorze traków do kontroli ich pracy. Z praktyki zauważyłem że zabezpieczenie termiczne nagrzewnicy jest nastawione na około 40 stopni C i w takim razie nie ma sensu ustawiać sterowni na osiągnięcie tej temperatury powyżej tej wartości.

W samej logice domu (HA) można synchronizować działanie nagrzewnicy z pracą rekuperatora. Można tak ustawić aby podczas pracy nagrzewnicy uruchomić większą wydajność rekuperatora co powoduje większy przepływ powietrza przez nagrzewnicę. Na najwyższym poziomie możemy otrzymać 150m3/h powietrza o temperaturze 40C. Przy tych parametrach i tak wykorzystujemy około 40% mocy nagrzewnicy i jak widać trochę ją przewymiarowałem moc około 3kW by wystarczyła tylko przy tym wydaniu nie mamy nagrzewnicy 3-fazowej na której mi zależało, Chciałem równomiernie obniżać wszystkie 3 fazy. W późniejszych pracach chcę tak opanować kontrole zasilania w domu aby sterować/kontrolować zapotrzebowaniem mocy na każdej fazie. To wiąże się z ewentualnie pracą off grid (poza zasilania z sieci) i z ograniczeniem mocy w tym zakresie. Teraz oprogramowanie i sterownik równomiernie obciąża wszystkie trzy fazy, ale w prosty sposób można to zmienić i kontrolować każdą fazę niezależnie, no może każdą parę faz bo mamy 400V.

Tak jak już wspomniałem oprogramowanie bazuje na pakiecie ESPHome. Jest w nim zaimplementowane pełne starowanie PID z auto kalibracją.

Konfiguracja nagrzewnicy w ESPHome


esphome:
  name: "nagrzewnica-powietrza"
  friendly_name: Nagrzewnica powietrza
  on_boot:
    then:
      - output.ledc.set_frequency:
            id: pwm
            frequency: "10Hz"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger: 
  level: VERBOSE

# Enable Home Assistant API
api:
  encryption:
    key: "xxxx"

ota:
  password: "xxx"



wifi:
  networks:
  - ssid: !secret wifi_ssidK
    password: !secret wifi_passwordK
  - ssid: !secret wifi_ssidN
    password: !secret wifi_passwordN
  - ssid: !secret wifi_ssidA
    password: !secret wifi_passwordA

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  manual_ip:
    static_ip: 192.168.1.215
    gateway: 192.168.1.1
    subnet: 255.255.255.0  
    dns1: 192.168.1.1  

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Nagrzewnica Fallback Hotspot"
    password: "xxx"


web_server:
  port: 80

captive_portal:



#number:
#  - platform: template
#    name: "Template number"
#    id: tn_1
#    optimistic: true
#    min_value: 10
#    max_value: 50
#    step: 1

#Example configuration entry
dallas:
  - pin: GPIO2
    id: t1
  - pin: GPIO4
    id: t2
  - pin: GPIO15
    id: t3


binary_sensor:
  - platform: gpio
    pin:
      number: GPIO27
      inverted: true
      mode:
        input: true
        pullup: true    
    name: "Załączony stycznik"
    device_class: running
    id: zal_stycznik
  - platform: template
    name: "Ochrona termostat"
    lambda: "return not(id(zal_stycznik).state == id(wlacz_stycznik).state);"
    id: ochrona


sensor:
  - platform: dallas
    dallas_id: t1
    address: 0x3302146356ceff28 
    name: "Temperatura wyjścia"
    id: temp_wyj

  - platform: dallas
    dallas_id: t2
    address: 0xf700000624650728 
    name: "Temperatura triak"


  - platform: pid
    name: "PID Climate RESUL"
    type: RESULT

  - platform: pid
    name: "PID Climate HEAT"
    type: HEAT

#RESULT - The resulting value (sum of P, I, and D terms).
#ERROR - The calculated error (setpoint - process_variable)
#PROPORTIONAL - The proportional term of the PID controller.
#INTEGRAL - The integral term of the PID controller.
#DERIVATIVE - The derivative term of the PID controller.
#HEAT - The resulting heating power to the supplied to the heat_output.
#COOL - The resulting cooling power to the supplied to the cool_output.
#KP - The current factor for the proportional term of the PID controller.
#KI - The current factor for the integral term of the PID controller.
#KD - The current factor for the differential term of the PID controller.

output:
  - platform: ledc
    pin: GPIO5
    id: pwm    

  - platform: gpio
    pin: GPIO18
    id: output_stycznik



switch:  
  - platform: output
    name: "Włącz stycznik"
    output: output_stycznik
    id: wlacz_stycznik
button:
  - platform: template
    name: "Test PWM"
    on_press:
        then:
        # Must be turned on before setting frequency & level
        - output.turn_on: pwm
        # Frequency sets the wave size
        #- output.ledc.set_frequency:
        #    id: pwm
        #    frequency: "10Hz"
        # level sets the percentage time the PWM is on
        - output.set_level:
            id: pwm
            level: "50%"
        - delay: 5s
        - output.turn_off: pwm

  - platform: template
    name: "PID Climate Autotune"
    on_press:
      - climate.pid.autotune: clim_pid



climate:
  - platform: pid
    name: "PID Climate Controller"
    sensor: temp_wyj
    default_target_temperature: 21°C
    visual:
      min_temperature: 10
      max_temperature: 50    
    heat_output: pwm
    id: clim_pid
    control_parameters:
      kp: 0 #0.49460
      ki: 0 #0.00487
      kd: 0 #12.56301
      #output_averaging_samples: 5      # smooth the output over 5 samples
      #derivative_averaging_samples: 5  # smooth the derivative value over 10 samples
    deadband_parameters:
      threshold_high: 0.5°C       # deadband within +/-0.5°C of target_temperature
      threshold_low: -0.5°C    
    on_state:
        - lambda: "if (x.action == CLIMATE_ACTION_HEATING) id(wlacz_stycznik).turn_on(); else id(wlacz_stycznik).turn_off();"


#                                                       +---------------+| 
#                                                       |   |  |  |  |   |
#                                              [  EN  ] |o              o| [GPIO23] [VSPI MOSI]
#           [RTC_GPIOO] [Sensor VP] [ADC1 CH0] [GPIO36] |o              o| [GPIO22] [ I2C SCL ]
#           [RTC_GPIO3] [Sensor VN] [ADC1 CH3] [GPIO39] |o ESP-WROOM-32 o| [GPIO1 ] [UART O TX]
#                       [RTC_GPIO4] [ADC1 CH6] [GPIO34] |o              o| [GPIO3 ] [UART O RX]
#                       [RTC_GPIO5] [ADC1 CH7] [GPIO35] |o              o| [GPIO21] [ 12C SDA ]
#           [RTC_GPIO9] [ TOUCH9  ] [ADC1 CH4] [GPIO32] |o              o| [GPIO19] [VSPI MISO]
#           [RTC_GPIO8] [ TOUCH8  ] [ADC1 CH5] [GPIO33] |o    PIN 30    o| [GPIO18] [VSPI CLK ] 
#            [RTC_GPIO6] [  DAC1  ] [ADC2 CH8] [GPIO25] |o              o| [GPIO5 ] [VSPI CSO ]
#            [RTC_GPI07] [  DAC2  ] [ADC2 CH9] [GPIO26] |o  DEVKIT V1   o| [GPIO17] [UART 2 TX]
#           [RTC_GPIO17] [ TOUCH7 ] [ADC2 CH7] [GPIO27] |o              o| [GPIO16] [UART 2 RX]
#[RTC_GPIO16] [HSPI CLK] [ TOUCH6 ] [ADC2 CH6] [GPIO14] |o              o| [GPIO4 ] [ADC2 CHO ] [TOUCHO] [RTC_GPIO10] 
#[RTC_GPIO15] [HSPI MISO] [TOUCHS ] [ADC2 CH5] [GPIO12] |o              o| [GPIO2 ] [ADC2 CH2 ] [TOUCH2] [RTC_GPIO12]
#[RTC_GPIO14] [HSPI MOSI] [TOUCH4 ] [ADC2 CH4] [GPIO13] |o              o| [GPIO15] [ADC2 CH3 ] [TOUCH3] [HSPI CSO] [RTC_GPIO13]
#                                              [ GND  ] |o              o| [ GND  ]
#                                              [ VIN  ] |o              o| [ 3V3  ]
#                                                       |                |
#                                                       |     |usb|      |
#       


#                                          +---------------+| 
#                                          |   |  |  |  |   |
#      1                          [  EN  ] |o              o| [GPIO23] 
#      2                          [GPIO36] |o              o| [GPIO22] I2C-SCL
#      3                          [GPIO39] |o ESP-WROOM-32 o| [GPIO1 ] 
#      4                          [GPIO34] |o              o| [GPIO3 ] 
#      5                          [GPIO35] |o              o| [GPIO21] I2C-SDA
#      6                          [GPIO32] |o              o| [GPIO19] 
#      7                          [GPIO33] |o    PIN 30    o| [GPIO18] ZAL_MOC
#      8                          [GPIO25] |o              o| [GPIO5 ] PWM_MOC
#      9                          [GPIO26] |o  DEVKIT V1   o| [GPIO17] 
#      10  styk_styczika_głónego  [GPIO27] |o              o| [GPIO16] 
#      1               SW1        [GPIO14] |o              o| [GPIO4 ] T2
#      2               SW2        [GPIO12] |o              o| [GPIO2 ] T1 
#      3               SW3        [GPIO13] |o              o| [GPIO15] T3
#      7                          [ GND  ] |o              o| [GND   ]
#      8                          [ VIN  ] |o              o| [ 3V3  ]
#                                          |                |
#                                          |     |usb|      |
#       

  1. https://instalszop.pl/do/item/EKA/Kanalowa-nagrzewnica-elektryczna-EKA?#sub-EKA160-60-3f ↩︎

Dodaj komentarz