Подключение датчика DHT11 или DHT22 к Ардуино
Датчики 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 к 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 в Arduino
Перед написанием скетча давайте убедимся, что у нас установлена библиотека для работы с датчиками влажности и температуры. Скачать ее можно по ссылке https://github.com/adafruit/DHT-sensor-library. Загрузится папка под названием «DHT-sensor-library-master». Ее необходимо переименовать в DHT и переместить в папку libraries, что находится в корневой папке Arduino IDE. Далее необходимо загрузить готовый скетч или написать его самостоятельно, используя примеры. Типичный arduino скетч для работы с DHT11 и DHT22 выглядит следующим образом:
После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов.
Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.
Резюме
Давайте подведем итог. В статье рассмотрены вопросы подключения ардуино датчиков температуры и влажности DHT11 и DHT22 к плате Arduino Uno. Датчики лучше приобретать в виде готовых модулей. Для работы с датчиками можно использовать библиотеку DHT для Arduino, которую легко скачать по указанной в статье ссылке. В скетче мы просто инициализируем объект для работы с датчиком и пользуемся его методами для получения температуры и влажности. Все полученные результаты мы можем посмотреть в окне монитора порта, сохранить и вывести на ЖК-экран, послать через bluetooth или интернет.
Используя DHT11 или DHT22 в проектах ардуино, можно строить элементы систем умного дома и умные теплицы. С помощью этих датчиков можно создавать исследовательские комплексы для климатических измерений и мониторинга окружающей среды. Варианты сфер применения датчиков практически неисчерпаемы, можно найти множество примеров на просторах интернета, в том числе на этом сайте. Надеюсь, с помощью нашей статьи проблем с подключением DHT11 и DHT22 к Arduino у вас не останется.
Как подключить датчик температуры и влажности DHT11 к Arduino
Датчик температуры и влажности DHT11 – популярный и дешёвый датчик, который можно использовать в довольно широком диапазоне температур и относительной влажности. Давайте посмотрим, как подключить его к Arduino и как считывать с него данные.
1 Технические характеристики датчика температуры и влажности DHT11
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности – 20..90% с погрешностью до 5%,
- диапазон измеряемых температур – 0..50°C с погрешностью до 2°C;
- время реакции на изменения влажности – до 15 секунд, температуры – до 30 секунд;
- минимальный период опроса – 1 секунда.
Габаритные размеры и внешний вид датчика температуры и влажности DHT11
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
2 Схема подключения датчика температуры и влажности DHT11
Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino.
Схема подключения датчика температуры и влажности DHT11
Давайте посмотрим, что показано на рисунке.
Обозначение на рисунке | Описание | Примечание |
---|---|---|
MCU | Микроконтроллер или одноплатный компьютер | Arduino / Raspberry Pi и др. |
DHT11 | Датчик температуры и влажности | Выводы 1Pin, 2Pin и 4Pin задействованы в схеме, один из выводов датчика – 3-ий пин 3Pin – ни к чему не подключается. |
DATA | Шина данных | Если длина соединительного кабеля от датчика к микроконтроллеру не превышает 20 метров, то эту шину рекомендуется подтянуть к питанию резистором 5,1 кОм; если больше 20 метров – то другой подходящий номинал (меньший). |
VDD | Питание датчика | Допустимы напряжения от 5,5 вольт постоянного тока; если используется питание 3,3 В, то желательно использовать питающий провод не длиннее 20 см. |
Соберём рассмотренную схему. Я также по традиции включу в цепь логический анализатор, чтобы можно было изучить временную диаграмму информационного обмена с датчиком.
Сенсор температуры и влажности 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 без сторонних библиотек (разворачивается)
Небольшая таблица даст дополнительные разъяснения к предлагаемому решению.
Функция | Назначение | Комментарий |
---|---|---|
initLink() | Посылает импульс инициализации обмена с DHT11. | В режиме INPUT цифровые выводы Arduino находятся в состоянии “1”. Мы переводим их в режим OUTPUT и на 15 мс опускаем в “0”, что служит сигналом начала обмена для датчика DHT11. |
readSerialDHT11() | Читает данные датчика DHT11 и записывает в массив. | Постоянно опрашиваем состояние линии DATA, записываем принятые данные в массив (до верхней границы массива), выводим для проверки на 13-ый пин Arduino принятые данные (это нужно было мне для отладки, в «чистовом» коде этот кусок можно убрать). |
processDht11Data() | Обрабатывает массив данных, принятых за один цикл (один пакет). | По передним фронтам принятых импульсов фиксируем факт пришедшего нового бита и считаем в условных единицах его длительность. По длительности оцениваем – это бит-единица или бит-ноль (в некоторых заданных пределах). Составляем пакет из 41 бита. |
getHumidTemperatureParity() | Получает данные о влажности, температуре из пакета. | Выделяем из 41 бита пакета данные о влажности, температуре и контрольную сумму. |
resetVals() | Сбрасывает переменные в исходное состояние. | При расширении программы здесь могут появиться ещё переменные, требующие сброса. |
Вот так будет выглядеть временная диаграмма. Здесь A – это сигнал в шине DATA датчика DHT11, B – считываемый сигнал.
Временная диаграмма информационного обмена DHT11 с Arduino (A) и считанные контрольные значения на выводе 13 (B)
Видно, что мы считываем данные с небольшой задержкой. Кроме того, мы начинаем читать данные с ответного сигнала и пропускаем запросный сигнал. В программе этот первый импульс мы не учитываем, т.к. он не относится непосредственно к данным. В выводе монитора COM-порта мы можем наблюдать аналогичную картину: длинная строка единиц и нулей – это наши пакеты, и видно, что все они начинаются с единичного бита, т.к. мы считываем пакеты, начиная с ответного бита.
Принятые и расшифрованные данные сенсора DHT11 в мониторе COM-порта
Что мы не учли в этой программе, так это то, что минимальная длительность импульса бита-нуля может изменяться в некоторых пределах, а мы жёстко задали её значение в коде. По хорошему нужно ещё написать функцию getMinimalBitLen(), которая бы находила минимальную длительность (в условных единицах) одного бита-нуля в обрабатываемом пакете.
Выводим температуру и влажность помещения на LCD I2C дисплей. Подключение датчика DHT11 к Arduino UNO
Я продолжаю свое увлечение электроникой. Буквально вчера пришла посылка с моим набором для изучения Arduino UNO — конечно же сразу захотелось что-нибудь собрать.
Немного поигравшись с мигающими светодиодами, я решил протестировать остальное содержимое набора. Выбор пал на ЖК-дисплей и датчик температуры и влажности DHT11.
Очень хотелось вывести показания датчика не только на экран монитора, но и на дисплей. Убив несколько часов на поиск и изучение статей по данной теме, я так и не смог заставить все работать нужным образом. Все готовые решения содержали ошибки или недомолвки, либо применялись другие компоненты — дисплей показывал что угодно, но только не температуру и влажность. Поскольку метод «с наскока» не удался, пришлось не просто копировать готовый код, а разбираться в том, как он работает. Но в итоге я все же смог получить нужную программу (ссылка на скачивание в конце статьи) и загрузить ее в микроконтроллер, ура:
Хочу отметить, что я не писал весь код с нуля — часть взята из тестовых файлов входящих в состав библиотек, часть – из найденных статей, что-то переделал я сам. В общем, это некая компиляция, приведенная к работающему состоянию.
Датчик DHT11 очень неточный, поэтому использовать его в качестве источника информации для каких-то серьезных систем я бы не советовал, но для учебных целей он очень даже подходит.
Ниже я подробно расскажу как повторить данную конструкцию (если кому-то захочется) и приведу текст скетча для Arduino IDE.
Начнем с дисплея:
На картинке приведен вид спереди и сзади. Как можно увидеть, мой экземпляр снабжен интерфейсом I2C (маленькая платка на задней стороне). Данный интерфейс очень упрощает подключение дисплея к Arduino — нужно использовать всего 4 контакта:
GRD — минус питания («земля»)
VCC — питание +5V
SDA — линия данных
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 как раз две, так что тут никаких проблем)
Сборка на этом закончена, осталось прошить микроконтроллер.
Вот код скетча:
В данном коде используются библиотеки DHT и LiquidCrystal_I2C, которые не входят в стандартный пакет Arduino IDE. В сети множество разных библиотек с такими же названиями. И несмотря на их схожесть, не со всеми версиями данный код работает. Чтобы вам не тратить свое время и нервы на поиск рабочего варианта, я прикладываю к данной статье архив, в котором содержатся данные библиотеки и сам скетч для Arduino IDE. Библиотеки надо разархивировать и поместить в папку C:Program Files (x86)Arduinolibraries после чего перезапустить программу Arduino IDE.
Я думаю, что опытные разработчики найдут к чему придраться в данном коде (например, здесь нет обработчика ошибок), но на данном этапе, для меня главное, что он работает. Если вы будете применять детали схожие с моими, должно заработать и у вас. Конечно, рекомендую не просто скопировать, но и попытаться понять за что отвечает каждая строчка кода (комментарии в коде сильно в этом помогут).
Быстрые результаты в любом деле это не цель, а всего лишь мотивация, которая должна подталкивать вас копать глубже. Помните об этом! =)
Подключение датчика температуры DHT11 к Arduino и контроль в Ubuntu
Контроль за температурой является самым частым условием при использовании автоматики, особенно когда автоматика используется для повышения комфорта жизни. Поэтому, для начинающего исследователя домашней автоматики на Arduino будет полезен опыт подключения датчика к блоку.
Подключение датчика DHT11 к Arduino
Такой контроль за температурой может понадобиться в домашней автоматике. Конечно, в контексте данной статьи может говорить об «Умном доме» на платформе Arduino не уместно, но тем не менее, многие полезные вещи для домашнего быта можно реализовать на столь простом и доступном контроллере.
Всё, что нам понадобится на данном этапе изучения контроллера на основе Arduino — это датчик температуры DHT11 или DHT22 в сборке на плате, блок Arduino и компьютер, через который будет закачиваться скетч и контроль за показаниями. И конечно же три провода для подсоединения датчика к плате Arduino.
Видео — Датчик влажности и температуры DHT11 и Arduino
Вся работа будет проводиться на компьютере, где установлена ОС Ubuntu из семейства Linux. Тем не менее, можно всё то же самое сделать и в других операционных системах.
Пошаговая инструкция и схема подключения DHT11 к Arduino
Для начала необходимо подсоединить датчик DHT11 к плате Arduino по следующей схеме.
- Как видно, дня наших целей даже не понадобится монтажная плата.
- Теперь необходимо скачать библиотеку для датчиков температуры из Интернета (https://github.com/adafruit/DHT-sensor-library/archive/master.zip). В данной библиотеке есть уже пример скетча для закачки в Arduino.
Arduino IDE
В загруженной на компьютер библиотеке уже имеется готовый пример скетча для загрузки в Arduino. Загрузим данную программу (Файл -> Папка со скетчами -> libraries -> DHT -> DHTtester) в терминал Arduino IDE.
- После этого, нажав на стрелочку вправо (загрузить), скомпилируем программу и загрузим её на плату Arduino через USB соединение. Первый раз программа может выдать предупреждение, что последовательный порт COM1 не обнаружен. Жмём «ОК» для использования другого порта (/dev/ttyACM0). Теперь наша программа загружена в Arduino и может считывать температуру и влажность.
Соединяемся с Ubuntu
Но мы не может посмотреть температуру, которую выдаёт наш собранный прибор. Для этого в Ubuntu можно установить специальную программу, которая считывает данные, поступающие на последовательный порт. Эта программа называется CuteCom.
CuteCom
Через «Центр приложений Ubuntu» ищем данную программу и устанавливаем на компьютер. После этого запускаем её и вводим в поле Device: «/dev/ttyACM0». После нажимаем кнопку «Open Device» и наблюдаем данные, которые получает компьютер через USB.
Если всё было подключено правильно и в программе не было ошибок, то можно увидеть показания температуры, которые обновляются каждые 2 секунды. Это значение можно изменить при желании. Но можно увидеть показания неправильной температуры и влажности, когда вместо 24 градусов устройство выдаёт 616 градусов. А вместо 50% влажности — видим 1777%.
Может возникнуть ощущение, что датчик был подключен неправильно. Но если всё ещё раз проверить, то ошибки соединения не допущено.
Тут всё обстоит совершенно по другому. Библиотека DHT рассчитана на то, что она обрабатывает показания как термодатчиков DHT11, так и DHT22. По умолчанию в примере программы незакомментированной является строка для датчика DHT22, и если Вы использовали DHT11, то будут неправильные показания. Всё, что осталось сделать — это закомментировать строку для DHT22 и раскомментировать для DHT11. После этого загрузить новый скетч на плату Arduino и наблюдать в программе CuteCom правильные показания.
Не забудьте во время перезагрузки скетча на плату отключить устройство в CuteCom.
Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22
Продолжаем серию уроков “Arduino для начинающих”. Сегодня мы разберем подключение к Arduino датчиков температуры и влажности DHT11 и DHT22.
Датчики DHT11 и DHT22 не обладают высоким быстродействием и точностью, но зато просты, недороги и отлично подходят для обучения. Они выполнены из двух частей — емкостного датчика влажности и термистора. Чип, находящийся внутри, выполняет аналого-цифровое преобразование и выдает цифровой сигнал, который можно считать с помощью любого микроконтроллера.
Список деталей для сборки модели
Для сборки проекта, описанного в этом уроке, понадобятся следующие детали:
- плата Arduino (подробнее, о том как выбрать Arduino здесь);
- датчик DHT11 или DHT22 (можно купить, например, здесь или здесь);
- Breadboard;
- резистор на 10 кОм;
- программа Arduino IDE, которую можно скачать с сайта Arduino.
Датчики DHT11 и DHT22
Чем отличаются датчики DHT11 и DHT22?
Две версии сенсоров DHT похожи друг на друга и имеют одинаковую распиновку. Их отличия в характеристиках. Спецификации:
- определение влажности в диапозоне 20-80%
- определение температуры от 0°C до +50°C
- частота опроса 1 раз в секунду
- определение влажности в диапазоне 0-100%
- определение температуры от -40°C до +125°C
- частота опроса 1 раз в 2 секунды
Таким образом, характеристики датчика DHT22 лучше по сравнению с DHT11, и поэтому он чуть-чуть дороже. Снимать показания чаще, чем раз в 1-2 секунды не получится, но, возможно, для вашего проекта более высокое быстродействие и не требуется.
Подключение сенсоров DHT к Arduino
Датчики DHT имеют стандартные выводы и их просто установить на breadboard.
Датчики DHT имеют 4 вывода:
- питание.
- вывод данных
- не используется.
- GND (земля).
Между выводами питания и вывода данных нужно разместить резистор номиналом 10 кОм.
Датчик DHT часто продается в виде готового модуля. В этом случае он имеет три вывода и подключается без резистора, т.к. резистор уже есть на плате.
Схема подключения датчика с резистором:
Схема подключения датчика DHT к Arduino
Arduino скетч
Воспользуемся библиотекой DHT.h, созданной специально для датчиков DHT. Ее можно скачать здесь. Для использования нужно поместить скачанную папку в в папку /libraries.
Пример программы для работы модели с датчиком DHT22 (можно просто скопировать в Arduino IDE):
#include “DHT.h”
#define DHTPIN 2 // номер пина, к которому подсоединен датчик
// Раскомментируйте в соответствии с используемым датчиком
// Инициируем датчик
DHT dht(DHTPIN, DHT22);
//DHT dht(DHTPIN, DHT11);
void setup() <
Serial.begin(9600);
dht.begin();
>
void loop() <
// Задержка 2 секунды между измерениями
delay(2000);
//Считываем влажность
float h = dht.readHumidity();
// Считываем температуру
float t = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) <
Serial.println(“Не удается считать показания”);
return;
>
Serial.print(“Влажность: “+h+” %t”+”Температура: “+t+” *C “);
>
При использовании датчика DHT11 закомментируйте строку:
DHT dht(DHTPIN, DHT22);
И раскомментируйте строку:
//DHT dht(DHTPIN, DHT11);
Загрузите скетч в контроллер и проверьте правильность работы при помощи Сервис->Монитор порта:
Показания температуры и влажности (Монитор порта)
Вы должны увидеть температуру и влажность. Изменения можно увидеть, например, выдыхая на датчик (как для затуманивания окна). Дыхание увеличивает влажность.
Посты по урокам:
Все посты сайта “Занимательная робототехника” по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор Александр Гагарин. В статье использованы материалы learn.adafruit.com.
Читайте также
50 комментариев к статье “Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22”
При компиляции выдало: Arduino: 1.6.5 (Windows 7), Плата»Arduino Uno»
Изменена опция сборки, пересобираем все
sketch_jul16a.ino: In function ‘void loop()’:
sketch_jul16a:45: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
и розовым цветом выделена строчка Serial.print(«Влажность: «+h+» %t»+»Температура: «+t+» *C «);
Эта строка как-то неправильно написана?
Спасибо всем, кто подскажет
В Ардуино нормально строка не формируется. Все, что нужно вывести, нужно написать отдельными Serial.print
Serial.println(«Humidity : «+String(h, 1)+»%t Temperature : «+String(t, 1)+» *C»);
Для DHT11 со встроенным резистором на плате рабочая программа будет такой. Вывод с — (правый) от датчика подключаем к GND Arduino, средний вывод (это +) подключаем на разъем 5V, левый вывод (это сигнал) подключаем к цифровому пину с цифрой 2.
#define DHTPIN 2 // номер пина, к которому подсоединен датчик
// Раскомментируйте в соответствии с используемым датчиком
//DHT dht(DHTPIN, DHT22);
DHT dht(DHTPIN, DHT11);
// Задержка 2 секунды между измерениями
float h = dht.readHumidity();
float t = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) <
Serial.println(«Не удается считать показания»);
Serial.print(«Hum: «);
Serial.print(h);
Serial.print(» Temp: «);
Serial.print(t);
Serial.println(» C»);
Serial.print((String)»Влажность: «+h+» %t»+»Температура: «+t+» *C «);
Serial.println((String)»Влажность: » + h + (String)» %t» + (String)»Температура: » + t + (String)» *C «);
У меня датчик DHT11 в виде готового модуля с тремя выводами. ВНИМАНИЕ: левый пин — данные, средний — питание, правый — земля.
В скачанной бbблиотеке DHT есть скетч с примером использования датчика — работает без изменений. По сравнению с другим прибором температуру DHT11 показывает +/- один градус, а влажность завышает на 6 %.
Андрей, можно скетч на такой датчик? Пол интернета перерыл, не нашел, у всех без встроенных резисторов.
Вот здесь более, чем доступно codius.ru/articles/187, ещё и что происходит в библиотеке описано. И пример кстати на модуле с резистором.
Адрюха, респект! В 5 гайдах в интернет говорят что первая ножка — это питание, и только твой коммент помог получить данные с dht11 модуля.
Спасибо тебе огромное!
При проверке выдает следующее сообщение :
E:ArduinoDht11Dht11examplesTempHumidityTempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory
exit status 1
Ошибка компиляции.
что делать?
E:ArduinoDht11Dht11examplesTempHumidityTempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory
exit status 1
Ошибка компиляции.
Что делать?
эта ошибка когда не подключил библиотеку, либо коряво скачалось, у меня все работает на китайском ардуино uno
все очень понятно написано . а будет продолжение ?
Скетч не верный!
Из примера к библиотеке работает. В приведенном примере нет.
#include «DHT.h»
//#include «iostream»
#define DHTPIN 10
int ledtest = 6;
DHT dht(DHTPIN, DHT11);
pinMode(led, OUTPUT);
pinMode(ledtest, OUTPUT);
Serial.begin(9600);
dht.begin();
delay(1000);
//setlocale(LC_ALL,»RUS»);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
<
Serial.println(«no info»);
digitalWrite(ledtest, LOW);
return;
>
else
<
digitalWrite(ledtest, HIGH);
//****** НЕФОРМИРУЮЩАЯСЯ СТРОКА ВЫВОДА пришлось писать её раздельно.
Serial.print(«Humidity: «); Serial.print(h); Serial.print(«% «); Serial.print(«Temp: «); Serial.print(t); Serial.println(«*C» );
>
>
вот полностью рабочий вариант.
у меня там ещё диод как индикатор стоит, часть с ledset можно вырезать.
у вас в тексте программы ошибки. pinMode(led, OUTPUT) не описана как переменная, вы, наверное, имели ввиду ledtest вместо led
найти и заменить все « на » . ledtest вместо led
Как сделать когда выше 25 градусов включался контакт 4 вентилятор. Помогите пожалуйста.
Kirill, примерно так:
t — температура, конечно.
ledPin = вывод для управляющего сигнала (у меня загорается светодиод, например)
Ну и для контроля вставля дополнительные надписи в порт, их можно убрать.
if (t > 25)
<
analogWrite(ledPin, 255);
Serial.println(«Warning. »);
>
else
<
analogWrite(ledPin, 0);
Serial.println(«NO Warning. »);
>
подскажите плис, как вывести данные с датчика на LCD Keypad Shield
Просто на экран, понятно..
This report would have more information with
«Show verbose output during compilation»
enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: «Arduino Uno»
sketch_sep23a.ino: In function ‘void loop()’:
sketch_sep23a:46: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
Скопировал. Проверку не проходит.
Ткните на спец форум какойнить, где на вопросы чайников отвечают оперативно, за небольшим донатом не заржавеет.
Всем доброй ночи, никак не могу завести dht11, все время не удается считать показания. Пробовал менять местами пины 5В и вывода иноформации, как советовали выше — не помогло.
Датчик температуры работает отлично.
Дохлый dht 11 попался?
поxоже на то. Что вообще выводит в переменной влажности?
Подключал датчик через дашборд, выдавал нулевые значение в мониторе порта, подключил напрямую провода (от ардуино сразу к датчику), все заработало.
Разобрался с дашбордом, я новичок, поэтому не знал что дорожки плюс и минус на ней работают только до половины, а дальше разрыв, датчик установил на вторую половину, а подключил к + и GND первую половину.
Что за ошибка в библиотеке? При проверке выскакивает. На Ардуино IDE
In file included from G:ArduinoArduinoSketchlibrariesDHT-sensor-library-masterDHT_U.cpp:22:0:
G:ArduinoArduinoSketchlibrariesDHT-sensor-library-masterDHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
Используем библиотеку DHT-sensor-library-master версии 1.3.0 из папки: G:ArduinoArduinoSketchlibrariesDHT-sensor-library-master
exit status 1
Ошибка компиляции для платы Arduino Nano.
У кого ошибка при компиляции как у Сергея, установите библиотеку версии 1.2.3 .
И строка вывода:
Serial.println(«Humidity : «+String(h, 1)+»%t Temperature : «+String(t, 1)+» *C»);
как писал koa73
У кого ошибка как у Сергея, установите версию библиотеки 1.2.3.
Serial.print(» Hum: «);
Serial.print(h);
Serial.print(» %t»);
Serial.print(» Temp: «);
Serial.print(t);
Serial.println(» *C»);
//Serial.println(«Humidity : «+String(h, 1)+»%t Temperature : «+String(t, 1)+» *C»);
//Serial.println(«Влажность: «+h+» %t»+»Температура: «+t+» *C «);
у меня так получилось, правда с русским крякозябры. заработала.
Adafruit_Sensor.h: No such file or directory
#include скачайте библиотеку
Добрый день, подключил датчик и дисплей, все ок, подскажите пожалуйста как сделать допустим если температура равна х значению то зуммер будет пищать 1раз в 1 минуту?
640.00 *C температуры и 921.6 % влажности — это нормальные показания? О_О
если вы в аду, то да.
У тебя датчик DHT11 а ты выставил DHT22
Срочно! Как купить электронику из Китая в Томске или в России с бесплатной доставкой курьером? Помогите срочно не могу самому найти интернет магазин…
Не знаю как выбрать магазин что бы не кинули выручайте!
Не совсем согласен,
Здравствуйте,подскажите что вообще значит // Инициируем датчик
DHT dht(DHTPIN, DHT22);
//DHT dht(DHTPIN, DHT11);
И для чего это нужно.
Говорим ардуине с каким датчиком нужно работать.
Нит черта не работает , как не качал библиотеку по инструкции без толку — не одного нормального примера с этим датчиком пока не нашел
Датчик температуры и влажности Ардуино
DTH11 Arduino ► датчик температуры и влажности воздуха. Рассмотрим, как подключить датчик к Ардуино с выводом показаний на монитор порта и LCD дисплей.
Расскажем, как подключить датчик температуры и влажности к Ардуино, как получить данные с датчика а мониторе порта. На этом занятии мы познакомимся с цифровым датчиком температуры и влажности DTH11 с трех пиновым разъемом стандарта 2.54 мм. Рассмотрим устройство и назначение датчиков влажности и температуры. Научимся добавлять библиотеки для датчиков и плат расширений Arduino Nano.
Устройство датчика температуры DTH11 Ардуино
На занятии мы будем использовать датчик DHT11, смонтированный на плате. DHT11 — это цифровой датчик, состоящий из термистора и емкостного датчика влажности. Наряду с невысокой стоимостью DHT11 имеет следующие характеристики: питание осуществляется от 3,5-5V, определение температуры от 0 до 50 градусов с точностью 2 град, определение влажности от 20% до 95% с 5% точностью.
Устройство датчика температуры и влажности (dht11) для Ардуино
Модуль DHT11 оборудован трех пиновым разъемом и подключается по схеме:
G — Подключается к выводу GND
V — Подключается к выводу +5V
S — Подключается к цифровому выводу ( Pin2 )
Термистор — это термический резистор, сопротивление которого изменяется с температурой, т.е. увеличение температуры приводит к падению его сопротивления. По сути термистор — это термометр сопротивления, изготовленный на основе смешанных оксидов переходных металлов. Относится к измерительной технике и может быть использован для автоматического измерения температуры в различных средах.
Емкостной датчик влажности — это конденсатор с переменной емкостью, который содержит токопроводящие обкладки из медной фольги на текстолите. Этот конденсатор заключен в герметичный чехол, поверх которого расположен влагопоглощающий слой. При попадании частиц воды на этот слой, меняется его диэлектрическая проницаемость, что приводит к изменению емкости конденсатора.
Как подключить DHT11 к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль DHT11;
- макетная плата;
- 2 светодиода и 2 резистора на 220 Ом;
- провода «папа-папа» и «папа-мама».
На этом занятии мы приведем для примера два скетча. Первый скетч будет отсылать данные с модуля DHT11 на последовательный монитор порта компьютера. Во втором скетче мы будем использовать вывод данных на жк дисплей — LCD 1602 модуль. LCD модуль можно будет использовать в дальнейшем в любом автономном устройстве, например, при конструировании «Домашней метеостанции» или «Умной теплицы».
Ардуино. Датчик температуры и влажности dht11
Необходимо установить библиотеку для работы с датчиком DHT11. Для этого необходимо скачать архив по ссылке, извлечь папку «DHT11» и переместить ее в раздел «C:Program FilesArduinolibraries» на своем компьютере. При использовании датчика DHT11, необходимо подключать библиотеку в скетче. Загрузите следующую программу после подключения датчика температуры воздуха DHT11 к Ардуино.
Скетч термодатчика DHT11 для Ардуино
Пояснения к коду:
- переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем;
- команда Serial.print() выводит информацию на порт без переноса строки, команда Serial.println() выводит информацию на порт с переносом строки.
Скетч DHT11 и дисплея LCD 1602 Arduino
Пояснения к коду:
- команда LCD.clear() в программе очищает экран дисплея от надписей для вывода новых значений с сенсора температуры DHT11 Arduino.
Заключение. Мы рассмотрели в этом обзоре подключение датчика DHT11 к Arduino Uno. Представили несколько примеров программ для вывода информации с цифрового датчика на аппаратный монитор порта Arduino IDE и дисплей 1602. С датчиком DHT11 существует множество проектов метеостанций на Ардуино, которые вы сможете сделать самостоятельно, внимательно изучив информацию на этой странице.