Использование датчика температуры и влажности DHT11

Цель работы

Научиться использовать датчик температуры и влажности DHT11 с Arduino

Задачи работы

  1. Установить библиотеки для работы с датчиком DHT11
  2. Собрать установку и разработать скетч для Arduino для считывания показаний датчика DHT11

Инструменты для выполения работы

  1. Компьютер с подключением к сети Internet
  2. Плата Arduino с USB интерфейсом (например, Arduino Uno)

Теоретическая часть

Датчик DHT11 представляет собой недорогой датчик температуры и относительной влажности с цифровым выходом. Диапазон измерения температуры - от 0 до 50 градусов Цельсия с точностью 2 градуса, влажности - от 20% до 90% с точностью 5%. Данные передаются через 1Wire интерфейс, для питания датчика необходимо постоянное напряжение от 3 до 5.5 вольт. Потребление тока составляет до 2.5 мА. Для работы с датчиком разработаны несколько готовых библиотек, одна из которых будет использоваться в данной работе.

Выполнение работы

Установка библиотеки для работы с датчиком DHT11

Создаем новый скетч и сохраняем его с названием DHTTest. Проверяем, правильно ли выбрана плата и порт. Открываем менеджер библиотек и находим в списке библиотек две: "Adafruit Unified Sensor" и "DHT sensor library". Устанавливаем обе.
Подключаем к проекту библиотеку "DHT sensor library". В начале скетча должны появиться строки

#include <DHT.h>
#include <DHT_U.h>

Сборка установки и разработка скетча для Arduino для считывания показаний датчика DHT11

Подключаем датчик DHT к Arduino: "-" к gnd, "+" к 5V, средний разъем "out" к цифровому пину 7.
Дорабатываем скетч. До функции setup() создаем глобальную переменную dht, указывая номер цифрового пина 7 и тип датчика DHT11

DHT_Unified dht(7,DHT11);

В функции setup() инициальзируем последовательный порт и датчик

Serial.begin(9600);
dht.begin();

Далее модифицируем функцию loop(), в ней производим следующие действия:
создаем переменную под значения датчика и считываем в нее значение температуры, если значение верное, выводим в Serial температуру, в противном случае выводим сообщение об ошибке

sensors_event_t event;
dht.temperature().getEvent(&event);
if(isnan(event.temperature))
    Serial.println("Error reading temperature!");
else
{
    Serial.print("Temperature: ");
    Serial.print(event.temperature);
    Serial.println(" *C");
}

Повторяем аналогично для влажности

dht.humidity().getEvent(&event);
if(isnan(event.relative_humidity))
    Serial.println("Error reading humidity!");
else
{
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
}

Делаем задержку пол-секунды

delay(500);

Открываем монитор порта, убеждаемся в наличии данных с датчика.