温度と湿度センサーモジュール(DHT11)

../_images/12_dht11_module.png

概要

デジタル温度湿度センサーDHT11は、温度と湿度の較正済みデジタル信号出力を有する複合センサーです。この製品は専用のデジタルモジュール技術と温湿度センシング技術を組み合わせており、高い信頼性と優れた長期安定性が保証されています。

このセンサーは、抵抗性湿度検知コンポーネントとNTC温度計測デバイスを内蔵し、高性能8ビットマイクロコントローラーと接続されています。

原理

利用可能なピンはVCC、GND、DATAの3つだけです。通信プロセスは、DATAラインからDHT11にスタート信号を送ることで始まり、DHT11はこの信号を受けて応答信号を返します。その後、ホストは応答信号を受け取り、40ビットの湿度と温度データ(8ビット湿度整数 + 8ビット湿度小数 + 8ビット温度整数 + 8ビット温度小数 + 8ビットチェックサム)を受け取ります。

../_images/12_dht11_module_2.png

使い方

使用する電子部品

  • Arduino Uno R4またはR3ボード * 1

  • 温度と湿度センサーモジュール(DHT11) * 1

  • ジャンパーワイヤー

回路の組み立て

../_images/12_dht11_module_circuit.png

コード

注釈

ライブラリをインストールするには、Arduinoのライブラリマネージャーで "DHT sensor library" を検索してインストールしてください。



コードの説明

  1. 必要なライブラリと定数の定義。 この部分ではDHTセンサーライブラリを含め、このプロジェクトで使用されるピン番号とセンサータイプを定義しています。

    注釈

    ライブラリをインストールするには、Arduinoのライブラリマネージャーで "DHT sensor library" と検索してインストールしてください。

    #include <DHT.h>
    #define DHTPIN 2       // Define the pin used to connect the sensor
    #define DHTTYPE DHT11  // Define the sensor type
    
  2. DHTオブジェクトの作成。 ここで、定義したピン番号とセンサータイプを用いてDHTオブジェクトを作成します。

    DHT dht(DHTPIN, DHTTYPE);  // Create a DHT object
    
  3. Arduinoが起動したときに一度だけ実行される関数。 この関数でシリアル通信とDHTセンサーを初期化します。

    void setup() {
      Serial.begin(9600);
      Serial.println(F("DHT11 test!"));
      dht.begin();  // Initialize the DHT sensor
    }
    
  4. メインループ。 loop() 関数はsetup関数の後に繰り返し実行されます。ここでは、湿度と温度の値を読み取り、ヒートインデックスを計算し、これらの値をシリアルモニターに表示します。センサーの読み取りが失敗する(NaNを返す)場合、エラーメッセージが表示されます。

    注釈

    heat index は、気温と湿度を組み合わせて、外部の暑さを感じる度合いを測定する方法です。これは「体感気温」または「顕在温度」とも呼ばれます。

    void loop() {
      delay(2000);
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      float f = dht.readTemperature(true);
      if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
      }
      float hif = dht.computeHeatIndex(f, h);
      float hic = dht.computeHeatIndex(t, h, false);
      Serial.print(F("Humidity: "));
      Serial.print(h);
      Serial.print(F("%  Temperature: "));
      Serial.print(t);
      Serial.print(F("°C "));
      Serial.print(f);
      Serial.print(F("°F  Heat index: "));
      Serial.print(hic);
      Serial.print(F("°C "));
      Serial.print(hif);
      Serial.println(F("°F"));
    }
    

追加アイデア

  • LCDまたはOLEDディスプレイでの読み取り値の表示

その他のプロジェクト