LoginSignup
2
1

More than 5 years have passed since last update.

Arduino nanoで、湿り空気の状態を表示した。(水蒸気量、水蒸気圧、露点温度、比エンタルピー)

Last updated at Posted at 2018-06-03

骨子

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;
}

SSA.jpg

// 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;
}

SSP.jpg

// 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);
}

DW.jpg

// 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;
}

SEC.jpg

難しかったこと

近似計算式は複雑であり、また対数を用いるため、コードに記述すると読みにくくなる。
そのため、式の要素ごとに分解して、組み合わせて計算した。

わかったこと

温度と水分量が分かることで、空気の状態は一意に、そして様々な物理量で表現できる。
温度が高ければ高いほど、含むことができる水分量が多くなる。
湿り空気は、水分量が多いほど、そのエネルギー状態が高くなる。

あとがき

空気の状態を数値化して表現する、これは非常に大事だと感じました。
ニーズがあるようであれば、Arduino nanoに組み込んだスケッチをGitHubで公開したいと思います。
コミュニティの情報を参考にさせていただきましたのでLGPLで公開できればと考えています。

読んでいただきありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1