Arduino と SHT71 センサーで実験室の温湿度ログを Mac から取得する。
実験室で温度・湿度を記録する、あるいは長時間でのログを取りたいがあります。この目的に合うStrawberry Linux 社の温度・湿度計モジュール USBRH が市販されていますが、Windows の driver しか公開されおらず、有志の開発したソフトで Linux でまでなら対応しているようです(先輩の例)。ただ、Mac User なので、できれば直接 Mac から制御したいところです。
そこで、Arduino とSENSIRION 社製のデジタル温湿度センサー SHT71 を使って、直接 Mac でデータ収集してみました。SHT シリーズは比較的高性能で、上記のモジュールにも使われています。今回は、PIN の足がついている SHT71 を用います。日本国内だと Strawberry Linux からも SHT71 や SHT11 を購入できます。自分は、アメリカで Newark 経由で購入して $33 でした。
SHT71 は、公称値で、 25℃ において湿度の精度が±3.0%、温度の精度が±0.4℃となっています。 詳しくは、SHT71 dataheet (pdf) をご覧ください。この SHT71 はデジタル値で出力してくれるので、PIN の足は順番に
- SCL : Serial Clock, input only (同期用)
- VDD : Source Voltage
- GND : Ground
- DATA : Serial Data, bidirectional (シリアルデータ通信)
となっています。
Arduino との配線は、10 kOhm のプルアップ抵抗をつけて、以下のようにしました。
肝心のスケッチですが、ライブラリを利用できます。SHT1X や SHT7X のライブラリが、サイトから sht1x.tgz としてダウンロードできます。あるいは、GitHub にもあるようです(ref)。ライブラリは以下に収容します。
~enoto/Documents/Arduino/libraries/sht1x
なお、Arduino Uno を使っており、sht1x_hw.h の中身で
# define SHT1X_CLOCK_LINE PD2 # define SHT1X_DATA_LINE PD3
という箇所を
# define SHT1X_CLOCK_LINE PORTD2 # define SHT1X_DATA_LINE PORTD3
のように修正しないとコンパイルが通りません。
その上で、スケッチは以下の通り。データシートにある補正式のままです。
#include <sht1x.h> #include <sht1x_hw.h> unsigned int h; unsigned int t; double temp; double hlin; double htrue; void setup() { Serial.begin(9600); delay(15); sht1x_init(); Serial.println("Start"); if (sht1x_read_humidity() < 0) { Serial.println("Reset"); sht1x_reset(); } } void loop() { h = sht1x_read_humidity(); t = sht1x_read_temp(); while (millis() % 1000); temp = -39.66 + 0.01 * t; // 14 bit hlin = -2.0468 + 0.0367 * h - 1.5955e-6 * h * h; // 12 bit htrue = (temp - 25.0) * (0.01 + 8e-5 * h) + hlin; // 12 bit Serial.print(temp, 3); Serial.print("C "); Serial.print(htrue, 3); Serial.println("% "); }
大体、仕様の誤差範囲で、正しい温度のようですが、較正はまた確認してみようと思います。
参考サイト