「Arduinoの基礎 - 温湿度センサ」の版間の差分
(ページの作成:「== 概要 == ここでは、温湿度センサとしてDHT-11を使用して、Arduinoから使用する方法を記載する。<br> <br> DHT-11はサーミスタと異…」) |
細 (文字列「<source」を「<syntaxhighlight」に置換) |
||
28行目: | 28行目: | ||
LCDに出力する場合は、Arduinoを用いてLCDに文字を表示を参照すること。<br> | LCDに出力する場合は、Arduinoを用いてLCDに文字を表示を参照すること。<br> | ||
[[ファイル:Arduino-DHT11 2.png|フレームなし|中央]] | [[ファイル:Arduino-DHT11 2.png|フレームなし|中央]] | ||
< | <syntaxhighlight lang="c++"> | ||
#include <DHT.h> | #include <DHT.h> | ||
2021年11月21日 (日) 09:33時点における版
概要
ここでは、温湿度センサとしてDHT-11を使用して、Arduinoから使用する方法を記載する。
DHT-11はサーミスタと異なり、温度と湿度のキャリブレーション済みの状態で出荷されているセンサ(デジタル信号)である。
一般的な利用において、温度は1[℃]程度の誤差、湿度は4[%]程度の誤差で測定できる。
ピンの割り当ては、下図の通りである。
4本のピンは左から順に、VDD、DATA、NC(非接続)、GNDである。VDDへの供給電圧は、3.3[V]〜5.5[V]の範囲である。
データシートを確認すると、VDDとGNDの間にパワーフィルタリングとして0.1[μF]のセラミックコンデンサを設置することができる。
データはシングル・バス・データフォーマットで少々面倒であるが、ArduinoではDHT用のライブラリが多数あるので、それらを使用する。
データのサンプリング間隔は最短で1[s]なので、ソフトウェア側でデータを取得する時に、delayする必要がある。
2番ピンであるDATAピンはプルアップして使用する。プルアップ抵抗は、ワイヤが20[m]以下の場合は、5[kΩ]程度が推奨される。
一般的には、4.7[kΩ]〜10[kΩ]程度がよく使用されている。
なお、Arduinoの内部プルアップ抵抗は20[kΩ]なので、DHT-11では使用できない。
サンプルコード
Adafruitが作成しているDHT用ライブラリを使用して、DHT-11から温度と湿度を取得する。
さらに、温度と湿度からヒートインデックス(体感温度)が取得できるので、それも併せて取得する。
以下のサンプルコードでは、シリアルポートに値を出力している。
これでシリアルモニタを開けば、3秒おきに結果が出力されることがわかる。
LCDに出力する場合は、Arduinoを用いてLCDに文字を表示を参照すること。
<syntaxhighlight lang="c++"> #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); } </source>