【自由研究】初心者キットで作る「不快指数モニター」|気温と湿度から快適さを数値で見える化

暑さを数値で! 不快指数モニター

「今日蒸し暑い」を数字で見える化する装置を作ろう

気温だけじゃなくて、湿度も合わせて「実際の不快さ」が分かる装置って作れる?

いいテーマだね! 気象学で「不快指数」っていう数字があるんだ。気温と湿度から計算して、80を超えると「ほとんどの人が不快」とされる。今日はそれを表示するモニターを作るよ。

今回は、電子工作で自由研究をしたい中学生・高校生のお子さんに向けて、初心者キットだけで作れる「不快指数モニター」を紹介します。

DHT11温湿度センサーで気温と湿度を測り、不快指数を計算してLEDの色で快適度を表示する装置です。湿度の重要性を数字で実感できる、夏休みの自由研究にぴったりのテーマです。

この記事で作るもの
  1. 気温と湿度を測って不快指数を計算
  2. 緑LED: 快適 (75未満)
  3. 黄LED: やや不快 (75〜80)
  4. 赤LED: 非常に不快 (80以上)
  5. シリアルモニタで全部の数値も確認可能

不快指数とは

不快指数 (Discomfort Index) は、気温と湿度から計算した「人がどれくらい不快に感じるか」を表す数字です。次の計算式で求められます。

不快指数の計算式
DI = 0.81 × 気温 + 0.01 × 湿度 × (0.99 × 気温 – 14.3) + 46.3

同じ30℃でも、湿度が高いと不快指数も上がる、というのが面白いポイントです。

使う部品

部品役割個数
Arduino UNO R3装置の頭脳1
DHT11温湿度モジュール (3ピン)気温と湿度を測る1
LED (緑、黄、赤)快適度の表示各1
抵抗330ΩLEDを保護3
ブレッドボード配線をする台1
ジャンパーワイヤーつなぐ線10本前後

配線図

        a b c d e
       +─────────+
[+]rail| . . . . . | ← 5V (Arduino から)
[-]rail| . . . . . | ← GND (Arduino から)
       +─────────+
row 5  | X . . . . | ← DHT11 VCC ([+]rail)
row 6  | X . . . . | ← DHT11 Data (D2)
row 8  | X . . . . | ← DHT11 GND ([-]rail)
row 11 | X . . . . | ← 330Ω 上足 (D9 から、緑)
row 12 | X . . . . | ← 330Ω 下足+緑LED
row 14 | X . . . . | ← 緑LED カソード ([-])
row 17 | X . . . . | ← 330Ω 上足 (D10 から、黄)
row 18 | X . . . . | ← 330Ω 下足+黄LED
row 20 | X . . . . | ← 黄LED カソード ([-])
row 23 | X . . . . | ← 330Ω 上足 (D11 から、赤)
row 24 | X . . . . | ← 330Ω 下足+赤LED
row 26 | X . . . . | ← 赤LED カソード ([-])
       +─────────+

部品同士のつながり

Arduino       役割
  5V    ──→   DHT11 VCC
  D2    ──→   DHT11 Data
  GND   ──→   DHT11 GND
  D9  ←→ 緑LED (快適)
  D10 ←→ 黄LED (やや不快)
  D11 ←→ 赤LED (不快)

プログラム

DHT sensor library (Adafruit)をArduinoIDEのライブラリマネージャからインストールしてください。

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define GREEN 9
#define YELLOW 10
#define RED 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  pinMode(GREEN, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(RED, OUTPUT);
  dht.begin();
  Serial.println("不快指数モニター スタート!");
}

void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(t) || isnan(h)) { delay(2500); return; }

  float di = 0.81 * t + 0.01 * h * (0.99 * t - 14.3) + 46.3;

  Serial.print("気温: ");
  Serial.print(t);
  Serial.print("℃ 湿度: ");
  Serial.print(h);
  Serial.print("% 不快指数: ");
  Serial.println(di);

  digitalWrite(GREEN, LOW);
  digitalWrite(YELLOW, LOW);
  digitalWrite(RED, LOW);

  if (di < 75) {
    digitalWrite(GREEN, HIGH);
  } else if (di < 80) {
    digitalWrite(YELLOW, HIGH);
  } else {
    digitalWrite(RED, HIGH);
  }
  delay(2500);
}

プログラムの動き

flowchart TD A[起動] --> B[気温と湿度を測る] B --> C[不快指数を計算] C --> D{75未満?} D -->|Yes| E[緑LED] D -->|No| F{80未満?} F -->|Yes| G[黄LED] F -->|No| H[赤LED] E --> I[2秒待つ] G --> I H --> I I --> B

自由研究としての展開

研究テーマのアイデア
  1. 1日の不快指数変化を1時間ごとに記録
  2. エアコンON/OFFで不快指数がどう変わるか
  3. 家の各部屋で同時に測って、どこが一番不快か
  4. 同じ気温でも湿度が違うと不快指数がどう違うか
どこの部屋が一番不快か、面白そう!

そうそう、お風呂上がりの脱衣所、エアコンの効いたリビング、日当たりの良い自分の部屋、で測り比べると差がはっきり出るよ。表にしてグラフ化すると、レポートの完成度が上がるんだ。

改造のアイデア

発展アイデア
  1. LCDに不快指数を直接数字で表示
  2. 赤LEDの時にブザーで「水分補給!」と知らせる
  3. SDカードに1時間ごとのデータを記録
  4. 不快指数の歴史的な意味も調べてレポートに

まとめ

今回は、自由研究にぴったりな「不快指数モニター」の作り方を紹介しました。気温と湿度から計算式で不快指数を出して、LEDの色で快適度を見える化する、夏らしいテーマです。

大切なのは、同じ気温でも湿度で数字が変わることを表で見せることです。部屋ごとの違いを書き出すと、考察が一気に書きやすくなります。

他にも初心者キットだけで作れる作例を別の記事で紹介しているので、興味があれば見てみてね。