Датчики DHT11 и DHT22 – очень популярны в среде Ардуино и часто используются в проектах метеостанций и умного дома. В этой статье мы с вами узнаем, как можно использовать эти сенсоры, как правильно подключать к платам Arduino Uno, Mega или Nano, какие библиотеки использовать для написания скетча. Данные датчики не выделяются особенным быстродействием и точностью, но они просты в использовании, их можно смело использовать в своих первых проектах в ввиду доступности и невысокой цены.
Характеристики и подключение датчиков DHT11 и DHT22
Датчик состоит из двух частей – емкостного датчика температуры и гигрометра. Первый используется для измерения температуры, второй – для влажности воздуха. Находящийся внутри чип может выполнять аналого-цифровые преобразования и выдавать цифровой сигнал, который считывается посредством микроконтроллера.
В большинстве случаев DHT11 или DHT22 доступен в двух вариантах: как отдельный датчик в виде пластикового корпуса с металлическими контактами или как готовый модуль с датчиком и припаянными элементами обвязки. Второй вариант гораздо проще использовать в реальных проектах и крайне рекомендуется для начинающих.
Датчик DHT11
- Потребляемый ток – 2,5 мА (максимальное значение при преобразовании данных);
- Измеряет влажность в диапазоне от 20% до 80%. Погрешность может составлять до 5%;
- Применяется при измерении температуры в интервале от 0 до 50 градусов (точность – 2%)
- Габаритные размеры: 15,5 мм длина; 12 мм широта; 5,5 мм высота;
- Питание – от 3 до 5 Вольт;
- Одно измерение в единицу времени (секунду). То есть, частота составляет 1 Гц;
- 4 коннектора. Между соседними расстояние в 0,1 ”.
Датчик DHT22
- Питание – от 3 до 5 Вольт;
- Максимальный ток при преобразовании – 2,5 мА;
- Способен измерять влажность в интервале от 0% до 100%. Точность измерений колеблется от 2% до 5%;
- Минимальная измеряемая температура – минус 40, максимальная – 125 градусов по Цельсию (точность измерений – 0,5);
- Устройство способно совершать одно измерение за 2 секунд. Частота – до 0,5 ГЦ;
- Габаритные размеры: 15,1 мм длина; 25 мм широта; 5,5 мм высота;
- Присутствует 4 коннектора. Расстояние между соседними – 0,1 ‘;
Очевидно, что при использовании в ардуино датчика температуры и влажности DHT11 устройство выдаст менее точные значения, чем DHT22. У аналога больший диапазон измеряемых значений, но и цена соответствующая. Датчик температуры и влажности DHT22, как и его аналог, имеет один цифровой выход, соответственно снимать показания можно не чаще, чем один раз в 1-2 секунды.
Где купить датчики по низким ценам
Традиционно самые низкие цены предлагают продавцы Aliexpress. Вот наиболее интересные варианты:
Цифровые датчики температуры и влажности DHT11 DHT22 | DHT22 в виде модуля, совместимого с Arduino Uno R3 | Беспроводной DHT22 для метеостанций на основеWeMos – собирается как бутерброд |
Модуль беспроводного датчика DHT22 (с ESP8266) | Недорогой вариант датчика температуры и влажности DHT11 дешевле 70 рублей! | Качественно исполненный датчик DHT11 от RobotDyn |
Подключение DHT11 к Arduino Uno
Если у вас на руках только сам датчик (синяя “решетчатая” пластиковая коробочка с 4-я металлическими контактами), то для подключения DHT11 вам понадобятся следующие детали:
-
- Плата Arduino (или другой микроконтроллер, поддерживающий тайминг в микросекундах);
- Монтажная (макетная плата);
- Подтягивающий резистор номиналом в 10 кОм;
- Светодиоды.
Описание контактов DHT11:
- Питание;
- Вывод данных;
- Не используется;
- Земля (GND).
Контакты нумеруются слева на право, если корпус датчика находится перед вами со стороны решетки, и «ноги» расположены внизу. Для правильной работы датчика нужно впаять резистор на 10 кОм между выходами сигнала и питанием.
Если у вас в руках готовый модуль датчика, то подключение его к Arduino предельно упрощается: подключаете VCC к +5В, GND – к земле, третий контакт – к любому свободному пину на плате Arduino. Номер пина нужно будет затем указать скетче. Таким образом можно подключить датчика к разным платам Arduino: Uno, Arduino Mega, Arduino Nano, Pro Mini и другим. Подключение модуля датчика производится по следующей схеме:
Датчик DHT22/DHT11 Arduino + +5V out например, 2 – GND Внимание! Обязательно соблюдайте полярность подключения. В случае неправильного подключения датчик почти неминуемо выйдет из строя. Кроме того, при неправильном подключении пластиковый корпус датчик очень сильно нагреется и может обжечь вам руки. Будьте внимательны, не торопитесь! Для соответствия схемы примеру скетча, приведенному ниже, рекомендуется подключить сигнал с датчика влажности DHT11/DHT22 ко второму пину. Если у вас иной скетч, можно внести соответствующие правки в коде и изменить пин (пример ниже). Также подключаются дополнительные резисторы (этот шаг можно опустить, так как в плате уже установлен резистор).
Скетч для работы с датчиками DHT11 и DHT22 в Arduino
Перед написанием скетча давайте убедимся, что у нас установлена библиотека для работы с датчиками влажности и температуры. Скачать ее можно по ссылке https://github.com/adafruit/DHT-sensor-library. Загрузится папка под названием «DHT-sensor-library-master». Ее необходимо переименовать в DHT и переместить в папку libraries, что находится в корневой папке Arduino IDE. Далее необходимо загрузить готовый скетч или написать его самостоятельно, используя примеры. Типичный arduino скетч для работы с DHT11 и DHT22 выглядит следующим образом:
#include "DHT.h" #define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше // Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino DHT dht(DHTPIN, DHT22); //Инициация датчика //DHT dht(DHTPIN, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); // 2 секунды задержки float h = dht.readHumidity(); //Измеряем влажность float t = dht.readTemperature(); //Измеряем температуру if (isnan(h) || isnan(t)) { // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу Serial.println("Ошибка считывания"); return; } Serial.print("Влажность: "); Serial.print(h); Serial.print(" %t"); Serial.print("Температура: "); Serial.print(t); Serial.println(" *C "); //Вывод показателей на экран }
После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов. Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.
На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.
Резюме
Давайте подведем итог. В статье рассмотрены вопросы подключения ардуино датчиков температуры и влажности DHT11 и DHT22 к плате Arduino Uno. Датчики лучше приобретать в виде готовых модулей. Для работы с датчиками можно использовать библиотеку DHT для Arduino, которую легко скачать по указанной в статье ссылке. В скетче мы просто инициализируем объект для работы с датчиком и пользуемся его методами для получения температуры и влажности. Все полученные результаты мы можем посмотреть в окне монитора порта, сохранить и вывести на ЖК-экран, послать через bluetooth или интернет.
Используя DHT11 или DHT22 в проектах ардуино, можно строить элементы систем умного дома и умные теплицы. С помощью этих датчиков можно создавать исследовательские комплексы для климатических измерений и мониторинга окружающей среды. Варианты сфер применения датчиков практически неисчерпаемы, можно найти множество примеров на просторах интернета, в том числе на этом сайте. Надеюсь, с помощью нашей статьи проблем с подключением DHT11 и DHT22 к Arduino у вас не останется.
</pre>
DHT11 – датчик влажности и температуры, который генерирует откалиброванный цифровой выход и может быть интерфейсом для любого микроконтроллера, такого как Arduino и Raspberry Pi, и получать мгновенные результаты. DHT11 – это недорогой прибор, который обеспечивает высокую надежность и долговременную стабильность.
В этом проекте построена небольшая схема для интерфейса с датчиком температуры на Arduino. Одним из основных применений подключения данного сенсора к Arduino является мониторинг погоды.
Виды датчиков
Сегодня производитель Arduino проявил большую силу в сообществе разработчиков электронных приложений и распространил различные модули, которые позволяют проектам Arduino датчиков быть более гибкими.
Рассмотрим основные виды приборов, построенных на рассматриваемой платформе:
- Вращательный: в основном, резистор, подключенный к потенциометру и трехконтактному разъему, который позволяет подключать аналоговый выход и подавать его VCC и GND. Часто используется для определения положения двигателя, как сервомотора, так и шагового, постоянного тока и других. По-другому можно назвать – Ардуино датчик тока или Аrduino датчик движения.
- Звуковой: оснащен микрофоном, операционным усилителем LM386 и потенциометром, позволяющим захватывать любой звук вокруг него и превращать его в аналоговый сигнал с 0V до VCC, который может быть преобразован в сигнал Аrduino от 0 до 1024 в резолюции ADC. Существуют различные приложения для такого типа, которые относятся к аудиозахвату. Также существует ультразвуковой датчик Ардуино.
- Обнаружитель дыма: используется в системах обнаружения пожара, является прибором, который выявляет дым и газ, может быть откалиброван с помощью потенциометра, а выходной сигнал подключается к аналоговому входному модулю. Эти Ардуино-датчики имеют, помимо прочего, варианты MQ-2, MQ-3, MQ4 и дифференцируются по типу обнаруженного вещества, метана, спирта, пропана и другие.
- Детонация: предназначен для обнаружения сбоев или известен, как перкуссионный. Передает цифровой сигнал, когда обнаруживает изменение. Может быть подключен к цифровому входу на плате разработки Arduino и обнаруживать сигнал, который генерируется при наличии какого-либо удара.
- Ардуино-датчик температуры: предназначается для измерения состояния окружающей среды. К таким можно отнести Аrduino dsl8b20.
Распиновка и принципиальная схема подключения
Распиновка у датчиков данного типа довольно простая. Независимо от того сколько выводов у вашего сенсора — рабочих выводов всего 3:
Принципиальная схема при подключении к микроконтроллеру может выглядеть таким образом:
Устройство датчиков и схема подключения к Ардуино
DHT11 входит в состав приборов отслеживания влажности DHTXX. Другим датчиком в этой серии является DHT22. В результате они будут измерять как влажность, так и температуру. Хотя DHT11 дешевы и медленны, они очень популярны среди любителей и начинающих.
DHT11 состоит из 3 основных компонентов. Датчик влажности резистивного типа, термистор NTC и 8-разрядный микроконтроллер, который преобразует аналоговые сигналы и отправляет одиночный цифровой сигнал.
Этот цифровой сигнал может быть прочитан любым микроконтроллером или микропроцессором для дальнейшего анализа.
DHT11 состоит из 4 контактов: VCC, Data Out, Not Connected (NC) и GND. Диапазон напряжения для вывода VCC составляет от 3,5 до 5,5 В. Питание 5 В будет достаточно. Данные на выводе Data Out являются последовательными цифровыми данными.
Все DHT11 точно калибруются в лаборатории, а результаты хранятся в памяти. Между любыми микроконтроллерами, такими как Arduino и DHT11 Sensor, может быть установлена однопроводная связь.
Кроме того, длина кабеля может достигать 20 метров. Данные состоят из целочисленных и десятичных частей, как для относительной влажности (RH), так и для температуры.
Данные от DHT11 и Ардуино датчиков движения состоят из 40 бит, и формат выглядит следующим образом:
8 бит данных для интегрального значения RH, 8 бит данных для десятичного значения RH, 8 бит данных для интегральных значений, 8 бит данных для интегрального значения температуры и 8 бит данных для контрольной суммы.
Скетч для работы с датчиком
Давайте посмотрим теперь на код благодаря которому сенсор будет взаимодействовать с нашей платой (схема подключения выше):
#include "DHT.h" #define dht_apin A0 // Аналоговый контакт к которому подключен датчик dht DHT; void setup(){ Serial.begin(9600); delay(500);//Задержка для загрузки системы Serial.println("DHT11 сенсор влажности и температурыnn"); delay(1000);//Подождите, прежде чем обращаться к датчику }//end "setup()" void loop(){ //Начало программы DHT.read11(dht_apin); Serial.print("Текущая влажность = "); Serial.print(DHT.humidity); Serial.print("% "); Serial.print("температура = "); Serial.print(DHT.temperature); Serial.println("C "); delay(5000);//Подождите 5 секунд, прежде чем снова обратиться к датчику //Самый быстрый должен быть раз в две секунды }// окончание цикла loop()
Код получился таким небольшим, т.к. мы в самом начале задействовали библиотеку для сенсора. Скачать библиотеку можно по ссылке или на этой странице в разделе «Библиотеки».
Arduino DHT11 – относительно дешевый прибор для измерения температуры и влажности. DHT22 похож на DHT11 и имеет большую точность. Однако эта библиотека не подходит для DHT21 или DHT22, поскольку они имеют другой формат данных.
Проверьте DHTlib на поддержку этих датчиков. Эта библиотека протестирована на MEGA2560 и подтверждена работой на Arduino 2009. Niesteszeck создал библиотеку DHT11, управляемую прерываниями. Энди Дальтон сделал модифицированную версию. Разница в том, что DATAPIN определен в конструкторе, в результате чего полагается один выделенный объект на приспособление.
С помощью одножильного приспособления DS18B20 мы можем измерять температуру от -55 ℃ до 125 ℃ с точностью ± 5.
В итоге мы должны на выходе увидеть вот такие данные:
Получение данных
Рассмотрим данные, полученные от DHT11.
00100101 00000000 00011001 00000000 00111110.
Эти данные можно разделить на основе указанной выше структуры следующим образом:
Чтобы проверить правильность полученных данных, нам нужно выполнить небольшой расчет. Добавьте все значения интегральных и десятичных значений RH и температуры и проверьте, равна ли сумма величине контрольной суммы, т. е. последним 8-битным данным:
00100101 + 00000000 + 00011001 + 00000000 = 00111110
Это значение совпадает с контрольной суммой и, следовательно, полученные данные действительны. Теперь, чтобы получить значения RH и температуры, просто преобразуйте двоичные данные в десятичные данные:
RH = Десятичное значение 00100101 = 37%
Датчик влажности и температуры DHT11 позволяет легко добавлять данные в ваши проекты электроники DIY. Он идеально подходит для удаленных метеорологических станций, домашних систем управления окружающей средой и систем мониторинга фермы или сада.
Дополнительные сенсоры
Кроме сенсоров, которые мы рассмотрели выше можно присмотреться и к другим датчикам для Ардуино:
- Датчик температуры + влажности. Вы можете использовать этот совместимый с Arduino гаджет для контроля температуры окружающей среды или влажности. В качестве основного проекта вы можете подключить ЖК-дисплей к Arduino и отображать температуру в помещении/влажность.
- Датчик инфракрасного излучения, также называемый «инфракрасным излучающим диодом». Он работает с 38KHz модулирующим сигналом. Можно использовать для отправки кода в другой Arduino или для управления телевизором.
- Фоторезистор. Сопротивление компонента будет варьироваться в зависимости от интенсивности света, которому он подвергается. Является резистором, сопротивление которого падает, когда свет попадает на него.
- Ультразвуковой прибор расстояния автоматически отправляет аудиосигнал 40 кГц и определяет, есть ли импульсный сигнал назад. Он посылает сигнал, и если он получает обратно, то вычисляет пройденное расстояние, таким образом, расстояние от приспособления до объекта перед ним. Он может ощущать объект в диапазоне: 2 см ~ 500 см.
- Датчик детонации. Проще говоря, это переключатель, который включается, когда он обнаруживает стук. Существует светодиод, который также дает визуальный сигнал состояния, высокий или низкий.
- Звуковой будет обнаруживать окружающий звук. Это лучше всего использовать для таких проектов, как голосовые чейнджеры.
- Обнаружение напряжения (выше/ниже). Определяет уровень напряжения любого поставщика постоянного тока, до 25 вольт. Критические точки перенапряжения/пониженного напряжения могут быть отрегулированы.
- Определитель влажности и температуры. Arduino датчик влажности почвы помогает определить условия для комфортного существования комнатных и тепличных растений.
В целом, для каждого радиолюбителя есть огромный выбор для создания устройств разного назначения. О многих мы писали ранее, но о многих нам еще предстоит поговорить.
Я продолжаю свое увлечение электроникой. Буквально вчера пришла посылка с моим набором для изучения Arduino UNO — конечно же сразу захотелось что-нибудь собрать.
Немного поигравшись с мигающими светодиодами, я решил протестировать остальное содержимое набора. Выбор пал на ЖК-дисплей и датчик температуры и влажности DHT11.
Очень хотелось вывести показания датчика не только на экран монитора, но и на дисплей. Убив несколько часов на поиск и изучение статей по данной теме, я так и не смог заставить все работать нужным образом. Все готовые решения содержали ошибки или недомолвки, либо применялись другие компоненты — дисплей показывал что угодно, но только не температуру и влажность. Поскольку метод «с наскока» не удался, пришлось не просто копировать готовый код, а разбираться в том, как он работает. Но в итоге я все же смог получить нужную программу (ссылка на скачивание в конце статьи) и загрузить ее в микроконтроллер, ура:
Хочу отметить, что я не писал весь код с нуля — часть взята из тестовых файлов входящих в состав библиотек, часть — из найденных статей, что-то переделал я сам. В общем, это некая компиляция, приведенная к работающему состоянию.
Датчик DHT11 очень неточный, поэтому использовать его в качестве источника информации для каких-то серьезных систем я бы не советовал, но для учебных целей он очень даже подходит.
Ниже я подробно расскажу как повторить данную конструкцию (если кому-то захочется) и приведу текст скетча для Arduino IDE.
Начнем с дисплея:
На картинке приведен вид спереди и сзади. Как можно увидеть, мой экземпляр снабжен интерфейсом I2C (маленькая платка на задней стороне). Данный интерфейс очень упрощает подключение дисплея к Arduino — нужно использовать всего 4 контакта:
GRD — минус питания («земля»)VCC — питание +5VSDA — линия данныхSLC — линия синхронизации
Без I2C подключение LCD дисплея осуществляется несколько сложнее.
Датчик DH11 так же имеет 4 контакта, при этом один из них вообще не используется. Мой дачик уже расположен на платке, на которой сразу установлен дополнительный резистор (который требуется для нормальной работы датчика) и выведено 3 ножки:
Левая подписана как S — с нее поступает сигнал, правая — «-», ну а средняя получается «+» на нее подается питание.
Итак, собираем схему:
NB! Перед монтажом схемы и внесением в нее каких-либо изменений обязательно отключайте питание всех элементов, иначе можно их банально сжечь — потом будет жалко.
1) Подключаем датчик:
- S на A0
- + на +5V
- — на GND
2) Подключаем LCD дисплей:
- SDA на A4
- SLC на A5
- VCC на +5V (на Arduino UNO такой pin всего один и там уже обосновался провод питания идущий от датчика, поэтому лучше соединить VCC дисплея с «+» датчика (например джампером) или использовать для одного из устройств внешнее питание)
- GND на GND Arduino («земли» на UNO как раз две, так что тут никаких проблем)
Сборка на этом закончена, осталось прошить микроконтроллер.Вот код скетча:
#include // Добавляем необходимые библиотеки #include <liquiude dhtpin="" a0="" dhttype="" dht11="" dht="" dht22="" dht21="" byte="" degree="" b00111="" b00101="" b00000="" liquidcrystal_i2c="" lcd="" void="" setup="" lcd.init="" lcd.backlight="" lcd.createchar="" serial.begin="" dht.begin="" loop="" delay="" reading="" temperature="" or="" humidity="" takes="" about="" milliseconds="" sensor="" readings="" may="" also="" be="" up="" to="" seconds="" a="" very="" slow="" float="" h="dht.readHumidity();" read="" as="" celsius="" t="dht.readTemperature();" fahrenheit="" f="dht.readTemperature(true);" lcd.setcursor="" lcd.print="">
В данном коде используются библиотеки DHT и LiquidCrystal_I2C, которые не входят в стандартный пакет Arduino IDE. В сети множество разных библиотек с такими же названиями. И несмотря на их схожесть, не со всеми версиями данный код работает. Чтобы вам не тратить свое время и нервы на поиск рабочего варианта, я прикладываю к данной статье архив, в котором содержатся данные библиотеки и сам скетч для Arduino IDE. Библиотеки надо разархивировать и поместить в папку C:Program Files (x86)Arduinolibraries после чего перезапустить программу Arduino IDE.
Я думаю, что опытные разработчики найдут к чему придраться в данном коде (например, здесь нет обработчика ошибок), но на данном этапе, для меня главное, что он работает. Если вы будете применять детали схожие с моими, должно заработать и у вас. Конечно, рекомендую не просто скопировать, но и попытаться понять за что отвечает каждая строчка кода (комментарии в коде сильно в этом помогут).
Быстрые результаты в любом деле это не цель, а всего лишь мотивация, которая должна подталкивать вас копать глубже. Помните об этом! =)
P.S. Статья нашла своих читателей, что меня, как автора, очень радует. Если у Вас что-то не получается, обратите внимание на комментарии, там много полезной информации. Огромное спасибо всем читателям, поделившимся своим опытом!
</liquiude></pre>Используемые источники:
- https://arduinomaster.ru/datchiki-arduino/datchiki-temperatury-i-vlazhnosti-dht11-dht22/
- https://arduinoplus.ru/arduino-datchik-vlazhnosti-temperaturi/
- https://tsarevstudio.ru/blog/hobby/humidity_and_temp_with_dht11_and_arduinouno.html