このページはArduinoとHP-15P、AM2302/DHT22、DHT11、SHT-71などの湿度センサで測定した結果をSDカードへ保存する温湿度ロガーの製作と、これらの比較に関するメモです。
本ページでは下表の上部5種類のセンサー(SHT-11,DHT22,SEN11301P,HS-15P)の配線方法と比較結果を示します。価格は2012年9月現在の参考価格であり、為替や需給バランス、仕入れ量などで大きく変動する場合があります。
また、I2Cインタフェースを搭載した最新の温湿度センサ(SHT31,HDC1000,BME280,Si7021)のドライバソフトウェアの配布も行っています。
メーカー
型番
| 別型番
| 温度
| 湿度
| 参考価格
| 販売店(例)
| 精度
| 分解能
| 精度
| 分解能
| SENSIRION
| SHT-11
| SHT-71
| ±0.4℃
| 12bit
| ±3%RH
| 14bit
| 2200円
| Strawberry Linux
| Aosong
| DHT22
| SEN-10167
| ±0.5℃
| 0.1℃
| ±2%RH
| 0.1%
| 987円
| Strawberry Linux
| GROVE
| SEN11301P
| DHT11
| ±2℃
| 1℃
| ±5%RH
| 1%
| 590円
| SWITCH SCHIENCE
| General Electric
| HS-15P
| -
| -
| -
| ±5%RH
| Analog
| 500円
| 秋月電子
| PIC応用装置温湿度計
| TMP-HUM UNIT HS-15P + LM61
| ±2℃
| 1℃
| ±5%RH
| 1%
| 2300円
| 秋月電子
| 以下はI2Cインタフェース搭載の最新デバイス Arduino用ドライバ SENSIRION
| SHT31
| AE-SHT31
| ±0.3℃
| 0.015℃
| ±2%RH
| 0.01%
| 950円
| i2c_sht31.ino
| TI
| HDC1000
| AE-HDC1000
| ±0.2℃
| 0.01℃
| ±3%RH
| 0.006%
| 680円
| i2c_hdc.ino
| Bosch
| BME280
| AE-BME280
| ±1℃
| 0.01℃
| ±3%RH
| 0.008%
| 1080円
| bme280.ino
| SILICON LABS
| Si7021
| 各社
| ±0.4℃
| 0.01℃
| ±3%RH
| 0.03%
| 400円
| i2c_si7021.ino
| |
SENSIRION SHT
SENSIRION SHT-11 はスイスの湿度センサの専業メーカSENSIRION社の製品で、超小型・高精度・高機能で世界中で定評があります。(おそらく)ここに記載の湿度センサの中で最も高性能なセンサだと思いますが、価格が高い(2200円)欠点があります。国内ではストロベリーリナックス社などで購入することが出来ます。
SHT-11は基板に表面実装するタイプで、SHT-71は基板に差し込めるようになっています。パーツの写真では通常の2.54mmピッチの基板上にピンソケットを経由して挿し込めるように見えたので、SHT-71(3000円)を購入しました。ところが、現物はピンピッチが1.27mmと非常に小さな部品だったため、基板への直接の差し込みは断念し、SHT-71にリード線を半田付けして反対側にコネクタを取り付けて使用することにしました。(製作方法は後述)
AM2302 / DHT22 / RHT03
Aosong AM2302はAndroid用として良く用いられています。米spark fun が取り扱っている(spark fun 型番 SEN-10167)ことで普及したものと思います。国内ではストロベリーリナックス社が「中国製激安センサ」として販売しているほか、2013年10月からは秋月電子でも取り扱われるようになりました。
型番が様々ありDHT22やRHT03と書かれていることもあります。湿度の精度はカタログ値では SENSIRION製よりも良い値のように書かれていますが、実際の実力が高いかどうかは分かりません。(製作方法は後述)
DHT11
GROVE向けSEN11301PはDHT11を基板に実装した製品です。以降はDHT11と記すことにします。DHT22とインタフェースに互換性がありますが、カタログ値だけでなく実力的にも湿度の精度が悪いため、湿度の高低の目安にしかなりませんでした。(製作方法は後述)
HS-15P
HS-15Pは10年以上前から秋月電子で売られており、国内の電子工作の全般で最もメジャーな高分子湿度センサです。高湿度の環境でも長寿命で定評があります。
しかし、他のセンサーと違ってデジタルインタフェースを持っていないセンサー単体のデバイスなので駆動するための外付け回路が必要でした。
そこで、その外付け回路をなくしてArduinoにHS-15Pを直結したいと考えてネット上を調べていたところ、理論と膨大な実験に基づいて緻密に開発をされた方(リンク)が居ました。当方のページではその情報を使わせていただいてArduinoにHS-15Pを直結して湿度ロガーを製作する方法について説明します。(製作方法は後述)
それぞれのハードウェアの製作・接続方法について説明します。
SENSIRION SHT
SENSIRION SHT-71は左側の1番ピンから順に(1)SCK、(2)VDD、(3)GND、(4)DATAとなっています。(2)VDDと(3)GNDはArduinoのPOWERの5VとGNDに接続し、(1)SCKはANALOG 5へ、(4)DATAはANALOG 4へ接続します。(4)DATAは10kΩの抵抗で5V電源にプルアップします。その他の接続方法や電圧を変更したい場合はスケッチ(ソースコード)の#defineの設定を変更します。
AM2302 / DHT22 / RHT03
Aosong AM2302/DHT22/RHT03は左側の1番ピンから順に(1)VDD、(2)DATA、(3)NULL、(4)GNDとなっています。(1)VDDと(4)GNDはArduinoのPOWERの5VとGNDに接続し、(2)DATAはANALOG 3へ接続します。(2)DATAは10kΩの抵抗で5V電源にプルアップします。(2)DATAをANALOG 3以外の端子へ接続したい場合はスケッチ(ソースコード)の#defineの設定を変更します。
DHT11
DHT11は左側の1番ピンから順に(1)VDD、(2)DATA、(3)NULL、(4)GNDとなっています。(1)VDDと(4)GNDはArduinoのPOWERの5VとGNDに接続し、(2)DATAはANALOG 3へ接続します。(2)DATAは10kΩの抵抗で5V電源にプルアップします。(2)DATAをANALOG 3以外の端子へ接続したい場合はスケッチ(ソースコード)の#defineの設定を変更します。接続図はAM2302と同じです。
HS-15P
HS-15PをArduinoのANALOG 5とANALOG 3に接続します。また、ANALOG 3とGNDの間に0.022μFのコンデンサを挿入します。なるべくフィルムコンデンサなどの誤差の少ない高精度コンデンサを使用します。接続端子を変更したい場合はスケッチ(ソースコード)の#defineの設定を変更します。但し、HS15_P_INはANALOG0〜5のADコンバータのある端子でなければなりません。
なおHS-15Pを使用するにあたって、特に注意しなければならない点は電極に直流電圧をかけないようにすることです。内部の抵抗型高分子に電流が流れ続けて破損してしまいます。Arduinoに他のスケッチを書き込んで一定電圧を出力してしまうといったことが無いように注意してください。
温湿度計 TMP-HUM UNIT
まず、PIC応用装置の温湿度計 TMP-HUM UNITを製作し、ラトルスで公開されている温湿度計用のソフトをPICへ書き込みます。PICへの書き込みにはPIC Kit 2などのツールが必要です。
TMP-HUM UNITのTX端子をArduinoのDIGITAL 0(RX)端子に接続します。また、VCCとGNDをArduinoのPOWERの3.3VとGND端子に接続します。なお、TMP-HUM UNITのシリアルの通信速度は1200bpsですのでシリアルモニタで動作確認する場合はウィンドウ右下のビットレートの設定を1200bpsにする必要があります。
I2Cインタフェース搭載デバイス(SHT31,HDC1000,BME280,Si7021)
I2Cインタフェースを搭載した温湿度センサの接続方法は、基本的には全て同じです。下図の左側がArduino、右側が温湿度センサです。他の回路図とは位置が逆になっているので注意してください。
下記からArduino用の温湿度ロガーのソフトウェアをダウンロードすることが出来ます。すべてソースリストで公開していますのでArduino IDEでコンパイルしてから実行してください。なお、SDカードのSD_CSポートはArduinoのデフォルトであるDigital 10を使用します。他のポートに変更したい場合は、「SD.begin() 」の括弧内にDigitalピン番号を入力してください。例えば、Arduino Wireless SD Shieldであれば「SD.begin(4)」とします。
メーカー
型番
| 別型番
| ダウンロード
| 最終更新日
| 備考
| SENSIRION
| SHT-11
| SHT-71
| hum_sht.zip
| 2012/09/07
| SDへの保存機能付
| Aosong
| AM2302
| DHT22
| hum_dht22.zip
| 2014/01/09
| SDへの保存機能付
| GROVE
| SEN11301P
| DHT11
| hum_dht11.zip
| 2012/09/07
| SDへの保存機能付
| General Electric
| HS-15P
| -
| hum_hs15p.zip
| 2012/09/09
| SD対応版はこちら
| PIC応用装置温湿度計
| TMP-HUM UNIT HS-15P + LM61
| hum_com.zip
| 2012/09/07
| SDへの保存機能付
| |
これらのソフトを一つのスケッチにまとめて同時に複数のセンサーに対して実行して測定した結果例が下図です。それぞれ違う湿度を表示していることが分かります。測定時は、各センサーをなるべく近づけて同一条件になるように考慮しました。
まずは、雨が降る直前の2時間ほどの湿度をグラフにしてみました。実際の湿度に近い動きをしていたのは、SENSIRION SHT-71と、その3〜5ポイントの差で推移している HS-15P でした。(この時はDHT22を保有していなかったので4種類での比較です)
下図は、SHT-71、DHT22(AOSONG AM2302)、DHT11の比較です。エアコンを使って湿度を変化させた時の応答の様子を示しています。応答性能の高い順にSHT-71、DHT22(AOSONG AM2302)、DHT11となりました。上図と同様にDHT11だけが異なる推移を見せており、DHT11の安かろう悪かろうの予想を裏切るようなことはありませんでした。
次に自然な状態での湿度の推移です。SHT-71とDHT22(AM2302)は8ポイント差くらいで平行に推移しました。DHT11についても応答が遅いだけで、湿度が安定すると値も安定するようです。(値が正しかどうかは別です。)
以上の測定結果ではSHT-71がDHT22(AM2302)よりも高めの値を示していますが、それが正しい値なのか個々のバラつきなのかが分かりません。そこで、SHT-71とDHT22(AM2302)をもう一つずつ購入して比較してみることにしました。下図はエアコンを使って屋内の湿度を変化させた場合の測定結果です。SHT-71同士では、ほぼ一致した結果が得られました。少なくともSHT-71同士はバラつきが少なそうであり、値も信頼できるのではないかと思います。
下図は自然な状態でのSHT-71とDHT22(AM2302)の湿度変化特性です。SHT-71の方がDHT22(AM2302)と比較して個々のバラつきが少ない可能性があります。ただし、サンプル数が2個なので、たまたまかもしれないことは承知ください。少なくともボクはSHT-71の方がバラつきが少ないと判断しましたが、今後、何百個、何万個も買って製品を作る立場の人と、多くても数個しか買わない人では評価方法も異なると思います。
以上の下準備を行ったうえで、屋外での測定に挑みました。屋外での測定となると、XBee ZBを使ってワイヤレスでデータを送信する仕組みや百葉箱や通風管といった準備が必要ですが、当ページでは結果だけを示します。
下図の青線が気象庁の観測データで、赤線が湿度センサーSHT-71での測定結果です。湿度40%〜70%の範囲では良く一致しています。室内環境で用いるには十分でしょう。しかし、70%を超えると低めの値を示すようです。この原因は百葉箱かもしれません。通風管に比べ、木製の百葉箱には吸湿性があり、低湿度に観測されてしまっている可能性があるからです。(詳細は未確認)
さらに、日本製の湿度センサーHS-15P(但しメーカーは米GE社)についても3個のサンプルを測定してみました。約3時間ほどのグラフです。カタログ上の測定精度は±5%ですが、サンプル個体によるバラつきは殆どありませんでした。地味ながらすばらしいです。(測定用のスケッチ=hum_hs15p4.zip)
以上からSHT-71やHS-15Pが安定しており、かつ値も妥当らしいということが予想できます。結論として、お金を払って高いSHT-11やSHT-71を購入するか、PICなどを使用して手間をかけてHS-15Pを使用するかのどちらかを選択するのが良いでしょう。
ただし、SHT-71とHS-15Pとの湿度値に3〜5ポイントほどの相違があります。これらの差はプログラムや計算方法の問題と言えるでしょう。
参考文献のサイトには湿度75%の環境を飽和塩法で作成した比較が掲載されています。そこまでやって、適切な評価と言えそうですが、今のところボクの湿度へのこだわりはそこまでのものではなく、以上の結果だけでも一定の成果が得られたと思っています。
HS-15Pは米GE社のものですが、MADE IN JAPANと書かれており、国内の抵抗型高分子湿度センサーで著名な神栄が製造しているデバイス(品名=シンエイヒューメント)である可能性が考えられます。念のためにHS-15Pを分解してみたところ、下図のように電気抵抗変化方式の構造となっていました。セラミック基板上の「くし型」の電極が形成された部分が少し光沢を帯びているのが分かると思います。この光沢の部分に高分子の感湿材が塗布されています。この感湿材が汚れたり剥がれたりすると性能が得られなくなりますので、一度、分解したものは使わない方が良いでしょう。
高分子を感湿材にした湿度センサーには電気抵抗変化方式と電気容量変化方式の2種類に大別できます。電気抵抗変化方式はセンサー単体が低価格となることや、ノイズや周波数などの影響を受けにくい長所がありますが、一方で、抵抗値から湿度へ高精度に変換する場合の変換式が複雑になる点と湿度(RH)5%以下の超低湿度環境で測定が出来ない欠点があります。
抵抗値からの変換式については、前述の「HS15湿度センサーと簡易回路による湿度計実験」の検討結果を用いることができます。下図はデータシート(実線)と近似式(ドット)を合成したグラフです。
Arduinoボードを安価に製作したい方は「秋月電子 Arduino互換ボードの使い方」を参照してください。
湿度センサーHS-15PをXBee ZigBeeへ直結してワイヤレスで測定する「ZigBee 低価格ワイヤレス温度・湿度・照度センサー」や、100円で買えるPIC12F683で湿度値をPWM出力してXBee ZigBeeのADCへ入力する「ZigBee ワイヤレス温度・湿度・照度センサーの製作方法」も御覧ください。