Урок 16. Подключение датчика DHT11 к Arduino UNO. Выводим температуру и влажность на LCD 1602 I2C дисплей
В этом уроке мы рассмотрим самый популярный датчик температуры DHT11. Научимся считывать показания датчика и выводить на LCD 1602 I2C дисплей.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
Схема подключения:
Этом уроке к arduino uno будет подключено два модуля, датчик температуры и влажности DHT11 и символьный дисплей LCD1602 IIC/I2.
1) Датчик DHT11 с помощью которого будем получать данные о температуре и влажности окружающей среды, подключается следующим образом.
Описание подключения DHT11 к Arduino:
DHT11 | Arduino |
---|---|
1 контакт | 5V |
2 контакт | Pin 2 |
3 контакт | Через резистор 10 kOm к 5V |
4 контакт | GND |
2) Теперь подключаем символьный дисплей LCD1602 IIC/I2C к Arduino uno, на который будет выводиться информация о температуре и влажности.
Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino
Датчики температуры и влажности DHT11 и DHT22/AM2302 от AOSONG довольно просты в использовании, недорогие и отлично подходят для любителей! Эти датчики предварительно откалиброваны и не требуют дополнительных компонентов, поэтому вы можете сразу начать измерение температуры и относительной влажности.
Рисунок 1 – Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino
Одна из важнейших функций, которую они предоставляют, заключается в том, что температура и влажность измеряются с точностью до десятых долей; то есть до одного десятичного знака. Единственным недостатком этого датчика является то, что вы можете получать с него новые данные с периодичностью только раз в одну или две секунды. Но, учитывая его производительность и цену, вы не можете жаловаться.
DHT11 против DHT22/AM2302
У нас есть две версии серии датчиков DHTxx. Они выглядят немного похоже и имеют одинаковую распиновку, но имеют разные характеристики. Вот подробности.
DHT22 является более дорогой версией, которая, очевидно, имеет лучшие характеристики. Диапазон измерения температуры составляет от -40°C до +80°C с точностью ±0,5 градуса, а диапазон температур DHT11 составляет от 0°C до 50°C с точностью ±2 градуса. Также датчик DHT22 имеет более широкий диапазон измерения влажности, от 0 до 100% с точностью 2-5%, в то время как диапазон измерения влажности DHT11 составляет от 20 до 80% с точностью 5%.
![]() |
![]() |
|
DHT11 | DHT22 | |
---|---|---|
Рабочее напряжение | от 3 до 5 В | от 3 до 5 В |
Максимальный рабочий ток | 2,5 мА макс | 2,5 мА макс |
Диапазон измерения влажности | 20-80% / 5% | 0-100% / 2-5% |
Диапазон измерения температуры | 0-50°C / ± 2°C | от -40 до 80°C / ± 0,5°C |
Частота выборки | 1 Гц (чтение каждую секунду) | 0,5 Гц (чтение каждые 2 секунды) |
Размер корпуса | 15,5 мм х 12 мм х 5,5 мм | 15,1 мм х 25 мм х 7,7 мм |
Преимущество | Ультра низкая стоимость | Более точный |
Хотя DHT22/AM2302 более точен и работает в большем диапазоне температур и влажности; есть три вещи, в которых DHT11 сильно превосходит DHT22. Он более дешевый, меньше по размеру и имеет более высокую частоту выборки. Частота выборки DHT11 составляет 1 Гц, то есть одно чтение каждую секунду, в то время как частота выборки DHT22 составляет 0,5 Гц, то есть одно чтение каждые две секунды.
Рабочее напряжение обоих датчиков составляет от 3 до 5 вольт, в то время как максимальный ток, используемый во время преобразования (при запросе данных), составляет 2,5 мА. И самое приятное, что датчики DHT11 и DHT22/AM2302 являются «взаимозаменяемыми», то есть, если вы создаете свой проект с одним датчиком, вы можете просто отключить его и использовать другой датчик. Ваш код, возможно, придется немного изменить, но, по крайней мере, схема не изменится!
Для получения более подробной информации обратитесь к техническим описаниям датчиков DHT11 и DHT22/AM2302.
Обзор аппаратного обеспечения
Теперь давайте перейдем к более интересным вещам. Давайте разберем оба датчика DHT11 и DHT22/AM2302 и посмотрим, что внутри.
Корпус состоит из двух частей, поэтому для его вскрытия достаточно просто достать острый нож и разделить корпус на части. Внутри корпуса на стороне датчиков находятся датчик влажности и датчик температуры NTC (термистор).
Рисунок 2 – Внутренности датчиков температуры и влажности DHT11 DHT22/AM2302
Чувствительный к влажности компонент, который используется, разумеется, для измерения влажности, имеет два электрода с влагоудерживающей подложкой (обычно соль или проводящий пластиковый полимер), зажатой между ними. По мере поглощения водяного пара подложка высвобождает ионы, что, в свою очередь, увеличивает проводимость между электродами. Изменение сопротивления между двумя электродами пропорционально относительной влажности. Более высокая относительная влажность уменьшает сопротивление между электродами, в то время как более низкая относительная влажность увеличивает это сопротивление.
Рисунок 3 – Внутренняя структура датчика влажности в DHT11 и DHT22
Кроме того, в этих датчиках для измерения температуры имеется датчик температуры NTC (термистор). Термистор – это терморезистор – резистор, который меняет свое сопротивление в зависимости от температуры. Технически все резисторы являются термисторами – их сопротивление слегка изменяется в зависимости от температуры, но обычно это изменение очень мало и его трудно измерить.
Термисторы сделаны так, чтобы их сопротивление резко изменялось при изменении температуры, и изменение на один градус может составлять 100 Ом или более! Термин «NTC» означает «Negative Temperature Coefficient» (отрицательный температурный коэффициент), что означает, что с ростом температуры сопротивление уменьшается.
Рисунок 4 – График зависимости сопротивления NTC термистора от температуры
С другой стороны имеется небольшая печатная плата с 8-разрядной микросхемой в корпусе SOIC-14. Эта микросхема измеряет и обрабатывает аналоговый сигнал с сохраненными калибровочными коэффициентами, выполняет аналого-цифровое преобразование и выдает цифровой сигнал с данными о температуре и влажности.
Распиновка DHT11 и DHT22/AM2302
Датчики DHT11 и DHT22/AM2302 довольно легко подключаются. У них есть четыре вывода:
- Вывод VCC обеспечивает питание датчика. Хотя допускается напряжение питания в диапазоне от 3,3 до 5,5 В, рекомендуется питание 5 В. В случае источника питания 5 В, вы можете держать датчик на расстоянии до 20 метров от источника питания. Однако при напряжении питания 3,3 В длина кабеля не должна превышать 1 метра. В противном случае падение напряжения в линии приведет к ошибкам измерения.
- Вывод Data используется для связи между датчиком и микроконтроллером.
- NC не подключен
- GND должен быть подключен к земле Arduino.
Подключение DHT11 и DHT22/AM2302 к Arduino UNO
Теперь, когда у нас есть полное понимание того, как работает датчик DHT, мы можем начать подключать его к нашей плате Arduino!
К счастью, подключение датчиков DHT11, DHT22/AM2302 к Arduino довольно тривиально. У них довольно длинные выводы с шагом 0,1 дюйма (2,54 м), поэтому вы можете легко вставить их в любую макетную плату. Подайте на датчик питание 5 В и подключите землю. Наконец, подключите вывод данных к цифровому выводу 2 на Arduino.
Помните, как обсуждалось ранее, между VCC и линией данных нам нужно установить подтягивающий резистор 10 кОм, чтобы поддерживать высокий логический уровень на линии данных для правильной связи между датчиком и микроконтроллером. Если у вас есть готовый модуль датчика, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. Модуль поставляется со встроенным подтягивающим резистором.
Рисунок 6 – Подключение DHT11 к Arduino UNO
Рисунок 7 – Подключение DHT22/AM2302 к Arduino UNO
Теперь вы готовы загрузить в Arduino код и заставить ее работать.
Код Arduino. Вывод значений на монитор последовательного порта
Как обсуждалось ранее, датчики DHT11 и DHT22/AM2302 имеют собственный однопроводный протокол, используемый для передачи данных. Этот протокол требует точной синхронизации. К счастью, нам не нужно беспокоиться об этом, потому что мы собираемся использовать библиотеку DHT, которая позаботится почти обо всем.
Сначала скачайте библиотеку, посетив репозиторий на GitHub, или просто нажмите эту кнопку, чтобы скачать архив:
Чтобы установить библиотеку, откройте Arduino IDE, перейдите в «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку» и выберите только что загруженный zip-архив DHTlib.
После установки библиотеки вы можете скопировать следующий скетч в IDE Arduino. Данный скетч выводит значения температуры и относительной влажности в монитор последовательного порта. Попробуйте скетч в работе; а затем мы рассмотрим его подробнее.
Скетч начинается с включения библиотеки DHT. Затем нам нужно определить номер вывода Arduino, к которому подключен вывод данных нашего датчика, и создать объект DHT . Так мы сможем получить доступ к специальным функциям, связанным с библиотекой.
В функции setup() нам нужно инициировать интерфейс последовательной связи, так как для вывода результатов мы будем использовать монитор последовательного порта.
В функции loop() мы будем использовать функцию read22() , которая считывает данные с DHT22/AM2302. В качестве параметра она принимает номер вывода данных датчика. Если вы работаете с DHT11, вам нужно использовать функцию read11() . Вы можете сделать это, раскомментировав вторую строку.
После расчета значений влажности и температуры мы можем получить к ним доступ:
Объект DHT возвращает значение температуры в градусах Цельсия (°C). Его можно преобразовать в градусы Фаренгейта (°F) по простой формуле:
В конце мы выводим значения температуры и влажности в монитор последовательного порта.
Рисунок 8 – Вывод в мониторе последовательного порта показаний датчика DHT11 или DHT22/AM2302
Код Arduino. Использование DHT11 и DHT22/AM2302 с LCD дисплеем
Иногда может возникнуть идея, контролировать температуру и влажность в инкубаторе. Тогда для отображения условий в инкубаторе вам, вероятно, понадобится символьный LCD дисплей 16×2 вместо монитора последовательного порта. Итак, в этом примере вместе с датчиком DHT11 или DHT22/AM2302 мы подключим к Arduino LCD дисплей.
Если вы не знакомы с LCD дисплеями на 16×2 символов, взгляните на статью «Взаимодействие Arduino с символьным LCD дисплеем».
Далее нам нужно подключиться к LCD дисплею, как показано ниже.
Рисунок 9 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT11
Рисунок 10 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT22
Следующий скетч будет выводить значения температуры и относительной влажности на символьном LCD дисплее 16×2. Он использует тот же код, за исключением того, что мы печатаем значения на LCD дисплее.
Рисунок 11 – Показания температуры и влажности на LCD дисплее
Как подключить датчик температуры и влажности DHT11 к Arduino
Датчик температуры и влажности DHT11 – популярный и дешёвый датчик, который можно использовать в довольно широком диапазоне температур и относительной влажности. Давайте посмотрим, как подключить его к Arduino и как считывать с него данные.
-
или иная совместимая плата; ;
- соединительные провода (вот, например, хороший набор); ; (не обязательно);
- персональный компьютер со средой разработки Arduino IDE.
1 Технические характеристики датчика температуры и влажности DHT11
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности – 20..90% с погрешностью до 5%,
- диапазон измеряемых температур – 0..50°C с погрешностью до 2°C;
- время реакции на изменения влажности – до 15 секунд, температуры – до 30 секунд;
- минимальный период опроса – 1 секунда.
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
2 Схема подключения датчика температуры и влажности DHT11
Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino.
Схема подключения датчика температуры и влажности DHT11
Давайте посмотрим, что показано на рисунке.
5,5 вольт постоянного тока; если используется питание
Соберём рассмотренную схему. Я также по традиции включу в цепь логический анализатор, чтобы можно было изучить временную диаграмму информационного обмена с датчиком.
Сенсор температуры и влажности DHT11 подключён к Arduino UNO
Сенсор DHT11 часто продаётся в виде готовой сборки с необходимой обвязкой – подтягивающими резистором и фильтрующим конденсатором (как на предыдущей фотографии). Для экспериментов с Arduino я рекомендую покупать именно такой.
3 Считывание данных с сенсора DHT11 при помощи Arduino
Давайте пойдём таким путём: скачаем библиотеку для датчика DHT11 (также приложил её в конце статьи, т.к. у обновлённой библиотеки изменились вызываемые функции), установим её стандартным способом (распаковав в директорию \libraries\ среды разработки для Arduino).
Напишем вот такой простенький скетч. Он будет выводить в последовательный порт компьютера каждые 2 секунды сообщения об относительной влажности и температуре, считанные с датчика DHT11.
Загрузим этот скетч в Arduino. Подключимся к Arduino с помощью монитора COM-порта и увидим следующее:
Данные о температуре и влажности, полученные с датчика DHT11
Видно, что данные и о влажности, и о температуре считываются и выводятся в терминалку.
4 Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером
С помощью временной диаграммы, полученной с логического анализатора, разберёмся, как осуществляется информационный обмен.
Для связи с микроконтроллером датчик температуры и влажности DHT11 использует однопроводный последовательный пакетный интерфейс. Один информационный пакет длительностью около 4 мс содержит: 1 бит запроса от микроконтроллера, 1 бит ответа датчика и 40 битов данных от датчика (16 битов информации о влажности, 16 битов информации о температуре и 8 проверочных битов). Давайте подробнее рассмотрим временную диаграмму информационного обмена Arduino с датчиком DHT11.
Временная диаграмма информационного обмена сенсора DHT11 с микроконтроллером
Из рисунка видно, что есть два типа импульсов: короткие и длинные. Короткие в данном протоколе обмена обозначают нули, длинные импульсы – единицы.
Итак, первые два импульса – это запрос Arduino к DHT11 и, соответственно, ответ датчика. Далее идут 16 бит влажности. Причём они разделены на байты, старший и младший, старший слева. То есть на нашем рисунке данные о влажности такие: 0001000000000000 = 00000000_00010000 = 0x10 = 16% относительной влажности.
Данные о температуре, аналогично: 0001011100000000 = 00000000_00010111 = 0x17 = 23 градуса Цельсия.
Контрольная сумма – это всего-навсего арифметическое суммирование 4-х полученных байтов данных:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 в двоичной системе или 0 + 16 + 0 + 23 = 39 в десятичной.
5 Работа с датчиком DHT11 без библиотеки
Теперь мы знаем достаточно для того чтобы написать собственную программу для работы с сенсором температуры и влажности DHT11 без использования сторонних библиотек. Напишем скетч, который будет опрашивать раз в секунду датчик и выводить в последовательный порт компьютера принятый пакет и данные о температуре, влажности, а также проверочный байт. На 13-ую ножку Arduino выведем контрольный сигнал и, подключившись в ней логическим анализатором, проверим, что мы верно считываем информацию от датчика.
Скетч для работы с DHT11 и Arduino без сторонних библиотек (разворачивается)
Теперь можно использовать данный метод таким способом (здесь MainWindow – это тот контейнер, список чьих потомков нужно получить):