
Собираем комнатный термометр и гигрометр на Arduino с датчиком DHT22 и LCD-дисплеем 16x2. Пошаговая схема подключения, полный код с комментариями и советы для учителей.
Температура и влажность воздуха -- два параметра, которые мы проверяем каждый день. Профессиональные метеоприборы стоят дорого, однако собрать собственный цифровой термометр-гигрометр можно буквально за пару часов из недорогих компонентов. Результат -- полноценное устройство с экраном, показывающее актуальные данные в реальном времени.
В этом проекте мы подключим датчик DHT22 к Arduino и выведем показания температуры и влажности на символьный LCD-дисплей 16x2. Дисплей работает в экономичном 4-битном режиме, что освобождает часть пинов Arduino для будущих расширений. Проект отлично подходит для школьников 6-9 классов и занимает около двух часов вместе со сборкой и программированием.
Чему вы научитесь:

| Компонент | Количество | Назначение |
|---|---|---|
| Arduino Uno (или Mega) | 1 | Управляющий микроконтроллер |
| Датчик DHT22 (AM2302) | 1 | Измерение температуры и влажности |
| LCD-дисплей 16x2 | 1 | Вывод показаний на экран |
| Потенциометр 10 кОм | 1 | Регулировка контрастности дисплея |
| Макетная плата | 1 | Сборка схемы без пайки |
| Провода-перемычки | 12-15 шт. | Соединение компонентов |
| Резистор 10 кОм | 1 | Подтяжка линии данных DHT22 |
| USB-кабель | 1 | Питание и загрузка кода |
Почему DHT22, а не DHT11? DHT22 имеет точность 0.5 градуса Цельсия (против 2 градусов у DHT11) и измеряет влажность в диапазоне 0-100% (против 20-80%). Для учебного проекта разница в цене минимальна, а данные заметно точнее.
DHT22 в модульном варианте имеет три вывода:
Между выводами VCC и DATA установите подтягивающий резистор на 10 кОм. Он обеспечивает стабильный уровень сигнала на линии данных. Если у вас модуль DHT22 на маленькой плате -- резистор уже впаян, дополнительный ставить не нужно.
LCD-дисплей подключается в четырёхбитном режиме -- используются только старшие четыре линии данных (DB4-DB7). Это экономит четыре пина Arduino.
Потенциометр для контрастности: один крайний вывод к 5V, другой к GND, средний к пину V0 дисплея. Вращением потенциометра вы настроите видимость символов.

Перед загрузкой установите библиотеки через менеджер библиотек Arduino IDE: DHT sensor library (от Adafruit) и LiquidCrystal (обычно уже установлена).
```cpp
// Комнатный термометр и гигрометр на Arduino
// Компоненты: DHT22 + LCD 16x2 (4-битный режим)
#include <LiquidCrystal.h>
#include <DHT.h>
// Настройки датчика DHT22
#define DHT_PIN 2 // Пин данных подключён к D2
#define DHT_TYPE DHT22 // Тип датчика -- DHT22
// Инициализация LCD: RS=8, EN=9, DB4=4, DB5=5, DB6=6, DB7=7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Создаём объект датчика
DHT dht(DHT_PIN, DHT_TYPE);
// Пользовательский символ градуса для LCD
byte degreeSymbol[8] = {
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup() {
// Инициализация дисплея: 16 столбцов, 2 строки
lcd.begin(16, 2);
// Регистрируем пользовательский символ градуса
lcd.createChar(0, degreeSymbol);
// Инициализация датчика
dht.begin();
// Приветственное сообщение на экране
lcd.setCursor(0, 0);
lcd.print(" Termometr ");
lcd.setCursor(0, 1);
lcd.print(" Zapusk... ");
delay(2000);
lcd.clear();
// Запуск Serial Monitor для отладки
Serial.begin(9600);
Serial.println("Термометр DHT22 запущен");
}
void loop() {
// Считываем влажность и температуру с датчика
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(); // В градусах Цельсия
// Проверяем корректность данных
if (isnan(humidity) || isnan(temperature)) {
lcd.setCursor(0, 0);
lcd.print("Oshibka sensora!");
lcd.setCursor(0, 1);
lcd.print("Proverьte DHT22");
Serial.println("Ошибка чтения DHT22!");
delay(2000);
return; // Пропускаем итерацию
}
// Первая строка LCD: температура
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1); // Одна цифра после точки
lcd.write(byte(0)); // Символ градуса
lcd.print("C ");
// Вторая строка LCD: влажность
lcd.setCursor(0, 1);
lcd.print("Vlazh: ");
lcd.print(humidity, 1);
lcd.print("% ");
// Дублируем показания в Serial Monitor
Serial.print("Температура: ");
Serial.print(temperature, 1);
Serial.print(" C | Влажность: ");
Serial.print(humidity, 1);
Serial.println(" %");
// Пауза 2 секунды -- DHT22 не поддерживает более частый опрос
delay(2000);
}
`
Подключение библиотек. Мы используем две библиотеки: LiquidCrystal.h для управления LCD-дисплеем в четырёхбитном режиме и DHT.h для работы с датчиком. В отличие от варианта с I2C-модулем, здесь не нужна библиотека Wire.
Инициализация LCD в 4-битном режиме. Строка LiquidCrystal lcd(8, 9, 4, 5, 6, 7) задаёт распиновку: RS на пине 8, Enable на пине 9, и четыре линии данных на пинах 4-7. Четырёхбитный режим позволяет сэкономить четыре пина по сравнению с полным восьмибитным подключением.
Пользовательский символ. LCD 16x2 не имеет встроенного символа градуса в стандартной кодировке, поэтому мы создаём его через массив из восьми байтов. Каждый байт описывает одну строку пикселей в матрице 5x8 точек.
Функция setup. Инициализируем дисплей, датчик и последовательный порт. Приветственное сообщение на экране подтверждает, что дисплей работает правильно.
Функция loop. Каждые 2 секунды считываем данные, проверяем их через isnan() (если датчик не подключён, функции вернут NaN) и обновляем обе строки экрана.
Обработка ошибок. Если данные не удалось считать, программа выводит сообщение об ошибке и пропускает итерацию через return. Без этой проверки на экране появлялись бы случайные числа.
Простой способ проверки: поднесите датчик на несколько секунд к чашке с горячей водой (не касаясь воды). Температура на экране должна заметно вырасти, а влажность -- увеличиться. Это подтверждает, что датчик работает и реагирует на изменения окружающей среды.
1. Начните с Serial Monitor. Перед подключением дисплея убедитесь, что датчик работает, наблюдая данные в Serial Monitor. Это упрощает диагностику.
2. Дайте ученикам поэкспериментировать. Попросите их изменить интервал обновления, добавить мигание подсветки при высокой температуре или вывести данные в других единицах (Фаренгейт).
3. Обсудите точность. DHT22 имеет погрешность 0.5 градуса -- сравните показания с бытовым термометром и обсудите понятие точности измерений.
4. Усложните проект. Добавьте пьезозуммер, который пищит при температуре выше 30 градусов, или подключите SD-карту для записи показаний с метками времени.
Платформа Alashed Hardware содержит все необходимые компоненты для этого проекта в готовых наборах -- от датчиков DHT22 до LCD-дисплеев и макетных плат. А в Alashed CodeStudio ученики могут писать, компилировать и загружать Arduino-скетчи прямо в браузере, без установки Arduino IDE на школьные компьютеры. Учитель видит код каждого ученика в реальном времени и может помочь с отладкой дистанционно.
Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.