Arduino и датчик влажности почвы. Датчик уровня влажности почвы и автоматический полив на Arduino

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

Датчик влажности почвы 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 г.

Обзор аппаратного обеспечения

Типовой датчик влажности почвы состоит из двух компонентов.

Зонд

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

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

Рисунок 2 Зонд датчика влажности почвы
Рисунок 2 – Зонд датчика влажности почвы

Модуль

Датчик также содержит электронный модуль, который соединяет датчик с Arduino.

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

Этот же сигнал подается на высокоточный компаратор LM393 для его оцифровки, с выхода которого сигнал подается на вывод цифрового выхода (DO).

Рисунок 3 Регулировка чувствительности датчика влажности почвы
Рисунок 3 – Регулировка чувствительности датчика влажности почвы

Для регулировки чувствительности цифрового выхода (DO) модуль содержит встроенный потенциометр.

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

Эта настройка очень полезна, когда вы хотите инициировать действие при достижении определенного порога. Например, когда уровень влажности в почве пересекает пороговое значение, вы можете активировать реле, чтобы начать перекачивание воды. Вот вам идея!

Совет: поверните движок потенциометра по часовой стрелке, чтобы увеличить чувствительность, или против часовой стрелки, чтобы уменьшить ее.

Рисунок 4 Светодиодные индикаторы питания и состояния почвы
Рисунок 4 – Светодиодные индикаторы питания и состояния почвы

Помимо этого, модуль имеет два светодиода. Индикатор питания загорится, когда на модуль будет подано напряжение питания. Светодиод состояния загорится, когда на цифровой выход будет подаваться низкий логический уровень.

Распиновка датчика влажности почвы

Датчик влажности почвы очень прост в использовании и содержит только 4 вывода для связи с внешним миром.

Рисунок 5 Распиновка датчика влажности почвы
Рисунок 5 – Распиновка датчика влажности почвы

AO (аналоговый выход) выдает аналоговый сигнал с напряжением в диапазоне между напряжением питания и 0 В и будет подключен к одному из аналоговых входов нашей платы Arduino.

Вывод DO (цифровой выход) выдает цифровой выходной сигнал со схемы встроенного компаратора. Вы можете подключить его к любому цифровому выводу на Arduino или напрямую к 5-вольтовому реле или подобному устройству.

Вывод VCC подает питание на датчик. Рекомендуется питать датчик напряжением от 3,3 до 5 В. Обратите внимание, что сигнал на аналоговом выходе будет зависеть от того, какое напряжение питания подается на датчик.

Аналоговый режим

Для подключения датчика в аналоговом режиме нам потребуется использовать аналоговый выход датчика. Датчик влажности почвы FC-28 принимает аналоговые выходные значения от 0 до 1023.

Будет интересно➡  Индуктивное сопротивление

Влажность измеряется в процентах, поэтому мы сопоставим эти значения от 0 до 100, а затем покажем их на последовательном мониторе (serial monitor). Вы можете установить различные значения влаги и повернуть водяную помпу “включено-выключено” согласно этим значениям.

Давайте подключим наш датчик влажности почвы к плате Arduino.

Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод VCC на модуле к выводу 5V на Arduino.

Однако одной из широко известных проблем с этими датчиками является их короткий срок службы при воздействии влажной среды. При постоянной подаче питания на зонд скорость коррозии значительно увеличивается.

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

Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем высокий или низкий логический уровень, когда это необходимо.

Кроме того, итоговая мощность, потребляемая модулем (оба светодиода горят), составляет около 8 мА, поэтому можно запитать модуль от цифрового вывода на Arduino.

Итак, давайте подключим вывод VCC модуля к цифровому выводу 7 Arduino, а вывод GND модуля к выводу GND Arduino.

И, наконец, подключите вывод AO модуля к выводу A0 аналого-цифрового преобразователя Arduino.

Схема соединений показана на рисунке ниже.

Рисунок 6 Подключение датчика влажности почвы к Arduino для считывания показаний на аналоговом выходе
Рисунок 6 – Подключение датчика влажности почвы к Arduino для считывания показаний на аналоговом выходе

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

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

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

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

// Выводы, подключенные к датчику #define sensorPower 7 #define sensorPin A0 void setup() { pinMode(sensorPower, OUTPUT); // Изначально оставляем датчику выключенным digitalWrite(sensorPower, LOW); Serial.begin(9600); } void loop() { // получить показание из функции ниже и напечатать его Serial.print(“Analog output: “); Serial.println(readSensor()); delay(1000); } // Данная функция возвращает аналоговый результат измерений датчика влажности почвы int readSensor() { digitalWrite(sensorPower, HIGH); // Включить датчик delay(10); // Дать время питанию установиться int val = analogRead(sensorPin); // Прочитать аналоговое значение от датчика digitalWrite(sensorPower, LOW); // Выключить датчик return val; // Вернуть аналоговое значение влажности }

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

  • ~ 850, когда почва сухая;
  • ~ 400, когда почва полностью насыщена влагой.

Рисунок 7 Калибровка датчика влажности почвы
Рисунок 7 – Калибровка датчика влажности почвы

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

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

  • <500 – слишком влажная;
  • 500-750 – это целевой диапазон;
  • >750 – достаточно сухая для полива.

/* Измените эти значения, основываясь на своих значениях калибровки */ #define soilWet 500 // Определяет максимальное значение, при котором, мы решили, что почва ‘влажная’ #define soilDry 750 // Определяет минимальное значение, при котором, мы решили, что почва ‘сухая’ // Выводы, подключенные к датчику #define sensorPower 7 #define sensorPin A0 void setup() { pinMode(sensorPower, OUTPUT); // Изначально оставляем датчику выключенным digitalWrite(sensorPower, LOW); Serial.begin(9600); } void loop() { // получить показание из функции ниже и напечатать его int moisture = readSensor(); Serial.print(“Analog Output: “); Serial.println(moisture); // определить состояние нашей почвы if (moisture < soilWet) { // слишком влажная Serial.println(“Status: Soil is too wet”); } else if (moisture >= soilWet && moisture < soilDry) { // идеальное состояние Serial.println(“Status: Soil moisture is perfect”); } else { // слишком сухая – пора поливать Serial.println(“Status: Soil is too dry – time to water!”); } delay(1000); // Для проверки берем показания раз в секунду // Обычно вам необходимо проверять показания, возможно, раз или два в день Serial.println(); } // Данная функция возвращает аналоговый результат измерений датчика влажности почвы int readSensor() { digitalWrite(sensorPower, HIGH); // Включить датчик delay(10); // Дать время питанию установиться int val = analogRead(sensorPin); // Прочитать аналоговое значение от датчика digitalWrite(sensorPower, LOW); // Выключить датчик return val; // Вернуть аналоговое значение влажности }

Будет интересно➡  Системы заземления TN-C, TN-S, TN-C-S, TT, IT со схемами (ПУЭ). Системы заземлений - преимущества и недостатки

Если все в порядке, вы должны увидеть вывод в мониторе последовательного порта, похожий на приведенный ниже.

Рисунок 8 Вывод аналоговых показаний датчика влажности почвы
Рисунок 8 – Вывод аналоговых показаний датчика влажности почвы

Измерение влажности почвы с помощью цифрового выхода

Для нашего второго эксперимента мы определим состояние почвы с помощью цифрового выхода.

Мы будем использовать схему из предыдущего примера. На этот раз нам просто нужно удалить подключение к выводу аналого-цифрового преобразователя и подключить вывод DO модуля к цифровому выводу 8 Arduino.

Соберите схему, как показано ниже:

Рисунок 9 Подключение датчика влажности почвы к Arduino для считывания показаний на цифровом выходе
Рисунок 9 – Подключение датчика влажности почвы к Arduino для считывания показаний на цифровом выходе

Для калибровки цифрового выхода (DO) модуль имеет встроенный потенциометр.

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

Рисунок 10 Состояния цифрового выхода датчика влажности почвы
Рисунок 10 – Состояния цифрового выхода датчика влажности почвы

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

Теперь ваш датчик откалиброван и готов к использованию.

После того, как схема будет собрана, загрузите в Arduino следующий скетч.

// Выводы, подключенные к датчику #define sensorPower 7 #define sensorPin 8 void setup() { pinMode(sensorPower, OUTPUT); // Изначально оставляем датчику выключенным digitalWrite(sensorPower, LOW); Serial.begin(9600); } void loop() { // получить показание из функции ниже и напечатать его int val = readSensor(); Serial.print(“Digital Output: “); Serial.println(val); // Определить статус ситуации с влажностью почвы if (val) { // слишком сухая – пора поливать Serial.println(“Status: Soil is too dry – time to water!”); } else { // идеальное состояние Serial.println(“Status: Soil moisture is perfect”); } delay(1000); // Для проверки берем показания раз в секунду // Обычно вам необходимо проверять показания, возможно, каждые 12 часов Serial.println(); } // Данная функция цифровой результат измерений датчика влажности почвы int readSensor() { digitalWrite(sensorPower, HIGH); // Включить датчик delay(10); // Дать время питанию установиться int val = digitalRead(sensorPin); // Прочитать цифровое значение от датчика digitalWrite(sensorPower, LOW); // Выключить датчик return val; // Вернуть цифровое значение влажности }

Если все в порядке, вы должны увидеть вывод в мониторе последовательного порта, похожий на приведенный ниже.

Рисунок 11 Вывод цифровых показаний датчика влажности почвы
Рисунок 11 – Вывод цифровых показаний датчика влажности почвы

Автоматический полив

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

Датчик уровня влажности в составе автоматической системы полива на основании Arduino:

Автоматический полив

Для автоматизации полива нам понадобятся дополнительные детали: возможно, шкивы, зубчатые шестерни, двигатель, муфта, транзисторы, резисторы. Список зависит от вашего проекта. Ну все, что может попасться под руку в быту. Более детально один из примеров показан ниже:

Автоматический полив-детали

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

Схема подключения двигателя постоянного тока (статья с более подробным примером подключения двигателя к Arduino) на примере копии Arduino от SparkFun приведена ниже:

Автоматический полив-детали

Ниже приведен скетч для Arduino (по сути он такой же как и приведенный выше с небольшим дополнением для управления двигателем):

// В скетче считываются данные с датчика и отображается уровень влажности почвы

// если почва сухая, начинает работать двигатель

// Для работы с дисплеем используется библиотека softwareserial library

#include

// Подключите пин для обмена данными с использованием 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;

void setup(){

pinMode(motorPin, OUTPUT); // устанавливаем пин, к которому подключен двигатель в качестве выхода

mySerial.begin(9600); // устанавливаем скорость обмена данными на 9600 baud

delay(500); // ждем пока дисплей прогрузится

}

void loop(){

// Здесь мы объявляем строку, в которой хранятся данные для отображения

// на жидкокристаллическом дисплее. Значения будут изменяться

Будет интересно➡  Индуктивность контура

// в зависимости от уровня влажности почвы

String DisplayWords;

// В переменной sensorValue хранится аналоговое значение датчика с пина А0

int sensorValue;

sensorValue = analogRead(sensorPin);

// перемещение курсора к началу первой строки LCD дисплея: mySerial.write(254);

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!”

if (sensorValue <= thresholdDown){

// перемещение курсора к началу второй строки дисплея:

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

} else {

// перемещение курсора к началу второй строки дисплея:

mySerial.write(254);

mySerial.write(192);

mySerial.print(DisplayWords);

}

delay(500); //Задержка в пол секунды между считываниями

}

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

Контроль уровня влажности почвы – пример проекта

В приведенном ниже проекте использованы датчик уровня влажности, аналог платы Arduino – RedBoard и LCD дисплей, на котором выводятся данные про уровень влажности почвы.

В приведенном ниже проекте использованы датчик уровня влажности, аналог платы Arduino – RedBoard и LCD дисплей, на котором выводятся данные про уровень влажности почвы.

Датчик уровня влажности почвы компании SparkFun:

Датчик уровня влажности почвы sparkfun

Красный проводник (VCC) подключается к 5 В на Arduino, черный – к земле (GND), зеленый – сигнал – к аналоговому пину 0 (A0). Если вы используете другой аналоговый пин на Arduino, не забудьте внести соответствующие изменения в скетч для микроконтроллера, представленный ниже.

Датчик уровня влажности почвы и дисплей

LCD дисплей подключен к 5 В, земле и цифровому пину 2 (также можно изменить и внести изменения в код) для обмена данными с микроконтроллером по серийному протоколу связи.

Стоит отметить, что если вы хотите продлить срок службы вашего сенсора, можно подключить его питание к цифровому пину и питать его только при считывании данных, а после – отключать. Если запитывать датчик постоянно, его чувствительные элементы вскоре начнут ржаветь. Чем больше влажность почвы, тем быстрее будет проходить коррозия. Еще один вариант – нанести гипс на датчик. В результате влага будет поступать, но коррозия значительно замедляется.

Проблема недолговечности датчика уровня влажности почвы

Один из недостатков датчиков подобного типа – недолговечность их чувствительных элементов. К примеру, компания Sparkfun решает эту проблему, используя дополнительное покрытие (Electroless Nickel Immersion Gold). Второй вариант продления срока действия сенсора – подавать на него питание непосредственно при снятии показаний. При использовании Arduino, все ограничивается подачей сигнала HIGH на пин, к которому подключен датчик. Если вы хотите запитать датчик большим напряжением чем предоставляет Arduino, всегда можно использовать дополнительный транзистор.

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

1. Не горит светодиод питания

  • Проверьте наличие и полярность подаваемого на датчик YL-38 питания (3,3 – 5 В).

2. При поливе почвы не загорается светодиод индикации влажности почвы

  • Настройте потенциометром порог срабатывания. Проверьте соединение датчика YL-38 с щупом YL-69.

3. При поливе почвы не изменяется значение выходного аналогового сигнала

  • Проверьте соединение датчика YL-38 с щупом YL-69.
  • Проверьте наличие щупа в земле.

Заключение

В этом обзоре мы рассмотрели датчик влажности почвы. Подключили его к Ардуино и собрали простую сигнальную схему измерения состояния земли для растения.

Спасибо, что дочитали статью до конца.

Предыдущая
РазноеЗачем нужны сервисы приема СМС и с чем их едят
Следующая
РазноеИмпульсный и аналоговый блоки питания, принципы работы и основные отличия. Что такое импульсный блок питания (ИБП) и как он работает
Понравилась статья? Поделиться с друзьями:
Electroinfo.net  онлайн журнал
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять