Обзор и подключение dht11 (dht22) датчика влажности и температуры
Содержание:
- 1Технические характеристики датчика температуры и влажности DHT11
- Датчики температуры и влажности DHT11 и DHT22 и Arduino
- Сравнение датчиков DHT11, DHT22 и DHT21
- Датчики температуры и влажности DHT11 и DHT22
- 2Схема подключения датчика температуры и влажности DHT11
- Описание кода программы
- 3Считывание данных с сенсора DHT11 при помощи Arduino
- Игра на Ардуино с дисплеем LCD I2C
- Стилизация веб-страницы, чтобы она выглядела более профессионально
1Технические характеристики датчика температуры и влажности DHT11
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности – 20..90% с погрешностью до 5%,
- диапазон измеряемых температур – 0..50°C с погрешностью до 2°C;
- время реакции на изменения влажности – до 15 секунд, температуры – до 30 секунд;
- минимальный период опроса – 1 секунда.
Габаритные размеры и внешний вид датчика температуры и влажности DHT11
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
Датчики температуры и влажности DHT11 и DHT22 и Arduino
В статье рассмотрены основы работы с недорогими датчиками температуры и влажности серии DHT.
Эти сенсоры простые и медленные, но при этом отлично подходят для хобби-проектов на Arduino. Датчики DHT состоят из двух основных частей: ёмкостный датчик влажности и термистор. Также в корпусе установлен простенький чип для преобразования аналогового сигнала в цифровой. Считывать цифровой сигнал на выходе достаточно просто, можно использовать любой контроллер, не обязательно Arduino.
Технические характеристики DHT11 и DHT22
Существуют две версии сенсоров DHT. Выглядят они почти одинаково. Распиновка тоже одинаковая. Основные отличия – в технических характеристиках:
DHT11:
- Очень дешевый.
- Питание от 3 до 5В.
- Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
- Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. При этом точность измерений находится в диапазоне 5%.
- Измеряет температуру в диапазоне от 0 до 50 градусов с точностью плюс-минус 2%.
- Частота измерений не более 1 Гц (одно измерение в секунду).
- Размер корпуса: 15.5 мм x 12 мм x 5.5 мм.
- 4 коннектора. Расстояние между соседними – 0.1″.
DHT22:
- Дешевый.
- Питание от 3 до 5В.
- Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
- Рассчитан на измерение уровня влажности в диапазоне от 0% до 100%. При этом точность измерений находится в диапазоне 2%-5%.
- Измеряет температуру в диапазоне от -40 до 125 градусов с точностью плюс-минус 0.5 градусов по Цельсию.
- Частота измерений до 0.5 Гц (одно измерение за 2 секунды).
- Размер корпуса: 15.1 мм x 25 мм x 7.7 мм.
- 4 коннектора. Расстояние между соседними – 0.1″.
Как видите, DHT22 более точный и имеет больший диапазон измеряемых значений. Оба датчика имеют по одному цифровому выходу. Запросы к ним можно отправлять не чаще чем один в секунду или две.
Подключение датчиков DHT к Arduino
Ссылки для заказа электронного оборудования, которое использовалось в примере ниже из Китая
Подключаются датчики легко. Так как у них достаточно длинные коннекторы 0.1″, можно устанавливать их непосредственно на макетную или монтажную плату (смотрите на рисунке ниже).
Непосредственное подключение к Arduino тоже простое. На сенсоре 4 коннектора:
- Питание (VCC) – от 3 до 5 В.
- Вывод данных.
- Не подключается.
- Земля.
Коннектор 3 просто игнорируйте, он не подключается. Желательно подключить подтягивающий резистор на 10 кОм между питанием и сигналом. На Arduino есть встроенные резисторы, но их номинал 100кОм нам не подойдет.
На рисунке ниже приведена схема подключения DHT11 к Arduino. Подключите сигнал с датчика к пину 2, чтобы схема соответствовала примеру скетча, который приведен ниже. Этот пин можно изменить с соответствующими правками в коде.
Считывание данных с датчиков DHTxx
Для проверки скетча мы используем Arduino. Можно использовать любой другой микроконтроллер, который поддерживает тайминг в микросекундах.
Для начала скачайте библиотеку для работы с DHT датчиками здесь: Github. Для загрузки нажмите кнопку DOWNLOADS в верхнем правом углу.
Переименуйте папку DHT и убедитесь, что в ней есть файл dht.cpp и другие. После этого переместите папку DHT в папку arduinosketchfolder/libraries/ . Возможно вам придется создать подпапку для библиотек, если вы впервые интегрируете библиотеку. Перезагрузите Arduino IDE.
Теперь загрузите скетч: Examples->DHT->DHTtester. Выглядит программа примерно так:
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
И уберите комментарий со строки:
#define DHTTYPE DHT11 // DHT 11
Эти настройки помогают снимать правильные значения именно с вашей модели датчика. В окне серийного монитора этобудет выглядеть примерно так:
Вы должны увидеть показания температуры и влажности. Подышав на датчик, можно отследить изменения показаний. В этом случае уровень влажности должен увеличиться.
Если Вам необходимы даташиты на датчики, просмотреть и скачать их можно по ссылкам:
Datasheet DHT11
Datasheet DHT22
Сравнение датчиков DHT11, DHT22 и DHT21
На сегодняшний день существует множество датчиков и модулей, которые можно использовать для измерения температуры и прочих показателей, связанных с поддержанием оптимальной жизнедеятельности человека, а также других вещей и организмов.
Их можно использовать в самых простых метеостанциях, в различных системах контроля за климатом и в умном доме, для поддержания необходимой температуры в помещениях, на производстве и во многих других случаях.
Датчики семейства DHT являются самыми популярными в кругу ардуинщиков. Важными критериями здесь являются простота в использовании и написании программного кода, да и относительно недорогая стоимость.
В семействе DHT выделяют три самых распространенных датчика: DHT11, DHT22 и DHT21.
Состоят они из термистора и емкостного датчика влажности. Цифровой сигнал, исходящий от чипа, находящегося внутри датчика, позволяет считывать температуру и влажность воздуха, а уже затем мы можем выводить эти значения в монитор порта или на дисплей, обрабатывать их и т.д.
Подключаются данные модули очень просто – с помощью трех контактов (два из которых отвечают за питание, а третий подключается к цифровому выходу на плате).
Сразу возникает вопрос: а какой датчик лучше применять? Ведь они различаются по своим характеристикам и ценам. Как выбрать необходимый модуль именно для вашего проекта и с правильным соотношением “цена-качество”? Давайте разбираться. Начнем с небольшого обзора.
DHT21 имеет несколько другой вид.
Отличие этого модуля от первых двух заключается в том, что он имеет защитный корпус, что позволяет использовать его на улице, где этот корпус защитит его от пыли, грязи и дождя.
Теперь сравним модули по основным показателям.
Датчик DHT11:
- определение влажности в диапозоне 20-80% с точностью ±5% RH
- определение температуры от 0°C до +50°C с точностью ±2 °C
- частота опроса 1 раз в секунду
Датчик DHT22:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +125°C с точностью ±0.5℃
- частота опроса 1 раз в 2 секунды
Датчик DHT21:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +80°C с точностью ±0.5°C
Сравнивая цены на данные модули, можно сразу выделить низкую цену на датчик DHT11. Стоит он, как правило, в районе 100-200 рублей – это связано с высоким спросом на данные модули и с их простым устройством.
DHT21 и DHT22 на фоне первого легко можно отнести к более дорогим: цена на них обычно колеблется в районе 300-400 рублей (то есть в 2-3 раза дороже).
Связано это с большей точностью показаний, большим диапазоном в измерении температур, к тому же у датчика DHT22 есть защитный корпус, который предохраняет его от загрязнения и влаги, что тоже играет весомую роль в составлении цены.
В связи с этим стоит подумать, а так ли вам надо переплачивать за защитный корпус, если применение вашего датчика ограничивается, к примеру, лишь комнатой?
Наиболее оптимальным датчиком для домашней метеостанции будет DHT11, поскольку он дешевле, занимает меньше места, надежен и прост в эксплуатации и не требует от создателя измерять рекордно низкие или высокие температуры, поддерживая стабильность на протяжении долгого времени.
Если же вам необходимо измерять отрицательную температуру или повысить точность и частоту результатов, то воспользуйтесь датчиком DHT22.
Надеемся, что статья была полезной и помогла вам в выборе необходимого модуля в управлении климатом. Удачной всем компиляции и следите за нашим блогом!
DHT22 и Arduino – схема подключенияПодключение кнопки к Arduino
Датчики температуры и влажности DHT11 и DHT22
В данной статье я хотел бы рассказать о недорогих цифровых датчиках температуры и влажности DHT11 и DHT22.
Данные датчики не отличаются высоким быстродействием и точностью, однако могут найти свое применение в радиолюбительских проектах из-за своей невысокой стоимости. Датчик DHT состоит из емкостного датчика влажности и термистора.
Также, датчик содержит в себе простенький АЦП для преобразования аналоговых значений влажности и температуры.
Отличия DHT11 и DHT22
По цоколевке данные датчики идентичны, однако немного различаются характеристиками.
DHT11:
- Очень низкая стоимость
- Питание и I/O 3-5 В
- Определение влажности 20-80% с 5% точностью
- Определение температуры 0-50 град. с 2% точностью
- Частота опроса не более 1 Гц (не более раза в 1 сек.)
- Размеры 15.5мм x 12мм x 5.5мм
- 4 вывода с расстоянием между ножками 0.1″
DHT22:
- Низкая стоимость
- Питание и I/O 3-5 В
- Определение влажности 0-100% с 2-5% точностью
- Определение температуры -40 — 125 град. с точностью ±0.5 град.
- Частота опроса не более 0.5 Гц (не более раза в 2 сек.)
- Размеры 15.1мм x 25мм x 7.7мм
- 4 вывода с расстоянием между ножками 0.1″
Как видно, сенсор DHT22 имеет более лучшие характеристики. Однако оба датчика медлительны и вы не сможете считывать с них информацию чаще, чем раз в 1 или 2 сек.
Подключение
Датчики имеют стандартные выводы и поэтому легко становятся на макетную плату. DHT имеет 4 вывода:
- Vcc (3-5V питание)
- Data out — Вывод данных
- Не используется
- Общий
При подключении к МК, вы можете между выводами Vcc и Data разместить подтягивающий pull-up резистор номиналом 10 кОм. Плата Arduino имеет встроенные pull-up, однако они очень слабенькие — порядка 100 кОм. Рассмотрим подключение датчика к популярной сейчас плате Arduino. На рисунке ниже, показано подключение датчика к Arduino, выход с датчика подается на 2 pin платы, если нужно, в скетче поменяйте на какой-либо другой.
Скачать библиотеку для работы датчиков DHT с Arduino можно здесь. Там же и пример
Если вы будете использовать датчик DHT11, то закомментируйте данную строку://#define DHTTYPE DHT22 // DHT 22 (AM2302)и раскоментируйте эту:#define DHTTYPE DHT11 // DHT 11 Загрузите скетч в контроллер и проверьте правильность работы при помощи Serial Monitor:
Даташиты: DHT11, DHT22
ИсточникТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.
2Схема подключения датчика температуры и влажности DHT11
Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino.
Схема подключения датчика температуры и влажности DHT11
Давайте посмотрим, что показано на рисунке.
Обозначение на рисунке | Описание | Примечание |
---|---|---|
MCU | Микроконтроллер или одноплатный компьютер | Arduino / Raspberry Pi и др. |
DHT11 | Датчик температуры и влажности | Выводы 1Pin, 2Pin и 4Pin задействованы в схеме, один из выводов датчика – 3-ий пин 3Pin – ни к чему не подключается. |
DATA | Шина данных | Если длина соединительного кабеля от датчика к микроконтроллеру не превышает 20 метров, то эту шину рекомендуется подтянуть к питанию резистором 5,1 кОм; если больше 20 метров – то другой подходящий номинал (меньший). |
VDD | Питание датчика | Допустимы напряжения от ~3,0 до ~5,5 вольт постоянного тока; если используется питание ~3,3 В, то желательно использовать питающий провод не длиннее 20 см. |
Соберём рассмотренную схему. Я также по традиции включу в цепь логический анализатор, чтобы можно было изучить временную диаграмму информационного обмена с датчиком.
Сенсор температуры и влажности DHT11 подключён к Arduino UNO
Сенсор DHT11 часто продаётся в виде готовой сборки с необходимой обвязкой – подтягивающими резистором и фильтрующим конденсатором (как на предыдущей фотографии). Для экспериментов с Arduino я рекомендую покупать именно такой.
Описание кода программы
Для работы Arduino UNO с нашим датчиком требуется подключение специальной библиотеки. Она называется DHT.h. Скачать можете вот по этой ссылке.
А теперь рассмотрим с вами скетч программы для работы с сенсором.
Arduino
#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(1000); //Считываем влажность float h = dht.readHumidity(); // Считываем температуру float t = dht.readTemperature(); // Проверка удачно прошло ли считывание. if (isnan(h) || isnan(t)) { Serial.println(«Не удается считать показания»); } else { Serial.print («Humidity: «); Serial.print (h); Serial.print («%\t»); Serial.print («Temperature: «); Serial.print (t); Serial.println (» *C»); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include «DHT.h» DHTdht(DHTPIN,DHT11); voidsetup(){ Serial.begin(9600); dht.begin(); voidloop(){ delay(1000); floath=dht.readHumidity(); floatt=dht.readTemperature(); if(isnan(h)||isnan(t)){ Serial.println(«Не удается считать показания»); }else{ Serial.print(«Humidity: «); Serial.print(h); Serial.print(«%\t»); Serial.print(«Temperature: «); Serial.print(t); Serial.println(» *C»); } } |
Загрузите скетч в контроллер и проверьте сенсор при помощи сервис — монитор.
Вот что у меня получилось:
Мониторинг порта в Arduino IDE:
Если кому-то не совсем понятно, есть шикарный видеоурок от ребят.
На этом я заканчиваю свой пост. В следующей статье я напишу о корейском таймере AT8N. Пишите комментарии, задавайте вопросы, подписывайтесь!
Успехов вам!!!
3Считывание данных с сенсора DHT11 при помощи Arduino
Давайте пойдём таким путём: скачаем библиотеку для датчика DHT11, установим её стандартным способом (распаковав в директорию \libraries\ среды разработки для Arduino).
Напишем вот такой простенький скетч. Он будет выводить в последовательный порт компьютера каждые 2 секунды сообщения об относительной влажности и температуре, считанные с датчика DHT11.
#include <dht11.h> // подключаем библиотеку dht11 sensor; // инициализация экземпляра датчика #define DHT11PIN 8 // вывод 8 будет шиной DATA void setup() { Serial.begin(9600); } void loop() { int chk = sensor.read(DHT11PIN); Serial.print("h="); Serial.print(sensor.humidity); Serial.print("%\t"); Serial.print("t="); Serial.print(sensor.temperature); Serial.println("C"); delay(2000); }
Загрузим этот скетч в Arduino. Подключимся к Arduino с помощью монитора COM-порта и увидим следующее:
Данные о температуре и влажности, полученные с датчика DHT11
Видно, что данные и о влажности, и о температуре считываются и выводятся в терминалку.
Игра на Ардуино с дисплеем LCD I2C
Для этого проекта нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- жидкокристаллический дисплей с I2C;
- одна тактовая кнопка и резистор;
- пьезодинамик;
- провода «папа-папа», «папа-мама».
Arduino Game. Схема сборки игры на Ардуино
Вместо подключения кнопки к Ардуино через резистор на макетной плате можно использовать модуль с кнопкой. Пьезодинамик (пьезоизлучатель) подключается к плате при желании, можно обойтись и без него. Соберите схему, как на картинке выше, и загрузите следующий скетч. Скачать программу для игры «Дракончик» на Arduino с жк дисплеем можно здесь. Скорость игры и звуки можно изменить в программе.
Скетч для игры «Дракончик» на дисплее
#include <Wire.h> // библиотека для протокола IIC #include <LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C LCD(0x27, 20, 2); // присваиваем имя lcd для дисплея int level = 1; // переменная для отсчета уровня int pause = 400; // переменная для задержки byte p = 0; // переменная для времени прыжка // создаем массивы дракончика, дерева, камня и птицы byte dracon = { 0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011 }; byte derevo = { 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100 }; byte kamen = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111 }; byte ptica = { 0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000 }; void setup() { pinMode (10, OUTPUT); // подключаем пьезодинамик pinMode (A1, INPUT); // подключаем кнопку analogWrite(A1, LOW); LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея // создаем символы дракончика, дерева, камня и птицы LCD.createChar(0, dracon); LCD.createChar(1, derevo); LCD.createChar(2, kamen); LCD.createChar(3, ptica); // начинаем игру: выводим надпись GO! LCD.setCursor(7, 0); LCD.print("GO!"); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); } void loop() { // первоначальное положение дракончика и препятствия byte d = 1; byte x = 15; byte y = 1; // выбираем препятствие, которое появится, рандомно byte i = random (1, 4); if (i == 3) y = 0; else y = 1; while (x > 0) { // очищаем экран и выводим номер уровня LCD.clear(); LCD.setCursor(0, 0); LCD.print(level); // считываем данные с кнопки и учитываем количество циклов в прыжке // если дакончик находится в прыжке долго - возвращаем его вниз if (analogRead(A1) > 100) d = 0; if (analogRead(A1) < 100) d = 1; if (p > 3) d = 1; // выводим дракончика в нужной строке LCD.setCursor(4, d); LCD.print(char(0)); // выводим препятствие LCD.setCursor(x, y); tone(10, 50); LCD.print(char(i)); noTone(10); // если дракончик наткнулся на препятствие выводим надпись GAME OVER! if (x == 4 && y == d) { delay(400); tone(10, 50); delay(100); noTone(10); delay(100); tone(10, 20); delay(300); noTone(10); LCD.clear(); delay(200); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(600); LCD.clear(); delay(400); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(600); LCD.clear(); LCD.setCursor(3, 1); LCD.print("LEVEL: "); LCD.print(level); delay(400); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(3000); LCD.clear(); // начинаем игру заново, обнулив уровень игры LCD.setCursor(7, 0); LCD.print("GO!"); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); level = 0; pause = 400; p = 0; y = 1; x = 0; break; } // если дракончик прыгнул, издаем звук if (d == 0) { tone(10, 200); delay(100); noTone(10); } else { delay(100); } // если дракончик не столкнулся, то меняем положение препятствия // начинаем считать сколько циклов дракончик находится в прыжке delay(pause); x = x - 1; p = p + 1; if (p > 4) p = 0; } // переходим на следующий уровень и сокращаем время задержки tone(10, 800); delay(20); level = level + 1; pause = pause - 20; if (pause < 0) pause = 0; }
Стилизация веб-страницы, чтобы она выглядела более профессионально
Программисты, подобные нам, часто боятся дизайна – но небольшое усилие может сделать вашу веб-страницу более привлекательной и профессиональной. Скриншот, приведенный ниже, даст вам базовое представление о том, что мы собираемся делать.
Рисунок 7 – Профессиональный внешний вид веб-страницы с сервера ESP8266 с температурой и влажностью от DHT11/DHT22/AM2302
Довольно красиво, правда? Давайте без лишних слов, применим стиль к нашей предыдущей HTML странице. Для начала скопируйте и вставьте приведенный ниже код, чтобы заменить в приведенном выше скетче функцию . Попробуйте новый скетч, а затем мы выполним его детальный разбор.
Мы уже знаем, что объявление сообщает браузеру, что мы отправляем HTML код, а элемент делает веб-страницу адаптивной. Единственное дополнение здесь заключается в том, что мы будем использовать шрифты google. Google имеет сотни веб-шрифтов и бесплатен для коммерческого и личного использования. Прекрасно!
На нашей веб-странице мы будем использовать шрифт Open Sans. Шрифт Google встраивается с помощью тега в блоке HTML документа. Для нашей страницы мы выбрали следующие веса (толщину) шрифта: 300 (легкий), 400 (обычный) и 600 (жирный). Вы можете выбрать столько, сколько захотите, но имейте в виду, что выбор ненужных весов шрифтов затрудняет загрузку страницы. Вы также можете добавить курсивный стиль, просто добавив символ в конце веса шрифта, например, 400i встроит курсивный стиль.
Обратите внимание, что вы не можете видеть шрифт Google, без активного подключения к интернету на устройстве, с которого вы собираетесь получить доступ к странице. Шрифты Google загружаются на лету
Далее мы собираемся применить шрифт «Open Sans» для всего нашего HTML кода. Мы также должны указать sans-serif в качестве нашего резервного шрифта, чтобы обеспечить максимальную совместимость между браузерами/операционными системами. Если браузер не поддерживает первый шрифт, он попытается использовать следующий шрифт.
Далее нам нужно применить CSS для иконок, заголовков и фактических значений влажности и температуры. Все эти три вещи сделаны строчными и выровнены по вертикали. Фон иконок выполнен круглым с помощью 50% радиуса границы и сделан 30px высотой и шириной.
Затем мы покажем показания температуры с помощью этого красивого маленького значка .
Значок температуры на самом деле является масштабируемой векторной графикой (SVG), определенной в теге . Создание SVG не требует каких-либо специальных навыков программирования. Для создания графики для вашей страницы вы можете использовать любой редактор SVG. После этой иконки мы собираемся показать фактическое значение температуры датчика.
Далее мы покажем показания влажности с помощью этого значка .
Опять же это SVG. После печати значений влажности мы закрываем все открытые теги, такие как и .