HS-15P DHT11 DHT22 RHT03 AM2302 SHT-11 SHT-71 SHT31 HDC1000 BME280 Si7021を使った

Arduino温湿度測定ロガー・湿度センサーの比較

by ボクにもわかる地上デジタル

[Arduino Menu] [XBee Menu] [地デジ Menu]


AM2302
ArduinoにAM2302を接続した様子

このページについて

 このページはArduinoとHP-15P、AM2302/DHT22、DHT11、SHT-71などの湿度センサで測定した結果をSDカードへ保存する温湿度ロガーの製作と、これらの比較に関するメモです。

使用するセンサ

 本ページでは下表の上部5種類のセンサー(SHT-11,DHT22,SEN11301P,HS-15P)の配線方法と比較結果を示します。価格は2012年9月現在の参考価格であり、為替や需給バランス、仕入れ量などで大きく変動する場合があります。
 また、I2Cインタフェースを搭載した最新の温湿度センサ(SHT31,HDC1000,BME280,Si7021)のドライバソフトウェアの配布も行っています。

Arduino に接続する湿度センサーデバイス
メーカー 型番 別型番 温度 湿度 参考価格 販売店(例)
精度 分解能 精度 分解能
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にリード線を半田付けして反対側にコネクタを取り付けて使用することにしました。(製作方法は後述)

SENSIRION SHT-71
SENSIRION SHT-71 にリード線を半田付け

AM2302 / DHT22 / RHT03
 Aosong AM2302はAndroid用として良く用いられています。米spark fun が取り扱っている(spark fun 型番 SEN-10167)ことで普及したものと思います。国内ではストロベリーリナックス社が「中国製激安センサ」として販売しているほか、2013年10月からは秋月電子でも取り扱われるようになりました。
 型番が様々ありDHT22やRHT03と書かれていることもあります。湿度の精度はカタログ値では SENSIRION製よりも良い値のように書かれていますが、実際の実力が高いかどうかは分かりません。(製作方法は後述)

Aosong AM2302
Aosong AM2302 / DHT22 / RHT03

DHT11
 GROVE向けSEN11301PはDHT11を基板に実装した製品です。以降はDHT11と記すことにします。DHT22とインタフェースに互換性がありますが、カタログ値だけでなく実力的にも湿度の精度が悪いため、湿度の高低の目安にしかなりませんでした。(製作方法は後述)

GROVE SEN11301P / DHT11
GROVE SEN11301P / DHT11

HS-15P
 HS-15Pは10年以上前から秋月電子で売られており、国内の電子工作の全般で最もメジャーな高分子湿度センサです。高湿度の環境でも長寿命で定評があります。

General Electric HS-15P
General Electric HS-15P

 しかし、他のセンサーと違ってデジタルインタフェースを持っていないセンサー単体のデバイスなので駆動するための外付け回路が必要でした。
 そこで、その外付け回路をなくしてArduinoにHS-15Pを直結したいと考えてネット上を調べていたところ、理論と膨大な実験に基づいて緻密に開発をされた方(
リンク)が居ました。当方のページではその情報を使わせていただいてArduinoにHS-15Pを直結して湿度ロガーを製作する方法について説明します。(製作方法は後述)

TMP-HUM UNIT
 さらに、HS-15Pをデジタルインタフェースに変換するキットも売られています。ラトルズ出版のプリント基板付き書籍「プリント基板で作るPIC応用装置」に含まれる「温湿度計 TMP-HUM UNIT」です。基板単体(P-03225)やパーツセット(K-03242)が秋月電子で売られていますので当ページではこちらも使用してみました。

PIC応用装置 TMP-HUM UNIT
PIC応用装置 TMP-HUM UNIT

ハードウェアの製作

 それぞれのハードウェアの製作・接続方法について説明します。

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の設定を変更します。

SENSIRION SHT
SENSIRION SHT用 Arduino接続回路図

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の設定を変更します。

Aosong AM2302
Aosong AM2302 / DHT11共通 Arduino接続回路図

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
HS-15P Arduino接続回路図

 なお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、右側が温湿度センサです。他の回路図とは位置が逆になっているので注意してください。

I2C
I2Cインタフェースの接続回路図(左=Arduino、右=温湿度センサ)

Arduino用ソフトウェアのダウンロード

 下記からArduino用の温湿度ロガーのソフトウェアをダウンロードすることが出来ます。すべてソースリストで公開していますのでArduino IDEでコンパイルしてから実行してください。なお、SDカードのSD_CSポートはArduinoのデフォルトであるDigital 10を使用します。他のポートに変更したい場合は、「SD.begin() 」の括弧内にDigitalピン番号を入力してください。例えば、Arduino Wireless SD Shieldであれば「SD.begin(4)」とします。

温湿度ロガーArduino用ソフトのダウンロード
メーカー 型番 別型番 ダウンロード 最終更新日 備考
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への保存機能付

実行結果と各湿度センサーの比較

 これらのソフトを一つのスケッチにまとめて同時に複数のセンサーに対して実行して測定した結果例が下図です。それぞれ違う湿度を表示していることが分かります。測定時は、各センサーをなるべく近づけて同一条件になるように考慮しました。

PIC応用装置 TMP-HUM UNIT
PIC応用装置 TMP-HUM UNIT

 まずは、雨が降る直前の2時間ほどの湿度をグラフにしてみました。実際の湿度に近い動きをしていたのは、SENSIRION SHT-71と、その3〜5ポイントの差で推移している HS-15P でした。(この時はDHT22を保有していなかったので4種類での比較です)

各種の湿度センサーでの測定結果の比較
各種の湿度センサー(SHT、DHT11、HS-15P)の測定結果の比較

 下図は、SHT-71、DHT22(AOSONG AM2302)、DHT11の比較です。エアコンを使って湿度を変化させた時の応答の様子を示しています。応答性能の高い順にSHT-71、DHT22(AOSONG AM2302)、DHT11となりました。上図と同様にDHT11だけが異なる推移を見せており、DHT11の安かろう悪かろうの予想を裏切るようなことはありませんでした。

各種の湿度センサーでの測定結果の比較
各種の湿度センサーでの測定結果の比較

 次に自然な状態での湿度の推移です。SHT-71とDHT22(AM2302)は8ポイント差くらいで平行に推移しました。DHT11についても応答が遅いだけで、湿度が安定すると値も安定するようです。(値が正しかどうかは別です。)

各種の湿度センサーでの測定結果の比較
各種の湿度センサーSHT、DHT22(AM2302)、DHT11の測定結果の比較

 以上の測定結果ではSHT-71がDHT22(AM2302)よりも高めの値を示していますが、それが正しい値なのか個々のバラつきなのかが分かりません。そこで、SHT-71とDHT22(AM2302)をもう一つずつ購入して比較してみることにしました。下図はエアコンを使って屋内の湿度を変化させた場合の測定結果です。SHT-71同士では、ほぼ一致した結果が得られました。少なくともSHT-71同士はバラつきが少なそうであり、値も信頼できるのではないかと思います。

各種の湿度センサーでの測定結果の比較
湿度センサーSHT-71とDHT22(AM2302)のバラつきの比較

 下図は自然な状態でのSHT-71とDHT22(AM2302)の湿度変化特性です。SHT-71の方がDHT22(AM2302)と比較して個々のバラつきが少ない可能性があります。ただし、サンプル数が2個なので、たまたまかもしれないことは承知ください。少なくともボクはSHT-71の方がバラつきが少ないと判断しましたが、今後、何百個、何万個も買って製品を作る立場の人と、多くても数個しか買わない人では評価方法も異なると思います。

各種の湿度センサーでの測定結果の比較
湿度センサーSHT-71とDHT22のバラつきの比較

 以上の下準備を行ったうえで、屋外での測定に挑みました。屋外での測定となると、XBee ZBを使ってワイヤレスでデータを送信する仕組み百葉箱や通風管といった準備が必要ですが、当ページでは結果だけを示します。
 下図の青線が気象庁の観測データで、赤線が湿度センサーSHT-71での測定結果です。湿度40%〜70%の範囲では良く一致しています。室内環境で用いるには十分でしょう。しかし、70%を超えると低めの値を示すようです。この原因は百葉箱かもしれません。通風管に比べ、木製の百葉箱には吸湿性があり、低湿度に観測されてしまっている可能性があるからです。(詳細は未確認)

各種の湿度センサーでの測定結果の比較
湿度センサーSHT-71と気象庁観測データとの比較

 さらに、日本製の湿度センサーHS-15P(但しメーカーは米GE社)についても3個のサンプルを測定してみました。約3時間ほどのグラフです。カタログ上の測定精度は±5%ですが、サンプル個体によるバラつきは殆どありませんでした。地味ながらすばらしいです。(測定用のスケッチ=hum_hs15p4.zip)

HS-15Pのバラつき評価
HS-15Pのバラつき評価

 以上からSHT-71やHS-15Pが安定しており、かつ値も妥当らしいということが予想できます。結論として、お金を払って高いSHT-11やSHT-71を購入するか、PICなどを使用して手間をかけてHS-15Pを使用するかのどちらかを選択するのが良いでしょう。

 ただし、SHT-71とHS-15Pとの湿度値に3〜5ポイントほどの相違があります。これらの差はプログラムや計算方法の問題と言えるでしょう。
 参考文献のサイトには湿度75%の環境を飽和塩法で作成した比較が掲載されています。そこまでやって、適切な評価と言えそうですが、今のところボクの湿度へのこだわりはそこまでのものではなく、以上の結果だけでも一定の成果が得られたと思っています。

秋月で販売されているGE社 HS-15P

 HS-15Pは米GE社のものですが、MADE IN JAPANと書かれており、国内の抵抗型高分子湿度センサーで著名な神栄が製造しているデバイス(品名=シンエイヒューメント)である可能性が考えられます。念のためにHS-15Pを分解してみたところ、下図のように電気抵抗変化方式の構造となっていました。セラミック基板上の「くし型」の電極が形成された部分が少し光沢を帯びているのが分かると思います。この光沢の部分に高分子の感湿材が塗布されています。この感湿材が汚れたり剥がれたりすると性能が得られなくなりますので、一度、分解したものは使わない方が良いでしょう。

HS-15Pを分解してみた様子
抵抗型高分子湿度センサー HS-15Pの内部構造

 高分子を感湿材にした湿度センサーには電気抵抗変化方式と電気容量変化方式の2種類に大別できます。電気抵抗変化方式はセンサー単体が低価格となることや、ノイズや周波数などの影響を受けにくい長所がありますが、一方で、抵抗値から湿度へ高精度に変換する場合の変換式が複雑になる点と湿度(RH)5%以下の超低湿度環境で測定が出来ない欠点があります。
 抵抗値からの変換式については、前述の「HS15湿度センサーと簡易回路による湿度計実験」の検討結果を用いることができます。下図はデータシート(実線)と近似式(ドット)を合成したグラフです。

湿度センサーHS-15Pのインピーダンス
湿度センサーHS-15Pのインピーダンス

Arduino互換ボード

 Arduinoボードを安価に製作したい方は「秋月電子 Arduino互換ボードの使い方」を参照してください。

秋月電子 Arduino互換ボード
秋月電子 Arduino互換ボード

XBee ZigBeeへ入力してワイヤレスで測定する

 湿度センサーHS-15PをXBee ZigBeeへ直結してワイヤレスで測定する「ZigBee 低価格ワイヤレス温度・湿度・照度センサー」や、100円で買えるPIC12F683で湿度値をPWM出力してXBee ZigBeeのADCへ入力する「ZigBee ワイヤレス温度・湿度・照度センサーの製作方法」も御覧ください。

湿度センサーHS-15PをXBeeに接続する
湿度センサーHS-15PをXBeeに接続する(拡大)

Arduinoメインメニューへ戻る

XBeeメインメニューへ戻る

地デジトップへ戻る


Arduinoで一酸化炭素やメタンを測定

秋月電子 Arduino互換ボードの使い方

Arduino用液晶シールド

Arduinoで8X8マトリクスLEDに文字表示

Arduino 赤外線リモコンコード解析

Arduino用Wi-Fi無線LAN

Arduino用 EasyVR Shield で音声認識

ArduinoとXBeeとの接続