Модуль DHT11 подключение к Arduino. Какие характеристики у датчика температуры и влажности Ардуино? Подключение датчика dht

Датчик влажности почвы Arduino предназначен для определения влажности земли, в которую он погружен. Он позволяет узнать о недостаточном или избыточном поливе ваших домашних или садовых растений. Подключение данного модуля к контроллеру позволяет автоматизировать процесс полива ваших растений, огорода или плантации (своего рода "умный полив").

Модуль состоит из двух частей: контактного щупа YL-69 и датчика YL-38, в комплекте идут провода для подключения.. Между двумя электродами щупа YL-69 создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная - сопротивление меньше, ток - чуть больше. По итоговому аналоговому сигналу можно судить о степени влажности. Щуп YL-69 соединен с датчиком YL-38 по двум проводам. Кроме контактов соединения с щупом, датчик YL-38 имеет четыре контакта для подключения к контроллеру.

  • Vcc – питание датчика;
  • GND – земля;
  • A0 - аналоговое значение;
  • D0 – цифровое значение уровня влажности.
Датчик YL-38 построен на основе компаратора LM393, который выдает напряжение на выход D0 по принципу: влажная почва – низкий логический уровень, сухая почва – высокий логический уровень. Уровень определяется пороговым значением, которое можно регулировать с помощью потенциометра. На вывод A0 подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик YL-38 имеет два светодиода, сигнализирующих о наличие поступающего на датчик питания и уровня цифрового сигналы на выходе D0. Наличие цифрового вывода D0 и светодиода уровня D0 позволяет использовать модуль автономно, без подключения к контроллеру.

Технические характеристики модуля

  • Напряжение питания: 3.3-5 В;
  • Ток потребления 35 мА;
  • Выход: цифровой и аналоговый;
  • Размер модуля: 16×30 мм;
  • Размер щупа: 20×60 мм;
  • Общий вес: 7.5 г.

Пример использования

Рассмотрим подключение датчика влажности почвы к Arduino. Создадим проект индикатора уровня влажности почвы для комнатного растения (ваш любимый цветок, который вы иногда забываете поливать). Для индикации уровня влажности почвы будем использовать 8 светодиодов. Для проекта нам понадобятся следующие детали:
  • Плата Arduino Uno
  • Датчик влажности почвы
  • 8 светодиодов
  • Макетная плата
  • Соединительные провода.
Соберем схему, показанную на рисунке ниже


Запустим Arduino IDE. Создадим новый скетч и внесем в него следующие строчки: // Датчик влажности почвы // http://сайт // контакт подключения аналогового выхода датчика int aPin=A0; // контакты подключения светодиодов индикации int ledPins={4,5,6,7,8,9,10,11}; // переменная для сохранения значения датчика int avalue=0; // переменная количества светящихся светодиодов int countled=8; // значение полного полива int minvalue=220; // значение критической сухости int maxvalue=600; void setup() { // инициализация последовательного порта Serial.begin(9600); // настройка выводов индикации светодиодов // в режим OUTPUT for(int i=0;i<8;i++) { pinMode(ledPins[i],OUTPUT); } } void loop() { // получение значения с аналогового вывода датчика avalue=analogRead(aPin); // вывод значения в монитор последовательного порта Arduino Serial.print("avalue=");Serial.println(avalue); // масштабируем значение на 8 светодиодов countled=map(avalue,maxvalue,minvalue,0,7); // индикация уровня влажности for(int i=0;i<8;i++) { if(i<=countled) digitalWrite(ledPins[i],HIGH); //зажигаем светодиод else digitalWrite(ledPins[i],LOW); // гасим светодиод } // пауза перед следующим получением значения 1000 мс delay(1000); } Аналоговый вывод датчика подключен к аналоговому входу Arduino, который представляет собой аналого-цифровой преобразователь (АЦП) с разрешением 10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение переменных для полного полива (minvalue) и сильной сухости почвы (maxvalue) получим экспериментально. Большей сухости почвы соответствует большее значение аналогового сигнала. С помощью функции map масштабируем аналоговое значение датчика в значение нашего светодиодного индикатора. Чем больше влажность почвы, тем больше значение светодиодного индикатора (количество зажженных светодиодов). Подключив данный индикатор к цветку, мы издали можем видеть на индикаторе степень влажности и при определять необходимость полива.

Часто задаваемые вопросы FAQ

1. Не горит светодиод питания
  • Проверьте наличие и полярность подаваемого на датчик YL-38 питания (3,3 – 5 В).
2. При поливе почвы не загорается светодиод индикации влажности почвы
  • Настройте потенциометром порог срабатывания. Проверьте соединение датчика YL-38 с щупом YL-69.
3. При поливе почвы не изменяется значение выходного аналогового сигнала
  • Проверьте соединение датчика YL-38 с щупом YL-69.
  • Проверьте наличие щупа в земле.

Составной датчик DHT11 включает в себя сразу два полезных измерительных прибора — термометр и гигрометр. Первый, очевидно, измеряет температуру, а второй — влажность воздуха. Обычно, датчик можно приобрести в таком вот пластиковом корпусе:

Для удобства использования, мы в RobotClass сделали модуль в форм-факторе 23×23мм, на котором датчик DHT11 уже имеет необходимый для правильной работы резистор подтяжки и штыревой трёхконтактный разъём.


Характеристики датчика:

  • напряжение питания: от 3 до 5 В;
  • потребляемый ток: 2,5 мА в момент опроса (в остальное время меньше);
  • диапазон измерений влажности: от 20 до 80%, при точности — 5%;
  • диапазон измерений температур: от 0 до 50°C, при точности ±2°C;
  • частота опроса: 1 Гц (раз в секунду).

Датчик DHT11 можно использовать для создания простой погодной станции или для контроля влажности в теплице.

Кроме DHT-11, существует множество аналогичных датчиков, которые отличаются точностью, энергопотреблением, интерфейсом. Например, у датчика DHT-22 диапазон измерений влажности составляет от 0 до 100%, а температуры от -40 до 125°C.

У датчика DHT11 есть четыре вывода, один из которых (№3) не используется.

Как видно на фото, выводы нумеруются слева на право, если смотреть на корпус датчика со стороны решетки и ногами вниз. Подключаем выводы к Ардуино Уно по следующей схеме:

Датчик DHT11 1 2 4
Ардуино Уно +5V 2 GND

Принципиальная схема

Внешний вид макета


Важно отметить, что второй вывод датчика мы подключаем не только ко второй линии GPIO на Ардуино, но еще и к плюсу питания через резистор подтяжки 4,7 кОм. Таким образом, мы, что называется, «подтягиваем» линию данных датчика к плюсу. Это необходимо для правильного функционирования DHT11.

Подключение модуля DHT11 ROC к Ардуино

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

Принципиальная схема

Внешний вид макета


Программа для работы с DHT11

Теперь, когда датчик подключен, приступим к программированию контроллера. Первое, что нам следует сделать — установить в Arduino IDE дополнительную библиотеку. Существует множество библиотек для работы с DHT, но мы выберем вариант с портала Adafruit. Ссылка на библиотеку имеется в конце урока.

Устанавливаем библиотеку и составляем тестовую программу:

#include
#include
#include

// датчик подключен к контакту №2
#define DHTPIN 2

// выбираем модель датчика, раскомментировав нужную строку
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// создаем объект dht, с которым будем работать
DHT_Unified dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
// инициализируем датчика
dht.begin();
}
void loop() {
sensors_event_t event;
// получаем значение температуры
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
// в случае проблем с датчиком температуры выводим следующий текст
Serial.println("Error reading temperature!");
}
else {
// вывод в COM порт текста Temperature: xxx°C
Serial.print("Temperature: ");
Serial.print(event.temperature);
Serial.println("°C");
}
// получаем значение влажности
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
// в случае проблем с датчиком влажности выводим следующий текст
Serial.println("Error reading humidity!");
}
else {
// вывод в COM порт текста Humidity: xxx%
Serial.print("Humidity: ");
Serial.print(event.relative_humidity);
Serial.println("%");
}
delay(1000); // пауза 1 сек перед следующим опросом датчика
}

В верхней части программы имеется три строки с директивой define, две из которых закомментированы (перед ними стоят два слеша). В зависимости от типа датчика мы можем раскомментировать нужную строку. Сейчас выбран датчик DHT11.

Загружаем программу в Ардуино Уно, открываем монитор последовательного порта (Tools/Serial Monitor) и наблюдаем результаты измерений!

Задания

  1. Автоматическая теплица. Требуется собрать автоматический регулятор влажности, состоящий из контроллера Ардуино Уно, датчика влажности DHT11 и реле. Программа регулятора должна каждые 3 секунды проверять значение влажности и температуры. В случае, если во время очередной проверки влажность опускается ниже 50% при температуре не ниже +20 градусов, с помощью реле включается вентилятор. Для простоты, к реле можно подключить обычный светодиод.

Заключение

Хотя датчик влажности DHT11 и является самым популярным, он не отличается выдающимися характеристиками. К примеру, его более продвинутый собрат DHT22 имеет больший диапазон измерений влажности и температуры, а также большую точность.

Полезные материалы

Скачать архив с библиотекой для работы с DHT11 можно по следующей ссылке:

Также библиотеку можно установить через менеджер библиотек в Arduino IDE. В поисковой строке менеджера необходимо ввести «DHT sensor library by Adafruit «.

Итак, датчик DHT11 имеет следующие характеристики:

  • диапазон измеряемой относительной влажности - 20..90% с погрешностью до 5%,
  • диапазон измеряемых температур - 0..50°C с погрешностью до 2°C;
  • время реакции на изменения влажности - до 15 секунд, температуры - до 30 секунд;
  • минимальный период опроса - 1 секунда.

Как видно, датчик DHT11 не отличается особой точностью, да и диапазон температур не охватывает отрицательные значения, что вряд ли подойдёт для наружных измерений в холодное время года при нашем климате. Однако малая стоимость, малый размер и простота работы с ним частично перекрывают эти недостатки. На рисунке приведён внешний вид датчика и его размеры в миллиметрах.

2 Схема подключения датчика температуры и влажности DHT11

Рассмотрим схему подключения датчика температуры и влажности DHT11 к микроконтроллеру, в частности, к Arduino.


Давайте посмотрим, что показано на рисунке.

Обозначение на рисунке Описание Примечание
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 я рекомендую покупать именно такой.

3 Считывание данных с сенсора DHT11 при помощи Arduino

Давайте пойдём таким путём: скачаем библиотеку для датчика DHT11 , установим её стандартным способом (распаковав в директорию \libraries\ среды разработки для Arduino).

Напишем вот такой простенький скетч. Он будет выводить в последовательный порт компьютера каждые 2 секунды сообщения об относительной влажности и температуре, считанные с датчика DHT11.

#include // подключаем библиотеку 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-порта и увидим следующее:


Видно, что данные и о влажности, и о температуре считываются и выводятся в терминалку.

4 Временная диаграмма информационного обмена датчика температуры и влажности DHT11 с микроконтроллером

С помощью временной диаграммы, полученной с логического анализатора, разберёмся, как осуществляется информационный обмен.

Для связи с микроконтроллером датчик температуры и влажности DHT11 использует однопроводный последовательный пакетный интерфейс. Один информационный пакет длительностью около 4 мс содержит: 1 бит запроса от микроконтроллера, 1 бит ответа датчика и 40 битов данных от датчика (16 битов информации о влажности, 16 битов информации о температуре и 8 проверочных битов). Давайте подробнее рассмотрим временную диаграмму информационного обмена Arduino с датчиком DHT11.



Временная диаграмма информационного обмена сенсора DHT11 с микроконтроллером

Из рисунка видно, что есть два типа импульсов: короткие и длинные. Короткие в данном протоколе обмена обозначают нули, длинные импульсы - единицы.

Итак, первые два импульса - это запрос 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; }

Небольшая таблица даст дополнительные разъяснения к предлагаемому решению.

Функция Назначение

Датчики DHT11 и DHT22 – очень популярны в среде Ардуино и часто используются в проектах метеостанций и . В этой статье мы с вами узнаем, как можно использоватьэти сенсоры, как правильно подключать к платам Arduino Uno, Mega или Nano, какие библиотеки использовать для написания скетча. Данные датчики не выделяются особенным быстродействием и точностью, но они просты в использовании, их можно смело использовать в своих первых проектах в ввиду доступности и невысокой цены.

Датчик состоит из двух частей – емкостного датчика температуры и гигрометра. Первый используется для измерения температуры, второй – для влажности воздуха. Находящийся внутри чип может выполнять аналого-цифровые преобразования и выдавать цифровой сигнал, который считывается посредством микроконтроллера.

В большинстве случаев DHT11 или DHT22 доступен в двух вариантах: как отдельный датчик в виде пластикового корпуса с металлическими контактами или как готовый модуль с датчиком и припаянными элементами обвязки. Второй вариант гораздо проще использовать в реальных проектах и крайне рекомендуется для начинающих.

Датчик DHT11

  • Потребляемый ток – 2,5 мА (максимальное значение при преобразовании данных);
  • Измеряет влажность в диапазоне от 20% до 80%. Погрешность может составлять до 5%;
  • Применяется при измерении температуры в интервале от 0 до 50 градусов (точность – 2%)
  • Габаритные размеры: 15,5 мм длина; 12 мм широта; 5,5 мм высота;
  • Питание – от 3 до 5 Вольт;
  • Одно измерение в единицу времени (секунду). То есть, частота составляет 1 Гц;
  • 4 коннектора. Между соседними расстояние в 0,1 ”.

  • Питание – от 3 до 5 Вольт;
  • Максимальный ток при преобразовании – 2,5 мА;
  • Способен измерять влажность в интервале от 0% до 100%. Точность измерений колеблется от 2% до 5%;
  • Минимальная измеряемая температура – минус 40, максимальная – 125 градусов по Цельсию (точность измерений – 0,5);
  • Устройство способно совершать одно измерение за 2 секунд. Частота – до 0,5 ГЦ;
  • Габаритные размеры: 15,1 мм длина; 25 мм широта; 5,5 мм высота;
  • Присутствует 4 коннектора. Расстояние между соседними – 0,1 ‘;

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

Где купить датчики по низким ценам

Традиционно самые низкие цены предлагают продавцы Aliexpress. Вот наиболее интересные варианты:

Цифровые датчики температуры и влажности DHT11 DHT22 DHT22 в виде модуля, совместимого с Arduino Uno R3 Беспроводной DHT22 для метеостанций на основеWeMos – собирается как бутерброд
Модуль беспроводного датчика DHT22 (с ESP8266) Недорогой вариант датчика температуры и влажности DHT11 дешевле 70 рублей! Качественно исполненный датчик DHT11 от RobotDyn

Подключение DHT11 к Arduino Uno

Если у вас на руках только сам датчик (синяя “решетчатая” пластиковая коробочка с 4-я металлическими контактами), то для подключения DHT11 вам понадобятся следующие детали:

    • Плата Arduino (или другой микроконтроллер, поддерживающий тайминг в микросекундах);
    • Монтажная (макетная плата);
    • Подтягивающий резистор номиналом в 10 кОм;
    • Светодиоды.

    Описание контактов DHT11:

    • Питание;
    • Вывод данных;
    • Не используется;
    • Земля (GND).

    Контакты нумеруются слева на право, если корпус датчика находится перед вами со стороны решетки, и «ноги» расположены внизу. Для правильной работы датчика нужно впаять резистор на 10 кОм между выходами сигнала и питанием.

    Если у вас в руках готовый модуль датчика, то подключение его к Arduino предельно упрощается: подключаете VCC к +5В, GND – к земле, третий контакт – к любому свободному пину на плате Arduino. Номер пина нужно будет затем указать скетче. Таким образом можно подключить датчика к разным платам Arduino: Uno, Arduino Mega, Arduino Nano, и другим.
    Подключение модуля датчика производится по следующей схеме:

    Датчик DHT22 /DHT11 Arduino
    + +5V
    out например, 2
    GND

    Внимание! Обязательно соблюдайте полярность подключения. В случае неправильного подключения датчик почти неминуемо выйдет из строя. Кроме того, при неправильном подключении пластиковый корпус датчик очень сильно нагреется и может обжечь вам руки. Будьте внимательны, не торопитесь!

    Для соответствия схемы примеру скетча, приведенному ниже, рекомендуется подключить сигнал с датчика влажности DHT11/DHT22 ко второму пину. Если у вас иной скетч, можно внести соответствующие правки в коде и изменить пин (пример ниже). Также подключаются дополнительные резисторы (этот шаг можно опустить, так как в плате уже установлен резистор).

    Скетч для работы с датчиками DHT11 и DHT22 в Arduino

    Перед написанием скетча давайте убедимся, что у нас установлена библиотека для работы с датчиками влажности и температуры . Скачать ее можно по ссылке https://github.com/adafruit/DHT-sensor-library . Загрузится папка под названием «DHT-sensor-library-master». Ее необходимо переименовать в DHT и переместить в папку libraries, что находится в корневой папке Arduino IDE. Далее необходимо загрузить готовый скетч или написать его самостоятельно, используя примеры. Типичный arduino скетч для работы с DHT11 и DHT22 выглядит следующим образом:

    #include "DHT.h" #define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше // Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino DHT dht(DHTPIN, DHT22); //Инициация датчика //DHT dht(DHTPIN, DHT11); 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)) { // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу Serial.println("Ошибка считывания"); return; } Serial.print("Влажность: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Температура: "); Serial.print(t); Serial.println(" *C "); //Вывод показателей на экран }

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

    На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.

    Резюме

    Давайте подведем итог. В статье рассмотрены вопросы подключения ардуино датчиков температуры и влажности DHT11 и DHT22 к плате . Датчики лучше приобретать в виде готовых модулей. Для работы с датчиками можно использовать библиотеку DHT для Arduino, которую легко скачать по указанной в статье ссылке. В скетче мы просто инициализируем объект для работы с датчиком и пользуемся его методами для получения температуры и влажности. Все полученные результаты мы можем посмотреть в окне монитора порта, сохранить и вывести на , послать через или .

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

Хотели бы вы, чтобы ваши растения сообщали о том, что их надо полить? Или просто держали вас в курсе уровня влажности почвы?

В этой статье мы рассмотрим проект автоматизированного полива с использованием датчика уровня влажности почвы:

Обзор датчика уровня влажности почвы

Подобные датчики подключаются достаточно просто. Два из трех коннекторов - это питание (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); //Задержка в пол секунды между считываниями

Удачи вам в реализации автоматического полива ваших растений!