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

52 комментария к статье “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»);

      }

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

      16.11.2017

      Serial.print((String)»Влажность: «+h+» %\t»+»Температура: «+t+» *C «);

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

      30.08.2018

      Вот, например.

      Serial.println((String)»Влажность: » + h + (String)» %\t» + (String)»Температура: » + t + (String)» *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 можно вырезать.

    Ответить на этот комментарий
  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.

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

    01.03.2017

    Serial.print(» Hum: «);
    Serial.print(h);
    Serial.print(» %\t»);
    Serial.print(» Temp: «);
    Serial.print(t);
    Serial.println(» *C»);
    //Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
    //Serial.println(«Влажность: «+h+» %\t»+»Температура: «+t+» *C «);

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

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

    27.03.2017

    Adafruit_Sensor.h: No such file or directory
    #include скачайте библиотеку

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

    31.03.2017

    Добрый день, подключил датчик и дисплей, все ок, подскажите пожалуйста как сделать допустим если температура равна х значению то зуммер будет пищать 1раз в 1 минуту?

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

    04.04.2017

    640.00 *C температуры и 921.6 % влажности — это нормальные показания? О_О

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

    03.06.2017

    Привет!

    Срочно! Как купить электронику из Китая в Томске или в России с бесплатной доставкой курьером? Помогите срочно не могу самому найти интернет магазин…
    Не знаю как выбрать магазин что бы не кинули выручайте!

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

    10.07.2017

    Очень познавательно.

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

    22.11.2017

    Не совсем согласен,

    Ответить на этот комментарий
  26. Константин

    03.01.2018

    Здравствуйте,подскажите что вообще значит // Инициируем датчик
    DHT dht(DHTPIN, DHT22);
    //DHT dht(DHTPIN, DHT11);
    И для чего это нужно???

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

    09.08.2018

    Нит черта не работает , как не качал библиотеку по инструкции без толку — не одного нормального примера с этим датчиком пока не нашел

    Ответить на этот комментарий
  28. Володя

    16.10.2018

    У кого ругается на нечто подобное — «fatal error: Adafruit_Sensor.h: No such file or directory» Установите еще и эту библиотеку:
    https://github.com/adafruit/Adafruit_Sensor

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

    27.10.2018

    Так как библиотека обновлялась то надо провести некоторые изменения в коде.
    Как сказано в условии, качаем библиотеку:
    https://github.com/adafruit/DHT-sensor-library
    Также может понадобиться еще и эта библиотека:
    https://github.com/adafruit/Adafruit_Sensor
    B копируем эти библиотеки в:
    C:\Program Files\Arduino\libraries /путь по умолчанию ,у каждого может быть свой путь/

    Далее выкладываю правильный код:
    //Присвоение портов переменным и подключение библиотек.
    #include «DHT.h» //Подключае библиотеку
    #define DHTPIN 2 // Назначаем номер порта
    #define DHTTYPE DHT22 //Задаем тип датчика
    DHT dht(DHTPIN, DHT22); // Инициируем датчик
    // код установки, запускается один раз:
    void setup() {
    Serial.begin(9600); //Инициирует последовательное соединение и задаетскорость передачи данных с ПК
    dht.begin(); //Назначает указанный выше пин как выходной параметр, и обнуляет счётчик времени между запросами температуры.
    }
    // основной код, для цыкличного запуска:
    void loop() {
    delay(2000); // Задержка 2 секунды между измерениями
    float h = dht.readHumidity(); //Считываем влажность
    float t = dht.readTemperature(); // Считываем температуру
    // Проверка удачно прошло ли считывание.
    if (isnan(h)||isnan(t)) { //||isnan(f)
    Serial.println(«Не удается считать показания»);
    return;
    }
    // Передаем значения на ПК
    Serial.print(«Влажность: «);
    Serial.print(h);
    Serial.print(«%\t»);
    Serial.print(«Температура: «);
    Serial.print(t);
    Serial.println(«°C»);
    }

    Ответить на этот комментарий
  30. Михаил

    04.12.2018

    скажите чайнику пж код чтобы если t>26 е\то чтобы светодиод загорался

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

    18.01.2019

    У меня ардуино не хочет принимать float, что делать?

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

    21.01.2020

    пАМАГИТЕ

    In file included from D:\ardyino\programma\arduino-1.8.9\libraries\DHT-sensor-library-master\DHT_U.cpp:15:0:

    D:\ardyino\programma\arduino-1.8.9\libraries\DHT-sensor-library-master\DHT_U.h:36:29: fatal error: Adafruit_Sensor.h: No such file or directory

    compilation terminated.

    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.

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

    21.05.2020

    скетч чюхня удалил половину пофиксите пж

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

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

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