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

Содержание

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

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

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

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

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

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);
Загрузите скетч в контроллер и проверьте правильность работы при помощи Сервис-Монитор порта:

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

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

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

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

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

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

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

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

Читайте также

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

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

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

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

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

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

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

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

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

//DHT dht(DHTPIN, DHT22);

DHT dht(DHTPIN, DHT11);

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

float h = dht.readHumidity();

float t = dht.readTemperature();

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

if (isnan(h) || isnan(t)) <

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

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

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

Андрей, можно скетч на такой датчик? Пол интернета перерыл, не нашел, у всех без встроенных резисторов.

Вот здесь более, чем доступно codius.ru/articles/187, ещё и что происходит в библиотеке описано. И пример кстати на модуле с резистором.

Адрюха, респект! В 5 гайдах в интернет говорят что первая ножка &#8212; это питание, и только твой коммент помог получить данные с dht11 модуля.

Спасибо тебе огромное!

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

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

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

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

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

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

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

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

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

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 можно вырезать.

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

найти и заменить все « на . ledtest вместо led

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

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

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

if (t 25)
<
analogWrite(ledPin, 255);
Serial.println(Warning. );
>
else
<
analogWrite(ledPin, 0);
Serial.println(NO Warning. );
>

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

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

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 &#8216;void loop()&#8217;:
sketch_sep23a:46: error: invalid operands of types &#8216;const char [21]&#8217; and &#8216;float&#8217; to binary &#8216;operator+&#8217;

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

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

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

поxоже на то. Что вообще выводит в переменной влажности?

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

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

Что за ошибка в библиотеке? При проверке выскакивает. На Ардуино 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

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

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

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

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 );

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

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

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

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

если вы в аду, то да.

У тебя датчик DHT11 а ты выставил DHT22

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

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

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

Говорим ардуине с каким датчиком нужно работать.

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


Источник: edurobots.ru