マイコンとセンサーで温度と湿度を測ってみよう

温度や湿度を測定するセンサーが安価に出回っています。

秋月電子通商さんのところだと、

のカテゴリーに、温度や湿度センサーがゴロゴロしています。

温度と湿度の両方計れてしかも安価な
温湿度センサ モジュール DHT11
を使ってみました。ついでに不快指数の計算も入れました。

DHT11 用のライブラリがありますので使ってみます。
adafruit/DHT-sensor-library: Arduino library for DHT11DHT22, etc Temp & Humidity Sensors

#include <DHT.h>            // 温度湿度センサーライブラリ

// 温度湿度センサー
const int DHT_PIN  = 12;    // ESP-WROOM-02 の GPIO12 を温湿度センサー入力とする
const int DHT_TYPE = DHT11; // DHT11/DHT21/DHT22/AM2301 (DHT21/DHT22/AM2301 センサーを使うならばそちらを指定)

// センサー初期化
DHT dht(DHT_PIN, DHT_TYPE);

// 計測値
float temperature = 0.0f;  // 温度
float humidity    = 0.0f;  // 湿度
float heatIndex   = 0.0f;  // 体感温度的な暑さ指数 see http://www.nws.noaa.gov/om/heat/heat_index.shtml
int   discomfortIndex = 0; // 不快指数

int computeDiscomfortIndex(float t, float h);

void setup() {
  // ESP-WROOM-02 は 115200
  Serial.begin(115200); //このシリアル通信はモニター用
  delay(10);

  // 温度湿度センサー開始
  dht.begin();
}

void loop() {
  // 温度や湿度の読み出しに約 250ms かかります!
  // センサーの測定値もまた最大2秒古い値が返ってきます(このセンサーはとても遅いのです...)
  // ゆえに 2 秒待ちましょう
  delay(2000);

  // 温度(セ氏)を読み取ります
  temperature = dht.readTemperature();
  // 湿度(%)を読み取ります
  humidity = dht.readHumidity();

  // 読み取れたかチェックします
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // 温度(セ氏)と湿度(%)から Heat Index の算出
  // Heat Index とはアメリカ海洋大気庁(NOAA)が出している熱中症に関連する指標のようです。
  // see https://en.wikipedia.org/wiki/Heat_index
  heatIndex = dht.computeHeatIndex(temperature, humidity, false);
  // 不快指数
  discomfortIndex = computeDiscomfortIndex(temperature, humidity);

  // 読み取った値をシリアル出力
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print("%\t");
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print("°C\t");
  Serial.print("Heat Index: ");
  Serial.print(heatIndex);
  Serial.print("°C\t");
  Serial.print("Discomfort Index: ");
  Serial.println(discomfortIndex);
}

int computeDiscomfortIndex(float t, float h) {
  int index;
  // see https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%BF%AB%E6%8C%87%E6%95%B0
  // 0.81T+0.01H(0.99T-14.3)+46.3
  index = 0.81f * t + 0.01f * h * (0.99f * t - 14.3f) + 46.3f;

  return index;
}

何てことはなくて、
初期化して
begin して
少し delay して
readなにがし
だけです。

センサーとボードの配線は以下のように。
プルアップ用の抵抗 2.2kΩ を忘れずに。

回路図は Fritzing で書きました。

パーツは AdaFruit Fritzing Library で追加しました。

ESP-WROOM-02 開発ボードのパーツがないので、類似の Adafruit HUZZAH ESP8266 breakout で代用しました。 ESP-WROOM-02 開発ボードだと Micro USB で電源とシリアルが繋がっています。

Arduino IDE 1.6.8
ESP8266 core for Arduino 2.1.0
DHT-sensor-library 1.2.3