Модуль DHT11 подключение к Arduino. Датчик в связке с ардуино для измерения влажности воздуха и температуры Ардуино подключение датчика температуры и влажности
Итак, датчик DHT11 имеет следующие характеристики:
- диапазон измеряемой относительной влажности - 20..90% с погрешностью до 5%,
- диапазон измеряемых температур - 0..50°C с погрешностью до 2°C;
- время реакции на изменения влажности - до 15 секунд, температуры - до 30 секунд;
- минимальный период опроса - 1 секунда.
Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.
2 Схема подключения датчика температуры и влажности DHT11
Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino.
![](https://i1.wp.com/soltau.ru/images/dht11/02.png)
Давайте посмотрим, что показано на рисунке.
Обозначение на рисунке | Описание | Примечание |
---|---|---|
MCU | Микроконтроллер или одноплатный компьютер | Arduino / Raspberry Pi и др. |
DHT11 | Датчик температуры и влажности | Выводы 1Pin, 2Pin и 4Pin задействованы в схеме, один из выводов датчика - 3-ий пин 3Pin - ни к чему не подключается. |
DATA | Шина данных | Если длина соединительного кабеля от датчика к микроконтроллеру не превышает 20 метров, то эту шину рекомендуется подтянуть к питанию резистором 5,1 кОм; если больше 20 метров - то другой подходящий номинал (меньший). |
VDD | Питание датчика | Допустимы напряжения от ~3,0 до ~5,5 вольт постоянного тока; если используется питание ~3,3 В, то желательно использовать питающий провод не длиннее 20 см. |
Соберём рассмотренную схему. Я также по традиции включу в цепь логический анализатор, чтобы можно было изучить временную диаграмму информационного обмена с датчиком.
![](https://i0.wp.com/soltau.ru/images/dht11/04.jpg)
![](https://i1.wp.com/soltau.ru/images/dht11/04-2.jpg)
Сенсор DHT11 часто продаётся в виде готовой сборки с необходимой обвязкой - подтягивающими резистором и фильтрующим конденсатором (как на предыдущей фотографии). Для экспериментов с Arduino я рекомендую покупать именно такой.
3 Считывание данных с сенсора DHT11 при помощи Arduino
Давайте пойдём таким путём: скачаем библиотеку для датчика DHT11 , установим её стандартным способом (распаковав в директорию \libraries\ среды разработки для Arduino).
Напишем вот такой простенький скетч. Он будет выводить в последовательный порт компьютера каждые 2 секунды сообщения об относительной влажности и температуре, считанные с датчика DHT11.
#include
Загрузим этот скетч в Arduino. Подключимся к Arduino с помощью монитора COM-порта и увидим следующее:
![](https://i0.wp.com/soltau.ru/images/dht11/03-1.png)
Видно, что данные и о влажности, и о температуре считываются и выводятся в терминалку.
4 Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером
С помощью временной диаграммы, полученной с логического анализатора, разберёмся, как осуществляется информационный обмен.
Для связи с микроконтроллером датчик температуры и влажности DHT11 использует однопроводный последовательный пакетный интерфейс. Один информационный пакет длительностью около 4 мс содержит: 1 бит запроса от микроконтроллера, 1 бит ответа датчика и 40 битов данных от датчика (16 битов информации о влажности, 16 битов информации о температуре и 8 проверочных битов). Давайте подробнее рассмотрим временную диаграмму информационного обмена Arduino с датчиком DHT11.
![](https://i2.wp.com/soltau.ru/images/dht11/05-1.png)
![](https://i0.wp.com/soltau.ru/images/dht11/05-2.png)
Из рисунка видно, что есть два типа импульсов: короткие и длинные. Короткие в данном протоколе обмена обозначают нули, длинные импульсы - единицы.
Итак, первые два импульса - это запрос Arduino к DHT11 и, соответственно, ответ датчика. Далее идут 16 бит влажности. Причём они разделены на байты, старший и младший, старший слева. То есть на нашем рисунке данные о влажности такие: 0001000000000000 = 00000000 00010000 = 0x10 = 16% относительной влажности.
Данные о температуре, аналогично: 0001011100000000 = 00000000 00010111 = 0x17 = 23 градуса Цельсия.
Контрольная сумма - это всего-навсего арифметическое суммирование 4-х полученных байтов данных:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 в двоичной системе или 0 + 16 + 0 + 23 = 39 в десятичной.
5 Работа с датчиком DHT11 без библиотеки
Теперь мы знаем достаточно для того чтобы написать собственную программу для работы с сенсором температуры и влажности DHT11 без использования сторонних библиотек. Напишем скетч, который будет опрашивать раз в секунду датчик и выводить в последовательный порт компьютера принятый пакет и данные о температуре, влажности, а также проверочный байт. На 13-ую ножку Arduino выведем контрольный сигнал и, подключившись в ней логическим анализатором, проверим, что мы верно считываем информацию от датчика.
Скетч для работы с DHT11 и Arduino без сторонних библиотек (разворачивается) #define DHT11pin 8 // для подключения шины DATA сенсора DHT11 #define LEDpin 13 // используем для контроля const int NUM_READS = 500; // зависит от частоты кварца и подбирается экспериментально long readsCounter = 0; // счётчик циклов чтения int reads; // сырой массив считанных значений void setup() { Serial.begin(9600); pinMode(DHT11pin, INPUT); pinMode(LEDpin, OUTPUT); } void loop() { if (readsCounter void initLink() { pinMode(DHT11pin, OUTPUT); digitalWrite(DHT11pin, LOW); delay(15); pinMode(DHT11pin, INPUT); } // Читает данные датчика DHT11 и записывает в массив: void readSerialDHT11() { int sensorValue = digitalRead(DHT11pin); reads = sensorValue; digitalWrite(LEDpin, sensorValue); // для проверки выводим на отдельную ножку readsCounter++; } // Обрабатывает массив данных за цикл с DHT11: void processDht11Data() { byte dht11Data = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // обработанный массив (биты пакета) int zeroLen = 1; // минимальная длительность бита "0" int oneLen = 3 * zeroLen; // примерная длительность бита "1" int wrongData = 6 * zeroLen; // допуск по длительности для данных int currentBitLen = 0; // длительность текущего бита int bitPosition = 0; // позиция бита в пакете for (int i=1; i = zeroLen) && (currentBitLen <= oneLen)) { dht11Data = 0; bitPosition++; } else if ((currentBitLen > oneLen) && (currentBitLen <= wrongData)) { dht11Data = 1; bitPosition++; } currentBitLen = 0; } else { if (reads[i] == HIGH) { // при сигнале HIGH currentBitLen += 1; // считаем длительность текущего бита } } } for (int i=0; i void getHumidTemperatureParity(byte data) { word humidity = 0; byte hLow = 0; byte hHi = 0; word temperature = 0; byte tLow = 0; byte tHi = 0; byte parity = 0; for (int i=1; i<9; i++){ //пропускаем первый импульс-подтверждение hLow = hLow | (data[i] << (8 - i)); } for (int i=9; i<17; i++){ hHi = hHi | (data[i] readsCounter = 0; }Небольшая таблица даст дополнительные разъяснения к предлагаемому решению.
Функция | Назначение |
---|
Хотели бы вы, чтобы ваши растения сообщали о том, что их надо полить? Или просто держали вас в курсе уровня влажности почвы?
В этой статье мы рассмотрим проект автоматизированного полива с использованием датчика уровня влажности почвы:
Обзор датчика уровня влажности почвы
Подобные датчики подключаются достаточно просто. Два из трех коннекторов - это питание (VCC) и земля (GND). При использовании датчик желательно периодически отключать от источника питания, чтобы избежать возможного окисления. Третий выход - сигнал (sig), с которого мы и будем снимать показания. Два контакта датчика работают по принципу переменного резистора - чем больше влаги в почве, тем лучше контакты проводят электричество, падает сопротивление, сигнал на контакте SIG растет. Аналоговые значения могут отличаться в зависимости от напряжения питания и разрешающей способности ваших аналоговых пинов микроконтроллера.
Для подключения датчика можно использовать несколько вариантов. Коннектор, приведенный на рисунке ниже:
Второй вариант более гибкий:
Ну и конечно можно напрямую запаять контакты на датчик.
Если вы планируете использовать датчик за пределами квартиры, стоит дополнительно задуматься о защите контактов от грязи и прямого попадания солнечных лучей. Возможно, стоит подумать о корпусе или нанесении защитного покрытия непосредственно на контакты датчика уровня влажности и проводники (смотрите на рисунок ниже).
Датчик уровня влажности почвы с нанесенным защитным покрытием на контактах и изолированными проводниками для подключения:
Проблема недолговечности датчика уровня влажности почвы
Один из недостатков датчиков подобного типа - недолговечность их чувствительных элементов. К примеру, компания Sparkfun решает эту проблему, используя дополнительное покрытие (Electroless Nickel Immersion Gold). Второй вариант продления срока действия сенсора - подавать на него питание непосредственно при снятии показаний. При использовании Arduino, все ограничивается подачей сигнала HIGH на пин, к которому подключен датчик. Если вы хотите запитать датчик большим напряжением чем предоставляет Arduino, всегда можно использовать дополнительный транзистор.
Контроль уровня влажности почвы - пример проекта
В приведенном ниже проекте использованы датчик уровня влажности, аналог платы Arduino - RedBoard и LCD дисплей, на котором выводятся данные про уровень влажности почвы.
Датчик уровня влажности почвы компании SparkFun:
Красный проводник (VCC) подключается к 5 В на Arduino, черный - к земле (GND), зеленый - сигнал - к аналоговому пину 0 (A0). Если вы используете другой аналоговый пин на Arduino, не забудьте внести соответствующие изменения в скетч для микроконтроллера, представленный ниже.
LCD дисплей подключен к 5 В, земле и цифровому пину 2 (также можно изменить и внести изменения в код) для обмена данными с микроконтроллером по серийному протоколу связи.
Стоит отметить, что если вы хотите продлить срок службы вашего сенсора, можно подключить его питание к цифровому пину и питать его только при считывании данных, а после - отключать. Если запитывать датчик постоянно, его чувствительные элементы вскоре начнут ржаветь. Чем больше влажность почвы, тем быстрее будет проходить коррозия. Еще один вариант – нанести гипс на датчик. В результате влага будет поступать, но коррозия значительно замедляется.
Программа для Arduino
Скетч достаточно простой. Для передачи данных на LCD дисплей вам необходимо подключить библиотеку Software Serial library. Если у вас в ее нет, скачать можно здесь: Arduino GitHub
Дополнительные пояснения приведены в комментариях к коду:
// Пример использования датчика уровня влажности почвы с LCD дисплеем.
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (не используется)
int thresholdUp = 400;
int thresholdDown = 250;
int sensorPin = A0;
String DisplayWords;
int sensorValue;
mySerial.write(254);
mySerial.write(128);
// очистка дисплея:
mySerial.write(" ");
mySerial.write(" ");
// перемещение курсора к началу первой строки LCD дисплея:
mySerial.write(254);
mySerial.write(128);
// "Dry, Water it!"
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
} else if (sensorValue >= thresholdUp){
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
В программе использованы различные минимальное и максимальное значения. В результате среднее значение может характеризовать влажность в зависимости от того, почва увлажняется или сушится. Если вы не хотите использовать это среднее значение, максимальное и минимальное значения можно принимать одинаковыми. Однако эксперименты показывают, что предложенный подход позволяет более точно характеризовать процессы, которые происходят в почве. Определенного точного среднего значения в реальных условиях не существует. Так что с выборкой диапазона можно поиграться. Если вас интересуют процессы, которые происходят в почве при взаимодействии с водой, почитайте тут, например: Wiki . Процессы достаточно сложные и интересные.
В любом случае, переменные вам надо настроить под собственные условия: тип почвы, необходимый уровень увлажнения. Так что тестируйте, экспериментируйте пока не определитесь с подходящими значениями.
После организации считывания данных с датчика уровня влажности и их отображения, проект можно развить дальше, организовав систему автоматического полива.
Датчик уровня влажности в составе автоматической системы полива на основании Arduino:
Для автоматизации полива нам понадобятся дополнительные детали: возможно, шкивы, зубчатые шестерни, двигатель, муфта, транзисторы, резисторы. Список зависит от вашего проекта. Ну все, что может попасться под руку в быту. Более детально один из примеров показан ниже:
Это один из множества вариантов установки двигателя для системы автоматического полива. Колесо можно установить непосредственно в воде. В таком случае при его быстром вращении, вода будет подаваться к растению. В общем, можете проявить фантазию.
Схема подключения двигателя постоянного тока () на примере копии Arduino от SparkFun приведена ниже:
Ниже приведен скетч для Arduino (по сути он такой же как и приведенный выше с небольшим дополнением для управления двигателем):
// В скетче считываются данные с датчика и отображается уровень влажности почвы
// если почва сухая, начинает работать двигатель
// Для работы с дисплеем используется библиотека softwareserial library
#include <SoftwareSerial.h>
// Подключите пин для обмена данными с использованием LCD дисплея по серийному протоколу RX к цифровому пину 2 Arduino
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
// Управляем двигателем с помощью пина 9.
// Этот пин должен обязательно поддерживать ШИМ-модуляцию.
const int motorPin = 9;
// Тут мы настраиваем некоторые константы.
// Настройка констант зависит от условий внешней среды, в которой используется датчик
int thresholdUp = 400;
int thresholdDown = 250;
// Настраиваем пин A0 на Arduino для работы с датчиком:
int sensorPin = A0;
pinMode(motorPin, OUTPUT); // устанавливаем пин, к которому подключен двигатель в качестве выхода
mySerial.begin(9600); // устанавливаем скорость обмена данными на 9600 baud
delay(500); // ждем пока дисплей прогрузится
// Здесь мы объявляем строку, в которой хранятся данные для отображения
// на жидкокристаллическом дисплее. Значения будут изменяться
// в зависимости от уровня влажности почвы
String DisplayWords;
// В переменной sensorValue хранится аналоговое значение датчика с пина А0
int sensorValue;
sensorValue = analogRead(sensorPin);
mySerial.write(128);
// очистка дисплея:
mySerial.write(" ");
mySerial.write(" ");
// перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254);
mySerial.write(128);
// запись необходимой информации на дисплей:
mySerial.write("Water Level: ");
mySerial.print(sensorValue); //Использование.print вместо.write для значений
// Теперь мы проведем проверку уровня влажности по сравнению с заданными нами предварительно числовыми константами.
// Если значение меньше thresholdDown, отображаем слова:
// "Dry, Water it!"
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Dry, Water it!";
mySerial.print(DisplayWords);
// запуск двигателя на небольших оборотах (0 – остановка, 255 – максимальная скорость):
analogWrite(motorPin, 75);
// Если значение не ниже thresholdDown надо провести проверку, не будет
// ли оно больше нашего thresholdUp и, если, больше,
// отобразить надпись "Wet, Leave it!":
} else if (sensorValue >= thresholdUp){
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Wet, Leave it!";
mySerial.print(DisplayWords);
// выключение двигателя (0 – остановка, 255 – максимальная скорость):
analogWrite(motorPin, 0);
// Если полученное значение в диапазоне между минимальным и максимальным
// и почва была раньше влажной, а теперь сохнет,
// отображаем надпись "Dry, Water it!" (то есть, когда мы
// приближаемся к thresholdDown). Если почва была сухой, а теперь
//быстро увлажняется, отображаем слова "Wet, Leave it!" (то есть, когда мы
// приближаемся к thresholdUp):
// перемещение курсора к началу второй строки дисплея:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
delay(500); //Задержка в пол секунды между считываниями
Удачи вам в реализации автоматического полива ваших растений!
Самые частые измеряемые параметры в промышленности и быту — это температура и влажность. Эти значения очень важны в сушке древесины, выпечке кондитерских изделий, в холодильных камерах. В быту измеряют в теплицах и в контурах отопления и горячего водоснабжения. Датчик DHT11 Ардуино прекрасно справляется со своими задачами и определяет более-менее точно температуру и влажность.
Из этой статьи вы узнаете:
Приветствую Вас! За клавиатурой Гридин Семён и в этом посте я покажу вам, как подключается датчик температуры и влажности DHT11, продемонстрирую работу кода и библиотеки.
Датчик DHT11
DHT11 — это в небольшом пластиковом корпусе. На выходе сенсора находится цифровой сигнал, причем сразу два параметра и температура и влажность. Смысл общения с контроллером Ардуино заключается в следующем:
- Микроконтроллер запрашивает показания и меняет сигнал с 0 на 1.
- Датчик видит запрос, и отвечает ему, меняя битовый сигнал с 0 на 1.
- Когда они договорились между собой, датчик выдаёт ему пакет данных в размере 5 байт(40 бит), при чем в двух первых байтах температура, в третьем и четвертом влажность. Пятый байт — контрольная сумма для исключения ошибок измерения.
Характеристики сенсора температуры и влажности DHT11
- Определение влажности в диапазоне 20-80%
- Определение температуры от 0°C до +50°C
- Частота опроса 1 раз в секунду
Недостаток сенсора в том, что он не обладает высокой точностью и быстродействием. Большой плюс — это цена. Ну, я думаю, вы и без меня это знаете)).
В составе сенсора находится ёмкостной датчик для измерения влажности и термистор для измерения температуры. Все показания снимает чип АЦП и выдает цифровой сигнал.
Промышленные датчики обычно выдают аналоговый сигнал на 4-20 мА или 0-10 В. Это такие сенсоры которые измеряют два параметра в паре. Например продукция компании ОВЕН ПВТ10:
Напишите в комментариях, какие вы применяете в своих проектах? Очень интересно ваше мнение...
В продаже вы можете встретить и вторую модификацию Ардуиновского сенсора — DHT22. Скажу, что диапазон измерения значительно больше, чем у старой версии.
- определение влажности в диапазоне 0-100%
- определение температуры от -40°C до +125°C
- частота опроса 1 раз в 2 секунды
Подключение датчика DHT11
Датчики зачастую изготавливают в виде готовых шильдов. На выходе он имеет 3 пина:
- Питание 5 В
- Сигнал (S)
- Земля GND
Сопротивление в 10 кОм ставить не нужно, так как оно уже впаяно в плату. Схема подключений датчика и Ардуино 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"); } }
#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" ) ; Мониторинг порта в Arduino IDE: В программе можно включить один интересный инструмент для просмотра графики. Его можно включить так Инструменты — Плоттер по последовательному соединению. Не знаю, у меня он отображает только температуру. Если кто знает, как можно задействовать несколько графиков, поделитесь в комментариях. Вот такая картинка получилась: Если кому-то не совсем понятно, есть шикарный видеоурок от ребят. На этом я заканчиваю свой пост. В следующей статье я напишу о . Пишите комментарии, задавайте вопросы, подписывайтесь! Успехов вам!!! С уважением, Гридин Семён. |
В первой части статьи рассмотрим характеристики датчика температуры и влажности DHT11, научимся выводить значения в последовательный порт компьютера, во второй части усложним задачу и выведем показания на дисплей используя .
Компоненты для повторения (купить в Китае):
Основные технические характеристики:
Напряжение питания: 3 - 5В
. Определяемая влажность: 20 - 80% ± 5%
. Определяемая температура: 0 - 50º ± 2%
. Частота опроса: ≤ 1Гц
. Размеры: 30 x 14 x 6мм
Как мы видим, данные датчики не рассчитаны на работу в экстремальных условиях, однако их возможностей c головой хватит для осуществления большинства домашних и более серьезных поделок. Внутри датчика находится емкостной датчик влажности, термистор, и простенький аналогово-цифровой преобразователь значений температуры и влажности.
Подключение к Arduino
Модуль оборудован трех пиновым разъемом стандарта 2.54мм
G - Подключается к выводу GND
V - Подключается к выводу +5V
S - Подключается к цифровому выводу (в примере D4)
Подключив датчик к Arduino остается только залить скетч для работы. В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности последовательный в порт компьютера.
Библиотека необходимая для работы с модулем dht11
Её необходимо распаковать и добавить в папку "libraries" в папке с Arduino IDE. Не забывайте перезагрузить среду, если на момент добавления IDEшка была открыта.
Пример программного кода
#include
Открываем монитор порта. В него будут выводиться значения влажности и температуры.
Вывод значений на LCD I2C модуль
Выводить значения на компьютер это конечно отлично, однако в автономном устройстве не всегда позволительно. Как было написано вначале, во второй части статьи приведем пример вывода данных на ЖК дисплей, который в свою очередь управляется по интерфейсу I2C. Для подключения данного LCD модуля требуется всего 4 линии: + питания, земля, последовательная линия данных SDA (Serial DAta) и последовательная линия тактирования SCL (Serial CLock). Более подробно об основах работы с LCD I2C модулем вы сможете прочесть здесь.
Схема подключения будет выглядеть следующим образом.
В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности на ЖК дисплей.
Пример программного кода
//Тестировалось на Arduino IDE 1.0.5
#include
Купить в России
Продолжаем серию уроков . Сегодня мы разберем подключение к Arduino датчиков температуры и влажности DHT11 и DHT22.
Датчики DHT11 и DHT22 не обладают высоким быстродействием и точностью, но зато просты, недороги и отлично подходят для обучения. Они выполнены из двух частей — емкостного датчика влажности и термистора. Чип, находящийся внутри, выполняет аналого-цифровое преобразование и выдает цифровой сигнал, который можно считать с помощью любого микроконтроллера.
Список деталей для сборки модели
Для сборки проекта, описанного в этом уроке, понадобятся следующие детали:
- плата Arduino (подробнее, о том как выбрать Arduino );
- датчик DHT11 или DHT22 (можно купить, например, или );
- Breadboard;
- резистор на 10 кОм;
- программа Arduino IDE, которую можно скачать с сайта Arduino .
Датчики 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 вывода:
- питание.
- вывод данных
- не используется.
- 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);
Загрузите скетч в контроллер и проверьте правильность работы при помощи Сервис->Монитор порта:
Показания температуры и влажности (Монитор порта)
Вы должны увидеть температуру и влажность. Изменения можно увидеть, например, выдыхая на датчик (как для затуманивания окна). Дыхание увеличивает влажность.
Посты по урокам:
- Первый урок:
- Второй урок:
- Третий урок:
- Четвертый урок:
- Пятый урок:
- Шестой урок:
- Седьмой урок:
- Восьмой урок:
- Девятый урок: