工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知

必要な部品と材料

部品数量備考
DHT11温湿度センサー (4ピン)1温度0-50°C, 湿度20-90%
Arduino UNO1
LED (緑1個、赤2個)3緑: 快適、赤: 寒い/暑い
抵抗 220Ω3LED電流制限用
ピエゾスピーカー (ブザー)1アラート音用
ジャンパーワイヤー12本
ブレッドボード1

必要なライブラリ

  1. Adafruit Unified Sensor
  2. DHT Sensor Library

Arduino IDEのライブラリマネージャーから「DHT sensor library」で検索し、依存関係含めインストール推奨。

プロジェクト概要

DHT11センサーで温度を測定し、3つのLEDとピエゾブザーで快適/寒い/暑いを通知する初心者向けプロジェクトです。閾値はコード内で簡単に変更可能。温度のみ使用し、湿度はシリアルモニター表示のみ。

DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知

配線

DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知

接続表

部品Arduinoピン備考
DHT11 VCC5V
DHT11 GNDGND
DHT11 DATAデジタルピン 510kΩプルアップ推奨 (モジュール版は内蔵済み)
緑LED (アノード)A1220Ω経由、カソード→GND
赤LED (寒い側, アノード)A0220Ω経由、カソード→GND
赤LED (暑い側, アノード)A2220Ω経由、カソード→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);
}

動作確認

  1. コードをアップロード
  2. シリアルモニター (9600 bps) 開く
  3. センサーを息で温めたり、冷やしたりして反応確認
  4. 緑LED点灯 = 快適、赤LED+ブザー = 寒い/暑いアラート

発展アイデア

製造プロセス

  1. Raspberry Pi、DHT11、ThingSpeakで作る初めてのIoTプロジェクト
  2. Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
  3. Arduino Portenta H7にMAX6675でサーモカップル温度センサーを接続する
  4. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  5. K30 CO2センサで室内空気質をリアルタイム監視する
  6. Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
  7. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  8. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  9. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  10. DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
  11. DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル