Для Arduino существует большое количество датчиков и модулей измерения температуры. Модули KY-001, KY-013 мы уже рассмотрели в предыдущих уроках. Сегодня поговорим о модуле KY-015, который оснащен датчиком DHT11, он может измерять не только температуру, но и влажность воздуха.
Описание модуля KY-015 с датчиком DHT11.
Модуль датчика температуры и влажности KY-015 обеспечен цифровым последовательным интерфейсом для измерения влажности и температуры и передачи показаний Arduino.
Технические характеристики KY-015.
Модуль KY-015 состоит из цифрового датчика влажности и температуры DHT11 и резистора 1 кОм. DHT11 использует внутренний термистор и емкостной датчик влажности для определения условий окружающей среды, а внутренний чип отвечает за преобразование показаний в последовательный цифровой сигнал.
Рабочее напряжение
|
От 3,3 до 5,5 В
|
Диапазон измерения влажности
|
От 20% до 90%
|
Точность измерения влажности
|
± 5%
|
Разрешение измерения влажности
|
1%
|
Диапазон измерения температуры
|
От 0 ºC до 50 ºC
|
Точность измерения температуры
|
± 2 ºC
|
Разрешение измерения температуры
|
1 ºC
|
Дальность передачи сигнала
|
20 м
|
Схема подключения модуля KY-015 с датчиком DHT11 к Arduino UNO.
Схема подключения модуля KY-015 с датчиком DHT11 к Arduino NANO.
Подключаем линию питания (посередине) и землю (-) к +5 и GND соответственно. Сигнал (S) подключаем к контакту 2 на Arduino.
Пример скетча KY-015 для Arduino без использования библиотек.
int DHpin = 2; // pin ввода/вывода
byte dat[5];
byte read_data()
{
byte i = 0;
byte result = 0;
for (i = 0; i < 8; i++) {
while (digitalRead(DHpin) == LOW); // ждать 50 микрсек.
delayMicroseconds(30); //Продолжительность высокого уровня оценивается для определения того, являются ли данные " 0 " или "1"
if (digitalRead(DHpin) == HIGH)
result |= (1 << (8 - i)); //Высоко в начале, низко в посте
while (digitalRead(DHpin) == HIGH); //Данные '1', ожидание следующего бита приема
}
return result;
}
void start_test()
{
digitalWrite(DHpin, LOW); //Потяните вниз шину, чтобы отправить сигнал запуска
delay(30); //Задержка превышает 30 мс, так что DHT 11 может обнаружить сигнал запуска
digitalWrite(DHpin, HIGH);
delayMicroseconds(40); //Дождитесь ответа DHT11
pinMode(DHpin, INPUT);
while(digitalRead(DHpin) == HIGH);
delayMicroseconds(80); // DHT11 реагирует, потянув шину низко на 80 микрсек.
if(digitalRead(DHpin) == LOW)
delayMicroseconds(80); //DHT11 подтянут 80 микрсек, чтобы начать отправку данных;
for(int i = 0; i < 5; i++) //При получении данных о температуре и влажности контрольные биты не учитываются;
dat[i] = read_data();
pinMode(DHpin, OUTPUT);
digitalWrite(DHpin, HIGH); //После завершения отпускаем шины данных, ожидая, когда хост начнет следующий сигнал
}
void setup()
{
Serial.begin(9600);
pinMode(DHpin, OUTPUT);
}
void loop()
{
start_test();
Serial.print("Humdity = ");
Serial.print(dat[0], DEC); //Отображает целочисленные биты влажности;
Serial.print('.');
Serial.print(dat[1], DEC); //Отображает десятичные знаки влажности;
Serial.println('%');
Serial.print("Temperature = ");
Serial.print(dat[2], DEC); //Отображает целочисленные биты температуры;
Serial.print('.');
Serial.print(dat[3], DEC); //Отображает десятичные знаки температуры;
Serial.println('C');
byte checksum = dat[0] + dat[1] + dat[2] + dat[3];
if (dat[4] != checksum)
Serial.println("-- Checksum Error!");
else
Serial.println("-- OK");
delay(1000);
}
Данный пример кода можно загрузить в Arduino и получать показания с датчика DHT11. Предварительно ничего настраивать и устанавливать не нужно. В мониторе порта мы увидим значения температуры и влажности с датчика DHT11.
Пример кода с использованием библиотеки «DHT sensor library».
Для данного примера нам понадобиться библиотека «DHT sensor library». Установить ее можно через менеджер библиотек, для этого переходим «Скетч -> Подключить библиотеку -> Управлять библиотеками…».
В строке поиска указываем «
DHT11» и устанавливаем библиотеку «DHT sensor library». Для этого нажимаем на кнопку «Установка».
Для работы библиотеки «
DHT sensor library» нужна библиотека «
Adafruit_Sensor», которую можно скачать с сайта
github или внизу урока, в разделе «
Файлы для скачивания».
Скачать библиотеку с github можно выбрав «Code -> Download ZIP».
После чего в Arduino IDE выбираем «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку…».
Выбираем скаченный архив с библиотекой.
С библиотекой устанавливается 2 примера. Один из которых мы будем использовать в нашем уроке. Для этого переходим в меню «Файл -> Примеры -> DHT sensor library -> DHTtest».
В данном примере нам нужно указать пин подключения модуля. Также раскомментировать строчку подключения нашего датчика.
#include "DHT.h"
#define DHTPIN 2 // контакт, к которому подключаемся
// и расскомментировать строчку датчика:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// инициализируйте датчик DHT
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
delay(2000);
// считывание данных температуры и влажности
float h = dht.readHumidity();
// температура в Цельсиях:
float t = dht.readTemperature();
// температура в Фаренгейте:
float f = dht.readTemperature(true);
// проверяем, корректно ли прочитались данные,
// и если нет, то пробуем еще раз:
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
// "Не данных с DHT!"
return;
}
// рассчит теплового индекса;
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: "); // "Влажность: "
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: "); // "Температура: "
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: "); // "Тепловой индекс: "
Serial.print(hi);
Serial.println(" *F");
}
Также не забудьте, чтобы строчки подключения других датчиков были закомментированы.
Загружаем пример и смотрим в мониторе порта.
Как видим все работает отлично и показания выводятся. При этом значения достаточно стабильные. Точность показаний я не стал проверять, как делал с модулем KY-013. Это вы можете сделать самостоятельно.
Вывод про модуль KY-015.
В связи с тем, что модуль оснащён датчиком
DHT11, показания температуры и влажности не очень точные, но при этом применять его для измерения температуры и влажности в бытовых условиях можно. Например, настроить автоматическое включения вытяжки в ванной, данного модуля будет достаточно и не стоит покупать более дорогие аналоги.
Понравился Урок KY-015 - Модуль с датчиком температуры и влажности DHT11? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
|
Пример скетча KY-015 для Arduino без использования библиотек.ino | 3 Kb | 880 |
Скачать
Вы можете скачать файл.
|
|
Пример кода с использованием библиотеки «DHT sensor library».ino | 2 Kb | 933 |
Скачать
Вы можете скачать файл.
|
Комментарии