Блог о программировании, электронике и рыбалке

Arduino и датчик температуры и влажности DHT22

температура влажность DHT22 Arduino  arduino  Получил на почте долгожданную посылку с новыми железяками для Arduino. Среди них был и цифровой датчик температуры и влажности DHT22. В этой статье я опишу процесс подключения его к Arduino.

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

  • Диапазон измерения влажности: 0 ~ 100% RH ± 2%
  • Диапазон измерения температуры:  -40 ~ 125'C ± 0,5 'C
  • Напряжение питания: 3,3 - 6 В.

На датчике есть 3 вывода для подключения его к внешним устройствам.

температура влажность DHT22 Arduino  arduino

Подключение DHT22 к Arduino

  • Вывод 1 на DHT22 к +5V на Arduino
  • Вывод 2 на DHT22 к 2 пину на Arduino
  • Вывод 3 на DHT22 к GND на Arduino
  • Между 1 и 2 выводами на DHT22 необходимо подключить резистор на 10 кОм

Если у вас датчик без переходной платы, то выводы маркируются так:

  • Вывод 1 - +5V
  • Вывод 2 - данные
  • Вывод 3 - не используется
  • Вывод 4 - GND

температура влажность DHT22 Arduino  arduino

В результате должно получиться что-то подобное:

температура влажность DHT22 Arduino  arduino

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

dht.rar (2,9 KiB, 6 550 hits)

Скачайте архив и распакуйте его содержимое в \arduino-1.xx\libraries\

Теперь загрузим тестовый скетч, который будет отображать влажность и температуру в окне Монитора порта.

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT22  

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop() {

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  }
  else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }
}

Результат нашей работы:

температура влажность DHT22 Arduino  arduino

Установка датчика температуры и влажности

Датчики температуры и влажности устанавливаются на высоте 2 м над землёй в метеобудке : это небольшой деревянный ящик (размером приблизительно 40*40*40 см) с белыми, отражающими свет перфорированными или жалюзийными стенками, а также солнцеводозащитным козырьком (крышка будки должна быть герметичной и иметь наклон для стекания осадков с будки).

© meteocenter.net

  • vertical_align_bottomArduino и датчик температуры и влажности DHT22
    • Автор:
    • Язык: ru-RU
    • Миниатюра: https://geekelectronics.org/wp-content/uploads/2013/06/image.png
    • Рубрика: Arduino
    • Метки: , , ,
    • Обновлено: 15.08.2017
    • Комментариев: 31
    • Просмотров: 52 494
  • Оцените статью - я старался
    1 Star2 Stars3 Stars4 Stars5 Stars (11 votes, average: 5,00 out of 5)
    Загрузка...
  • Поделитесь с друзьями
logo

Комментариев: 31

  • Иван:

    как изменить код программы чтобы к Ардуине подключить 2 или 3 датчика DHT22 ?
    к отдельным цифровым входам ? Если не сложно выложите скетч с комментарием. Спасибо

  • Иван:

    нужно контролировать температуру и влажность в двух местах с помощью одной Mega2560

    • source:

      К сожалению у меня сейчас нету этих датчиков - не смогу проверить варианты использования нескольких штук.

  • Олег:

    Здравствуйте! Вкраце плата мега 2560 датчик DHT11 и резистор 10 КоМ показывает влажность 1770 температура 742, скетч ваш. Подскажите куда копать или это датчик бракованный.

    • source:

      Если у вас датчик без переходной платы, то выводы маркируются так:
      Вывод 1 - +5V
      Вывод 2 - данные
      Вывод 3 - не используется
      Вывод 4 - GND

      Исходя из ваших данных могу предположить, что 1770 - это все-таки температура 17,7
      742 - атмосферное давление
      Правда если скетч действительно не меняли, то не знаю почему так вышло.

      Возможно, что датчик все-таки вышел из строя. Я когда свой перепаивал, то спалил. Уж очень они боятся перегрева.

  • Олег:

    Датчик не паял, он с переходной платой с 3 выводами, пишет humidity 1770.00 %, делал все через монтажную плату.

    • Андрей:

      DHT11 выдаёт только целые значения влажности и температуры. Вариант 17,70 отпадает. Обратите внимание что объявить надо DHT11 а не DHT22.

  • 123ksn:

    Не удержался.
    Получил посылку из Китая с датчиками DHT11. Встала задача быстро проверить. В наличие есть Arduino Mega2560. Задал поисковый запрос Яндексу. Попал на ваш сайт. Прочитал статью.
    Извините за прямоту, но очередная дебильная статья. Не потому, что неправильная, а потому, что недоделанная! Увы, таких авторов большинство. Вы для кого пишите? Новичков или профи?
    Если для новичков, то здорово, что есть фотки. НО!
    1)Ардуин есть куча. Ваша статья только для Mega2560 или для других тоже подходит?
    2)"необходимо установить дополнительную библиотеку DHT." Вы думаете новички понимают вашу умную терминологию? Я написал бы так: Что бы "рассказать" Ардуино как общаться с датчиком DHT11 надо установить "объяснялку" (называется "библиотека"). И далее как у вас.
    3)Ну почему надо везде лепить слово "скетч"? Где Вы даете определение этого понятия?
    4)"Теперь загрузим тестовый скетч". Загрузим КУДА? В блокнот, ворд? Я написал бы: Скопируем приведенную ниже текст программы для Ардуино (скетч) в предварительно запущенную на компьютере специальную программу для работы с Ардуино (Arduino IDE).
    5) Где вы указываете на необходимость компиляции?
    6) Где вы указываете на необходимость заливки в Ардуино?
    7)А где должен отобразиться результат работы программы вообще не указываете! Я предполагаю, что у вас картинка гипертерминала?
    8)А почему используется вывод 2 Ардуино? А не 3,4,5...?
    9)Почему +5вольт, а не +3.3? Теперь в интернете много "граматеев", которые пишут просто бред. Стрёмно подавать повышеное питание, когда есть рядом пониженное!!!
    10)Если мои предположения верны, что на картинке гипертерминал виндовс, то его надо настраивать! Где настройки?
    11)Почему COM36?
    Коль беретесь писать для новичков, так потрудитесь подавайть информацию полностью! Это добавит всего-то пяток "лишних" предложений, а "картина" будет понятной!

    • source:

      Не буду с вами спорить - всем не угодишь.
      Рекомендую просмотреть видеоуроки по Arduino на русском http://chingachgook.net/arduino/videouroki-po-arduino-na-russkom.html
      После просмотра у вас появится кое-какой багаж знаний и закроется много вопросов.
      Если что-то не будет получаться - пишите. Попробую помочь.

      • Сергей:

        Человек, который начал работать с датчиком температуры и влажности (я купил за 345 рублей) наверное имеет понятие о портах, скетч и т.д. Новички обычно проводят эксперименты со светодиодами за 20 рублей. Немного помучиться тоже не мешает. Когда разжёванное в рот кладут - тоже не айс. Статья классная, у меня всё получилось. Спасибо.

    • Алексей:

      Никогда не понимал, таких... Люди делятся знаниями, подсказывают.. Хорошо ли это делают, плохо-ли - но делают. А такие "умники" как ты, не способные понять, почему 5В, и пин 2, а не 3,4,5 лепят целую статью левой критики, вместо того чтобы дельное что-нить написать. Или ты профи и решил над человеком постебаться? Так на кой тебе тогда этот убогий DHT11 и Arduino?
      Не нравится - не читай. Написал что-то дельное? Выкладывай ссылки - почитаем, обсудим. Нет, не написал? Так и тусуйся со своим больным самолюбием!

      • Виктор Глебов:

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

        #include "DHT.h"
        #include
        #include
        #include

        #define DHTPIN 2 //пин для датчика DNT22
        #define DHTTYPE DHT22

        BMP085 dps = BMP085();
        LiquidCrystal lcd(11, 10, 9, 8, 7, 6);//распиновка экрана
        long Temperature = 0, Pressure = 0;
        DHT dht(DHTPIN, DHTTYPE);
        float h;
        float t;

        void setup() {
        Serial.begin(9600);
        Serial.println("DHT22 test!");
        dht.begin();
        lcd.begin(16, 2);
        lcd.clear();
        Wire.begin();
        dps.init(MODE_STANDARD, 0, true);
        //dps.init();
        delay(1000);
        }
        void pr (){
        lcd.setCursor(0, 0);
        lcd.print(Pressure/133.3);
        lcd.print("mm");
        lcd.setCursor(10, 0);
        lcd.print(Temperature*0.1);
        lcd.print("C ");

        lcd.setCursor(0, 1);
        lcd.print(h);
        lcd.print("%");
        lcd.setCursor(10, 1);
        lcd.print(t);
        lcd.print("C ");
        }

        void loop() {

        h = dht.readHumidity(); // Назначаем переменную для датчика DNT22
        t = dht.readTemperature();// Назначаем переменную для датчика DNT22

        // if (isnan(t) || isnan(h)) {
        // Serial.println("Failed to read from DHT");
        // }
        // else {

        dps.getPressure(&Pressure);
        dps.getTemperature(&Temperature);

        pr();

        delay(1000);

        // }
        }
        Экран LCD1602.
        Сборка высоту не показывает.Для калибровки давления нужно поправит строчку Место нуля задать высоту в миллиметрах, если не ошибаюсь. Датчик BMP85 подключается на PIN A4,A5 .
        dps.init(MODE_STANDARD, 0, true);

        Да и для систем слежения за температурой не пойдет, только как метеостанция. При ошибке опроса датчика, температура зависает, нужно перезагрузка. Конечно можно дописать но у меня нет датчиков для проверки.

    • Алексей:

      Очень грубо, дорогой... Статья норм. Да, не всё пояснено.
      Но ты неправ 123ksn. Ардуино это не конструктор для детей. Не понял? Сиди, ищи, разбирайся, изучай. А не гони на других.

    • читатель:

      Так напишие лучше. Покажите всем как надо. В заголовке нет фразы Дл начинающих. Это не самоучитель. Согласен что статью можно глубоко развить, но не изначально необходимыми знаниями. Даже в статье как сделать детекторный приемник не учат азам электроники. Для меня это первая программа на ардуине после его покупки. Но все понятно, поскольку прежде чем читать как работать с датчиками ознакомился с азами самого ардуиностроения, как и многие другие, надеюсь.

  • Олег:

    Я новичек собрал машину-робота по описанию source, за что ему БОЛЬШОЕ СПАСИБО. Все понятно.
    ИМХО- просто голову включать надо это не просто конструктор для детей от 3 лет.
    P.S. сейчас собираю квадрокоптер - тоже новичек.

  • Вася:

    DHT dht(DHTPIN, DHTTYPE);
    error: 'dht' was not declared in this scope

    • AlexeyKr:

      Используйте библиотеку из архива. если конечно еще актуален вопрос.
      Автору респект. Промучался два дня пытаясь запустить другую библиотеку DTH с автоопределением сенсора. Эта завелась с пол-пинка.

  • Вася:

    АРдуино Леонардо. Я новичек. Непонятна причина ошибки если честно.

  • Алексей:

    Вопрос: Сколько датчиков может повиснуть на одной линии (они же 1-Ware, или я ошибаюсь?) и на каком расстоянии?

  • CoolRoot:

    Эй, народ! Все конечно здорово, все должно заработать. Но зачем программа ради программы? Тем более, применяется такая мощная железяка, аж 2560!
    Вот сколько времени уходит на то, чтобы получить с этого датчика значения? А что в это время делает (или все-таки должен!) делать сам контроллер?
    Вопросы к тем, у кого несколько штук таких датчиков на одной линии данных:
    1. сколько времени уходит у процессора на обработку данных с датчиков, на принятие решения?
    2. есть ли возможность насесть на какое-то прерывание или еще как-то, чтобы выполнять нечто полезное между посылкой запроса на датчик и появлением готовых данных у него?
    Хочется верить, что Ардуины у вас не для того, чтобы в ГиперТерминале смотреть на текущие влажность и температуру.

  • александр:

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

  • Алина:

    объясните пожалуйста, я в ардуино новичок, и не по своему желанию
    У меня такой же датчик DHT22, как собирать я поняла, а вот как запустить программу нет, вопрос вот в чем "Если мне нужно датчик еще с дисплеем собрать, то мне куда писать программу? когда я собрала без дисплея то я заходила в файл - образцы -DHT -DHTtester " а с дисплеем как ?
    Уж простите. за такой банальный вопрос, но не понимаю

    • Максим:

      Построил простенькую метеостанцию с дисплеем от Nokia 5110
      За основу взял стандартную программу DHTtester и немного переписал её под работу с дисплеем, разумеется ещё понадобиться библиотека для работы с дисплеем.

    • source™:

      я бы все-таки порекомендовал для начала ознакомиться со всеми материалами тут http://chingachgook.net/arduino/videouroki-po-arduino-na-russkom.html
      Появится первоначальный багаж знаний и многие вопросы отпадут

    • Андрей:

      А вы от датчика значение влажности телепатическим путём получали?
      Конечно нет. Не знаю но догадываюсь, что , так сказать, печатали в порт, т.е. смотрели на экране компьютера используя наверное соответствующую команду например такую как Sereal.print(...);
      Для дисплея, который Вы собираетесь использовать, тоже наверняка есть написанная библиотека которую просто надо будет включить в код так же как это делается с библиотекой самого датчика #include "DHT.h"
      Затем использовать команду для печати только уже на дисплей. Как и в библиотеке к датчику, к дисплею должны быть примеры, простейшие типа "hello world". Так собственно можно и подсмотреть как вывести не строку символов (слова) а значение (числовое). Так же обратите внимание что не все библиотеки выводят тип float, как это в примере с датчиком. (Я вот из всех написаных мною библиотек к дисплеям функцию вывода float и тем более word не писал. Проще преобразовать) Нужно будет просто преобразовать тип но это уже совсем другая история. Если чего, обращайтесь, поможем.

  • Андрей:

    P.S. Подскажите какой экранчик собираетесь использовать а мы посоветуем библиотеку а может даже из собственного творения поделюсь ;)

  • Turok:

    Добрый день Автор,

    у меня показывает все по нулям...не паял не грел не бил об стенку...пробовал с подтягивающим резистором и без. Все равно показывает только нули :( Что это может быть?

    • Chambo:

      Какую плату используешь и с каким рабочим напряжением?
      DHT dht(DHTPIN, DHTTYPE, 3); //Правильно выставить таймаут 3 для частоты контроллера 8МГц, 6 — для 16МГц, 15- для 80МГц

Добавить комментарий

vertical_align_top
banner