Arduinoチュートリアル: DHT11・DHT22センサーで温度と湿度をマスターする
このArduinoチュートリアルでは、Arduinoボードを使ってDHT11またはDHT22センサーで温度と湿度を測定する方法を学びます。詳細については、以下の動画をご覧いただくか、書面によるチュートリアルをお読みください。 これらのセンサーは、非常に安価でありながら優れた性能を発揮するため、電子工作愛好家に大人気です。ここでは、この2つのセンサーの主な仕様と違いを紹介します。 DHT22はより高価なバージョンで、当然ながら仕様も優れています。温度測定範囲は-40〜+125℃で精度は±0.5℃、一方DHT11は0〜50℃で精度±2℃です。また、DHT22の湿度測定範囲は0〜100%で精度2〜5%、DHT11は20〜80%で精度5%となっています。 DHT11がDHT22より優れている点が2つあります。サンプリングレートはDHT11が1Hz(1秒ごとに1回測定)なのに対し、DHT22は0.5Hz(2秒ごとに1回測定)です。また、DHT11の方がボディサイズが小さいです。両センサーとも動作電圧は3〜5V、測定時の最大消費電流は2.5mAです。 以下のサイトから部品を入手できます: これらのセンサーが実際にどのように動作するか見ていきましょう。湿度検出コンポーネント、NTC温度センサー(サーミスタ)、センサー背面のICで構成されています。 湿度測定には、2つの電極の間に吸湿性基板を挟んだ湿度検出コンポーネントを使用します。湿度が変化すると、基板の導電率、つまり電極間の抵抗が変化します。この抵抗変化をICが測定・処理し、マイクロコントローラーで読み取れる形にします。 一方、温度測定にはNTC温度センサーまたはサーミスタを使用します。 サーミスタは温度変化に応じて抵抗値が変化する可変抵抗です。セラミックスやポリマーなどの半導体材料を焼結して作られ、わずかな温度変化で大きな抵抗変化を得られるようになっています。 「NTC」は「Negative Temperature Coefficient(負の温度係数)」を意味し、温度上昇に伴い抵抗が減少することを示します。 DHTxxセンサーには4つのピン(VCC、GND、データピン、未接続ピン)があります。データラインをハイに保ち、センサーとArduino間の通信を可能にするため、5k〜10kΩのプルアップ抵抗が必要です。一部のバージョンは内蔵プルアップ抵抗付きのブレイクアウトボードとして提供され、3ピンのみとなっています。 DHTxxセンサーは独自のシングルワイヤプロトコルでデータを転送します。このプロトコルには正確なタイミングが必要で、タイミング図はデータシートに記載されています。しかし、DHTライブラリがすべてを処理してくれるため、タイミング図を深く理解する必要はありません。 関連チュートリアル: Arduinoベースのワイヤレス気象観測装置の作り方 まず、Arduino公式サイトから入手できるDHTライブラリをインクルードし、センサー接続ピン番号を定義、DHTオブジェクトを作成します。setup()ではシリアル通信を開始し、シリアルモニターで結果を表示します。read22()関数でセンサーからデータを読み取り、温度と湿度の値を変数tとhに格納します。DHT11を使用する場合はread11()関数を使います。最後に、温度と湿度の値をシリアルモニターに出力します。 このコードをArduinoボードにアップロードすると、シリアルモニターにセンサーからの温度と湿度の結果が表示されます。 LCDに結果を表示する例も作成しました。そのソースコードは以下の通りです: ご質問がありましたら、下のコメント欄でお気軽にお尋ねください。概要

DHT11 / DHT22の動作原理



回路図

ソースコード
/* DHT11/ DHT22センサー 温度と湿度チュートリアル
* 作成: Dejan Nedelkovski,
* www.HowToMechatronics.com */
/*
* DHTライブラリはArduino公式サイトから入手可能
* https://playground.arduino.cc/Main/DHTLib
*/
#include <dht.h>
#define dataPin 8 // センサー接続ピン番号を定義
dht DHT; // DHTオブジェクトを作成
void setup() {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read22(dataPin); // センサーからデータを読み取り
float t = DHT.temperature; // 温度値を取得
float h = DHT.humidity; // 湿度値を取得
// シリアルモニターに結果を出力
Serial.print("Temperature = ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(" Humidity = ");
Serial.print(h);
Serial.println(" % ");
delay(2000); // 2秒遅延(DHT22のサンプリングレートは0.5Hz)
}コード言語: Arduino (arduino)/* DHT11/ DHT22センサー 温度と湿度チュートリアル
* 作成: Dejan Nedelkovski,
* www.HowToMechatronics.com */
/*
* DHTライブラリはArduino公式サイトから入手可能
* https://playground.arduino.cc/Main/DHTLib
*/
#include <LiquidCrystal.h> // LiquidCrystalライブラリをインクルード
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // LCDオブジェクトを作成。パラメータ: (rs, enable, d4, d5, d6, d7)
dht DHT;
void setup() {
lcd.begin(16,2); // LCD画面のインターフェースを初期化、幅と高さを指定
}
void loop() {
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // 以降のテキスト表示位置を設定
lcd.print("Temp.: "); // "Temp."をLCDに表示
lcd.print(t); // センサーからの温度値を表示
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(2000);
}コード言語: Arduino (arduino)
製造プロセス
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- EzTempでRaspberry Pi上の温度・湿度をシームレスに監視
- MCP3008 ADCでRaspberry Piにアナログセンサーを読み取る
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- Arduino UNOで周波数とデューティサイクルを高精度測定
- BME280 温湿度・気圧データを Nextion タッチスクリーンに表示
- Bolt IoTとArduino UNOでLED輝度をシームレス制御
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
- スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル