温度(湿度)センサを使ってみた(1)-ArduinoでDHT11

2021年2月2日

どもです。
今回は、久しぶりにセンサーを購入して使ってみたので、それについて記載します。

1.使用したセンサー

今回使用したセンサーは、「DHT11」です。
これは、「温湿度センサー」です。
温度と湿度を測定できるセンサーです。
秋月電商の秋葉原の店舗で購入してきました。
(HPはこちら
モジュール化されたものも販売されています。
用途や設置場所によっては、こちらを購入するのもアリかと思います。)

2.配線

まずは、ブレッドボードに配線します。
センサーに同梱されていた(簡易的な)データシートを元に、以下のように配線します。
データシートによれば、5.1kΩのプルアップ抵抗が必要と記載されています。
temp_humidity_sensor_001_dht11
実際には、下図のように配線しています。
temp_humidity_sensor_001_wire_layout
配線図では、プルアップ抵抗は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つのライブラリです。

  1. Adafruit_Sensorライブラリ
  2. DHTライブラリ

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]を選択します。
※名前の表示は、ライブラリの配置先の名前によって変化するかもしれません。
temp_humidity_sensor_001_import_library
以上で、ライブラリの設定は完了です。

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.実行

実行結果は、下記のようになります。
temp_humidity_sensor_001_result_monitor
一部文字化けてしまっていますが、温度、湿度を共に読み取れています。
温度については、手元にあった別の測定結果とほぼほぼ一致していました。
湿度については、10%程度ずれています。
これは、果たしてどちらの値が正しいのか…。
手元に他に湿度を測れる道具がないので、確認ができませんでした。
スミマセン。

5.まとめ

今回は、温湿度センサーDHT11をArduinoで使用してみました。
温度はほぼほぼ正確に、湿度については大幅にずれることなく測定ができていました。
さて。
これを使って何をしよう…?

ではっ!