ArduinoでDHT11モジュールを使って湿度と温度を取得してみる
以前、以下のRaspberry Piのキットを購入したのだが、そちらにDHT11という湿度と温度を取得できるセンサーのモジュールがついてきた。ちなみにDHT11自体は4ピンのセンサーなのだが、このモジュールは+(電源に接続)、out(センサー出力)、-(GNDに接続)の3pinになっている。
今回はこれを使って、Auduinoで温度と湿度を取得してシリアルポート上に表示させてみたいと思う。
開発環境
Arduino Uno R3
Windows 10(開発用PC)
Arduino IDE 1.8.19
ブレッドボードに回路をつくる
今回使用したDHT11は4pinの部品だが、モジュール化されて3pinになっている。モジュールの使用例はSunfounderのサイトに載っている。また、DHT11自身のデータシートはMouserに載っていたものを参考にした。
https://docs.sunfounder.com/projects/davinci-kit/ja/latest/2.2.3_dht-11.html
https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf
今回は以下のようにブレッドボード上に回路を組んだ。作図ソフトの都合でDHT11はモジュールではなく部品単体になっているが、接続としては左が+、真ん中がdata、右が-という接続関係は変わっていない。
以下が実際に繋いでみた写真。これで準備完了。
DHT11のライブラリをインストールする
DHT11の通信方式はI2Cなど一般的な規格ではなく、独自のシリアル通信になっている。データシートを読んでいちからコーディングするのは大変なので、既存のライブラリをありがたく使わせてもらう。
今回はArduinoのサイトに載っているAdafruitのDHT sensor libraryを使わせてもらう。なお、このライブラリを使うにはAdafruitのAdafruit Unified Sensorというライブラリのインストールも必要らしい。
https://www.arduino.cc/reference/en/libraries/dht-sensor-library/
https://www.arduino.cc/reference/en/libraries/adafruit-unified-sensor/
以前LCDのライブラリをインストールしたときと同様に、まずArduinoのIDEを開き、ツールからライブラリを管理を選択。
検索でライブラリ名を入力して検索をかけて、上の2つのライブラリをインストールする。
これで下準備は完了。
プログラムを書いてArduinoで実行してシリアルポートで温度と湿度を取得&表示
今回はAdafruitのDHTライブラリのgithubに置いてあるexampleのコードを参考にさせて頂いた。
https://github.com/adafruit/DHT-sensor-library/blob/master/examples/DHTtester/DHTtester.ino
以下が作成したコード。DHTPINでDHT11が接続されているArduinoのGPIOのピンを指定している。今回は2ピンに繋いでるので2を指定している。また、大体2秒ごとに温度と湿度を取得するためにdelay(2000)を入れている。
#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read")); return; } Serial.print(F("Humidity: ")); Serial.print(h); Serial.println(F("%")); Serial.print(F("Temperature: ")); Serial.print(t); Serial.println(F("°C")); }
あとはいつも通りコンパイルしてArduinoに書き込む。書き込んだら、IDE上からシリアルモニタを開く。
すると、以下のようにシリアルポートのモニタが開き、温度と湿度が表示されていることがわかる。自分の部屋に湿度計と温度計が無いので妥当かどうか正確にはわからなかったが、天気予報でみた気温・湿度とおおむね一致しているので問題なさそう。
今回はシリアルポート上で温度と湿度を確認したが、せっかくなのでPCをつながなくても温度と湿度をわかるようにしたい。ということで、次回はDHT11とLCDを組み合わせて、温度&湿度計を作ってみたい。
日記まとめ
Arduinoで遊んでみた軌跡を以下でまとめてます。