センサーの値を見える化する(2)
温湿度センサ:DHT11の値の見える化

2022年7月3日

どもです。

前回に引き続き、今回もセンサ値の見える化です。

前回のエントリの最後に、「見える化する値が1つだけでは面白くない」という結論に至りました。
そこで、今回のエントリでは、温度に加えて「湿度」も見える化します。

1.作業環境

今回の作業環境です。

作業環境
H/W RaspberryPi3
OS Raspbian GNU/Linux 10 (buster)
ライブラリ libpigpio/libcgpio(0.4.0)
python3 ver.3.7.3
温度センサ DHT11
湿度センサ DHT11

前回のエントリで紹介した作業環境からの変更点は、赤字で示しています。
自作ライブラリを使用していますが、バージョンを更新しています。
詳細はGitHubで公開していますので、あわせて参照・使用していただければ幸いです。
温度と湿度を測定するセンサーとして、DHT11を使用しています。
DHT11の使い方は、温度(湿度)センサを使ってみた(2)-RaspberryPi/pigpioでDHT11にコードを記載していますので、こちらを参照していただければ、と思います。

2.「見える化」する

温度と湿度の「見える化」は、前回同様「Ambient」というサービスを使用します。
このサービスに対してデータを送信、グラフにセンサー値を表示します。
その際に使用したpythonのコードは、下記の通りです。

import ambient
import requests

def GetTemperature():
    filename = 'dht11.data'
    infile = open(filename, 'rb')
    temperature_int_part = infile.read(2)
    temperature_dec_part = infile.read(2)
    humidity_int_part = infile.read(2)
    humidity_dec_part = infile.read(2)
    
    infile.close()

    temp_int_value = int.from_bytes(temperature_int_part, byteorder='little')
    temp_dec_value = int.from_bytes(temperature_dec_part, byteorder='little')

    sensor_data = temp_int_value + (temp_dec_value / 10)

    return sensor_data

def GetHumidity():
    filename = 'dht11.data'
    infile = open(filename, 'rb')
    temperature_int_part = infile.read(2)
    temperature_dec_part = infile.read(2)
    humidity_int_part = infile.read(2)
    humidity_dec_part = infile.read(2)
    
    infile.close()

    int_value = int.from_bytes(humidity_int_part, byteorder='little')
    dec_value = int.from_bytes(humidity_dec_part, byteorder='little')

    sensor_data = int_value + (dec_value / 10)

    return sensor_data


if __name__ == '__main__':
    temperature = GetTemperature()
    humidity = GetHumidity()

    print(temperature, '[C], ', humidity, '[%]')

    try:
        am = ambient.Ambient(xxxx, 'yyyyy')
        r = am.send({'d1': temperature, 'd2': humidity})
        print('sent to ambient : ret = %d' % r.status_code)
    except requests.exceptions.RequestException as e:
        print('request failed: ', e)

行っている処理は、前回のエントリで紹介した内容と同じです。
C/C++で実装したツールが測定、ファイルに書き込んだ値を読み出してデータを送信しています。
上記のコードでは、GetTemperature()で温度を、GetHumidity()で湿度をぞれぞれ読み出しています。
それぞれのデータは、整数部と小数部から構成されており、2バイトずつのデータです。
順番としては、温度→湿度の順番で書き込まれています。

コード内の「xxxx」と「yyyy」は、それぞれ「チャンネルID」と「リードキー」です。

3.見える化の結果

とある日の私の部屋の気温と湿度の変化を見てみます。
sensor_graph_visualization_002_001
一日中、部屋のエアコンをつけっぱなしにしています。
設定は「除湿」!
室温については、比較的安定しています。
湿度についてはあまり安定していないです。
それでも、ある程度湿度が高くなると、それを下げるように動作しているのだ、ということが分かります。
なお、エアコンを動かしていない場合の部屋の温度/湿度の変化は下図。
sensor_graph_visualization_002_002
昼間、エアコンを動かしていない間は、ホントに気温も湿度も変化しないですね…。

4.まとめ

今回は、温度と湿度を測定し、同じグラフに表示してみました。
エアコンを動かしている状態では、キチンと動作して効果を発揮していることが分かります。
また、温度と湿度の波形の変化の仕方を見てみると、なんとなくですが相関があるように見えなくもないです…。
この辺は、微分したりすると分かるのかもしれません。
しかし、それはこのエントリの本題ではないので、割愛します。

やっぱり、データが複数あって何かしらの相関が見える(見えそう…)のは、面白いですね。

ではっ!