Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
Компоненты и материалы
- Arduino UNO — 1 шт.
- Датчик температуры и влажности DHT11 (4 пина) — 1 шт.
- Светодиоды — 3 шт. (1 зеленый, 2 красных)
- Резисторы 220 Ом — 3 шт. (для светодиодов)
- Пьезо-динамик (пьезо-пищалка) — 1 шт.
- Провода перемычки — ~12 шт.
Приложения
- Arduino IDE
О проекте
Четвертый учебный проект автора. DHT11 измеряет температуру и влажность. Три светодиода визуализируют температурный диапазон:
- Зеленый (A1) — «Идеально» (20–27 °C)
- Красный A0 — «Слишком холодно» (≤ 20 °C)
- Красный A2 — «Слишком жарко» (≥ 29 °C)
При экстремальных температурах (холодно/жарко) звучит пьезо-динамик на 1 секунду. Данные выводятся в Serial Monitor.
Необходимые библиотеки
Установите через менеджер библиотек (Sketch → Include Library → Manage Libraries).
Схема подключения
- DHT11: VCC→5V, GND→GND, DATA→D5
- Светодиоды (аноды через 220 Ом): A0, A1, A2
- Пьезо-динамик: + → D9, – → GND
Схема в Fritzing (файл dht11_with_leds_and_piezo_speaker_JRpaa8ISfy.fzz) в разделе «Schematics».
Код (C/C++ для Arduino)
#include
#include
int speakerPin = 9;
#define DHTPIN 5
#define DHTTYPE DHT11
#define LED_TOO_COLD A0
#define LED_PERFECT A1
#define LED_TOO_HOT A2
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT11 test!");
dht.begin();
pinMode(speakerPin, OUTPUT);
pinMode(LED_TOO_COLD, OUTPUT);
pinMode(LED_PERFECT, OUTPUT);
pinMode(LED_TOO_HOT, OUTPUT);
}
void loop() {
delay(2000); // DHT11 требует ≥2 сек между измерениями
float h = dht.readHumidity();
float t = dht.readTemperature(); // °C
float f = dht.readTemperature(true); // °F
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t");
Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C");
if (t <= 20) {
Serial.println("Too cold!");
digitalWrite(LED_TOO_COLD, HIGH);
digitalWrite(speakerPin, HIGH);
delay(1000);
digitalWrite(speakerPin, LOW);
digitalWrite(LED_TOO_COLD, LOW);
}
else if (t > 20 && t < 27) { // исправлено: было (20 < t < 27) — в C++ так не работает
Serial.println("Perfect temperature!");
digitalWrite(LED_PERFECT, HIGH);
delay(2000);
digitalWrite(LED_PERFECT, LOW);
}
else if (t >= 29) {
Serial.println("Too hot!");
digitalWrite(LED_TOO_HOT, HIGH);
digitalWrite(speakerPin, HIGH);
delay(1000);
digitalWrite(speakerPin, LOW);
digitalWrite(LED_TOO_HOT, LOW);
}
// Примечание: диапазон 27–29 °C не обрабатывается (ни один светодиод не горит)
}
Примечания по коду
- Условие
20 < t < 27в оригинале некорректно для C++ (вычисляется как(20 < t) < 27). Исправлено наt > 20 && t < 27. - Пин A0, A1, A2 используются как цифровые выходы — это допустимо на Arduino UNO.
- Пьезо-динамик подключен напрямую к пину; для громкости можно добавить транзисторный ключ.
Производственный процесс
- Создайте свой первый IoT-проект с Raspberry Pi, DHT11 и ThingSpeak
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
- Интеграция термопары с Arduino Portenta H7 через MAX6675
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Unopad: Бесшовный Arduino MIDI-контроллер для Ableton Live
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266