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
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 秒置きに結果が出力されることがわかるはずです。