Подключение модуля DHT11 к Arduino
Хотите отслеживать климат в вашей теплице, создать систему управления хьюмидором или мониторить температуру и влажность для проекта метеостанции? Модуль датчика температуры и влажности DHT11 может идеально подойти для этой задачи!
Эти модули поставляются готовыми к использованию прямо из коробки, поэтому вам не нужно добавлять дополнительные компоненты для их работы. Вам просто нужно выполнить несколько простых проводных соединений с Arduino и добавить базовый код. После этого вы можете сразу начать измерять как температуру, так и относительную влажность.
В этом руководстве мы рассмотрим некоторые особенности этого модуля, узнаем, как подключить и использовать его с Arduino, и представим библиотеку Arduino с примерами, которые помогут вам начать работу над вашим следующим проектом мониторинга окружающей среды.
Обзор оборудования модуля DHT11
В основе этого модуля лежит цифровой датчик температуры и влажности DHT11 производства AOSONG.
Датчик способен измерять температуру в диапазоне от 0°C до 50°C с точностью ±2,0°C и уровни влажности от 20% до 80% с точностью 5%.
Ещё одна важная деталь — как часто он обновляет показания. DHT11 имеет частоту выборки 1 Гц, что означает, что он может выдавать новые данные один раз в секунду.
Одно из преимуществ использования модуля DHT11 (вместо голого датчика) в том, что он уже содержит всю необходимую обвязку для надёжной работы.
Обычно датчику DHT11 нужен подтягивающий резистор 10 кОм на выводе данных для правильной связи с Arduino. Но этот модуль уже включает этот резистор, поэтому вам не нужно добавлять его самостоятельно. Он также содержит небольшой развязывающий конденсатор, который помогает сглаживать электрические помехи в источнике питания, что помогает показаниям оставаться более стабильными.
Внутреннее устройство датчика DHT11
Если вы откроете датчик DHT11, сняв его корпус, вы обнаружите внутри два основных компонента: NTC-термистор и ёмкостный элемент для измерения влажности.
Часть, отвечающая за измерение влажности, имеет простую, но умную конструкцию. Она состоит из двух металлических электродов со специальным влагопоглощающим материалом (обычно соль или проводящий пластиковый полимер), расположенным между ними. Когда воздух становится более влажным, этот материал поглощает водяной пар из воздуха. По мере поглощения воды он высвобождает крошечные заряженные частицы — ионы. Эти ионы изменяют диэлектрическую постоянную материала (то, как материал реагирует на электричество), что изменяет ёмкость между электродами. Чем влажнее воздух, тем больше изменяется эта ёмкость. Измеряя это изменение, датчик может определить относительную влажность воздуха.
Для измерения температуры датчик использует NTC-термистор. Термистор — это, по сути, особый тип резистора, сопротивление которого значительно изменяется при изменении температуры. Обычные резисторы тоже немного меняют своё сопротивление с температурой, но эти изменения слишком малы, чтобы быть полезными. Термисторы же специально разработаны для больших изменений сопротивления при изменении температуры — часто на 100 Ом и более на каждый градус.
Буквы «NTC» в NTC-термисторе означают «Negative Temperature Coefficient» (отрицательный температурный коэффициент). Это значит, что при повышении температуры сопротивление уменьшается.
Датчик также содержит крошечный чип (ASIC — специализированную интегральную схему, если вы предпочитаете технический термин). Этот маленький, но мощный чип выполняет несколько важных задач: он измеряет сигналы от компонентов влажности и температуры, преобразует аналоговые электрические сигналы в цифровые данные, применяет калибровочные настройки и, наконец, выдаёт цифровой сигнал, который ваш микроконтроллер может понять.
Распиновка модуля DHT11
Модуль DHT11 прост в подключении, так как имеет всего три вывода:
Вывод + (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 Module | Arduino | |
| + (VCC) | 5V | |
| – (GND) | GND | |
| Out | 8 |
На схеме ниже показано, как должно выглядеть подключение.
Установка библиотеки DHT
Датчики DHTxx используют уникальный однопроводной протокол связи для передачи данных о температуре и влажности. Хотя этот протокол не является стандартным, он похож на протокол Dallas 1-Wire и в значительной степени зависит от очень точной синхронизации.
Хорошая новость в том, что вам не нужно разбираться во всех технических деталях работы этого протокола! Существует полезная библиотека `DHTlib `_, которая берёт на себя почти всё.
Для установки библиотеки:
Сначала откройте вашу программу Arduino IDE. Затем нажмите на значок Менеджер библиотек на левой боковой панели.
Введите «dhtlib» в поле поиска для фильтрации результатов.
Найдите библиотеку «DHTlib», созданную Rob Tillaart.
Нажмите кнопку Install, чтобы добавить её в вашу Arduino IDE.
Пример 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
}
После загрузки скетча вы должны увидеть следующий вывод в мониторе последовательного порта.
Объяснение кода:
Давайте разберём, как работает эта программа, шаг за шагом:
Сначала мы подключаем библиотеку 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:
Если вы ранее не работали с символьными LCD-дисплеями 16×2, вам может пригодиться это полезное руководство:
Схема подключения
Теперь подключим LCD к 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);
}