How to use dht11 and dht22 sensors with arduino
Содержание:
- 4Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером
- Исходный код программы
- Создаем Навык в Яндекс.Диалогах
- Как подключить DHT11 к Ардуино Уно
- Данные от датчика (40 бит) имеет следующую структуру:
- 4Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером
- Установка библиотеки датчиков DHT
- Подключение термостата 24 В
- Dewpoint tables
- Как подключить DHT22 к Ардуино Уно
- Display Humidity and Temperature on the Serial Monitor
- Using the Data in Other Programs
- Supplies
- 1Технические характеристики датчика температуры и влажности DHT11
- Виды датчиков
- 4Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером
- Conclusion
- Доступ к веб-серверу
- Программный код термостата Arduino
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 в десятичной.
Исходный код программы
В начале программы подключим библиотеки, необходимые для работы с датчиком DHT11 и ЖК дисплеем.
Когда вы скачаете эту библиотеку, добавьте ее в вашу Arduino IDE с помощью инструкции вида (или с помощью аналогичного пункта меню в Arduino IDE):
Затем определим контакты к которым подключен ЖК дисплей и датчик DHT и инициализируем их все в секции setup программы (скетча). Затем в секции loop мы с помощью функции dht считываем данные с датчика DHT и затем используем ряд dht функций чтобы извлечь из этих данных температуру и влажность и отобразить их на ЖК дисплее.
Символ градуса на экране ЖК дисплея будет формироваться, используя известное отображение его в виде символа.
Далее приведен полный текст программы.
Arduino
#include<dht.h> // подключаем библиотеку для использования dht функций
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // номера контактов, к которым подключен ЖК дисплей
#define dht_dpin 12
dht DHT;
byte degree =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16, 2);
lcd.createChar(1, degree);
lcd.clear();
lcd.print(» Humidity «);
lcd.setCursor(0,1);
lcd.print(» Measurement «);
delay(2000);
lcd.clear();
lcd.print(«Circuit Digest «);
delay(2000);
}
void loop()
{
DHT.read11(dht_dpin); //считываем данные с контакта, к которому подключен датчик DHT11
lcd.setCursor(0,0);
lcd.print(«Humidity: «);
lcd.print(DHT.humidity); // отображаем значение влажности на экране ЖК дисплея
lcd.print(» %»);
lcd.setCursor(0,1);
lcd.print(«Temperature:»);
lcd.print(DHT.temperature); // отображаем значение температуры на экране ЖК дисплея
lcd.write(1);
lcd.print(«C»);
delay(500);
}
1 |
#include<dht.h> // подключаем библиотеку для использования dht функций LiquidCrystallcd(2,3,4,5,6,7);// номера контактов, к которым подключен ЖК дисплей #define dht_dpin 12 dhtDHT; bytedegree8= { 0b00011, 0b00011, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; voidsetup() { lcd.begin(16,2); lcd.createChar(1,degree); lcd.clear(); lcd.print(» Humidity «); lcd.setCursor(,1); lcd.print(» Measurement «); delay(2000); lcd.clear(); lcd.print(«Circuit Digest «); delay(2000); } voidloop() { DHT.read11(dht_dpin);//считываем данные с контакта, к которому подключен датчик DHT11 lcd.setCursor(,); lcd.print(«Humidity: «); lcd.print(DHT.humidity);// отображаем значение влажности на экране ЖК дисплея lcd.print(» %»); lcd.setCursor(,1); lcd.print(«Temperature:»); lcd.print(DHT.temperature);// отображаем значение температуры на экране ЖК дисплея lcd.write(1); lcd.print(«C»); delay(500); } |
Создаем Навык в Яндекс.Диалогах
- После регистрации попадаем на главную страницу, где будут располагаться наши боты. Для создания нового бота (для навыка Алисы) нажимаем кнопку «Создать бота или обзвон».
- В следующем окне зададим (любое) имя бота, язык и категорию.
- Перед нами откроется рабочая область создания сценария, в которой будет предложено создать первый экран.
- Создадим блок «Текст», чтобы поприветствовать входящего в навык пользователя.
- Лучше задать текст, подобный примеру на рисунке, потому что по требованиям Яндекса приватный навык должен с первого экрана предупредить о том, что он приватный, а при запросе «Помощь» (об этом чуть ниже) выдать справку о функционале навыка. Без этого навык не сможет пройти модерацию.
- Здесь же добавим 2 блока «Интенты» и зададим шаблоны фраз, на которые будет откликаться Алиса:
- * ~температура * ~балкон * — для того чтобы узнать температуру для примера балкона (предположим, что наш датчик находится на балконе) и
- * ~влажность * ~балкон * — для того, чтобы узнать влажность балкона.
- Ниже создадим новый экран с двумя блоками:
- «Текст» (где укажем, что будет отвечать Алиса, если фраза не совпадает с шаблонами интентов) и
- «Переход» (чтобы вернуться на начальный экран).
- Соединим пункт «Любая другая фраза» с экраном неизвестной фразы, нажав на кружочек рядом, и протянув стрелку до соответствующего экрана. То же самое можно сделать от пункта «Переход» на экране неизвестной фразы до экрана приветствия. (Теперь, на фразы, непохожие на «температура балкона» или «влажность балкона», Алиса ответит, что такой команды нет, и вернется к начальному экрану).
- Чтобы наши шаблоны работали в любом месте диалога, в блоке «Интенты» нажимаем кнопку с шестеренкой рядом с его названием, и в открывшемся окне устанавливаем флажок «Сделать доступным из любой точки сценария».
Осталось прочитать данные и вывести их пользователю. Для этого каждому интенту создадим экран с блоком «HTTP-запрос», где создадим переменные и «положим» в них данные с датчиков:
- $tempbal — для температуры,
- $humbal — для влажности.
В блоках укажем ссылки на get-запрос вида:
К пунктам «Завершен с ошибкой» обязательно добавим экран с текстом о том, что получение данных не удалось (например, «Датчики не в сети») и автопереходом на начальный экран. Все, что осталось — это вывести данные пользователю и завершить сценарий.
Создадим для каждого пункта «Завершен успешно» экран с текстом с нашими переменными (например: «Температура балкона — $tempbal градусов») и блоком «Завершение сценария».
Мы получили готовый сценарий, который осталось сохранить соответствующей кнопкой.
Но, как уже упоминалось, для успешного прохождения модерации нашему навыку нужен раздел помощи.
Для этого:
- Переходим в FAQ-бот окна редактора,
- Нажимаем кнопку «Создать пустую базу».
- В новой базе создаем «знание» (Например, «Помощь») и указываем синонимы, по которым пользователь сможет вызвать наш раздел.
- В разделе «Ответы» задаем описание того, как работает наш навык. А теперь сохраняем сценарий!
Мы получили данные после http-запроса из переменной $httpResponse. В зависимости от используемого api можно принимать разные форматы (в нашем примере - обычный текст), но Aimylogic поможет распарсить и json.
Как подключить DHT11 к Ардуино Уно
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль DHT11 / DHT22 Ардуино;
- макетная плата;
- 2 светодиода и 2 резистора на 220 Ом;
- провода «папа-папа» и «папа-мама».
На этом занятии мы приведем для примера два скетча. Первый скетч будет отсылать данные с модуля DHT11 на последовательный монитор порта компьютера. Во втором скетче мы будем использовать вывод данных на жк дисплей — LCD 1602 модуль. LCD модуль можно будет использовать в дальнейшем в любом автономном устройстве, например, при конструировании «Домашней метеостанции» или «Умной теплицы».
Схема подключения модуля DHT11 к плате Ардуино Уно
Скетч. Ардуино датчик температуры и влажности DHT11
#include <DHT.h> // подключаем библиотеку для датчика DHT dht(2, DHT11); // сообщаем на каком порту будет датчик void setup() { dht.begin(); // запускаем датчик DHT11 Serial.begin(9600); // подключаем монитор порта } void loop() { // считываем температуру (t) и влажность (h) float h = dht.readHumidity(); float t = dht.readTemperature(); // выводим температуру (t) и влажность (h) на монитор порта Serial.print("Humidity: "); Serial.println(h); Serial.print("Temperature: "); Serial.println(t); }
Пояснения к коду:
- переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем (вре11 подключение к ардуино);
- команда выводит информацию на порт без переноса строки, команда выводит информацию на порт с переносом строки.
Схема подключения DHT11 и LCD 1602 к Ардуино
Скетч. Подключение к Ардуино DHT11 и вывод на LCD 1602 i2c
#include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602 #include <DHT.h> // подключаем библиотеку для датчика LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея DHT dht(2, DHT11); // сообщаем на каком порту будет датчик void setup() { LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея dht.begin(); // запускаем датчик DHT11 } void loop() { // считываем температуру (t) и влажность (h) float h = dht.readHumidity(); float t = dht.readTemperature(); // выводим температуру (t) и влажность (h) на жк дисплей LCD.setCursor(0,0); LCD.print("Humidity: "); LCD.print(h); LCD.setCursor(0,1); LCD.print("Temperature: "); LCD.print(t); delay(1000); LCD.clear(); }
Пояснения к коду:
- для подключения датчика к микроконтроллеру можно использовать любой пин общего назначения, указав его в скетче;
- команда в программе очищает экран дисплея от надписей для вывода новых значений с сенсора температуры DHT11 Arduino.
Данные от датчика (40 бит) имеет следующую структуру:
Для датчика DHT11, десятичные байты измерения температуры и влажности всегда равны нулю. Таким образом, первый и третий байт полученных данных фактически дают числовые значения измеренной относительной влажности (RH) и температуры (Temp).
Последний байт является байтом контрольной суммы, который используется, чтобы убедиться, что передача данных произошло без каких-либо ошибок. Если все пять байтов передаются успешно, то байт контрольной суммы должен быть равен последним 8 битам суммы первых четырех байтов, т.е.
Теперь давайте поговорим о важной вещи, а именно о сигналах для передачи «0» и «1». Чтобы отправить бит данных, датчик сначала переводит линию в низкий уровень на 50 мс
Затем если нужно отправить «0», то датчик переводит линию в высокое положение на 26-28 мкс, или 70 мкс, если необходимо передать «1».
Таким образом ширина положительного импульса несет в себе информацию о «0» и «1».
«Разница в сигналах «1» и «0»
«Обобщенная картина обмена данными»
В конце последнего переданного бита, датчик переводит линию передачи данных в низкое положение на 50 мсек, а затем освобождает его. Для датчика DHT11 требуется внешний подтягивающий резистор, который должен быть подключен между выводами Vcc и линии передачи данных, таким образом, в состоянии ожидания сигнал на линии данных всегда высокий.
После окончания передачи данных и отпускании линии данных, датчик 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 в десятичной.
Установка библиотеки датчиков DHT
Установить связь с датчиками DHT11, DHT22, AM2302 достаточно сложная задача, поскольку они имеют собственный однопроводный протокол передачи данных. И этот протокол требует точной синхронизации.
К счастью, нам не нужно беспокоиться об этом, потому что мы собираемся использовать библиотеку DHT от Adafruit, которая позаботится за нас обо всем. Библиотека настолько мощная, что работает как на архитектуре Arduino, так и на архитектуре ESP.
Чтобы установить библиотеку, перейдите в раздел « Эскиз»> «Включить библиотеку»> «Управление библиотеками…». Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, набрав « Датчик DHT ». Там должно быть пара записей. Ищите библиотеку датчиков DHT от Adafruit. Нажмите на эту запись, а затем выберите Install.
Библиотека датчиков DHT использует серверную часть поддержки Adafruit Sensor. Поищите в диспетчере библиотек Adafruit Unified Sensor и установите ее тоже (возможно, придется немного прокрутить список вниз)
Подключение термостата 24 В
Схема подключения термостата обозначается в паспорте на конкретное устройство заводом изготовителем.
Для примера можно показать порядок подключения термостата на Ардуино, на выше обозначенной схеме:
- Красный цвет, терминал Р, клемма питания переменного тока 24 В. Нередко можно найти 2 красных кабеля RH и RC. В этом случае, оба питаются напряжением 24 В переменного тока, и можно использовать их для отдельного включения тепла и охлаждения.
- Черный цвет, терминал С, это общее заземление.
- Белый цвет, терминал В, эта клемма для подачи сигнала на включение теплоносителя.
- Желтый цвет, терминал Y, эта клемма, которая включает циркуляционный насос.
- Оранжевый цвет, терминал О, здесь клеммы O и B взаимодействуют с обратным клапаном. Обратный клапан контролирует поток холодной воды в обратном трубопроводе, через подмешивание его с горячим подающем теплоносителем. Таким образом, регулируется температура теплоносителя на нагревательных приборах.
- Синий, терминал B, аналогичен клемме O, но для подачи тепла. Очень часто можно увидеть, что эти два терминала объединены в один с надписью O/B.
- Зеленый терминал G, эта клемма управляет вентилятором источника нагрева.
Dewpoint tables
Dew Point (°F) | Dew Point (°C) | Description |
---|---|---|
Below 55°F | (13°C) | Air Feels Dry |
55 ~ 60°F | (13°C) ~ (16°C) | Air Feels Comfortable |
60 ~ 64°F | (16°C) ~ (18°C) | Air Fairly Humid |
65 ~ 69°F | (18°C) ~ (21°C) | Humid |
70 ~ 75°F | (21°C) ~ (24°C) | Very Humid |
Above 75°F | (24°C) | Oppressive |
[sources http://www.livescience.imwcom/43269-what-is-dew-point.html,
http://www.theweatherprediction.com/habyhints/190/, video 2]
1. Vince Condella : Humidity vs Dew point.
What is the difference between RH and the Dew point? with easy to understand
props.
2. NWS Chicago Humidity vs Dew point.
This video shows visually (and with some numbers) what the difference is and
shows why an RH of 100% at 55°F feels better than an RH of 50% at 95°F.
3. Mike Hermann Humidity: Relative and absolute.
The water content of air changes with temperature and hotter air can contain
more water than colder air.
Absolute humidity : e.g. 5g/m3
Relative humidity : More commonly used in weather reports — it compares
amount of vapor to the maximum it can hold (the dew point). Relative humidity
changes with temperature.
Как подключить DHT22 к Ардуино Уно
Обратите внимание, что распиновка модулей у разных производителей может отличаться. При неправильном подключении питания, сенсор может выйти из строя
Дисплей подключается к шине i2c, расположенной на пинах SDA (A4) и SCL (A5) платы Ардуино Уно и Нано. При работе с платой Ардуино Мега подключение дисплея производится к интерфейсу i2c на пинах SDA (20) и SCL (21).
Схема подключения DHT22 и LCD 1602 к Ардуино
Схема подключения DHT22 к плате ничем не отличается от предыдущего примера, а сама программа отличается только одной строчкой, где мы указываем тип датчика — DHT22, вместо DHT11. После того, как вы собрали схему с дисплеем и DHT22, как показано на картинке выше, — загрузите следующий пример простой программы с универсальной библиотекой DHT.h, которая подходит для этих двух модулей.
Скетч. Подключение к Ардуино DHT22 и вывод на LCD 1602 i2c
#include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602 #include <DHT.h> // подключаем библиотеку для датчика LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея DHT dht(2, DHT22); // сообщаем к какому порту подключен DHT22 void setup() { LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея dht.begin(); // запускаем датчик DHT22 } void loop() { // считываем температуру (t) и влажность (h) float h = dht.readHumidity(); float t = dht.readTemperature(); // выводим температуру (t) и влажность (h) на жк дисплей LCD.setCursor(0,0); LCD.print("Humidity: "); LCD.print(h); LCD.setCursor(0,1); LCD.print("Temperature: "); LCD.print(t); delay(1000); LCD.clear(); }
Пояснения к коду:
- при необходимости получать значения температуры и влажности без знаков после запятой — используйте тип данных int, вместо float.
Заключение. Мы рассмотрели в этом обзоре, как подключить DHT11 и DHT22 к Arduino. Представили несколько примеров программ для вывода информации с цифрового датчика на аппаратный монитор порта Arduino IDE и дисплей 1602. С датчиком DHT11 существует множество проектов метеостанций на Ардуино, которые вы сможете сделать самостоятельно, внимательно изучив информацию на этой странице.
Display Humidity and Temperature on the Serial Monitor
Before you can use the DHT11 on the Arduino, you’ll need to install the DHTLib library. It has all the functions needed to get the humidity and temperature readings from the sensor. It’s easy to install, just download the DHTLib.zip file below and open up the Arduino IDE. Then go to Sketch>Include Library>Add .ZIP Library and select the DHTLib.zip file.
After it’s installed, upload this example program to the Arduino and open the serial monitor:
You should see the humidity and temperature readings displayed at one second intervals.
If you don’t want to use pin 7 for the data signal, you can change the pin number in line 5 where it says .
Using the Data in Other Programs
What if you don’t want to output the actual humidity and temperature readings, but need them to calculate or control other things? The code below is the bare minimum needed to initialize the sensor. You can add this to existing programs and use and as variables in any function.
To see an example of using the DHT11 sensor outputs as variables in other functions, check out our article How to Set Up an Ultrasonic Range Finder on an Arduino, where we use the and variables in a formula that improves the accuracy of an ultrasonic range finder.
You can watch how to set up the DHT11 and see how it works in this video:
If you have any questions about how to set up the DHT11 humidity and temperature sensor on your Arduino, just leave a comment below and I will try to answer it… And if you like our tutorials, please subscribe! Also, feel free to share this if you know anyone else that might find it helpful!
Supplies
Hardware components
4 pin DHT11 sensor | × 1 | Amazon |
4 pin DHT22/AM2302 sensor | × 1 | Amazon |
3 pin DHT11 sensor (recommended) | × 1 | Amazon |
3 pin DHT22/AM2302 sensor (recommended) | × 1 | Amazon |
5 – 10 kΩ resistor (only for 4 pin sensors) | × 1 | Amazon |
Arduino Uno Rev3 | × 1 | Amazon |
Breadboard | × 1 | Amazon |
Jumper wires | ~ 10 | Amazon |
USB cable type A/B | × 1 | Amazon |
16×2 character I2C LCD (optional) | × 1 | Amazon |
Software
Arduino IDE |
Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com.
Genuine DHTxx sensors are made by ASAIR, you can find their website here.
1Технические характеристики датчика температуры и влажности DHT11
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности – 20..90% с погрешностью до 5%,
- диапазон измеряемых температур – 0..50°C с погрешностью до 2°C;
- время реакции на изменения влажности – до 15 секунд, температуры – до 30 секунд;
- минимальный период опроса – 1 секунда.
Габаритные размеры и внешний вид датчика температуры и влажности DHT11
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
Виды датчиков
Для измерения параметров среды часто применяют три вида сенсоров:
- DHT11;
- DHT22;
- SHT1x.
Плюс первого — дешевизна, скорость работы и стабильность сигнала. Из минусов отметим сравнительно слабую программную реализацию библиотеки, высокую погрешность выполняемых измерений и не всегда подходящий диапазон рабочих температур. DHT22 выгодно отличается благодаря:
- малым погрешностям;
- высокой дальности сигнала;
- поддержке дробных значений.
Как и первый сенсор, DHT22 не работает без подгруженной библиотеки. Кроме того, для профессиональных задач его чувствительность и скорость реакции может стать недостаточной.
Датчики линейки SHT1x быстро срабатывают, имеют весьма низкую погрешность, экономичны и умеют «засыпать» при долгой неактивности. Из недостатков выделим:
- два цифровых интерфейса;
- невозможность работы без подключения программной библиотеки и диапазон от 0 до 50 градусов — как в других образцах. Его хватает не всегда.
По стоимости все три варианта примерно одинаковы. Для «домашних» установок чаще берут DHT11-22 за их сравнительную простоту в эксплуатации и настройке.
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 в десятичной.
Conclusion
In this article, I have shown you how DHT11 and DHT22/AM2302 temperature and humidity sensors work and how you can use them with Arduino. I hope you found it useful and informative. If you did, please share it with a friend who also likes electronics and making things!
I would love to know what projects you plan on building (or have already built) with this sensor. If you have any questions, suggestions or if you think that things are missing in this tutorial, please leave a comment down below.
Note that comments are held for moderation to prevent spam.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Доступ к веб-серверу
После загрузки скетча откройте монитор последовательного порта со скоростью 115200 бит/с и нажмите кнопку RESET на NodeMCU. Если всё в порядке, он выведет динамический IP адрес, полученный от вашего маршрутизатора, и покажет сообщение о том, что HTTP сервер запущен.
Рисунок 5 – Монитор последовательного порта – сервер запущен
Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуру и относительную влажность.
Рисунок 6 – Веб-страница с температурой и влажностью с датчика DHT11/DHT22/AM2302 на веб-сервере ESP8266 (без CSS)
Программный код термостата Arduino
Аналогично, как и в схеме подключения, код каждого термостата Arduino будет немного отличаться. Его нужно адаптировать к потребностям тепловой сети.
Эту схему можно модернизировать, например, добавить такие функции:
- Датчик движения для включения и выключения источника нагрева, в зависимости от присутствия жителей.
- Режим «АВТО», автоматическое ведение тепловым процессом.
- Внешние датчики для измерения температуры в помещении в разных местах.
- LED-экран для контроля температуры.
Таким образом, функциональные возможности терморегулятора с Arduino огромны. Они могут учесть, практически все, внутридомовые системы отопления. Современная промышленность наладила выпуск комплектующих изделий для такой схемы управления, а используя возможности Arduino и фреймворка MySensors, домашняя «умная» автоматики может быть реализована в каждом доме своими руками.