温湿度計を自作した話
こんにちは!
先日、汎用マイコンArduinoを使って温湿度計を作ったので、今回はその時の話を書いていきます。割とよくある電子工作だとは思いますが、ご興味ある方は読んでいただければと!
開発のモチベーション
冒頭に書いたとおり、今回作成したのは自作の温湿度計です。具体的には、温度・湿度センサーと液晶ディスプレイをArduino接続し、センサーからの情報を処理して液晶ディスプレイに表示する、そんなようなものとなります。
もちろん、単に温度湿度を測って表示するだけなら世の中には色々なものがあるわけで、そういうものを購入すれば解決するわけですが、今回の主眼は「絶対湿度(g/m3)」の算出することにあります。
一般的に「湿度」という言葉が意味するのは「相対湿度(%)」なのですが、これだと実際に空間にどれだけの水分が含まれているのかがわかりません。相対湿度はあくまでも「ある温度」での最大水分量との割合を表す指標なので、「気温30度の時の湿度50%」と「気温10度の時の湿度50%」では実際に大気に含まれる水分量は大きく異なります。そして、「実際に大気に含まれる水分量」というのが上記の絶対湿度だというわけです。このあたり、詳しくは下記のwikipediaの記事がわかりやすいと思います。
人間の肌が感じる乾燥具合やカビ・菌の繁殖はあくまでも実際の水分量に依存するものであるため、これらの指標が知りたければ相対湿度ではなく絶対湿度を計測すべきです。問題は市販の安価な温湿度計は相対湿度の数値しか表示してくれないところにあります(絶対湿度まで表示してくれるようなものも無くは無いようですが)。
上記のwikipediaの記事を見ていただければわかるとおり、この絶対湿度の値は温度と相対湿度の二つの数字からある程度算出することができます。あくまでも近似式なので正確な数字ではないでしょうが、大まかな水分量が得られれば良しと考えればこれで十分でしょう。というわけで、自分でコードを組んで作れば良いと考えたわけです。
というわけで、今回の開発モチベーションは生活環境の改善です。絶対湿度10~15 g/m3くらいが生活環境的にはちょうどいいらしいので、除湿機・加湿器なんかを使って調整するわけですが、それをするにはまずは絶対湿度が把握できなければはじまりません。そんなわけで、絶対湿度をモニタリングできるようなモノを作る、それが今回の目標です。
まあ、例によって上記は半分くらいは建前で、単純にArduinoとセンサー使って何かを作ってみたいと思ったというのも大きいんですけどねw
使うデバイス
前の章でも軽く触れたとおり、今回使うデバイスは主に下記の3つ。
- Arduino nano(の廉価版互換機)
- 温湿度センサー
- 液晶ディスプレイ(LCD)モジュール
Arduino nanoについては先日書いた記事に書いたとおりですね。組み込みなどによく使われる小型の汎用マイコンです。前回購入した際に3個セットとかで買ったので、それをこちらに流用した形です。
温湿度センサーは広く使われている「DHT11」という型式のものを利用。一個あたり200~300円くらいで買える廉価なものですね。おそらくそこまで精度は高くない気がしますが、まあだいたいの数値がわかればいいなら問題ないのでしょう。Arduino用にライブラリも準備されているので、扱いも容易です。
液晶ディスプレイも広く使われている「LCD 1602」と呼ばれるタイプのものを使っています。「1602」は16文字 x 2行という意味らしいです。色々な製造元から販売されているようですが、今回はamazonで売っていたI2Cモジュール付き(写真右側の基盤)のものを700円くらいで購入。I2Cモジュールがあると配線がかなり楽になりますが、このモジュールが無いものだと200円くらいで買えるので、ある程度使い慣れてからはI2Cモジュールなしでも良いかも知れません。
ソースコード
Arduinoに記載しているソースコードはこんな感じです。そこまで大したことをしているわけでもなく、このくらいの規模ならGitHubにあげるまでも無いかなと言う気もするので、コードをそのまま貼り付けます。
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>
#include <math.h>
#define SENSOR_PIN 2
#define DHT_TYPE DHT11
DHT dht(SENSOR_PIN,DHT_TYPE);
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// put your setup code here, to run once;
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
float humid = dht.readHumidity();
float temp = dht.readTemperature();
if(isnan(humid) || isnan(temp)){
Serial.println("sensor error.");
return;
}
// Calculate absolute humidity
double Psat = 6.1078 * pow(10, 7.5 * temp/(temp + 237.3)); //saturated pressure [hPa]
double Gsat = 217*Psat/(temp + 273.15); //saturated water amount
double Gabs = Gsat * humid / 100; //absolute humidity
// Serial Link
Serial.print("Humidity: ");
Serial.print(humid);
Serial.print(" % ");
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" *C ");
Serial.print("Absolute Humitidy: ");
Serial.print(int(Gabs));
Serial.println(" g/m3 ");
// LCD output
lcd.setCursor(0, 0);
lcd.print("RH: % T: C");
lcd.setCursor(4, 0);
lcd.print(int(humid));
lcd.setCursor(12, 0);
lcd.print(int(temp));
lcd.setCursor(0, 1);
lcd.print("AH: g/m3");
lcd.setCursor(4, 1);
lcd.print(int(Gabs));
}
基本的には温湿度計のデータを読み取って、絶対湿度を計算し、液晶ディスプレイに出力するというだけのプログラムです(テスト用にシリアルでも送信しています)。各種ライブラリの情報はたくさん転がっていると思うので、ここでの詳細説明は割愛します。
製作
製作の流れは前にサーバー監視システムを作ったときと同様に、まずはブレッドボードでのプロトタイプ → 基盤への実装です。今回はプロトタイプも一度に全部やるのではなく、まずは取扱のしやすい「Arduino Uno」ではじめて、ある段階で「nano」に置き換えるような形で進めています。ソースコードの方も徐々に作っていく感じですね。
まずは温湿度センサー単体でのテスト。
今度は液晶ディスプレイ単体のテスト。センサーも接続はしていますが、このときは単純に液晶に「HELLO WORLD!」と出力しているだけですw
そしてArduino nanoに置き換えつつ、複合でのテスト。
最後にユニバーサル基板に実装して、箱を作って完成です!
確かこれを作ったのは夏頃だったと思いますが、夏の間は特に湿度管理が重要でしたし、秋への切り替わりのタイミングで除湿機の常用をやめるタイミングなんかが数値的に見えるのもいい感じでした! これからの時期だと乾燥対策に役に立ってくれそうです。
あとは、このような形で実装しておくとパソコンから切り離して使えるのも良いですね。プログラム自体はマイコン側に書き込まれているので、USBから給電だけしてあげれば、あとは特にメンテナンスなども必要ありません。
今回作った感想としては、単にセンサーとモニターをつなぐだけなら案外楽に出来るなということです。実際はここに書いてあるほどスムーズに進んだわけではないですが、それでも想像していたよりはずっと手軽に実装できたという印象です。おそらくいちばん面倒くさかったのは、むしろケースの作成ですねw 今後も何か役に立ちそうなものや面白いものを思いついたらどんどん自作していきたいところです!
まとめ
今回は自作の温湿度計の製作について書いてみました。生活環境の改善のために作ろうと思ったわけですが、最終的に無事に完成してよかったです。役に立つというのも有りますが、こういうのは作ること自体が楽しいというのも間違いないですね。
この製作を通して液晶ディスプレーの使い方もだいぶ理解できたので、他にも色々と応用できそうな気がしています。こんな感じでできることや、使えるモノが広がっていく感じはやはり面白いです(このあたりはソフトウェアもおなじですね)。ということで、今後も電子工作の記事をあげていくと思うので、ご興味ある方は引き続き見ていただけると嬉しいです。
それでは、また!
この記事が気に入ったらサポートをしてみませんか?