目次 — 知りたいところから読む

入力を変えて確かめる

実験パネルを開き、実行を押すとPythonを読み込みます。停止と初期値へのリセットができます。結果はこの端末内で計算します。Pythonのインストールは不要です。

下にあるローカル実行の手順は、配布ソースを再現するための任意の手順です。ブラウザ実験には不要です。

実験パネルを別タブで開く

再現用ソースをダウンロード

三つのブラウザ実験

上のパネルは熱収支です。LED負荷、冷房の除熱能力、平均外気温、換気流量、設定温度を変更できます。湿度とCO₂は別のモデルとして下のパネルで計算します。Pythonのインストールは不要で、本文のローカル手順は任意です。

湿度の実験を開く

CO₂の実験を開く

三つとも元の合成入力と60秒刻みの陽解法を使い、0時から24時間を計算します。照明は08–24時で固定。上図は初期値と毎時の標本を結んだもので、スイッチングや極値の全履歴ではありません。最小・最大の指標は毎分の値を使います。熱モデルの外気標本は元コードに合わせ、各時刻の1分前の値を表示します。下図は一日の積算項です。換気の正値は外への正味流出、負値は流入です。A/B比較・数値表・条件共有で結果を確認できます。

熱モデルは熱容量12 MJ/K、壁UA 450 W/K、その他発熱800 W、初期22°C、外気振幅6°C・ピーク15時。冷房は設定温度±0.5°Cで切り替えます。LED電力を全量熱へ変換します。除熱kWhは冷房の電気使用量ではありません。

湿度モデルは300 m³・24°C、初期RH65%、除湿ON75%/OFF65%で固定。飽和を超える水は凝縮として別に集計します。蒸散は指定入力で、RHから植物の応答を推定しません。潜熱量は電気使用量ではありません。外気にも同じ24°Cを仮定します。

CO₂モデルは300 m³・24°C・101325 Pa、初期600 ppm、供給ON700/OFF900 ppm。吸収は明期のみ、呼吸は暗期のみという元の簡略化を保ちます。ブラウザの換気下限0.03 m³/s・吸収上限0.08 kg/hは、指定範囲内でCO₂量が負にならないための教材上の制限です。栽培・換気・安全基準ではありません。

三つのモデルは相互に結合していません。湿度やCO₂の室温は熱モデルから受け取りません。機器選定・実施設性能・作物収量を予測するものではありません。元のZIPと基準結果は変更していません。ブラウザ用の実行コード、カーネル、設定をそれぞれ同じフォルダへ保存すれば初期値をローカル再現できます。

thermal: experiment.py · thermal_kernel.py · config.json

moisture: experiment.py · moisture_kernel.py · config.json

co2: experiment.py · co2_kernel.py · config.json

栽培室の熱収支Lab — LED・換気・壁・冷房を分けて計算する

結果から見る

合成した24時間では、室温は 18.884–24.547°C、LEDから室内へ入る熱は 192.0 kWh、冷房が取り除く熱は 184.333 kWhになった。これは実際の植物工場を測定・同定した値ではない。熱の入口、出口、蓄積を同じ単位で追えるかを確かめる教材である。

変更 予想する変化 変えていないもの
LED電力を半分 点灯中の発熱が半分、冷房負荷が減る 外気と壁の条件
熱容量を2倍 温度変化が遅くなる 定常時の熱収支
換気量を増やす 外気との差に応じた熱移動が増える 壁のUA値
冷房能力を0へ 室温上昇を設備が抑えない LED発熱量

CEA入門では植物・環境・設備の境界を、VPD・DLI Labでは観測時系列から派生量を計算した。今回はその次として、設備が室温を変える最小の動的モデルを扱う。

図1 · ボタンで表示を切り替え
LEDと内部機器の発熱、外気との壁・換気熱移動、冷房除去熱を一室の熱容量へ接続した栽培室熱収支

図: Duskcoil作成。一室集中定数モデルの計算境界を示す模式図。植物体、湿度、CO₂、潜熱、室内の温度分布は含まない。

温度ではなく、まず熱流を足し引きする

完全混合の一室を仮定し、室内の有効熱容量を C [J/K]、室温を T [°C] とする。各熱流をW(J/s)でそろえると、保存式は次になる。

C\frac{dT}{dt}=Q_{LED}+Q_{other}-K(T-T_{out})-Q_{cool}

ここで K=UA+\rho c_p\dot V [W/K] とし、壁・天井などの総合熱通過を UA、換気による顕熱移動を \rho c_p\dot V で表す。外気の方が高温なら T-T_{out} は負になり、この項は室内への熱流になる。符号を固定的な「損失」と覚えず、温度差の向きを見る。

Oklahoma State University Extensionの温室資料も、必要暖房能力が被覆面積・断熱性・内外温度差に依存し、換気が温湿度制御に関わることを説明している。米国DOEのBuilding Energy Modeling解説では、外皮、照明、HVAC、運用スケジュール、気象を物理式で組み合わせ、相互作用を計算することを建物エネルギーモデルの基本としている。

この教材で固定した境界

量 合成値 モデル内での意味
熱容量 C 12 MJ/K 空気だけでなく室内物体をまとめた仮想値
外皮 UA 450 W/K 壁・天井等を一つに集約
換気量 \dot V 0.08 m³/s 外気と同じ温度の空気が入る顕熱項
LED電力 12 kW、08–24時 一室境界内で最終的に熱になると仮定
その他発熱 0.8 kW pump・fan等をまとめた一定値
冷房能力 14 kW ON時に除去する熱。消費電力ではない
外気温 21±6°C 15時最大の正弦波

LEDの光は一度植物や壁へ吸収されてから熱へ移るが、このモデルは放射・対流・植物体を分割しないため、室内境界へ入った電力の割合を1.0とした。DOEの照明資料も、照明が室内へ熱を加え冷房負荷へ影響することを扱っている。ただし実施設では、室外へ逃げる放射、driverの設置場所、水の蒸発に使われる潜熱などに応じて境界を引き直す必要がある。

冷房の 14 kW は熱除去能力であり、compressorの電力ではない。COPを仮定していないので、この結果から電気料金を計算しない。

1分刻みで積分する

時刻 n から n+1 への更新は明示Euler法で行う。

T_{n+1}=T_n+\frac{Q_{net,n}\Delta t}{C}

冷房は設定値24°C、ヒステリシス0.5°Cとした。室温が24.5°C以上でON、23.5°C以下でOFFになる。これはPIDやMPCではなく、頻繁なON/OFFを避ける最小の規則である。刻み幅を大きくすると切替時刻と温度振幅が変わるため、数値解が妥当かは刻み幅を変えて確認する。

コードと入力を動かす

実験一式ZIPを展開し、そのディレクトリで実行する。Python 3.10以降の標準ライブラリだけを使い、通信は不要である。

python3 experiment.py config.json > result.json
python3 -m unittest -v

入力はconfig.json、基準結果はexpected.json、完全な計算はexperiment.pyにある。manifest.jsonには入力契約とSHA-256を記録する。

conductance = envelope_ua + air_density * air_cp * ventilation
net_heat = led_heat + other_heat - conductance * (indoor - outside) - cooling
indoor_next = indoor + net_heat * dt / thermal_capacitance

変えて、壊して、検算する

  1. led_power_wを6000へ変える。LED熱は96 kWhになり、冷房除去熱も減るか確認する。
  2. thermal_capacitance_j_per_kを2倍にする。短時間の温度変化は遅くなるが、熱源そのもののkWhは変わらない。
  3. 外気温と室温を20°Cにそろえ、発熱・冷房・換気・UAを0にする。1時間後も20°Cでなければ保存式か単位が壊れている。
  4. time_step_secondsを大きくし、最大・最小温度がどれだけ変わるか比較する。結果が刻み幅へ強く依存するなら、その設定で制御性能を論じない。
  5. キーを消す、未知のキーを足す、NaNや負の能力を入れる。プログラムが推測せず拒否することを確かめる。

付属の10テストは、基準値、無熱流での温度保存、一次遅れの解析解、LED発熱の比例、energy residual、入力異常を検査する。テスト成功は施設への適合を意味しない。

このモデルで答えられないこと

  • 葉温、蒸散、除湿の潜熱、湿度とVPD
  • CO₂濃度と換気の物質収支
  • 棚段ごとの温度差、気流の短絡、sensor設置位置
  • HVACの部分負荷効率、除霜、fan・pump電力
  • 作物の生育、品質、収量、最適温度

次に湿度を結合するときは、水蒸気の保存式と潜熱を追加し、温度モデルのenergy residualを保ったまま拡張する。制御方法を比べる前に、どの係数を測定し、どの出力で同定するかを決める必要がある。

参考資料

湿度収支Lab — RHではなく水蒸気質量を保存する

結果から見る

固定24°C、容積300 m³の合成室を24時間計算すると、RHは 64.817–75.269%、植物由来と仮定した水蒸気源は 34.8 kg、換気による正味排出は 12.793 kg、除湿回収は 21.542 kgになった。水分収支残差は 10^{-12} kg未満である。これは実作物の蒸散量や施設性能ではなく、保存則を検算する教材値である。

図2 · ボタンで表示を切り替え
蒸散、換気、除湿、凝縮を水蒸気質量へ接続し、温度からRHへ変換する一室モデル

図: Duskcoil作成。完全混合・固定温度の合成モデル。RH自体を保存量として積分しない。

RHを直接足し引きしない

相対湿度は「その温度での飽和水蒸気圧に対する割合」で、温度が変われば水蒸気質量が同じでも変化する。そこで室内状態には水蒸気質量 m_v [kg]を使う。

\frac{dm_v}{dt}=\dot m_{plant}-\dot V(\rho_{v,in}-\rho_{v,out})-\dot m_{dehum}-\dot m_{cond}

水蒸気密度は \rho_v=e/(R_vT_K)、実水蒸気圧は e=RH\,e_s(T)/100 とする。飽和水蒸気圧にはFAO-56式11を用いた。室内質量が飽和値を超えた分だけ凝縮へ移し、無言でRHを100%へclipしない。

合成した入力境界

入力 値 注意
室温・外気温 24°C固定 熱モデルとの動的結合はしない
初期/外気RH 65%/60% 同じ24°Cで密度へ変換
換気量 0.08 m³/s 完全混合の正味交換
蒸散源 点灯2.0、消灯0.35 kg/h 測定値でなく prescribed source
除湿能力 2.5 kg/h 回収水量。消費電力ではない
ON/OFF 75%/65% 単純なヒステリシス

Penn State Extensionは温室の結露、湿度、換気、空気循環を一体の管理項目として挙げる。ただし本Labは病害リスクを予測しない。

潜熱を水量から読む

FAO資料の20°C付近の近似 \lambda=2.45 MJ/kgを使うと、合成蒸散34.8 kgに対応する相変化熱は 23.683 kWhである。これは蒸発に必要な熱負荷で、LED熱や冷房顕熱と同じものではない。除湿水量から求めた潜熱負荷もcompressor電力ではなく、COPや除湿機の排熱を含まない。

実行と検算

ZIPを展開し、Python 3.10以降で実行する。

python3 experiment.py config.json > result.json
python3 -m unittest -v

config.json、expected.json、experiment.pyを公開している。10テストは密度↔RH往復、閉室での質量保存、既知source、潜熱換算、入力拒否を確認する。

変更実験では、換気を0、除湿を0、蒸散を半分へそれぞれ独立に変える。温度を変えたとき、水蒸気質量を変えずRHだけが変わることも確認する。このモデルは葉面結露、局所気流、蒸散応答、病害、生育、CO₂を答えない。次の結合制御へ進む前に、温湿度sensorの位置と蒸散・回収水の測定方法を決める。

参考資料

CO₂収支Lab — 換気・吸収・呼吸・供給をmolで追う

結果から見る

固定24°C・101325 Pa、容積300 m³の合成室を24時間計算すると、CO₂は 600–906.209 ppm、合成吸収は 1.28 kg、呼吸sourceは 0.16 kg、供給は 2.967 kg、換気による正味排出は 1.756 kgとなった。mol収支残差は10^{-10} mol未満。実作物や実設備の性能値ではない。

図3 · ボタンで表示を切り替え
CO2供給・呼吸、植物吸収、換気を室内CO2物質量へ接続しppmへ変換する模式図

図: Duskcoil作成。完全混合・固定温度圧力の理想気体モデル。

ppmを直接保存しない

室内空気の全物質量をn_{air}=PV/(RT)、CO₂物質量をnとし、ppm=10^6n/n_{air}へ変換する。保存式は

\frac{dn}{dt}=\dot n_{supply}+\dot n_{resp}-\dot n_{uptake}-\dot n_{vent}

である。換気は内外濃度差と空気のmol流量から計算する。温度・圧力・容積を変えると同じCO₂ molでもppmとの対応が変わる。

Oklahoma State University Extensionは、光合成による昼間のCO₂消費、夜間の呼吸、換気と補給の関係を説明している。USDA ARSも、温室容積と仮定した吸収量からCO₂低下を収支計算する例を示す。本Labの吸収・呼吸速度は検算用の合成入力であり、収量効果や推奨設定を再現しない。

実行する

ZIPを展開し、Python 3.10以降で実行する。

python3 experiment.py config.json > result.json
python3 -m unittest -v

config.json、expected.json、experiment.pyを公開する。供給は700 ppm以下でON、900 ppm以上でOFF。8テストは閉室保存、既知1 mol source、収支残差、入力拒否を検査する。

換気、吸収、供給を一つずつ0にして結果を比較する。実施設ではcanopy gas exchange、漏気、sensor位置・校正、供給流量を独立に測る必要がある。このモデルは安全濃度、作物反応、燃焼副生成物、CO₂費用、温湿度との結合制御を答えない。

参考資料

次に読む

前提を確認するVPD・DLI実験 — 温湿度と光の時系列を検算するシリーズの次の内容へ進むCEA気候制御 — 温湿度・センサー・応答遅れ・結合制御同じ分野を別の観点から読むCEAアクアポニックス — 魚・微生物・植物の水質境界