Подключение модуля DHT11 к Arduino

Подключение модуля DHT11 к Arduino

Хотите отслеживать климат в вашей теплице, создать систему управления хьюмидором или мониторить температуру и влажность для проекта метеостанции? Модуль датчика температуры и влажности DHT11 может идеально подойти для этой задачи!

Эти модули поставляются готовыми к использованию прямо из коробки, поэтому вам не нужно добавлять дополнительные компоненты для их работы. Вам просто нужно выполнить несколько простых проводных соединений с Arduino и добавить базовый код. После этого вы можете сразу начать измерять как температуру, так и относительную влажность.

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

Обзор оборудования модуля DHT11

В основе этого модуля лежит цифровой датчик температуры и влажности DHT11 производства AOSONG.

Датчик способен измерять температуру в диапазоне от 0°C до 50°C с точностью ±2,0°C и уровни влажности от 20% до 80% с точностью 5%.

Interface DHT11 Module With Arduino

Ещё одна важная деталь — как часто он обновляет показания. DHT11 имеет частоту выборки 1 Гц, что означает, что он может выдавать новые данные один раз в секунду.

Одно из преимуществ использования модуля DHT11 (вместо голого датчика) в том, что он уже содержит всю необходимую обвязку для надёжной работы.

Interface DHT11 Module With Arduino

Обычно датчику DHT11 нужен подтягивающий резистор 10 кОм на выводе данных для правильной связи с Arduino. Но этот модуль уже включает этот резистор, поэтому вам не нужно добавлять его самостоятельно. Он также содержит небольшой развязывающий конденсатор, который помогает сглаживать электрические помехи в источнике питания, что помогает показаниям оставаться более стабильными.

Внутреннее устройство датчика DHT11

Если вы откроете датчик DHT11, сняв его корпус, вы обнаружите внутри два основных компонента: NTC-термистор и ёмкостный элемент для измерения влажности.

Interface DHT11 Module With Arduino

Часть, отвечающая за измерение влажности, имеет простую, но умную конструкцию. Она состоит из двух металлических электродов со специальным влагопоглощающим материалом (обычно соль или проводящий пластиковый полимер), расположенным между ними. Когда воздух становится более влажным, этот материал поглощает водяной пар из воздуха. По мере поглощения воды он высвобождает крошечные заряженные частицы — ионы. Эти ионы изменяют диэлектрическую постоянную материала (то, как материал реагирует на электричество), что изменяет ёмкость между электродами. Чем влажнее воздух, тем больше изменяется эта ёмкость. Измеряя это изменение, датчик может определить относительную влажность воздуха.

Interface DHT11 Module With Arduino

Для измерения температуры датчик использует NTC-термистор. Термистор — это, по сути, особый тип резистора, сопротивление которого значительно изменяется при изменении температуры. Обычные резисторы тоже немного меняют своё сопротивление с температурой, но эти изменения слишком малы, чтобы быть полезными. Термисторы же специально разработаны для больших изменений сопротивления при изменении температуры — часто на 100 Ом и более на каждый градус.

Буквы «NTC» в NTC-термисторе означают «Negative Temperature Coefficient» (отрицательный температурный коэффициент). Это значит, что при повышении температуры сопротивление уменьшается.

Interface DHT11 Module With Arduino

Датчик также содержит крошечный чип (ASIC — специализированную интегральную схему, если вы предпочитаете технический термин). Этот маленький, но мощный чип выполняет несколько важных задач: он измеряет сигналы от компонентов влажности и температуры, преобразует аналоговые электрические сигналы в цифровые данные, применяет калибровочные настройки и, наконец, выдаёт цифровой сигнал, который ваш микроконтроллер может понять.

Interface DHT11 Module With Arduino

Распиновка модуля DHT11

Модуль DHT11 прост в подключении, так как имеет всего три вывода:

Interface DHT11 Module With Arduino

Вывод + (VCC) подаёт питание на модуль. Модуль может работать с напряжением от 3,3 В до 5,5 В, но рекомендуется использовать 5 В. При питании 5 В датчик обычно может работать на расстоянии до 20 метров (около 65 футов) от микроконтроллера. При 3,3 В он гораздо более чувствителен к падению напряжения, поэтому лучше держать датчик в пределах 1 метра (около 3 футов), иначе показания могут стать неточными.

Out — это вывод, через который датчик отправляет информацию о температуре и влажности в Arduino.

Вывод – (GND) подключается к земле, что замыкает электрическую цепь.

Схема подключения модуля DHT11 к Arduino

Теперь вы готовы подключить модуль DHT11 к Arduino.

Начните с подключения вывода + (VCC) к выводу 5V Arduino. Далее подключите вывод – (GND) к одному из выводов GND Arduino. Наконец, подключите выходной вывод модуля Out к цифровому выводу 8 на Arduino.

Вот краткая справочная таблица подключений:

DHT11 ModuleArduino
+ (VCC)5V
– (GND)GND
Out8

На схеме ниже показано, как должно выглядеть подключение.

Interface DHT11 Module With Arduino

Установка библиотеки DHT

Датчики DHTxx используют уникальный однопроводной протокол связи для передачи данных о температуре и влажности. Хотя этот протокол не является стандартным, он похож на протокол Dallas 1-Wire и в значительной степени зависит от очень точной синхронизации.

Хорошая новость в том, что вам не нужно разбираться во всех технических деталях работы этого протокола! Существует полезная библиотека `DHTlib `_, которая берёт на себя почти всё.

Для установки библиотеки:

  1. Сначала откройте вашу программу Arduino IDE. Затем нажмите на значок Менеджер библиотек на левой боковой панели.

  2. Введите «dhtlib» в поле поиска для фильтрации результатов.

  3. Найдите библиотеку «DHTlib», созданную Rob Tillaart.

  4. Нажмите кнопку Install, чтобы добавить её в вашу Arduino IDE.

Interface DHT11 Module With Arduino

Пример Arduino 1 — Отображение показаний в мониторе последовательного порта

После установки библиотеки скопируйте и вставьте этот скетч в Arduino IDE.

Этот тестовый скетч выведет значения температуры и относительной влажности в монитор последовательного порта. Попробуйте его, а затем мы вместе разберём, как он работает.

#include <dht.h>  // Include library
#define outPin 8  // Defines pin number to which the sensor is connected

dht DHT;  // Creates a DHT object

void setup() {
  Serial.begin(9600);
}

void loop() {
  int readData = DHT.read11(outPin);

  float t = DHT.temperature;  // Read temperature
  float h = DHT.humidity;     // Read humidity

  Serial.print("Temperature = ");
  Serial.print(t);
  Serial.print("°C | ");
  Serial.print((t * 9.0) / 5.0 + 32.0);  // Convert celsius to fahrenheit
  Serial.println("°F ");
  Serial.print("Humidity = ");
  Serial.print(h);
  Serial.println("% ");
  Serial.println("");

  delay(2000);  // wait two seconds
}

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

Interface DHT11 Module With Arduino

Объяснение кода:

Давайте разберём, как работает эта программа, шаг за шагом:

Сначала мы подключаем библиотеку DHT, которая предоставляет команды для связи с модулем DHT11. Затем мы определяем, к какому выводу Arduino подключён выходной вывод модуля (в данном случае вывод 8), и создаём объект DHT, который представляет наш датчик в коде.

#include <dht.h>  // Include library
#define outPin 8  // Defines pin number to which the sensor is connected

dht DHT;  // Creates a DHT object

В разделе setup мы запускаем последовательную связь на скорости 9600 бод. Это позволяет Arduino отправлять информацию на компьютер, чтобы вы могли видеть показания.

void setup() {
  Serial.begin(9600);
}

В основном цикле мы считываем данные с датчика, используя функцию read11(). Эта функция принимает номер выходного вывода датчика в качестве параметра.

int readData = DHT.read11(outPin);

После считывания данных значения влажности и температуры извлекаются из объекта DHT с помощью оператора точки ..

float t = DHT.temperature;  // Read temperature
float h = DHT.humidity;     // Read humidity

Затем мы выводим эти значения в монитор последовательного порта в удобном формате, показывая температуру как в градусах Цельсия, так и в Фаренгейта.

Serial.print("Temperature = ");
Serial.print(t);
Serial.print("°C | ");
Serial.print((t * 9.0) / 5.0 + 32.0);  // Convert celsius to fahrenheit
Serial.println("°F ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println("% ");
Serial.println("");

Температура от датчика по умолчанию приходит в градусах Цельсия (°C), но программа также преобразует её в Фаренгейт по формуле:

T(°F) = T(°C) × 9/5 + 32

// Convert celsius to fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);

Наконец, мы ждём 2 секунды перед следующим считыванием. Эта задержка важна, так как датчику нужно время между считываниями для получения точных результатов.

delay(2000);

Пример Arduino 2 — Отображение показаний на LCD

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

И что может быть лучше для этого, чем символьный LCD-дисплей 16×2? Давайте посмотрим, как подключить к Arduino и LCD, и модуль DHT11.

Вот как будет выглядеть итоговый вывод на LCD:

Interface DHT11 Module With Arduino

Если вы ранее не работали с символьными LCD-дисплеями 16×2, вам может пригодиться это полезное руководство:

Подключение символьного ЖК-дисплея 16×2 к Arduino
Подключение символьного ЖК-дисплея 16×2 к Arduino

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

Теперь подключим LCD к Arduino, как показано на этой схеме:

Interface DHT11 Module With Arduino

Код Arduino

Программа ниже выведет значения температуры и влажности прямо на ваш символьный LCD-дисплей 16×2. Она работает аналогично предыдущему примеру, но вместо отправки показаний на компьютер показывает их прямо на экране LCD, чтобы вы могли читать их в любое время без подключения к компьютеру.

#include <LiquidCrystal.h>  // Include LiquidCrystal Library
#include <dht.h>

#define outPin 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // Create an LCD object.
dht DHT;                                // Create a DHT object

void setup() {
  lcd.begin(16, 2);  // Initialize the LCD
}

void loop() {
  int readData = DHT.read11(outPin);

  float t = DHT.temperature;
  float h = DHT.humidity;

  lcd.setCursor(0, 0);
  lcd.print("Temp.: ");
  lcd.print(t);
  lcd.print((char)223);  //shows degrees character
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Humi.: ");
  lcd.print(h);
  lcd.print("%");

  delay(2000);
}