部屋の中心で飽差を叫ぶ!
(2019-04-22 初稿 - 2021-05-13 転記・修正 - 2025-02-23 修正・追記)
はじめに
以下の記事後、飽差についての報告も要望があった。
Raspberry Pi3で温度を測る
飽差は、植物の生育を管理するうえで、重要な指標とのこと。
飽差とは
誤解を恐れずに言えば、「空気中にどれくらい水蒸気を放出できるか」を示す指標。
単位は、g/m3 で、1立方メートル当たりの水分の重さで表す。
植物は、飽差が大き過ぎると気孔が閉じて、小さすぎると蒸散が起こりにくくなる。
このため、植物の生育のためには、換気や冷房よる除湿やミスト噴霧による加湿などの方法で、適度な飽差に管理することが必要。
一般的に、飽差は、3〜6g/m3くらいで管理することが良いと言われている。
飽差の詳細は、以下のサイトを参照のこと。
飽差の計算
飽差の計算は、上記2番めのサイト、または、以下のサイトを参照のこと。
以下のとおり、水蒸気圧、飽和水蒸気量を求め、飽差を計算することができる。
水蒸気圧(WVP) = 6.1078*10^((7.5*気温/(気温+237.3)))
飽和水蒸気量 (SWVA) = 217*WVP/(気温+273.15)
飽差(HD) = (100-相対湿度)*SWVA/100
上記のとおり、温度と湿度がわかれば、飽差は計算によって求めることができる。
温度と湿度のセンサー
今回の目的のために、新たに温度と湿度のセンサーを購入した。
1個500〜600円なので、財布には優しい。
このセンサーはDHT22が温度・湿度センサーで、既にハンダ付けされて付属のケーブルでつなぐだけのAM2302を購入した。
以下、このセンサーをAM2302と呼ぶ。
AM2302のつなぎ方
最初に買ったAM2302は、つなぎ方を間違えて壊してしまった。(-_-;)
写真を載せるので、付属ケーブルの接続方法を確認すること。
+ ⇒ pin1
out ⇒ pin7
- ⇒ pin9

温度と湿度を測る
接続完了後、以下のとおりプログラムをダウンロードしてインストールする。
まず、python3の pip を事前にインストール。既にインストールされていれば、不要。
$ sudo apt-get update $ sudo apt-get install python3-pip
プログラムをダウンロードし、ライブラリをインストールする。
(2021-12-02 追記)
以下のライブラリは開発元で非推奨とのこと、正常動作しなくなってしまった。(^_^;)
お手数ですが、今後は以下のページを参考に。
(追記終了)
(2025-01-27追記)
以下のスクリプトがまったく動作しなかったので、全面的に修正してみた。
以下のサイトに記述があるように、ライブラリをインストールする。
最近のpyhtonでは、pip3でダイレクトにインストールするとエラーになるので、以下のように「--break-system-packages」をつけるか、venv等の仮想環境を用いる。
Raspberry Piのようなシングルタスクのワンボードマイコンで温度を測る場合は、「--break-system-packages」の付加で十分だと思われる。
(追記終了)
pip3 install adafruit-circuitpython-dht --break-system-packages
sudo apt-get install libgpiod2
さっそくプログラムに付属していた simpletest.py を修正し、飽差を計算する関数(calc_hd)を書き加えた hd.py スクリプトを作成する。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# mod H.Y 2022-09-03
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import time
import board
import adafruit_dht
# add H.Y 2019-04-22
def calc_hd(temp,humidity):
WVP=6.1078*10**(7.5*temp/(temp+237.3)) # Water Vapor Pressure
SWVA=217*WVP/(temp+273.15) # Saturated Water Vapor amount
return (100-humidity)*SWVA/100
MAXTRY = 4
# add 2021-08-20
humidity = temperature = None
# Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False)
# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
cnt = 0
while cnt < MAXTRY:
try:
temperature = dhtDevice.temperature
#time.sleep(1)
humidity = dhtDevice.humidity
if humidity is not None and temperature is not None:
#print(temperature, humidity)
break
except RuntimeError as error:
#print(error.args[0])
time.sleep(1)
cnt += 1
continue
except Exception as error:
dhtDevice.exit()
print("Exception error")
raise error
# calc humidity Defict
# add H.Y 2019-04-22
hd = calc_hd(temperature, humidity)
# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
print('温度= {0:0.1f} ℃, 湿度= {1:0.1f} %, 飽差(HD)= {2:0.2f} g/m3'.format(temperature, humidity, hd))
else:
print('Failed to get reading. Try again!')
$ hd.py 温度= 26.9 ℃, 湿度= 57.7 %, 飽差(HD)= 10.84 g/m3
上記のように、表示されればスクリプトは正常動作している。
つぶやいてみる
twitterでつぶやくために、詳細は以下のページを参照のこと。
(2025-01-27 修正)
(修正終了)
上記のページのbashスクリプトを修正して、以下のスクリプトを作成する。
#!/bin/bash echo "現在時刻は $(date +"%Y-%m-%d %H:%M:%S") です。「ひゃまだ家」の部屋の $(/home/pi/bin/hd.py) で、Raspberry Pi3のCPU温度は $(vcgencmd measure_temp) です。(^^♪" | /usr/local/bin/tw --pipe
上記ページのとおり、作成したスクリプトをcrontabに登録して、実際につぶやくと以下のとおりになる。
現在時刻は 2019-04-22 20:43:42 です。「ひゃまだ家」の部屋の 温度= 27.0 ℃, 湿度= 57.7 %, 飽差(HD)= 10.90 g/m3 で、Raspberry Pi3のCPU温度は temp=53.7'C です。(^^♪</ pre>
実際にtwitterでつぶやいている様子は、以下のようになる(かなり無駄なつぶやきが多い^^;)。
おわりに
不明な部分があったら、hymd3a アット gmail.comか、上記のtwitterアカウントにダイレクトメールして質問を。
それでは、また。