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

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

Описание

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

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

Humidity-sensor.jpg

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

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

DHT11

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

DHT22

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

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

Где купить?

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

Rsz dht-11.jpg

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

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

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

Humidity schematics.jpg

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

  • Контакт 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.
 1 // Тестовый скетч-пример для датчиков DHT, 
 2 // измеряющих температуру и влажность;
 3 // написан ladyada, авторским правом не защищен 
 4 
 5 #include "DHT.h"
 6 
 7 #define DHTPIN 2     // контакт, к которому подключаемся
 8 
 9 // определите, каким именно датчиком вы пользуетесь,
10 // и расскомментируйте соответствующую строчку: 
11 #define DHTTYPE DHT11   // DHT 11 
12 //#define DHTTYPE DHT22   // DHT 22  (AM2302)
13 //#define DHTTYPE DHT21   // DHT 21 (AM2301)
14 
15 // инициализируйте датчик DHT для Arduino, работающей на 16 МГц:
16 DHT dht(DHTPIN, DHTTYPE);
17 
18 void setup() {
19   Serial.begin(9600); 
20   Serial.println("DHTxx test!");  //  "Тест DHTxx!"
21  
22   dht.begin();
23 }
24 
25 void loop() {
26   // 2-секундная задержка между измерениями: 
27   delay(2000);
28 
29   // считывание данных о температуре и влажности 
30   // занимает около 50 мс; кроме того, считанные данные
31   // могут запаздывать примерно на 2 секунды
32   // (это очень медленный датчик): 
33   float h = dht.readHumidity();
34   // считываем температуру в градусах Цельсия:
35   float t = dht.readTemperature();
36   // считываем температуру в градусах Фаренгейта:
37   float f = dht.readTemperature(true);
38   
39   // проверяем, корректно ли прочитались данные,
40   // и если нет, то выходим и пробуем снова: 
41   if (isnan(h) || isnan(t) || isnan(f)) {
42     Serial.println("Failed to read from DHT sensor!");
43     // "Не удалось прочитать данные с датчика DHT!"
44     return;
45   }
46 
47   // рассчитываем тепловой индекс;
48   // для этих расчетов температура должна быть в Фаренгейтах!
49   float hi = dht.computeHeatIndex(f, h);
50 
51   Serial.print("Humidity: ");  //  "Влажность: "
52   Serial.print(h);
53   Serial.print(" %\t");
54   Serial.print("Temperature: ");  //  "Температура: "
55   Serial.print(t);
56   Serial.print(" *C ");
57   Serial.print(f);
58   Serial.print(" *F\t");
59   Serial.print("Heat index: ");  //  "Тепловой индекс: "
60   Serial.print(hi);
61   Serial.println(" *F");
62 }

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

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

Serial monitor.jpg

См.также

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