マイコンとセンサーで温度と湿度を測ってみよう
温度や湿度を測定するセンサーが安価に出回っています。
秋月電子通商さんのところだと、
のカテゴリーに、温度や湿度センサーがゴロゴロしています。
温度と湿度の両方計れてしかも安価な
温湿度センサ モジュール 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