Датчики DHT11/DHT22 (рис. S1.1) предназначены для измерения температуры и влажности воздуха.
Внешний вид, назначение контактов
Рис. S1.1. Датчик DHT11
Основные характеристики
Наименование | Значение | |
DHT11 | DHT22 | |
Диапазон измерения температуры/точность измерения | 0 ÷ 50°С /±2°C | –40 ÷ 125°С /±0,5°C |
Диапазон измерения относительной влажности | 20 ÷ 80% /±5°C | 0 ÷ 100% /±2 ÷ 5°C |
Частота опроса датчиков, Гц | 1 (один раз в секунду) | 0,5 (1 раз в две секунды) |
Размеры, мм | 15,5×12,0×5,5 | 15,1×25,0×7,7 |
Напряжение питания, В | 3 ÷ 5 | 3 ÷ 5 |
Максимальный ток, мА | 2,5 | 2,5 |
Схема подключения
Рис. S1.2. Подключение датчика DHT11
Внимание!
Если расстояние от датчика до Arduino небольшое, рекомендуемый номинал резистора R1 10 кОм (рис. S1.2), а для расстояния больше 20 метров, рекомендуется резистор номиналом 5,1 кОм. Если же датчик имеет только три контакта (5V, OUT и GND), то резистор R1 вообще не нужен.
Программный код
- Загрузите библиотеку DHT-sensor-library для работы Arduino с датчиками DHT11 и DHT22. Для этого откройте Менеджер библиотек, выполнив команду Инструменты | Управлять библиотеками. Справа вверху в строке поиска введите DHT. В открывшемся списке выберите DHT sensor library by Adafruit версии 1.2.3 (в версиях 1.3.0 и новее возможна ошибка при компиляции). Нажмите кнопку Установка.
- Загрузите скетч из листинга S1.1.
Электронный архив скетчей и библиотек
Электронный архив скетчей и библиотек расположен по адресу https://books.bhv.ru/product/umnyj-dom-na-baze-arduino-bolshoj-nabor/. Скетчи в этом архиве вы найдете в папке Скетчи, а библиотеки — в папке Библиотеки.
Листинг S1.1. Измерение температуры и влажности с помощью датчика DHT11
#include "DHT.h"
#define DHTPIN 7 //пин для получения сигнала от датчика DHT11
// Раскомментируйте тип датчика, который вы используете
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
// Задержка перед измерениями
delay(2000);
float h = dht.readHumidity();
//чтение температуры в градусах Цельсия °С (по умолчанию)
float t = dht.readTemperature();
//чтение температуры в градусах Фаренгейта °F (isFahrenheit = true)
float f = dht.readTemperature(true);
// Проверка чтения данных
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Вычисление теплового индекса в °F (по умолчанию)
float hif = dht.computeHeatIndex(f, h);
// Вычисление теплового индекса в °С (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
Результат
Рис. S1.3. Результаты измерений датчика DHT11