デジタル温湿度センサーDHT11は、アナログからデジタルへの変換を行い、温度と湿度のデジタル信号を出力するチップを内蔵しています。非常に安価でありながら優れた性能を発揮するため、電子工作を趣味とする人たちに人気があります。
このレッスンでは、まず湿度について少し説明し、DHT11がどのように湿度を測定するかを説明します。その後、DHT11をArduinに接続する方法を説明し、自分のプロジェクトでDHT11を使用できるように、サンプルコードを示します。
DHT11は、基本的な超低コストのデジタル温湿度センサーです。静電容量式湿度センサーとサーミスタを使用して周囲の空気を測定し、データ・ピンにデジタル信号を出力します(アナログ入力ピンは不要)。使い方はいたってシンプルだが、データを取り込むには慎重なタイミングが必要だ。
使用可能なピンは3本のみ: VCC、GND、DATAである。通信プロセスは、まずDATAラインがDHT11にスタート信号を送信し、DHT11がその信号を受信してアンサー信号を返します。その後、ホストはアンサー信号を受信し、40ビットの湿度データ(8ビットの湿度整数+8ビットの湿度小数+8ビットの温度整数+8ビットの温度小数+8ビットのチェックサム)の受信を開始します。
DHT11は相対湿度を測定します。相対湿度とは、空気中の水蒸気量と空気中の水蒸気の飽和点の比較です。飽和点では、水蒸気は結露を開始し、表面に蓄積して露を形成します。
飽和点は気温によって変化する。冷たい空気は飽和状態になる前に水蒸気をより少なく保持することができ、熱い空気は飽和状態になる前に水蒸気をより多く保持することができる。
相対湿度の計算式は以下の通り:
相対湿度は%で表します。相対湿度100%では結露し、相対湿度0%では完全に乾燥した状態になります。
DHT11は、2つの電極間の電気抵抗を測定することで水蒸気を検出します。湿度検知部品は、表面に電極が貼られた水分保持基板です。水蒸気が基板に吸収されると、基板からイオンが放出され、電極間の導電率が上昇します。2つの電極間の抵抗値の変化は相対湿度に比例する。相対湿度が高いと電極間の抵抗は減少し、相対湿度が低いと電極間の抵抗は増加します。
DHT11は、本体に内蔵された表面実装型NTC温度センサー(サーミスタ)で温度を測定します。
プラスチックハウジングを取り外すと、基板に貼られた電極が見えます。ユニット背面に搭載されたICが、抵抗測定値を相対湿度に変換します。また、校正係数を保存し、DHT11とArduin間のデータ信号伝送を制御します:
DHT11には2種類のバージョンがあります。1つは4ピンのタイプで、もう1つは3ピンで小さなPCBに実装されているタイプです。PCBに実装されたバージョンには、信号ライン用の10Kオームのプルアップ抵抗が表面に実装されています。ここに両バージョンのピンアウトを示します:
ボード上でDHT11を使用する前に、DHT libraryをインストールする必要があります。このライブラリには、センサーから湿度と温度の測定値を取得するために必要なすべての関数が含まれています。インストールは簡単です。DHT.zipファイルをダウンロードして、Arduino IDEを開きます。そして、Sketch>Include Library>Add .ZIP Libraryと進み、DHT.zipファイルを選択します。
以下のように回路を構築します:
DHT11の3番ピンは無視します。VCCとデータピンの間に10K抵抗を配置し、データラインを中強度でプルアップします。Arduinは内蔵のプルアップをオンにできますが、非常に弱く、20~50K程度です。
この図は、テスト用のスケッチをどのように接続するかを示しています。データは3番ピンに接続してください。後でどのピンに変更してもかまいません。
上記の操作が完了したら、USBケーブルを使ってボードをコンピューターに接続します。緑色の電源LED(PWRと表示)が点灯するはずです。以下のスケッチをArduinに読み込みます。
#include<dht.h> dht DHT; // if you require to change the pin number, Edit the pin with your arduin pin. #define DHT11_PIN 3 void setup() { Serial.begin(9600); Serial.println("The real time Temperature and Humidity is :"); } void loop() { // READ DATA int chk = DHT.read11(DHT11_PIN); Serial.print(" Humidity: " ); Serial.print(DHT.humidity, 1); Serial.println('%'); Serial.print(" Temparature "); Serial.print(DHT.temperature, 1); Serial.println('C'); delay(2000); }
アップロードが終了してから数秒後、シリアルモニターを開くと、湿度と温度の測定値が1秒間隔で表示されているはずです。
注意:プロジェクトに適したポートとボーレートが選択されていることを確認してください。
湿度と温度の測定値を1I2C 1602LCDに表示する良い方法があります。これを行うには、まずチュートリアルの
「ArduinにLCDディスプレイをセットアップする方法」に従い、次に以下の操作を行って、このプロジェクトを完成させます。
以下のように回路を組みます:
上記の操作が完了したら、USBケーブルを使ってボードをコンピュータに接続します。Arduino IDEを開き、対応するボードタイプとポートタイプを選択します。
次のスケッチをボードにロードします。
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include<dht.h> dht DHT; LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display #define DHT11_PIN 3 void setup() { lcd.begin(16,2); lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.clear(); lcd.print("Humidity & temp"); delay(3000); lcd.clear(); lcd.print("Starting....."); delay(3000); } void loop() { // READ DATA int chk = DHT.read11(DHT11_PIN); lcd.clear(); delay(500); lcd.setCursor(0, 0); // print from 0 to 9: lcd.print("Temp : "); lcd.print(DHT.temperature, 1); lcd.print(" C"); // set the cursor to (16,1): lcd.setCursor(0,1); lcd.print("Humidity: "); lcd.print(DHT.humidity, 1); lcd.print(" %"); delay(2000); }
アップロードが終了して数秒後、LCDに現在の湿度と温度の値が表示されます。
DownLoad Url osoyoo.com