#骨子
Arduino、温湿度センサ、液晶表示器を用いて、湿り空気の状態を示す諸量を計算させた。
近似計算式をArduino nanoに組み込んだ。
#システム構成
センサ : DHT11
コントローラ : Arduino nano
表示器 : LCD1602
#使用ライブラリ
物理計算用ライブラリ : math.h
温湿度センサ用ライブラリ : DHT.h
液晶表示用ライブラリ : LiquidCrystal.h
#本文
温湿度をDHT11で計測し、表示器としてLCD1602を用いるサンプルスケッチは、基本的なチュートリアルとして公開されている。
DHT11では、整数値で温度と湿度を出力する。
一般に、温度と湿度と言われているのは、湿り空気においては乾球温度と相対湿度である。
この2量から下記の7量を近似計算した。
- 露点温度 Dew point temperature (Frost point)
- 飽和水蒸気量 Saturated steam amount
- 水蒸気量 Steam amount
- 飽和水蒸気圧 Saturated steam pressure
- 水蒸気圧 Saturated vapor pressure
- 絶対湿度 Absolute humidity
- 比エンタルピー Specific enthalpy
飽和水蒸気量は、Wexler-Hylandによる近似計算式を用いた。
飽和水蒸気圧は、Tetens(1930)のパラメータによるAugust他の近似式により計算し、水蒸気圧は飽和水蒸気圧に相対湿度(%)を乗算した。
露点温度は、JIS Z 8806の飽和水蒸気圧表から求められる式により計算した。
絶対湿度は相対温度、水蒸気圧による状態方程式により計算した。
比エンタルピーは、温度と絶対湿度をパラメータとする計算式により、カロリー単位、ジュール単位で表現した。
#コードサンプル
// saturation steam amount (formula by Wexler-Hyland)
// 飽和水蒸気量 [g/m3]
double saturated_steam_amount(double theta_celcius)
{
double saturation_steam_amount_fs;
double Tab;
double t1, t2, t3, t4, t5;
Tab = 273.15 + theta_celcius;
t1 = -5800.2206 / Tab;
t2 = 0.048640239 * Tab;
t3 = 0.41764768 * pow(10, -4) * Tab * Tab;
t4 = 0.14452093 * pow(10, -7) * Tab * Tab * Tab;
t5 = 6.5459673 * log(Tab);
saturation_steam_amount_fs = exp(t1 + 1.3914993 - t2 + t3 - t4 + t5) / 1000;
return saturation_steam_amount_fs;
}
// saturation steam pressure (formula by August etc. and Parameters by Tetens(1930))
// 飽和水蒸気圧 [mmHg]
double saturation_steam_pressure(double theta_celcius)
{
double f;
double index;
index = 7.5 * theta_celcius / (theta_celcius + 237.3);
f = 6.1078 * pow(10, index);
return f;
}
// dew point temparature(frost point)
// 露点温度 [CDP]
double dewpoint(double celsius, double humidity)
{
double RATIO = 373.15 / (273.15 + celsius);
double RHS = -7.90298 * (RATIO - 1);
RHS += 5.02808 * log10(RATIO);
RHS += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ;
RHS += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ;
RHS += log10(1013.246);
double VP = pow(10, RHS - 3) * humidity;
double T = log(VP/0.61078);
return (241.88 * T) / (17.558 - T);
}
// specific enthalpy Cal
// 比エンタルピー(kcal/kgDA)
double specific_enthalpy(double theta_celcius, double absolute_humidity)
{
return 0.24 * theta_celcius + (0.431 * theta_celcius + 597.3) * absolute_humidity;
}
#難しかったこと
近似計算式は複雑であり、また対数を用いるため、コードに記述すると読みにくくなる。
そのため、式の要素ごとに分解して、組み合わせて計算した。
#わかったこと
温度と水分量が分かることで、空気の状態は一意に、そして様々な物理量で表現できる。
温度が高ければ高いほど、含むことができる水分量が多くなる。
湿り空気は、水分量が多いほど、そのエネルギー状態が高くなる。
#あとがき
空気の状態を数値化して表現する、これは非常に大事だと感じました。
ニーズがあるようであれば、Arduino nanoに組み込んだスケッチをGitHubで公開したいと思います。
コミュニティの情報を参考にさせていただきましたのでLGPLで公開できればと考えています。
読んでいただきありがとうございました。