1. Необходимые компоненты
- Датчик DHT11 - цифровой датчик температуры и влажности
- Плата Arduino (Uno, Nano, Mega или другая совместимая)
- Соединительные провода (Jumper wires)
- LCD дисплей с I2C модулем (опционально, для отображения данных)
- Макетная плата (опционально, для удобства подключения)
- USB кабель для подключения Arduino к компьютеру
2. Характеристики датчика DHT11
- Диапазон измерения влажности: 20-90% RH, точность ±5% RH
- Диапазон измерения температуры: 0-50°C, точность ±2°C
- Напряжение питания: 3.3В - 5В постоянного тока
- Потребляемый ток: 0.3мА при измерении, 60мкА в режиме ожидания
- Частота опроса: не чаще чем 1 раз в секунду
3. Распиновка датчика DHT11
Датчик DHT11 обычно имеет 3 или 4 контакта. В модуле с 3 контактами:
flowchart TB
DHT["Датчик DHT11"] --- VCC["VCC или +
Питание"]
DHT --- DATA["S или DATA
Сигнальный выход"]
DHT --- GND["GND или -
Земля"]
Если ваш модуль имеет 4 контакта, то контакт, который не обозначен, обычно не используется (NC - Not Connected).
4. Схема подключения
flowchart LR
Arduino["Arduino
Плата"] --- 5V["5V"]
Arduino --- GND["GND"]
Arduino --- D2["Цифровой пин D2"]
DHT["Датчик DHT11"] --- VCC["VCC (+)"]
DHT --- DATA["DATA (S)"]
DHT --- GND_DHT["GND (-)"]
5V --- VCC
GND --- GND_DHT
D2 --- DATA
Дополнительное подключение LCD дисплея с I2C:
flowchart LR
Arduino --- 5V
Arduino --- GND
Arduino --- SDA["SDA (A4)"]
Arduino --- SCL["SCL (A5)"]
LCD["LCD дисплей
с I2C модулем"] --- VCC_LCD["VCC"]
LCD --- GND_LCD["GND"]
LCD --- SDA_LCD["SDA"]
LCD --- SCL_LCD["SCL"]
5V --- VCC_LCD
GND --- GND_LCD
SDA --- SDA_LCD
SCL --- SCL_LCD
5. Пошаговое подключение
Подключение датчика DHT11:
- Подключите контакт
VCC
(или +
) датчика к пину 5V
на плате Arduino
- Подключите контакт
GND
(или -
) датчика к пину GND
на плате Arduino
- Подключите контакт
DATA
(или S
) датчика к любому цифровому пину на плате Arduino (в примере используется пин D2
)
Хотя датчик DHT11 может работать на напряжении 3.3В, рекомендуется использовать 5В для большей стабильности сигнала, особенно при использовании длинных соединительных проводов.
Подключение LCD дисплея с I2C (опционально):
- Подключите контакт
VCC
дисплея к пину 5V
на плате Arduino
- Подключите контакт
GND
дисплея к пину GND
на плате Arduino
- Подключите контакт
SDA
дисплея к пину A4
(или SDA
) на плате Arduino
- Подключите контакт
SCL
дисплея к пину A5
(или SCL
) на плате Arduino
6. Программирование
Вариант 1: FLProg (Визуальное программирование)
- Запустите среду FLProg на вашем компьютере
- В библиотеке блоков найдите:
Датчики → Датчики влажности → Датчик температуры и влажности DHT11 (DHT21, DHT22)
- Перетащите этот блок на рабочую область
- Дважды щелкните на блоке для настройки:
- Цифровой pin: Выберите пин, к которому подключен датчик (например, D2)
- Тип: Выберите DHT11
- Выходы: Поставьте галочки напротив "Выход температуры" и "Выход влажности"
- Время опроса датчика: Выберите "Периодически" и установите "Опрашивать каждые 1 сек" или больше
- Нажмите "Готово"
- Для отображения данных на LCD дисплее добавьте блоки конвертации и отображения
- Скомпилируйте и загрузите программу на Arduino
Считывание данных с одного датчика DHT занимает около 0.8 секунды. Поэтому интервал опроса не должен быть меньше 1 секунды. При использовании нескольких датчиков DHT рассчитайте минимальный интервал по формуле: Интервал = Количество_датчиков × 0.8 секунды.
Вариант 2: Arduino IDE (Программный код)
- Откройте Arduino IDE
- Установите необходимые библиотеки:
- DHT sensor library by Adafruit
- Adafruit Unified Sensor Driver
- LiquidCrystal_I2C (если используете LCD дисплей)
- Скопируйте и вставьте следующий код:
#include
#include // Библиотека для LCD I2C
#include // Библиотека для датчика DHT
// --- Настройки ---
#define DHTPIN 2 // Пин, к которому подключен датчик (D2)
#define DHTTYPE DHT11 // Тип датчика (DHT11)
// Адрес I2C дисплея (обычно 0x27 или 0x3F)
#define LCD_ADDRESS 0x27
#define LCD_COLS 16 // Количество столбцов дисплея
#define LCD_ROWS 2 // Количество строк дисплея
// Интервал опроса датчика в миллисекундах (1000 мс = 1 сек)
const unsigned long POLLING_INTERVAL = 1000;
// --------------------
// Инициализация объектов
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
DHT dht(DHTPIN, DHTTYPE);
unsigned long previousMillis = 0; // Переменная для хранения времени последнего опроса
void setup() {
Serial.begin(9600); // Для отладки
// Инициализация LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
// Инициализация датчика DHT
dht.begin();
delay(1500); // Небольшая задержка для стабилизации
lcd.clear();
}
void loop() {
// Получаем текущее время
unsigned long currentMillis = millis();
// Проверяем, прошел ли интервал опроса
if (currentMillis - previousMillis >= POLLING_INTERVAL) {
// Сохраняем время последнего опроса
previousMillis = currentMillis;
// Считываем влажность
float h = dht.readHumidity();
// Считываем температуру в Цельсиях
float t = dht.readTemperature();
// Проверяем, прошло ли считывание успешно
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Read Error");
return; // Выходим из этой итерации, если ошибка
}
// Очищаем дисплей перед выводом новых данных
lcd.clear();
// Выводим температуру
lcd.setCursor(0, 0); // Первая строка
lcd.print("T->");
lcd.print(t, 1); // Выводим температуру с 1 знаком после запятой
// Выводим влажность
lcd.setCursor(0, 1); // Вторая строка
lcd.print("RH->");
lcd.print(h, 1); // Выводим влажность с 1 знаком после запятой
// Вывод в Serial монитор
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
}
7. Проверка работы
- Загрузите прошивку в Arduino
- Если используете LCD дисплей, на нем должны появиться показатели температуры (T) и относительной влажности (RH)
- Если не используете дисплей, откройте монитор последовательного порта в Arduino IDE (Tools → Serial Monitor) с настройкой 9600 бод для просмотра данных
- Данные должны обновляться с заданным интервалом (обычно 1 секунда)
При первом запуске показания датчика могут быть "NAN" (Not a Number), пока датчик не инициализируется. Подождите несколько секунд.
8. Практические применения
Домашняя метеостанция:
Используйте датчик DHT11 для создания простой метеостанции с отображением температуры и влажности на LCD дисплее. Добавьте функцию записи данных на SD-карту для отслеживания изменений параметров в течение дня.
Система контроля микроклимата:
Подключите к Arduino реле для управления вентилятором или обогревателем в зависимости от показаний температуры и влажности. Например, включать вентилятор, когда температура превышает 25°C, или обогреватель, когда опускается ниже 18°C.
9. Советы по эксплуатации
- Калибровка: Датчик DHT11 имеет относительно невысокую точность (±5% RH, ±2°C). Для более точных измерений можно откалибровать его, сравнивая показания с эталонным термометром.
- Расположение: Не размещайте датчик поблизости от источников тепла или под прямыми солнечными лучами, это исказит показания.
- Защита от влаги: Хотя датчик измеряет влажность, он не является водонепроницаемым. Избегайте прямого контакта с водой или конденсатом.
- Энергопотребление: DHT11 потребляет мало энергии (60мкА в режиме ожидания), что делает его подходящим для проектов с батарейным питанием.
- Интервал опроса: Не опрашивайте датчик чаще чем раз в секунду, это может привести к ошибкам в считывании данных.
При использовании нескольких датчиков DHT на одной плате Arduino увеличьте интервал опроса для каждого из них. Для 10 датчиков интервал должен быть не менее 8 секунд (10 × 0.8 секунды).
Важное замечание: Мы приложили усилия, чтобы эта инструкция была точной и полезной. Однако эта инструкция предоставляется как справочный материал. Электронные компоненты могут иметь вариации, а схемы подключения зависят от конкретных условий и вашего оборудования. Эта информация предоставляется "как есть", без гарантий полноты или безошибочности. Настоятельно рекомендуем проверять спецификации вашего модуля (datasheet), сверяться с другими источниками и, при малейших сомнениях, обращаться к квалифицированным специалистам, особенно при работе с напряжением 220В.