Arduinoを使用したDHT11およびDHT22センサーの温度と湿度のチュートリアル
このArduinoチュートリアルでは、DHT11またはDHT22センサーを使用してArduinoボードで温度と湿度を測定する方法を学習します。詳細については、次のビデオを見るか、以下のチュートリアルを読むことができます。
これらのセンサーは、非常に安価でありながら優れたパフォーマンスを提供するため、電子機器愛好家に非常に人気があります。これら2つのセンサーの主な仕様と違いは次のとおりです。
DHT22はより高価なバージョンであり、明らかに優れた仕様を備えています。その温度測定範囲は+-0.5度の精度で-40から+125℃であり、DHT11の温度範囲は+-2度の精度で0から50℃です。また、DHT22センサーの湿度測定範囲は0〜100%で2〜5%の精度ですが、DHT11の湿度範囲は20〜80%で5%の精度です。
DHT11がDHT22より優れている仕様は2つあります。これは、DHT11の場合は1Hzまたは1秒ごとに1回の読み取りであるサンプリングレートですが、DHT22のサンプリングレートは0.5Hzまたは2秒ごとに1回の読み取りであり、DHT11のボディサイズは小さくなっています。両方のセンサーの動作電圧は3〜5ボルトですが、測定時に使用される最大電流は2.5mAです。
これらのコンポーネントは、以下のいずれかのサイトから入手できます。
では、これらのセンサーが実際にどのように機能するかを見てみましょう。これらは、湿度検知コンポーネント、NTC温度センサー(またはサーミスタ)、およびセンサーの裏側にあるICで構成されています。
湿度の測定には、水分保持基板を間に挟んだ2つの電極を備えた湿度検知コンポーネントを使用します。したがって、湿度が変化すると、基板の導電率が変化するか、これらの電極間の抵抗が変化します。この抵抗の変化はICによって測定および処理され、マイクロコントローラーで読み取れるようになります。
一方、温度を測定するために、これらのセンサーはNTC温度センサーまたはサーミスタを使用します。
サーミスタは、実際には温度の変化に応じて抵抗が変化する可変抵抗器です。これらのセンサーは、温度のわずかな変化で抵抗の大きな変化を提供するために、セラミックやポリマーなどの半導体材料の焼結によって作られています。
「NTC」という用語は「負の温度係数」を意味し、温度の上昇とともに抵抗が減少することを意味します。
DHTxxセンサーには、VCC、GND、データピン、および使用されていない未接続ピンの4つのピンがあります。データラインをハイに保ち、センサーとArduinoボード間の通信を可能にするために、5Kから10Kオームのプルアップ抵抗が必要です。これらのセンサーには、プルアップ抵抗が組み込まれたブレークアウトボードが付属し、ピンが3つしかないバージョンがいくつかあります。
DHTXXセンサーには、データの転送に使用される独自の単線プロトコルがあります。このプロトコルには正確なタイミングが必要であり、センサーからデータを取得するためのタイミング図は、センサーのデータシートから見つけることができます。ただし、すべてを処理するDHTライブラリを使用するため、これらのタイミング図についてあまり心配する必要はありません。
関連チュートリアル:Arduinoベースのワイヤレス気象ステーションを構築する方法を学ぶ
まず、Arduinoの公式ウェブサイトから入手できるDHTライブラリを含める必要があります。次に、センサーが接続されているピン番号を定義して、DHTオブジェクトを作成します。セットアップセクションでは、シリアルモニターを使用して結果を印刷するため、シリアル通信を開始する必要があります。 read22()関数を使用して、センサーからデータを読み取り、温度と湿度の値をt変数とh変数に入れます。 DHT11センサーを使用する場合は、read11()関数が必要になります。最後に、温度と湿度の値をシリアルモニターに印刷します。
このコードをArduinoボードにアップロードした後、センサーからの温度と湿度の結果をシリアルモニターで確認できます。
また、結果をLCDに表示する例も作成しました。その例のソースコードは次のとおりです。
以下のコメントセクションでお気軽に質問してください。
DHT11/DHT22の動作原理
/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/*
* You can find the DHT Library from Arduino official website
* https://playground.arduino.cc/Main/DHTLib
*/
#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object
void setup() {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read22(dataPin); // Reads the data from the sensor
float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity
// Printing the results on the serial monitor
Serial.print("Temperature = ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(" Humidity = ");
Serial.print(h);
Serial.println(" % ");
delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz
}
Code language: Arduino (arduino)/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/*
* You can find the DHT Library from Arduino official website
* https://playground.arduino.cc/Main/DHTLib
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
void setup() {
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}
void loop() {
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Temp.: "); // Prints string "Temp." on the LCD
lcd.print(t); // Prints the temperature value from the sensor
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(2000);
}
Code language: Arduino (arduino)
製造プロセス