DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| DHT11温湿度センサー (4ピン) | 1 | 温度0-50°C, 湿度20-90% |
| Arduino UNO | 1 | |
| LED (緑1個、赤2個) | 3 | 緑: 快適、赤: 寒い/暑い |
| 抵抗 220Ω | 3 | LED電流制限用 |
| ピエゾスピーカー (ブザー) | 1 | アラート音用 |
| ジャンパーワイヤー | 12本 | |
| ブレッドボード | 1 |
必要なライブラリ
Arduino IDEのライブラリマネージャーから「DHT sensor library」で検索し、依存関係含めインストール推奨。
プロジェクト概要
DHT11センサーで温度を測定し、3つのLEDとピエゾブザーで快適/寒い/暑いを通知する初心者向けプロジェクトです。閾値はコード内で簡単に変更可能。温度のみ使用し、湿度はシリアルモニター表示のみ。



配線

接続表
| 部品 | Arduinoピン | 備考 |
|---|---|---|
| DHT11 VCC | 5V | |
| DHT11 GND | GND | |
| DHT11 DATA | デジタルピン 5 | 10kΩプルアップ推奨 (モジュール版は内蔵済み) |
| 緑LED (アノード) | A1 | 220Ω経由、カソード→GND |
| 赤LED (寒い側, アノード) | A0 | 220Ω経由、カソード→GND |
| 赤LED (暑い側, アノード) | A2 | 220Ω経由、カソード→GND |
| ピエゾスピーカー (+) | デジタルピン 9 | もう一方→GND |
スケッチ (改良版)
元コードの問題点を修正: pinMode を setup() に移動、温度判定ロジックの境界を明確化 (20 < t && t < 27 → t > 20 && t < 27)、ブザー鳴動を非ブロッキング化し、快適時はブザー鳴らさない仕様に改善。また isnan() チェックを DHT ライブラリ推奨の isnan() 対応に修正。
#include
#include
#define DHTPIN 5
#define DHTTYPE DHT11
#define LED_TOO_COLD A0
#define LED_PERFECT A1
#define LED_TOO_HOT A2
#define SPEAKER_PIN 9
DHT dht(DHTPIN, DHTTYPE);
// 閾値 (必要に応じて調整)
const float TEMP_COLD_MAX = 20.0; // これ以下: 寒い
const float TEMP_HOT_MIN = 27.0; // これ以上: 暑い
// 20.0〜27.0未満: 快適
// ブザー非ブロッキング制御用
unsigned long buzzerStartTime = 0;
bool buzzerActive = false;
const unsigned long BUZZER_DURATION = 1000; // 1秒鳴動
void setup() {
Serial.begin(9600);
Serial.println(F("DHT11 Temperature Alert System"));
pinMode(LED_TOO_COLD, OUTPUT);
pinMode(LED_PERFECT, OUTPUT);
pinMode(LED_TOO_HOT, OUTPUT);
pinMode(SPEAKER_PIN, OUTPUT);
dht.begin();
}
void loop() {
// 非ブロッキングブザー制御
if (buzzerActive && (millis() - buzzerStartTime >= BUZZER_DURATION)) {
digitalWrite(SPEAKER_PIN, LOW);
buzzerActive = false;
}
// DHT11は最低2秒間隔で読み取り推奨
static unsigned long lastRead = 0;
if (millis() - lastRead < 2000) return;
lastRead = millis();
float h = dht.readHumidity();
float t = dht.readTemperature(); // 摂氏
// float f = dht.readTemperature(true); // 華氏 (未使用)
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
allLedsOff();
return;
}
Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("%\t"));
Serial.print(F("Temperature: ")); Serial.print(t); Serial.println(F(" *C"));
allLedsOff(); // 先に全消灯
if (t <= TEMP_COLD_MAX) {
// 寒い
Serial.println(F("Too cold!"));
digitalWrite(LED_TOO_COLD, HIGH);
if (!buzzerActive) {
digitalWrite(SPEAKER_PIN, HIGH);
buzzerStartTime = millis();
buzzerActive = true;
}
}
else if (t >= TEMP_HOT_MIN) {
// 暑い
Serial.println(F("Too hot!"));
digitalWrite(LED_TOO_HOT, HIGH);
if (!buzzerActive) {
digitalWrite(SPEAKER_PIN, HIGH);
buzzerStartTime = millis();
buzzerActive = true;
}
}
else {
// 快適
Serial.println(F("Perfect temperature!"));
digitalWrite(LED_PERFECT, HIGH);
// 快適時はブザー鳴らさない
}
}
void allLedsOff() {
digitalWrite(LED_TOO_COLD, LOW);
digitalWrite(LED_PERFECT, LOW);
digitalWrite(LED_TOO_HOT, LOW);
}
動作確認
- コードをアップロード
- シリアルモニター (9600 bps) 開く
- センサーを息で温めたり、冷やしたりして反応確認
- 緑LED点灯 = 快適、赤LED+ブザー = 寒い/暑いアラート
発展アイデア
- OLED/LCDに温湿度数値表示
- Wi-Fi/Bluetoothでスマホ通知 (IFTTT, Blynk等)
- 閾値をEEPROM保存し、ボタンで調整可能に
- 湿度も判定に加え「カビ注意/乾燥注意」アラート追加
- リレーでヒーター/ファン/加湿器を自動制御
- DHT22 (AM2302) に換装で精度・範囲向上
製造プロセス
- Raspberry Pi、DHT11、ThingSpeakで作る初めてのIoTプロジェクト
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Arduino Portenta H7にMAX6675でサーモカップル温度センサーを接続する
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- K30 CO2センサで室内空気質をリアルタイム監視する
- Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル