Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22

Конструкторы для обучения детей робототехнике

Share Button

bannerПродолжаем серию уроков “Arduino для начинающих”. Сегодня мы разберем подключение к Arduino датчиков температуры и влажности DHT11 и DHT22.

Датчики DHT11 и DHT22 не обладают высоким быстродействием и точностью, но зато просты, недороги и отлично подходят для обучения. Они выполнены из двух частей — емкостного датчика влажности и термистора. Чип, находящийся внутри, выполняет аналого-цифровое преобразование и выдает цифровой сигнал, который можно считать с помощью любого микроконтроллера.

Список деталей для сборки модели

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

  • плата Arduino (подробнее, о том как выбрать Arduino здесь);
  • датчик DHT11 или DHT22 (можно купить, например, здесь или здесь);
  • Breadboard;
  • резистор на 10 кОм;
  • программа Arduino IDE, которую можно скачать с сайта Arduino.

Датчик DHT11 входит в состав набора из 37 датчиков и других компонентов за $37.

weather_dhtsensors

Датчики DHT11 и DHT22

Чем отличаются датчики DHT11 и DHT22?

Две версии сенсоров DHT похожи друг на друга и имеют одинаковую распиновку. Их отличия в характеристиках. Спецификации:

Сенсор DHT11:

  • определение влажности в диапозоне 20-80%
  • определение температуры от 0°C до +50°C
  • частота опроса 1 раз в секунду

Сенсор DHT22:

  • определение влажности в диапазоне 0-100%
  • определение температуры от -40°C до +125°C
  • частота опроса 1 раз в 2 секунды

Таким образом, характеристики датчика DHT22 лучше по сравнению с DHT11, и поэтому он чуть-чуть дороже. Снимать показания чаще, чем раз в 1-2 секунды не получится, но, возможно, для вашего проекта более высокое быстродействие и не требуется.

Подключение сенсоров DHT к Arduino

Датчики DHT имеют стандартные выводы и их просто установить на breadboard.

Датчики DHT имеют 4 вывода:

  1. питание.
  2. вывод данных
  3. не используется.
  4. GND (земля).

Между выводами питания и вывода данных нужно разместить резистор номиналом 10 кОм.

Датчик DHT часто продается в виде готового модуля. В этом случае он имеет три вывода и подключается без резистора, т.к. резистор уже есть на плате.

Схема подключения датчика с резистором:

Схема подключения датчика DHT к Arduino

Arduino скетч

Воспользуемся библиотекой DHT.h, созданной специально для датчиков DHT. Ее можно скачать здесь. Для использования нужно поместить скачанную папку в в папку /libraries.

Пример программы для работы модели с датчиком DHT22 (можно просто скопировать в Arduino IDE):
#include "DHT.h"
#define DHTPIN 2 // номер пина, к которому подсоединен датчик
// Раскомментируйте в соответствии с используемым датчиком
// Инициируем датчик
DHT dht(DHTPIN, DHT22);
//DHT dht(DHTPIN, DHT11);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
// Задержка 2 секунды между измерениями
delay(2000);
//Считываем влажность
float h = dht.readHumidity();
// Считываем температуру
float t = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) {
Serial.println("Не удается считать показания");
return;
}
Serial.print("Влажность: "+h+" %\t"+"Температура: "+t+" *C ");
}
При использовании датчика DHT11 закомментируйте строку:
DHT dht(DHTPIN, DHT22);
И раскомментируйте строку:
//DHT dht(DHTPIN, DHT11);
Загрузите скетч в контроллер и проверьте правильность работы при помощи Сервис->Монитор порта:

weather_dhtout

Показания температуры и влажности (Монитор порта)

Вы должны увидеть температуру и влажность. Изменения можно увидеть, например, выдыхая на датчик (как для затуманивания окна). Дыхание увеличивает влажность.

Смотрите также:
Учебный курс “Arduino для начинающих”: главная страница.

Посты по урокам:

  1. Первый урок: Светодиод
  2. Второй урок: Кнопка
  3. Третий урок: Потенциометр
  4. Четвертый урок: Сервопривод
  5. Пятый урок: Трехцветный светодиод
  6. Шестой урок: Пьезоэлемент
  7. Седьмой урок: Фоторезистор
  8. Восьмой урок: Датчика движения (PIR) и E-mail
  9. Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22

Все посты сайта “Занимательная робототехника” по тегу Arduino.

Наш YouTube канал, где публикуются видео-уроки.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Автор Александр Гагарин. В статье использованы материалы learn.adafruit.com.

Share Button

29 комментариев к статье “Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22”

  1. Давид

    17.07.2015

    При компиляции выдало: Arduino: 1.6.5 (Windows 7), Плата»Arduino Uno»

    Изменена опция сборки, пересобираем все

    sketch_jul16a.ino: In function ‘void loop()’:
    sketch_jul16a:45: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
    invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
    и розовым цветом выделена строчка Serial.print(«Влажность: «+h+» %\t»+»Температура: «+t+» *C «);
    Эта строка как-то неправильно написана?
    Спасибо всем, кто подскажет

    Ответить на этот комментарий
    • Денис

      17.07.2015

      В Ардуино нормально строка не формируется. Все, что нужно вывести, нужно написать отдельными Serial.print

      Ответить на этот комментарий
    • koa73

      17.09.2016

      Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);

      Ответить на этот комментарий
    • Пруфпик

      29.10.2016

      Для DHT11 со встроенным резистором на плате рабочая программа будет такой. Вывод с — (правый) от датчика подключаем к GND Arduino, средний вывод (это +) подключаем на разъем 5V, левый вывод (это сигнал) подключаем к цифровому пину с цифрой 2.

      #include «DHT.h»

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

      // Раскомментируйте в соответствии с используемым датчиком

      // Инициируем датчик

      //DHT dht(DHTPIN, DHT22);

      DHT dht(DHTPIN, DHT11);

      void setup() {

      Serial.begin(9600);

      dht.begin();

      }

      void loop() {

      // Задержка 2 секунды между измерениями

      delay(2000);

      //Считываем влажность

      float h = dht.readHumidity();

      // Считываем температуру

      float t = dht.readTemperature();

      // Проверка удачно прошло ли считывание.

      if (isnan(h) || isnan(t)) {

      Serial.println(«Не удается считать показания»);

      return;

      }

      Serial.print(«Hum: «);
      Serial.print(h);
      Serial.print(» Temp: «);
      Serial.print(t);
      Serial.println(» C»);

      }

      Ответить на этот комментарий
  2. Андрей

    16.11.2015

    У меня датчик DHT11 в виде готового модуля с тремя выводами. ВНИМАНИЕ: левый пин — данные, средний — питание, правый — земля.
    В скачанной бbблиотеке DHT есть скетч с примером использования датчика — работает без изменений. По сравнению с другим прибором температуру DHT11 показывает +/- один градус, а влажность завышает на 6 %.

    Ответить на этот комментарий
  3. Андрей

    03.01.2016

    При проверке выдает следующее сообщение :
    E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory

    #include «DHT.h»

    ^

    compilation terminated.

    exit status 1
    Ошибка компиляции.
    что делать?

    Ответить на этот комментарий
  4. Андрей

    03.01.2016

    E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory

    #include «DHT.h»

    ^

    compilation terminated.

    exit status 1
    Ошибка компиляции.
    Что делать?

    Ответить на этот комментарий
  5. Александр

    07.01.2016

    эта ошибка когда не подключил библиотеку, либо коряво скачалось, у меня все работает на китайском ардуино uno

    Ответить на этот комментарий
  6. Дмитрий

    15.01.2016

    все очень понятно написано . а будет продолжение ?

    Ответить на этот комментарий
  7. Роман

    19.01.2016

    Скетч не верный!
    Из примера к библиотеке работает. В приведенном примере нет.

    Ответить на этот комментарий
  8. Андрей

    13.02.2016

    #include «DHT.h»
    //#include «iostream»
    #define DHTPIN 10
    int ledtest = 6;
    DHT dht(DHTPIN, DHT11);

    void setup()

    {

    pinMode(led, OUTPUT);
    pinMode(ledtest, OUTPUT);
    Serial.begin(9600);
    dht.begin();

    }

    void loop()
    {

    delay(1000);
    //setlocale(LC_ALL,»RUS»);
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t))
    {
    Serial.println(«no info»);
    digitalWrite(ledtest, LOW);
    return;
    }
    else
    {
    digitalWrite(ledtest, HIGH);
    //****** НЕФОРМИРУЮЩАЯСЯ СТРОКА ВЫВОДА пришлось писать её раздельно.
    Serial.print(«Humidity: «); Serial.print(h); Serial.print(«% «); Serial.print(«Temp: «); Serial.print(t); Serial.println(«*C» );
    }
    }

    вот полностью рабочий вариант.
    у меня там ещё диод как индикатор стоит, часть с ledset можно вырезать.

    Ответить на этот комментарий
    • Виталий

      14.09.2016

      у вас в тексте программы ошибки. pinMode(led, OUTPUT) не описана как переменная, вы, наверное, имели ввиду ledtest вместо led

      Ответить на этот комментарий
  9. Kirill

    14.02.2016

    Как сделать когда выше 25 градусов включался контакт 4 вентилятор. Помогите пожалуйста.

    Ответить на этот комментарий
  10. Dmirtiy

    28.02.2016

    Kirill, примерно так:

    t — температура, конечно.
    ledPin = вывод для управляющего сигнала (у меня загорается светодиод, например)
    Ну и для контроля вставля дополнительные надписи в порт, их можно убрать.

    if (t > 25)
    {
    analogWrite(ledPin, 255);
    Serial.println(«Warning!!!»);
    }
    else
    {
    analogWrite(ledPin, 0);
    Serial.println(«NO Warning!!!»);
    }

    Ответить на этот комментарий
  11. Леонид

    20.04.2016

    подскажите плис, как вывести данные с датчика на LCD Keypad Shield

    Просто на экран, понятно..

    Ответить на этот комментарий
  12. Роман

    23.09.2016

    This report would have more information with
    «Show verbose output during compilation»
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows XP), Board: «Arduino Uno»
    sketch_sep23a.ino: In function ‘void loop()’:
    sketch_sep23a:46: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’

    Скопировал. Проверку не проходит.

    Ответить на этот комментарий
  13. dikikh.dm

    06.10.2016

    Всем доброй ночи, никак не могу завести dht11, все время не удается считать показания. Пробовал менять местами пины 5В и вывода иноформации, как советовали выше — не помогло.
    Датчик температуры работает отлично.
    Дохлый dht 11 попался?

    Ответить на этот комментарий
  14. Олег

    05.12.2016

    Подключал датчик через дашборд, выдавал нулевые значение в мониторе порта, подключил напрямую провода (от ардуино сразу к датчику), все заработало.

    Ответить на этот комментарий
  15. Олег

    05.12.2016

    Разобрался с дашбордом, я новичок, поэтому не знал что дорожки плюс и минус на ней работают только до половины, а дальше разрыв, датчик установил на вторую половину, а подключил к + и GND первую половину.

    Ответить на этот комментарий
  16. Сергей

    09.12.2016

    Что за ошибка в библиотеке? При проверке выскакивает. На Ардуино IDE

    In file included from G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.cpp:22:0:

    G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory

    #include

    ^

    compilation terminated.

    Используем библиотеку DHT-sensor-library-master версии 1.3.0 из папки: G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master
    exit status 1
    Ошибка компиляции для платы Arduino Nano.

    Ответить на этот комментарий
  17. Алексей

    20.02.2017

    У кого ошибка при компиляции как у Сергея, установите библиотеку версии 1.2.3 .
    И строка вывода:
    Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
    как писал koa73

    Ответить на этот комментарий
  18. Алексей

    20.02.2017

    У кого ошибка как у Сергея, установите версию библиотеки 1.2.3.

    Ответить на этот комментарий

Оставить комментарий

© 2014-2017 Занимательная робототехника, Гагарина Д.А., Гагарин А.С., Гагарин А.А. All rights reserved / Все права защищены. Копирование и воспроизведение в любой форме запрещено.
Наверх
Яндекс.Метрика