
Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Если с датчиком что-то не так, появляется сообщение об ошибке; это первый шаг к твоей собственной маленькой метеостанции.
Видео
Схема

Исходный код
C++ (Arduino IDE)
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Температура и влажность с DHT11
4// ─────────────────────────────────────────
5// Датчик DHT11 измеряет температуру и влажность в комнате; I2C LCD
6// показывает температуру в первой строке, а влажность во второй. Показания
7// обновляются каждые 2 с. Если чтение не удалось, на экране "Sensor
8// Error!" (ошибка датчика).
9//
10// Пины:
11// D3 -> Данные DHT11
12// (резистор 10k между данными и 5V, подтяжка)
13// A4 -> LCD SDA
14// A5 -> LCD SCL
15// DHT11 и LCD: VCC к 5V, GND к GND
16
17#include <LiquidCrystal_I2C.h>
18#include <Wire.h>
19#include <DHT.h>
20
21#define DHTPIN 3 // Пин данных DHT11
22#define DHTTYPE DHT11 // Используемый тип датчика
23
24LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес I2C 0x27, LCD 16x2
25DHT dht(DHTPIN, DHTTYPE);
26
27void setup() {
28 dht.begin();
29 // Современные библиотеки используют init() вместо begin()
30 lcd.init();
31 lcd.backlight();
32}
33
34void loop() {
35 // Прочитать влажность и температуру (C)
36 float humidity = dht.readHumidity();
37 float temperature = dht.readTemperature();
38
39 // Проверить, не сорвалось ли чтение
40 if (isnan(humidity) || isnan(temperature)) {
41 lcd.setCursor(0, 0);
42 lcd.print("Sensor Error! ");
43 return;
44 }
45
46 // Строка 1: температура
47 lcd.setCursor(0, 0);
48 lcd.print("Temp: ");
49 lcd.print(temperature);
50 lcd.print((char)223); // Символ градуса (°)
51 lcd.print("C ");
52
53 // Строка 2: влажность
54 lcd.setCursor(0, 1);
55 lcd.print("Humidity: %");
56 lcd.print((int)humidity); // Вывести целым числом (45)
57 lcd.print(" "); // Пробелы в конце стирают старые данные
58
59 delay(2000); // DHT11 медленный, 2 секунды стабильнее
60}
61
Частые вопросы
Насколько точны измерения DHT11?
DHT11 измеряет температуру с точностью ±2 °C и влажность с точностью ±5% и работает в диапазоне 0–50 °C. Для более точных измерений рекомендуются DHT22 (±0,5 °C) или BME280.
На экране «nan» или сообщение об ошибке. Почему?
Датчик не удалось прочитать. Проверь подтягивающий резистор 10 kΩ на пине данных, тип датчика (DHT11) в настройках библиотеки и выдерживай между чтениями не меньше 1–2 секунд.
Почему показания обновляются медленно?
DHT11 может делать не больше одного измерения в секунду. При более частом чтении значения будут неверными или устаревшими; между измерениями рекомендуется ждать 2 секунды.
Можно ли вычислить ощущаемую температуру?
Да, функция computeHeatIndex() из библиотеки DHT вычисляет ощущаемую температуру по температуре и влажности.
