IoT のための電子工作入門

ホーム > ArduinoArduino > DHT11 を用いた温度と湿度の計測

DHT11 を用いた温度と湿度の計測

スポンサーリンク

ここでは温湿度センサーとして DHT11 を用い、Arduino から利用する方法を示します。

DHT11 は サーミスタ などと異なり、 温度と湿度のカリブレーション済みの状態で出荷されているセンサーです。信号はデジタル信号です。

通常の利用シナリオで温度は1°C 程度の誤差、湿度は 4% 程度の誤差で測定可能ということになってます。

ピンの割り当ては次の通りです。

四本のピンは左から VDD, DATA、NC (非接続)、GND です。VDD への供給電圧は 3.3V から 5.5V の範囲です。 データシートによれば VDD と GND 間にパワーフィルタリングとして 100nF のキャパシタを設置可能とのことです。

データはシングル・バス・データフォーマットで少々面倒ですが、 Arduino では DHT 用のライブラリが多数あるので、そちらを利用します。

データのサンプリング間隔は最短で 1 秒。ソフトウェア側でデータをとるときに、少し delay させる必要があります。

2番の DATA ピンはプルアップして使います。プルアップ抵抗は、ワイヤーが 20m 以下の場合は 5kΩ程度が推奨。 一般的には 4.7kΩ から 10kΩ 位が用いられるようです。

尚、Arduino のビルトインのプルアップ抵抗は 20kΩ なので、DHT11 では使いません。

DHT11 と Arduino

DHT11 は数百円程度で入手可能です。

Arduino は Arduino Uno を利用しました。 今回は安い Arduino クローンを使ってますが、利用シーンに応じて信頼のおけるものを選ぶべきかと思います。

DHT ライブラリを利用

ここでは Adafruit が公開している DHT ライブラリを利用して、DHT11 から温度と湿度を取得し、 さらに同じライブラリで温度と湿度からヒートインデックス (体感温度) が取得できるので、それも取得してみましょう。

出力はシリアルポートに書き出してます。LCD に出力したい場合は「Arduino を用いて LCD に文字を表示」をみてください。

#include <DHT.h>

const int PIN_DHT = 8;
DHT dht( PIN_DHT, DHT11 );

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11");
  dht.begin();
}

void loop() {

  delay(3000);

  bool isFahrenheit = true;
  float percentHumidity = dht.readHumidity();
  float temperature = dht.readTemperature( isFahrenheit );

  if (isnan(percentHumidity) || isnan(temperature)) {
    Serial.println("ERROR");
    return;
  }

  float heatIndex = dht.computeHeatIndex(
    temperature, 
    percentHumidity, 
    isFahrenheit);

  String s = "Temp: ";
  s += String(temperature, 1);
  s += "[F] Humidity: ";
  s += String(percentHumidity, 1);
  s += "[%] HI: ";
  s += String(heatIndex, 1);

  Serial.println(s);
  
}

配線はシンプルですが、あえて言えばプルアップ抵抗を忘れずに、という点が注意点でしょうか

これでシリアルモニターを開けば、 3 秒置きに結果が出力されることがわかるはずです。

ホーム > ArduinoArduino > DHT11 を用いた温度と湿度の計測