Датчик температуры и влажности DHT11

Это простой и недорогой датчик для определения температуры и влажности, который отлично подходит для обучения. Большая часть написанного подойдет и для аналогичных датчиков DHT22 и AM2301.

Датчик температуры и влажности DHT11

Датчик включает в себя:

  • термистор для измерения температуры;
  • емкостной датчик влажности;
  • 8-разрядный микроконтроллер с АЦП для вывода значений температуры и влажности в виде последовательных данных.

Он откалиброван на заводе-изготовителе и, следовательно, легко взаимодействует с другими микроконтроллерами.

Однопроводный последовательный интерфейс делает системную интеграцию быстрой и простой. Его небольшой размер, низкое энергопотребление и передача сигнала до 20 метров делают его лучшим выбором для различных применений.

Характеристики датчика DHT11

Измерение влажности

  • Измеряемый диапазон влажности: 20–90% RH
  • Точность измерений влажности: 0,1% RH
  • Погрешность измерений влажности: ±5% RH
  • Время реакции на изменение значения: 6–10 с

Зависимость диапазона измерений от температуры:

  • 0 °C — 30–90% RH
  • 25 °C — 20–90% RH
  • 50 °C — 20–80% RH

RH (Relative Humidity) — относительная влажность

Измерение температуры

  • Измеряемый диапазон температур: 0–50 °C
  • Точность измерения температуры: 0,1 °C
  • Погрешность измерения температуры: ±2 °C
  • Время реакции на изменение значения: 6–30 с

Электрические параметры

  • Напряжение питания: 3–5,5 В
  • Потребляемый ток:
    • при выполнении преобразования — 0,5–2.5 мА
    • в режиме ожидания — 100–150 мкА
  • Минимальное время преобразования: 1 с

Габариты

  • Длина, ширина, высота: 15,5 х 12 х 5,5 мм
  • Шаг выводов: 2,54 мм (0,1″)

Стандартная схема подключения

DHT11 схема подключения

Назначение выводов сенсора:

  1. Питание (VDD)
  2. Вывод данных
  3. Не используется
  4. Земля (GND)

Если длина провода соединяющего датчик и микроконтроллер короче 20 метров, рекомендуется подтягивающее сопротивление 5 кОм. Если длина соединения превышает 20 метров, необходимо самостоятельно выбирать подходящий подтягивающий резистор.

Также рекомендуется использовать фильтрующий конденсатор 100 нФ по питанию для исключения помех, и при подаче питания на сенсор в течении одной секунды не передавать инструкции на датчик, чтобы контроллер в сенсоре успел пройти нестабильное состояние.

Среди модулей, подготовленных для работы с конструктором на базе Arduino, этот устанавливается на плату, уже имеющую подтягивающий резистор на 5,1 кОм, три контакта («+», out, «−») и фильтрующий конденсатор.

Пример использования с Arduino

Для тех, кто хочет понять принцип работы не углубляясь в подробности можно использовать библиотеку для работы с датчиком, которую нужно скачать по ссылке и разместить в папке /libraries (всю папку).

Подключение DHT11 к Arduino UNO

После мы подключаем «+» датчика к 5V на плате Arduino, «−» — к GND, и вывод «out» на датчике — к, например, второму цифровому входу.

Для работы с датчиком можно воспользоваться примером из библиотеки (я убрал лишнее, подредактировал и нашпиговал его комментариями).

// подключаем библиотеку
#include "DHT.h"

// к какому пину подключен «out» датчика
#define DHTPIN 2
// тип используемого датчика
#define DHTTYPE DHT11

// инициализация датчика
DHT dht(DHTPIN, DHTTYPE);

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.println("Влажность: " + h + "% RH\tТемпература: " + t + " *C");
}

А теперь баловство в сторону, пора знакомиться ближе.

Передача данных по последовательному интерфейсу (Single-Wire Two-Way)

Все показания датчика отправляются с использованием однопроводной шины, что снижает стоимость и увеличивает расстояние. Чтобы отправить данные по шине требуется использовать специальный протокол передачи данных.

На DHT-11 шина данных подключается с резистором к VDD (Vcc). Поэтому, если ничего не происходит, напряжение на шине равно VDD (Vcc). Логический уровень сигнала в этом случае определяется не напряжением на шине, а длительностью импульса.

Процесс общения с датчиком разделен на три основные стадии:

  1. Запрос к датчику
  2. Ответ датчика о готовности
  3. Передача данных

В упрощенном виде это можно показать так (кликабельно):

На рисунке выше к первой стадии относятся два первых интервала, ко второй — два следующих, к третьей — все остальные.

Запрос к датчику

Чтобы датчик отправил вам показания, ему нужно послать ему соответствующий запрос. Он состоит в том, чтобы опустить напряжение в шине более чем на 18 мс, а затем подтянуть ее обратно на 20–40 мкс. Это действие выводит датчик из спящего режима.

Запрос к датчику DHT11

Сразу после отпускания уровня в шине надо переключиться на прием и ждать ответа датчика.

Ответ датчика о готовности

Это автоматический ответ от датчика, который указывает, что он получил ваш запрос. Датчик опускает уровень сигнала в шине примерно на 54 мкс и снова подтягивает на 80 мкс.

Ответ датчика DHT11 о готовности

После этих этюдов в шину пойдут данные.

Передача данных

Один цикл передачи данных длится около 4 миллисекунд. Полный пакет данных состоит из 40 бит (5 пять блоков по 8 бит).
Формат пакета следующий: первые два блока — это значение влажности (целая и десятичная часть, каждая по 8 бит), следующие два блока — это значение температуры (целая и десятичная часть, каждая по 8 бит), последний блок — это 8 бит контрольной суммы.

8 bit
integral
RH data
8 bit
decimal
RH data
8 bit
integral
T data
8 bit
decimal
T data
8 bit
check sum

Контрольная сумма — это сумма первых четырех блоков. Если ее значение не совпадает с суммой первых четырех блоков, значит полученные данные не верны.

Перед каждым битом уровень в шине опускается на 54 мкс, затем шина снова подтягивается к питанию на 24 или 70 мкс. От длительности этого импульса зависит «0» или «1» была передана.

Логические уровни датчика DHT11

В блоках сначала передаются старшие биты, поэтому каждый блок будет выглядеть как-то так:

Пример блока данных датчика DHT11

После передачи пакета данных датчик снова опускает уровень в шине на 54 мкс, после чего уходит в спящий режим, и шина снова подтягивается к питанию.

Переход датчика DHT11 в спящий режим

Для повторного запроса данных повторяем всю процедуру по новой.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *