Все статьиHardware

Термометр и измеритель влажности на Arduino с DHT22 и LCD-дисплеем

БА
Бексултан Айтен
CTO, Alashed
13 мая 2025 г.
8 мин чтения
Термометр и измеритель влажности на Arduino с DHT22 и LCD-дисплеем

Собираем комнатный термометр и гигрометр на Arduino с датчиком DHT22 и LCD-дисплеем 16x2. Пошаговая схема подключения, полный код с комментариями и советы для учителей.

Введение

Температура и влажность воздуха -- два параметра, которые мы проверяем каждый день. Профессиональные метеоприборы стоят дорого, однако собрать собственный цифровой термометр-гигрометр можно буквально за пару часов из недорогих компонентов. Результат -- полноценное устройство с экраном, показывающее актуальные данные в реальном времени.

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

Чему вы научитесь:

  • Подключать и использовать цифровой датчик температуры и влажности DHT22
  • Управлять LCD-дисплеем 16x2 в четырёхбитном режиме
  • Работать с внешними библиотеками Arduino IDE
  • Обрабатывать ошибки чтения датчиков
  • Обновлять показания на экране в реальном времени
Схема подключения DHT22 и LCD-дисплея к Arduino на макетной плате
Схема подключения DHT22 и LCD-дисплея к Arduino на макетной плате

Необходимые компоненты

КомпонентКоличествоНазначение
Arduino Uno (или Mega)1Управляющий микроконтроллер
Датчик DHT22 (AM2302)1Измерение температуры и влажности
LCD-дисплей 16x21Вывод показаний на экран
Потенциометр 10 кОм1Регулировка контрастности дисплея
Макетная плата1Сборка схемы без пайки
Провода-перемычки12-15 шт.Соединение компонентов
Резистор 10 кОм1Подтяжка линии данных DHT22
USB-кабель1Питание и загрузка кода

Почему DHT22, а не DHT11? DHT22 имеет точность 0.5 градуса Цельсия (против 2 градусов у DHT11) и измеряет влажность в диапазоне 0-100% (против 20-80%). Для учебного проекта разница в цене минимальна, а данные заметно точнее.

Схема подключения

Подключение датчика DHT22

DHT22 в модульном варианте имеет три вывода:

  • VCC -- подключаем к шине 5V на Arduino
  • DATA -- подключаем к цифровому пину D2 на Arduino
  • GND -- подключаем к шине GND

Между выводами VCC и DATA установите подтягивающий резистор на 10 кОм. Он обеспечивает стабильный уровень сигнала на линии данных. Если у вас модуль DHT22 на маленькой плате -- резистор уже впаян, дополнительный ставить не нужно.

Подключение LCD 16x2 (4-битный режим)

LCD-дисплей подключается в четырёхбитном режиме -- используются только старшие четыре линии данных (DB4-DB7). Это экономит четыре пина Arduino.

  • VSS (пин 1) -- к шине GND
  • VDD (пин 2) -- к шине 5V
  • V0 (пин 3) -- к среднему выводу потенциометра (регулировка контрастности)
  • RS (пин 4) -- к пину D8 на Arduino
  • RW (пин 5) -- к шине GND (режим записи)
  • EN (пин 6) -- к пину D9 на Arduino
  • DB4 (пин 11) -- к пину D4 на Arduino
  • DB5 (пин 12) -- к пину D5 на Arduino
  • DB6 (пин 13) -- к пину D6 на Arduino
  • DB7 (пин 14) -- к пину D7 на Arduino
  • LED+ (пин 15) -- к шине 5V (подсветка)
  • LED- (пин 16) -- к шине GND

Потенциометр для контрастности: один крайний вывод к 5V, другой к GND, средний к пину V0 дисплея. Вращением потенциометра вы настроите видимость символов.

Собранный термометр-гигрометр на Arduino с DHT22 и LCD
Собранный термометр-гигрометр на Arduino с DHT22 и LCD

Код программы

Перед загрузкой установите библиотеки через менеджер библиотек 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. Без этой проверки на экране появлялись бы случайные числа.

Как проверить работу устройства

Простой способ проверки: поднесите датчик на несколько секунд к чашке с горячей водой (не касаясь воды). Температура на экране должна заметно вырасти, а влажность -- увеличиться. Это подтверждает, что датчик работает и реагирует на изменения окружающей среды.

Возможные проблемы и решения

  • На дисплее ничего не видно -- медленно покрутите потенциометр контрастности. LCD может быть полностью прозрачным или полностью чёрным при крайних положениях.
  • Показывает "Ошибка сенсора" -- убедитесь, что DHT22 подключён к правильному пину и питанию. Проверьте подтягивающий резистор.
  • Символы на экране нечитаемые -- проверьте, что пин RW подключён к GND, а не висит в воздухе.
  • Данные обновляются рывками -- это нормально, DHT22 обновляет данные каждые 2 секунды.

Советы для учителей

1. Начните с Serial Monitor. Перед подключением дисплея убедитесь, что датчик работает, наблюдая данные в Serial Monitor. Это упрощает диагностику.

2. Дайте ученикам поэкспериментировать. Попросите их изменить интервал обновления, добавить мигание подсветки при высокой температуре или вывести данные в других единицах (Фаренгейт).

3. Обсудите точность. DHT22 имеет погрешность 0.5 градуса -- сравните показания с бытовым термометром и обсудите понятие точности измерений.

4. Усложните проект. Добавьте пьезозуммер, который пищит при температуре выше 30 градусов, или подключите SD-карту для записи показаний с метками времени.

Как Alashed помогает

Платформа Alashed Hardware содержит все необходимые компоненты для этого проекта в готовых наборах -- от датчиков DHT22 до LCD-дисплеев и макетных плат. А в Alashed CodeStudio ученики могут писать, компилировать и загружать Arduino-скетчи прямо в браузере, без установки Arduino IDE на школьные компьютеры. Учитель видит код каждого ученика в реальном времени и может помочь с отладкой дистанционно.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо