一条工務店i-smileに引っ越して初めての冬が来ました。床暖房も使うのが初めてで、とりあえず他の方のブログ記事*1を参考に設定温度を決めて運転しています。
しかし、立地も形状も異なる家の実績を使って経験則で設定していても、寒い日があったりして設定の調整が難しいです。 そこで、もう少しスマートに床暖房設定温度を計算して決定する方法を考えました。
本記事では,床暖房設定温度の決定方法と我が家のリビングで実際に計算した結果を記載します。また、床暖房設定温度を計算するためのPythonスクリプトおよびExcelシートの使い方を記載します。
本記事の目次です。具体的にi-smileの床暖設定はどの程度が目安なのかは2.3をご覧ください。
(2024/1/11追記) 床暖房からの熱貫流率を変更しましたので、この記事の結果は外気温が変わると少し違ってきます。 床暖設定の目安は次の記事の計算結果を参照してください。
PythonスクリプトおよびExcelシートは以下に置いてあります. github.com PythonスクリプトはWindows 11, Python 3.9.13で動作を確認しています。
1. 床暖房設定温度決定の基本的な考え方
まず、床暖房で室を暖房しているときの室温は、壁・窓・天井などからの熱損失と床暖房からの熱取得に影響されます。
熱取得が多ければ室温は上がりますし、熱損失が多ければ室温は下がります。室温が高くなるほど熱損失は大きく熱取得は小さくなるので、どこかで熱損失と熱取得が平衡します。この平衡するところがある外気温・床暖房設定温度の時の(過渡的な変化を除いた)室温になるはずです。
そこで、この熱損失・熱取得を計算して、ある外気温・床暖設定温度の時の室温を求められるようにします。
次に、床暖設定温度を少しずつ変更して室温を計算していくと、ある外気温の時に目標室温にする場合の適切な設定温度がわかります。
これを、月(外気温)毎に計算すれば、どの程度の設定温度にすればよいかの目安が決まります。
2. 床暖房設定温度の決定方法
2.1 熱損失・熱取得と室温の計算
熱損失として、壁・窓・天井から逃げる熱のみを考えます。この熱は、熱貫流率を使って以下で求められます。
- 熱損失[W] = 壁面積[㎡] × 熱貫流率[W/㎡K] × (外気温[℃] - 室温[℃])
熱貫流率の計算は、以下の記事が参考になります。後述のExcelシートの"熱貫流率計算"シートに計算式を入れてありますので、ここに壁・天井の建材の厚みと熱伝達率を記入すれば求まります。
以前Ua値を計算したときに使った数値を使い、我が家のi-smileの熱貫流率を算出したところ以下でした。i-smartだと断熱材や構成が異なりますが同様に計算できると思います。
対象室をリビング、目標室温は23℃、外気温を5℃として、外に面する壁の熱損失の合計を計算したところ246.4[W]になりました。
次いで、床暖房からの熱取得を計算します。床暖房は配管を流れる水の温度が設定温度になっており、そこから配管・床の構造材を経て室に熱が伝わるのですが、単純化のため構造材の下側すべて床暖房の設定温度になっているものとします。こうすると,構造材の熱貫流率を使って,壁の熱損失同様に以下のように計算できます。
- 熱取得[W] = 床暖房敷設面積[㎡] × 床構造材熱貫流率[W/㎡K] × (床暖房設定温度[℃] - 室温[℃])
床構造材の熱貫流率は、2.7[W/㎡K] 3.717[W/㎡K] *5としました。また、床暖房設定値は26℃としました。このとき、床暖房からの熱取得は210[W]でした。室外に逃げる熱のほうが大きいので、室温は目標の23℃よりも低くなってしまうでしょう。
熱損失と熱取得が平衡する点の室温を計算してみます。Pythonだと、熱損失と熱取得の差の絶対値を関数として、その関数の返り値が0に最も近くなる変数をscipy.optimize
で求めることができます。
ある外気温・床暖設定・室温のときの熱損失と熱取得の合計を計算する関数calc_heat_diff(outdoor_temp, heating_setpoint, room_temp)
を定義して、以下のようにすると熱が平衡する室温が求まります。
from scipy.optimize import minimize from functools import partial # 目的関数定義(外気温と床暖設定は固定) objective_func = partial(calc_heat_diff, outdoor_temp, heating_setpoint) # 室温初期値を指定 initial_guess = [outdoor_temp] # 熱損失と熱取得が平衡する室温を求める result = minimize(objective_func, initial_guess, method="Nelder-Mead") # 結果表示 print(result.x[0])
これを実行してみると、室温は約22℃となりました。確かに、11月にちょうどよかった26℃設定のままにしていたのですが、最近急に冷え込んで、朝の外気温が5℃程度・室温が22℃ほどになり寒いなと感じていたので、妥当な結果と思います。
Excelでも、オプションからソルバーを有効化すると同様の計算ができます。
- オプション→アドイン→Excelアドインの設定→"ソルバー アドイン"にチェックを入れてOKする
- リボンのデータタブ→分析→ソルバーを開き、熱損失と熱取得の差のセルを"目的セル"に、室温セルを"変数セル"に指定する
- "解決"ボタンをクリック
2.2 目標室温になる設定温度の算出
熱損失と熱取得から,ある外気温・床暖設定の時の室温が求められるようになったので,今度は目標室温にできる床暖の設定温度を算出してみます.
これも先ほどと同様に,scipy.optimizeで,ある外気温・目標室温であるときに、熱損失と熱取得の差が0になる床暖設定を求めればよいです.
def calc_heating_setpoint(room_setpoint, outdoor_temp): # 目的関数定義(外気温と室温を固定) objective_func = partial(calc_heat_diff, outdoor_temp=outdoor_temp, room_temp=room_setpoint) # 床暖設定初期値を指定 initial_guess = [room_setpoint] # 床暖設定を引数に持つ関数をlambdaで定義し、最適化 result = minimize(lambda x: objective_func(heating_setpoint=x), initial_guess, method="Nelder-Mead") # 結果を切り上げして返す return np.ceil(result.x[0]) print(calc_heating_setpoint(23, 5))
外気温5℃で室温23℃を達成するには床暖設定は27.2℃→切り上げして28℃必要ということでした。 いまは26℃だったので、ちょっと設定を上げたほうがよさそうですね。
Excelでも先ほどと同様にソルバーを使って、床暖設定温度のセルを"変数セル"に指定すれば計算できます。
2.3 外気温別・月別の設定温度目安
床暖設定温度が求められるようになったので、外気温別に設定温度目安を求めてみます。
room_setpoint = 23 # 目標室温 outdoor_temp = np.round(np.arange(-5.0, 15.0, 1), 1) heating_setpoint = [calc_heating_setpoint(room_setpoint, x) for x in outdoor_temp]
ざっくり、外気温が4℃下がるごとに床暖設定を1℃ずつ上げたら良さそうです。
次に、月別の設定目安も検討してみます。床暖房のリモコンでは時間帯別に通常温度とセーブ温度が設定できるので、それぞれどの程度の温度にするべきかを考えます。
気象庁の過去データダウンロードページから、自分の住む地点の温度の時別値を1年分ダウンロードします。表示オプションで欠損データ・不均質データは表示しないとすれば、1回でダウンロードできるはずです。
これを読み込んで、月別・時間帯別の外気温を計算します。通常温度(夜間の設定温度)は18時~翌9時まで、セーブ温度(昼間の設定温度)はそれ以外の時間帯とします。
夜間は最低気温でも室温が維持できるようその時間帯の最小値、昼間は日射も期待できるのでその時間帯の平均値を外気温とし、外気温別に設定温度目安を計算します。
# 気象庁データの読み込み temp_act = pd.read_csv("data.csv", header=2, index_col=0, encoding="shift-jis") temp_act.index = pd.to_datetime(temp_act.index) # 10月~4月を対象に計算 month = [10, 11, 12, 1, 2, 3, 4] setpoint = pd.DataFrame(columns=["通常温度", "セーブ温度"]) # 月別設定温度データ temp_min_avg = pd.DataFrame(columns=["夜間最低気温", "昼間平均気温"]) # 月別外気温データ for m in month: # 月別の昼・夜間データを抽出 temp_month = temp_act[temp_act.index.month==m] temp_night = temp_month[(temp_month.index.hour >= hour_start_night) | (temp_month.index.hour < hour_end_night)] temp_day = temp_month[(temp_month.index.hour < hour_start_night) & (temp_month.index.hour >= hour_end_night)] # 夜間最低温度、昼間平均気温を格納 temp_min_avg.loc[m] = [temp_night.min()[0], round(temp_day.mean()[0],1)] # 目標室温を保つ設定温度を計算して格納 setpoint_night = calc_heating_setpoint(room_setpoint, temp_night.min()[0]) setpoint_day = calc_heating_setpoint(room_setpoint, temp_day.mean()[0]) setpoint.loc[m] = [setpoint_night, setpoint_day] print(temp_min_avg) print(setpoint)
横浜の2022年の外気温データで計算した結果、以下の設定が目安となりました。
月 | 夜間最低気温 | 昼間平均気温 | 通常温度 | セーブ温度 |
---|---|---|---|---|
10 | 9.7 | 19.4 | 27 | 24 |
11 | 9.1 | 17.1 | 27 | 25 |
12 | 1.4 | 10.3 | 29 | 26 |
1 | -1.4 | 7.3 | 29 | 27 |
2 | -0.2 | 7.9 | 29 | 27 |
3 | 2.3 | 13.4 | 28 | 26 |
4 | 4.2 | 17.4 | 28 | 25 |
Excelだとこの計算は面倒なので、月別の最低/平均気温の統計値*6を使って各外気温の時の設定をソルバで計算するのがよさそうです。
3. PythonスクリプトとExcelシートの使い方
3.1 Pythonスクリプトの使い方
スクリプトfloor_heating_setpoint.py
をダウンロードし、ローカルに置きます。
スクリプト中の10行目~23行目に,以下のパラメータを入力します。
- 建物毎に共通のパラメータ
- 部屋毎に変更するパラメータ
- 窓含む壁の面積[㎡]
- 窓の面積[㎡]
- 天井の面積[㎡]
- 床暖房の敷設面積[㎡]
- これらは平面図・立面図から読み取ります。
また、2.3に記載したように、自分の居住地域の1年分の気温データをダウンロードして、data.csv
としてスクリプトと同じフォルダに入れます。
コマンドプロンプトからpython floor_heating_setpoint.py
を実行すると、月別の床暖房設定温度目安が出力されます。
jupyter notebookなどで実行すれば、上記の外気温別設定のグラフも出力できます。
3.2 Excelシートの使い方
Pythonスクリプトと同様のパラメータを、B列に入力します。 その後、本文で記載したようにソルバーを使って外気温別の設定温度を計算しH列に入れていきます。
また、月別最低・平均気温をK・L列に記入すると、O・P列に設定温度目安が計算されて表示されます。
注意点
上記の計算では以下の点に注意が必要です。
- 一条工務店の家ではロスガード90による24時間換気がされています。熱交換しているとはいえ室温より低い外気が入ってくるため熱損失になりますが、これは考慮していません。人体や機器の発熱とおおむね相殺されるかと考えたためです。しかし、外気温があまりに低い=熱損失が大きい場合や、人・機器など他の発熱が少ない室などは考慮したほうが良いかもしれません。
- 対象室と、隣室・廊下とはドアの隙間から空気が出入りします。他の部屋が異なる温度の場合、そこでも熱の損失・取得がありますがこれも考慮していません。
- 壁の熱貫流率は熱橋を考慮しておらず、少し低い(熱損失が小さい)値になっています。また,床暖房からの熱取得はかなりいい加減な値です。
- 設定温度変更時に床暖房が温まるまでの遅延も考慮外です。
- まだ我が家のリビングでしか妥当性を確認してません。小さな部屋や洗面室ではうまくいかないかもしれません。
- そもそも目標とする室温をどう決めたらいいか、は別問題としてあります。室の目的や好みによっても変わるので、それも含めて調整する、という過程が必要な気もしてます。
とりあえずそれらしい値が出てきたので、リビングはこれを設定して運転させてみます。また、他の部屋も計算して、設定・検証してみようと思います。
長々書きましたが、もっと簡易な方法があるよとか、ここがおかしい等のツッコミがあれば教えてください。
(追記)続きを書きました。
*1:例えば【一条工務店】床暖房の設定温度と注意すべきポイントや【一条工務店】床暖房で室温を22・23℃にする最適な設定温度 - となりのi-smartなど
*2:一条工務店HPの画像に追記して作成
*3:我が家はi-smileですが、オプションで一条工務店の防犯ツインLow-Eトリプル樹脂サッシにしているので0.8としてます。i-smile標準の高性能樹脂サッシだと1.4になるようです
*4:開き窓より多少悪くなります
*5:床上表面熱伝達抵抗と配管から床表面までの熱抵抗は0.269なので、熱貫流率はこの逆数で3.717とする。文中の計算は2.7のまま