Arduino:Примеры/Гайд по использованию датчика DHT11/DHT22 вместе с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Гайд по использованию датчика DHT11/DHT22 вместе с Arduino[1]

Это руководство по популярному датчику DHT11/DHT22, собирающему данные о температуре и влажности окружающей среды. Гайд объясняет, как работает этот датчик, демонстрирует некоторые его функции, а также содержит скетч, который можно использовать для своих проектов.

Описание

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

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

Отличия в характеристиках DHT11 и DHT22

Датчик DHTxx выпускается в двух версиях.

DHT11

  • Диапазон измерения влажности: 20-90%
  • Погрешность изменения: +/- 5%
  • Сходимость: +/- 1%
  • Отклонение в измерениях с течением времени: +/- 1% в год
  • Цена: от 1 до 5 долларов

DHT22

  • Диапазон измерения влажности: 0-100%
  • Погрешность изменения: +/- 2%
  • Сходимость: +/- 1%
  • Отклонение в измерениях с течением времени: +/- 0,5% в год
  • Цена: от 4 до 10 долларов

Как видите, DHT22 чуть точнее, чем DHT11.

Где купить?

Обе модели можно купить, к примеру, на eBay:

Подключение DHT11 к плате Arduino

Для этого проекта потребуются следующие компоненты:

Ниже – схема того, как подключить DHT11 к Arduino:

Как подключать контакты:

  • Контакт 1 – к VCC (от 3V до 5V)
  • Контакт 2 – для вывода данных
  • Контакт 3 – не подключен
  • Контакт 4 – к GND

Установка библиотеки DHT и загрузка кода

Во-первых, в IDE Arduino нужно установить библиотеку DHT:

  1. Загрузите библиотеку DHT отсюда.
  2. Распакуйте ее.
  3. Установите библиотеку DHT в IDE Arduino. Для этого поместите папку, находящуюся в распакованной папке, по маршруту «C:\Users\User\Documents\Arduino\libraries»
  4. Перезапустите IDE Arduino.

Во-вторых, загружаем код проекта на плату Arduino.

  1. Либо скопируйте в IDE Arduino код, показанный ниже, либо кликните в IDE Arduino на Файл > Примеры > DHT sensor library > DHTtester (File > Examples > DHT sensor library > DHTtester).
  2. Загрузите код на Arduino.
// Тестовый скетч-пример для датчиков DHT, 
// измеряющих температуру и влажность;
// написан ladyada, авторским правом не защищен 

#include "DHT.h"

#define DHTPIN 2     // контакт, к которому подключаемся

// определите, каким именно датчиком вы пользуетесь,
// и расскомментируйте соответствующую строчку: 
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// инициализируйте датчик DHT для Arduino, работающей на 16 МГц:
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); 
  Serial.println("DHTxx test!");  //  "Тест DHTxx!"
 
  dht.begin();
}

void loop() {
  // 2-секундная задержка между измерениями: 
  delay(2000);

  // считывание данных о температуре и влажности 
  // занимает около 50 мс; кроме того, считанные данные
  // могут запаздывать примерно на 2 секунды
  // (это очень медленный датчик): 
  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");
}

Демонстрация

В этом проекте плата Arduino делает замеры температуры и влажности, а результат отображается на мониторе порта. Примерно так:

См.также

Внешние ссылки