温湿度の自動計測
https://scrapbox.io/files/6182699da23d4c00200a3cbb.png
Raspberry Piで温湿度センサを制御して室内の気温と湿度を自動的に計測する
水槽内のセンシングではないが、水槽周辺のコンディションも把握できると…嬉しい!
要件
アクアリウム周辺の気温と湿度を取得できる
気温と湿度を指定した時刻(間隔)で自動取得できる
仕様
仕様1:Raspberry Piからプログラムを実行すると、現在の気温と湿度が記録される
仕様2:Raspberry Piで指定した間隔ごとに、上記の温湿度記録プログラムが実行される
使用したもの
あしゅりーアクアリウムの場合
table:使用したもの
ラズパイ Raspberry Pi 4 ModelB 4GB
温湿度センサ AM2302 (DHT22)
抵抗器 5.1kΩ × 1個
ワイヤ ラズパイ-センサ間の接続用
ブレッドボード 基板に実装の場合は不要
温湿度センサ:AM2302 (DHT22)
DHT22という温湿度センサが乗った「AM2302」というモジュール
https://scrapbox.io/files/62239271b9560d001d67232d.jpg
最初から基板に組付けられているタイプもあるが今回は単品のものを買った
設計
流れは以下の通り
温湿度センサと抵抗器とラズパイを配線
CircuitPython_DHTインストール
温湿度記録プログラムを作成
定期的に温湿度記録ができるようにする
温湿度センサと抵抗器とラズパイを配線
ラズパイの電源をオフにする(壊れるので)
まずはAM2302のデータシートを確認
データシートによると抵抗は5.1kΩ
AM2302 supply voltage range 3.3V - 5.5V, recommended supply voltage is 5V.
VDDは3.3Vでも良いが5V推奨とのことのため、それに従う
ブレッドボード上に以下の通り配線する
table:配線
Raspberry Pi AM2302
5V VDD(赤)
GPIO20 SDA(黄)
- NC(ここは使わない)
GND GND(黒)
GPIOは20番ピンを使用したが別のところを使ってもOK
https://scrapbox.io/files/62241b2c601a96001dc282e9.png
上記の通りブレッドボードで問題ないが、今回あしゅりー.iconは基板に実装した
https://scrapbox.io/files/62241c19d48293001de9cfe7.jpg
ちょうどいい抵抗が無くて地獄みたいな感じになっているが怒らないでほしい
CircuitPython_DHTインストール
以前はAdafruit_DHTを使用していたが、公式フォーラムにて非推奨となっており新しいCircuitPython_DHTが推奨されているため、こちらを利用する
これについてQiitaにも記事を書いたので詳細は以下を参照のこと
Adafruitの公式フォーラムの通りインストールする
code:Terminal
pip3 install adafruit-circuitpython-dht
sudo apt-get install libgpiod2
温湿度記録プログラムを作成
公式フォーラムに気温と湿度取得のサンプルコードがあるのでこれをもとに以下の通りプログラムを作成する
code:adafruit.py
import time
import datetime
import board
import adafruit_dht
# 取得した温湿度データの保存先を指定(自身の環境のパスに書き換える)
OUTPUT = '/home/asyley/temp_humidity.log'
def get_temp_humidity():
dhtDevice = adafruit_dht.DHT22(board.D20)
timestamp = now_dt.strftime('%Y-%m-%d %H:%M:%S')
try:
temperature_c = dhtDevice.temperature
humidity = dhtDevice.humidity
output = '{:.1f},{}'.format(temperature_c, humidity)
with open(OUTPUT, 'a') as f:
log_str = timestamp + ',' + output + '\n'
f.write(log_str)
except RuntimeError as error:
except Exception as error:
dhtDevice.exit()
GPIOを20番ピンから変更している場合はadafruit_dht.DHT22()にて適宜ピン番号を変更する
例外処理はテキトーなので必要に応じて修正してほしい
上記を実行する
code:Terminal
python3 adafruit.py
これにより気温(℃)と湿度(%)は26.8,58.9のように出力され、OUTPUT に指定したパスの temp_humidity.log をcat等で確認すると以下のように記録されている
code:temp_humidity.log
2021-08-22 20:47:33,26.8,58.9
完了 ⇒ 仕様1:Raspberry Piからプログラムを実行すると、現在の気温と湿度が記録される
定期的に温湿度記録ができるようにする
crontabで上記プログラムを定期的に実行する
例えば毎時0分、10分、20分、30分、40分、50分にて10分おきに実行したい場合を想定
python3の場所を確認
code:Terminal
$ which python3
/usr/bin/python3
上記の adafruit.py を例えば /home/asyley/ に置いている場合、 $ crontab -e を実行して以下を追記する
code:crontab
*/10 * * * * /usr/bin/python3 /home/asyley/adafruit.py
これにより10分おきに温湿度が記録され、以下のようなログが得られることを確認する
code:temp_humidity.log
2021-08-22 20:50:00,26.8,58.9
2021-08-22 21:00:00,26.6,59.1
2021-08-22 21:10:00,26.6,56.6
2021-08-22 21:20:00,27.5,58.0
完了 ⇒ 仕様2:Raspberry Piで指定した間隔ごとに、上記の温湿度記録プログラムが実行される
システム構成図
「Air temp / Humidity sensor」が実現できたことになる
システム構成図.icon