Arduino DHT11 温度・湿度センサーのプロジェクト

DHTセンサーライン(DHT11/22)は、多くの電子機器に使用されているものですが PCBA 温度/湿度センサーとしてシンプルでコンパクトなため、家庭用ウェザーステーションからプラントオートメーションシステムに至るまで、さまざまなプロジェクトで使用されています。より正確で高価なDHT22で代用することもできますが(コードに若干の変更が必要)、このプロジェクトではDHT11センサー・モジュールを使用する予定です。基本的な3ピンインターフェースで、このプロジェクトで使用するDHT11センサーは、単体の4ピンセンサーではなく、コンデンサーとプルアップ抵抗を内蔵した3ピンモジュールなので、この回路を作る際に追加の部品は必要ありません。そのため、Arduinoボードに接続すると、DHT11センサーモジュールがデジタルピンに直接接続され、センサーからのシリアルデータを処理してマイコンに送り、読み取ることができる。このプロジェクトでは、DHT11センサーからの温度と湿度のデータを、0.96″ 128×64 OLED(有機発光ダイオード)ディスプレイに表示し、目で見て確認できるようにします。i2cのOLEDディスプレイは、Arduinoボードと4線で接続するだけでよく、豊富なライブラリで簡単にプログラミングできるのがメリットです。有機ELディスプレイの特長は、文字や図形、画像などを鮮明に表示できることです。このプロジェクトは、いくつかの部品と基本的なコーディングスキルを必要とするだけなので、全くの初心者に適した非常にシンプルなプロジェクトです。しかし、上級者にとっては、このプロジェクトに改良を加え、無線通信(RF、LoRa.など)のような機能を追加することが可能です。 Bluetooth PCB, WiFiなど)、RTC(リアルタイムクロック)データ、追加センサーデータ(高度、大気圧、ガス濃度など)、その他多くの機能を備えています。このプロジェクトに必要なコンポーネントは以下の通りです。
- Arduino Nano(他のArduino互換ボードでも可)
- USBケーブル(Arduinoボード対応)
- ブレッドボード
- オス-オス型ジャンパー線 (7)
- 0.96″ 128×64 i2c OLEDディスプレイ
- DHT11センサーモジュール
ワイヤリング
Arduinoのボードによって、ボードを接続するためのブレッドボードが必要な場合と不要な場合があります。この例では、Arduino Nanoを使用しているためブレッドボードが必要ですが、例えばArduino Unoを使用している場合は、ブレッドボード上の部品からボードのピンに直接ジャンパーワイヤーを差し込むことができます。ただし、DHT11センサーモジュールとOLEDからArduinoボードへの配線は変わりません。回路図も以下に紹介します。
- DHT11センサーモジュールです。センサーの信号(S)ピンをD2に、プラス(+)ピンを+5vに、マイナス(-)ピンをGNDに接続します。
- OLEDです。SDA(シリアルデータ)をA4、SCL/SCK(シリアルクロック)をA5、VDD/VCC(電源電圧)を+5v、GNDをGNDに接続してください。
- あとは、USBケーブルでArduinoボードをパソコンに接続します。

プロジェクトコード
#include の場合
#include を使用します。
#include を参照してください。
#ディファイン screen_width 128
#ディファイン スクリーンハイト 64
#ディファイン OLED_RESET 4
Adafruit_SSD1306 みせる(screen_width, screen_height);
#include "DHT.h "です。
#ディファイン ディーエイチピーイン 2
#ディファイン DHTTYPE DHT11
DHT dht(dhtpin, dhttype);
ボイド セットアップ() {
dht.始める();
みせる.始める(SSD1306_SWITCHCAPVCC, 0x3C);
みせる.クリアディスプレー();
}
ボイド ループ() {
みせる.クリアディスプレー();
みせる.setTextSize(1);
みせる.setTextColor(SSD1306_WHITE);
みせる.セットカーソル(0, 15);
みせる.プリント("温度:");
みせる.セットカーソル(80, 15);
みせる.プリント(dht.読み取り温度());
みせる.セットカーソル(110, 15);
みせる.プリント("C");
みせる.セットカーソル(0, 35);
みせる.プリント("湿度:");
みせる.セットカーソル(80, 35);
みせる.プリント(dht.リードハイムド());
みせる.セットカーソル(110, 35);
みせる.プリント(“%”);
みせる.みせる();
遅延(2000);
コードについて
- i2c有機ELディスプレイの利点の一つは、Arduino IDEからディスプレイをプログラミングする際に、オープンソースライブラリという形で、オンラインで利用できる非常に多くのサポートがあることです。このプロジェクトでは、Adafruit SSD1306ライブラリとGFXライブラリの2つが、有機ELディスプレイとArduinoのインターフェースに利用されています。すべての設定情報がライブラリファイルに設定されているため、IDE内で基本的なコマンドを使用し、ディスプレイの使用を簡素化します。これらのライブラリがIDEにダウンロード、インストールされていない場合、コンパイルエラーが発生することがありますので、Arduino IDEに最新のライブラリがインストールされていることを確認してください。
- コードはまず、OLEDディスプレイの設定に必要なライブラリの定義から始まります。Wire、Adafruit SSD1306、Adafruit GFXです。これらは、ArduinoでOLEDを機能させるために必要なものです。
- 第2ブロックでは、有機ELディスプレイに関するいくつかのパラメータが定義され、画面の幅と高さ(128×64ピクセル)、有機ELリセット端子(A4)が含まれます。
- 次に、DHT11センサーがArduinoとインターフェースするために必要なライブラリが定義されており、特に「DHT」ライブラリが重要です。DHTセンサーがArduinoボード上で接続されるデジタルピン(デジタルピン2 - D2)も、利用するDHTセンサーの特定のモデルであるDHT11センサーと一緒に定義されています。
- ここで、Arduinoのコードに欠かせない2つの機能のうちの1つであるvoid setupセクションを紹介します。ここでは、DHT11センサー(dht.begin())とOLEDディスプレイを起動し、voidループセクションに進む前に、OLEDディスプレイを以前のビジュアルからクリアします(display.clearDisplay())。
- Arduinoボードに電源がある限り、継続的に(ループで)繰り返されるコードの主要部分であるvoid loopセクションに関しては、主にOLED固有の機能で構成されており、最初にテキストサイズ、テキストカラー、カーソル(OLED上のテキストを印刷したい場所)を設定する。その後、OLEDに命令して、ディスプレイのさまざまな場所にテキストの行を印刷させますが、その内容は主にDHT11センサーが読み取った温度(摂氏)と湿度(%)情報です。このように、定義されたライブラリから生成されたシンプルなコマンドを使うだけで、あらゆる情報を簡単にディスプレイに印刷することができるのです。
- コードの一番最後にある遅延機能で、センサーから読み取った最新のデータを2000ミリ秒ごとにOLEDディスプレイに更新するように設定されています。ただし、このタイミングは、センサーから直接最新の情報を受け取りたい頻度に応じて変更することができます。
まとめる
このプロジェクトと、センサーとOLEDディスプレイを接続する基本原理を理解すれば、このプロジェクトをアップグレードしたり改良したりする方法はいくらでもあります。一般的には、センサーやディスプレイ、ワイヤレス機能、ケースなどを追加することで、より大きなウェザーステーションのプロジェクトに統合することができます。このプロジェクトのように、Arduinoのライブラリを使いこなすだけで、自分だけのウェザーステーションを比較的簡単に作ることができます。将来的には、このような気象データをマイコンボードから別のマイコンボードに無線で送信して、遠隔地の環境を監視したり、自律的なシステムを集中的に制御するようなプロジェクトも考えられる。しかし、このようなプロジェクトは、まったくの初心者にホビーエレクトロニクスを紹介するのに適していますし、エレクトロニクスの他の側面を探求したい経験豊富な製作者を対象とすることも大いに可能です。