DHT11使用 温度・湿度計の製作

温度湿度センサーDHT11は安価(秋月電子さんで300円)で、DATA端子1本のみでArduinoとシリアル通信ができ、温度と湿度の計測ができます。端子は4本ありますが、1本はNCで使いません。正面向かって左から2番目の端子がDATAで、この端子は10kΩ程度の抵抗でプルアップする(5Vに接続する)必要があります。今回は128×32ドットOLEDディスプレイで表示するようにしました。

実体配線図

上記のように接続しました。DHT11のDATA端子はArduinoのD8に接続しました。OLEDディスプレイはSDAをA4に、SCLをA5に接続します。

Arduinoのスケッチ

準備として、DHT11と1306のライブラリをそれぞれインストールしておきます。スケッチ>>ライブラリの管理でライブラリマネージャーを開き検索してインストールします。「DHT11」や「1306」ですぐに見つかると思います。

#include <DHT.h>              //DHT11ライブラリのヘッダファイル
#define PIN_DHT 8             //DHT11の信号線をD8端子に接続する定義
DHT dht( PIN_DHT, DHT11 );    //接続の設定
float temperature;
float percentHumidity;

#include <Wire.h>             //I2Cのヘッダファイル
#include <Adafruit_SSD1306.h> //SSD1306のヘッダファイル
Adafruit_SSD1306 display(-1); //RSTピンがない互換品を使用するので-1を指定

void setup() {

  dht.begin();

  display.begin(SSD1306_SWITCHCAPVCC,0x3C); //I2Cアドレスの設定
  display.setTextColor(WHITE);              //色の設定(白)
  display.setTextSize(2);                   //文字サイズ設定
  display.clearDisplay();                   //画面クリア

}

void loop() {

  delay(1000);    //1秒待ち(1000ms)

  percentHumidity = dht.readHumidity();  //湿度の読み込み
  temperature = dht.readTemperature();   //温度の読み込み
  
  display.clearDisplay();           //画面クリア   
  display.setCursor(0,0);           //左上にカーソルを移動
  display.print("T: ");             //文字列挿入
  display.print(temperature,1);     //文字列挿入
  display.println("[C]");           //文字列挿入
  display.print("H: ");             //文字列挿入
  display.print(percentHumidity,1); //文字列挿入
  display.println("[%]");           //文字列挿入
  display.display();                //描画バッファの内容を画面に表示

}
//ここまで

比較的、簡単に作ることができます。更に、プルアップ抵抗が組み込まれた3本足のモジュールも販売されているみたいです。

OLEDに「Hello World」を表示する

こんにちは。前回はAdafruitのサンプルプログラムを入れて動作させてみました。今回は簡単な文字列を画面上に表示・点滅させてみました。今回使用するOLEDは128×32ドット幅30mmほどの大きさで、Driver ICにはSSD1306が使用されています。Arduinoとの接続はI2Cで、GDD、VCC、SCL、SDAの4本となります。ArduinoのA4にSDAを、A5にSCLを接続します。

ライブラリですが、今回はAdafruitのライブラリを使いました。「Adafruit SSD1306」というものですが、Arduino IDEのライブラリマネージャを開き(スケッチ>>ライブラリを管理)ここで「1306」などで検索すると見つかりますので、これをインストールします。

(プログラム例)OLEDに「Hello World」を表示させる

#include <Wire.h>             //I2Cのヘッダファイル
#include <Adafruit_SSD1306.h> //SSD1306のヘッダファイル
Adafruit_SSD1306 display(-1); //RSTピンがない互換品を使用するので-1を指定

void setup() {
  
  display.begin(SSD1306_SWITCHCAPVCC,0x3C); //I2Cアドレスの設定
  display.setTextColor(WHITE);              //色の設定(白)
  display.setTextSize(2);                   //文字サイズ設定
  display.clearDisplay();                   //画面クリア

}

void loop() {
  
  display.clearDisplay();    //画面クリア   
  display.setCursor(0,0);    //左上にカーソルを移動
  display.println("Hello");  //文字列挿入
  display.display();         //描画バッファの内容を画面に表示
  delay(1000);               //1秒間待ち

  display.clearDisplay(); 
  display.setCursor(0,16);   //下段にカーソルを移動(32/2=16) 
  display.println("World");
  display.display();
  delay(1000); 

}
//ここまで

今回使用した物は、「0.91 インチ IIC I2C シリアルOLED液晶ディスプレイモジュール 128×32 3.3V/5V AVR PIC Arduino UNO MEGAに対応」でAmazonで2個900円弱でした。1個当たり450円程です。バックライトが不要な点はLCDに勝っています。またI2C接続は簡単なので、色々な用途に応用できそうです。