M5stickCと温湿度センサーで飽差表示する
はじめに
植物の育成環境調べるに飽差(g/立方メートル)という値が便利と聞いたので、M5StickCにセンサーをつけてつくりました。
※飽差とは現在の空気に あとどの位水分が入る余地があるかを表している値で温度と湿度で変化し、植物の育成に適した値があるそうです。
※計算は小数点を含むのですが単純に計算式を書いて計算できたので念の為エクセルにも同じ計算式を
作って値がほぼ同じ(小数点1桁まで比較)になったのでそのまま使っています。
部品表
| 名称 | 個数 | |
|---|---|---|
| M5stickC かM5stickC-Plus | 1つ | |
| DHT11 | 1つ | |
| 電線 赤 黒 白 各10cm位 | 計3本 |
※ 電線は秋月などで片方のみピンコネクタが付いているジャンパー線を使うと良いかも。(半田付け必要)
※DHT11にはプルアップ抵抗必要ですがプログラム内部でプルアップしています
※M5stickC-plusの場合 画面表示が小さく出ます。
開発環境
| 名称 | バージョン | |
|---|---|---|
| arduinoIDE | 2.3.6 | |
| ボードマネージャ | M5stack | 2.1.4 |
| ライブラリマネージャ | M5stickC -M5Stack | 0.3.0 |
| ライブラリマネージャ | DHT sensor library by Adafruit | 1.4.6 |
| ライブラリマネージャ | M5stickCPlus -M5Stack |
※ M5のボードマネージャはVer3.x.xを使うとコンパイル時エラーでます。
回路
※DHT11の配線はVCCを3.3V ・GND・データは26ピンに接続します。
この絵ではセンサーと本体の向きが合っていませんが実際に作るときは向きを合わせて作ると配線が簡単です
※ 配線図はログインしていないと見えないみたいです。その場合はほんのちょっと見える緑のマークを押すと画像がポップアップします。
プログラム
温湿度と飽差測定サンプル
#include <M5StickC.h> //#include <M5StickCPlus.h>
#include "DHT.h"
#define DHTPIN 26
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
M5.begin();
gfesp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
dht.begin();
M5.Lcd.setRotation(5);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(3);
pinMode(DHTPIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
delay(1500);
float h = dht.readHumidity();
float t = dht.readTemperature();
//String data1 = String(t)+" "+String(h);
//Serial.println( data1);
//
float saturationPressure = saturationVaporPressure(t);
float currentVaporPressure = vaporPressure(saturationPressure, t);
float hd = vaporPresureDeficit(currentVaporPressure,h);
//
M5.update();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(10, 15);
M5.Lcd.printf("%.2f", dht.readTemperature());
M5.Lcd.setCursor(10, 45);
M5.Lcd.printf("%.0f", dht.readHumidity());
M5.Lcd.setCursor(80, 45);
M5.Lcd.printf("%.1f", hd);
delay(500);
}
//飽和水蒸気圧[hPa]の計算(Tetensの近似式を使用した)
float saturationVaporPressure(float t) {
return 6.1078 *( 10 * (7.5 * t) / (t + 273.2));
}
//飽和水蒸気量[g/㎥]の計算(理想気体の状態方程式による)
float vaporPressure(float saturationPressure, float t) {
return 217 * saturationPressure /(t +273.2);
}
//飽差[g/㎥]の計算(飽和水蒸気量と相対湿度より計算)
float vaporPresureDeficit(float currentVaporPressure,float h) {
return currentVaporPressure * ((100 - h)/100);
}
おまけ エクセルで 飽差の計算
温度値の入力セルはF3 湿度値の入力セルはF4
F5セルに入れる計算式
=SUM(F8*(100-F4)/100)
F7セルに入れる計算式
=SUM(6.1078*10 * (7.5*F3)/(F3+273.2))
F8セルに入れる計算式
=SUM(217* F7/(F3+273.2))
飽差の値(g/立方メートル)はF5セルにでます。
DHT11の取付
ピンヘッダーに直接DHT11をハンダつけしてグルースティックを溶かして絶縁しています。
最初紙粘土を使ったら水分含んでいるのでダメでした。
1
投稿者の人気記事




-
Makato-kan
さんが
2025/09/15
に
編集
をしました。
(メッセージ: 初版)
-
Makato-kan
さんが
2025/09/15
に
編集
をしました。
(メッセージ: てにおはの修正他)
-
Makato-kan
さんが
2025/09/19
に
編集
をしました。
(メッセージ: 配線図が消えていた)
-
Makato-kan
さんが
2025/09/19
に
編集
をしました。
-
Makato-kan
さんが
2025/09/19
に
編集
をしました。
-
Makato-kan
さんが
2025/09/19
に
編集
をしました。
ログインしてコメントを投稿する