温度(湿度)センサを使ってみた(1)-ArduinoでDHT11
どもです。
今回は、久しぶりにセンサーを購入して使ってみたので、それについて記載します。
1.使用したセンサー
今回使用したセンサーは、「DHT11」です。
これは、「温湿度センサー」です。
温度と湿度を測定できるセンサーです。
秋月電商の秋葉原の店舗で購入してきました。
(HPはこちら。
モジュール化されたものも販売されています。
用途や設置場所によっては、こちらを購入するのもアリかと思います。)
2.配線
まずは、ブレッドボードに配線します。
センサーに同梱されていた(簡易的な)データシートを元に、以下のように配線します。
データシートによれば、5.1kΩのプルアップ抵抗が必要と記載されています。
実際には、下図のように配線しています。
配線図では、プルアップ抵抗は1コだけですが、手元に適当な抵抗が無かったので、複数の抵抗をつないで(ほぼ)5.1kΩになるようにしています。
3.環境
配線が完了したら、次はスケッチの作成です。
なお、基本として以下の環境でスケッチの作成/開発を行っています。
OS | Windows10 Pro (バージョン:1903) |
---|---|
CPU | Intel Core i7-8700 |
メモリ | 16.0 GB |
IDE (統合開発環境) |
Sloeber the Eclipse IDE fo Adruino Developers |
3.1.ライブラリの取得
DHT11は、シリアル通信でデータを送信します。
そのためのスケッチが必要になります…が、Arduino向けにはライブラリが提供されています。
必要なライブラリは、以下の2つのライブラリです。
githubで公開されていますので、ZIPファイルをダウンロード/任意の場所に解凍して下さい。
解凍したら、生成されたフォルダ内に含まれているファイルを、下記のようにコピーします。
Adafruit_Sensorライブラリ:
library.properties→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\Adafruit_Sensor
keywords.txt→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\Adafruit_Sensor
Adafruit_Sensor.h→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\Adafruit_Sensor\src
DHT11ライブラリ:
library.properties→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\DHT
keywords.txt→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\DHT
DHT(_U).cpp/.h→(Sloeberのインストールディレクトリ)\arduinoPlugin\packages\arduino\hardware\avr\1.6.23\libraries\DHT\src
※Adafruit_Sensor、DHTフォルダはそれぞれ適宜作成、名前を変更してください。
3.2.ライブラリの設定
ダウンロードしたファイルの配置が完了したら、Sloeberのプロジェクトに取り込みます。
Sloeberのメニューバーで、[Arduino]→[Add a library to the selected project]を選択します。
「Select the Arduino libraries」ダイアログが表示されるので、「Adafruit_Sensor」と「DHT」をチェックして[Finish]を選択します。
※名前の表示は、ライブラリの配置先の名前によって変化するかもしれません。
以上で、ライブラリの設定は完了です。
3.3.スケッチ
以下のように実装します。
//温湿度センサモジュールを使って温度、湿度を測定するスケッチ
#include "Arduino.h"
#include "SPI.h"
#include "DHT.h"
#define DHT_Pin (2) //DHT11のDATAピンを定義
#define DHT_Type (DHT11) //センサの型番定義 DHT11,DHT22など
DHT dht(DHT_Pin, DHT_Type); //センサ初期化
//計測値
float humidity = 0.0f; //湿度
float temperature = 0.0f; //温度
void setup() {
Serial.begin(9600);
Serial.println("DHT11 sample"); //画面に表示
dht.begin(); //温湿度センサー開始
}
void loop() {
delay(5000); //正確なデータ取得のために5秒以上間隔を置く
//データ読み出し
humidity = dht.readHumidity(); //湿度の読み出し
temperature = dht.readTemperature(); //温度の読み出し(摂氏)
//読み取り値の確認
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Read failure!");
return;
}
/* 以下読み取り値の表示 */
Serial.print("湿度: ");
Serial.print(humidity);
Serial.println("[%]");
Serial.print("温度: ");
Serial.print(temperature);
Serial.println("[℃]");
}
4.実行
実行結果は、下記のようになります。
一部文字化けてしまっていますが、温度、湿度を共に読み取れています。
温度については、手元にあった別の測定結果とほぼほぼ一致していました。
湿度については、10%程度ずれています。
これは、果たしてどちらの値が正しいのか…。
手元に他に湿度を測れる道具がないので、確認ができませんでした。
スミマセン。
5.まとめ
今回は、温湿度センサーDHT11をArduinoで使用してみました。
温度はほぼほぼ正確に、湿度については大幅にずれることなく測定ができていました。
さて。
これを使って何をしよう…?
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません