Как работает датчик влажности почвы и его подключение к Arduino

Как работает датчик влажности почвы и его подключение к Arduino

Когда вы слышите термин «умный сад», первое, что приходит на ум — это система, которая автоматически поддерживает здоровье растений: измеряет, насколько сухая почва, и поливает растения только тогда, когда им это нужно. Никаких догадок, никаких мокрых корней и никаких страдающих от жажды растений!

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

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

Обзор оборудования

Датчик влажности почвы состоит из двух основных частей: зонды датчика и модуль компаратора LM393.

Зонд

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

Как работает датчик влажности почвы и его подключение к Arduino

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

Модуль компаратора LM393

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

Как работает датчик влажности почвы и его подключение к Arduino

Аналоговый выход (контакт AO) поступает непосредственно от изменяющегося сопротивления зондов. Чем влажнее почва, тем ниже сопротивление и тем ниже сигнал на этом контакте.

Этот аналоговый сигнал также поступает на компаратор LM393, который сравнивает его с опорным напряжением, установленным потенциометром на модуле.

  • Если почва суше установленного уровня, компаратор выдаёт HIGH на цифровом выходе (DO).

  • Если почва влажнее установленного уровня, он выдаёт LOW.

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

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

Как работает датчик влажности почвы и его подключение к Arduino

Модуль также имеет два светодиодных индикатора:

  • Светодиод питания загорается при подаче питания на модуль

  • Светодиод состояния загорается, когда уровень влажности превышает пороговое значение

Как работает датчик влажности почвы?

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

Когда на датчик подаётся питание (через контакты VCC и GND), к зондам прикладывается небольшое электрическое напряжение.

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

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

Как работает датчик влажности почвы и его подключение к Arduino

Датчик обнаруживает это изменение сопротивления и преобразует его в электрический сигнал (напряжение).

Модуль обрабатывает этот сигнал двумя способами:

Аналоговый выход (контакт AO): Предоставляет непрерывное напряжение, соответствующее уровню влажности. Вы можете подключить его к микроконтроллеру типа Arduino для получения детальных показаний о влажности почвы.

Цифровой выход (контакт DO): Модуль сравнивает аналоговый выход с порогом, установленным потенциометром. Если влажность почвы ниже порога (сухая), цифровой выход (DO) переходит в HIGH. Если выше (влажная) — в LOW.

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

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

Как работает датчик влажности почвы и его подключение к Arduino

AO — аналоговый выход. Этот контакт выдаёт переменное напряжение, соответствующее уровню влажности почвы — чем влажнее почва, тем ниже выходное напряжение. Подключается к аналоговому входу Arduino (например, A0).

DO — цифровой выход. Этот контакт выдаёт LOW, когда влажность почвы превышает пороговое значение, установленное потенциометром, и HIGH в остальных случаях. Подключается к цифровому входу Arduino.

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

GND — контакт земли.

Эксперимент 1 — Измерение влажности почвы через аналоговый выход (AO)

В первом эксперименте мы измерим количество влаги в почве, считывая аналоговый выход датчика.

Подключение

Начнём с подключения датчика влажности почвы к Arduino.

Сначала подключите контакт VCC модуля датчика к контакту 5V на Arduino, а контакт GND датчика — к одному из контактов GND на Arduino.

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

Чтобы избежать этой проблемы, рекомендуется подавать питание на датчик только тогда, когда нужно снять показания. Простой способ сделать это — подключить контакт питания датчика к одному из цифровых выходов Arduino, а затем в коде устанавливать этот контакт в HIGH (вкл.) или LOW (выкл.) по мере необходимости.

Поэтому вместо подключения контакта VCC напрямую к 5V мы подключим его к цифровому контакту #7 на Arduino. Таким образом, Arduino сможет управлять питанием датчика.

И наконец, подключите контакт AO датчика к аналоговому входу A0 на Arduino.

Вот краткая таблица подключения:

Soil Moisture SensorArduino
VCC7
GNDGND
AOA0

Схема подключения показана на изображении ниже.

Как работает датчик влажности почвы и его подключение к Arduino

Определение пороговых значений

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

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

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

// Sensor pins
#define sensorPower 7
#define sensorPin A0

void setup() {
  pinMode(sensorPower, OUTPUT);

  // Initially keep the sensor OFF
  digitalWrite(sensorPower, LOW);

  Serial.begin(9600);
}

void loop() {
  //get the reading from the function below and print it
  Serial.print("Analog output: ");
  Serial.println(readSensor());

  delay(1000);
}

//  This function returns the analog soil moisture measurement
int readSensor() {
  digitalWrite(sensorPower, HIGH);  // Turn the sensor ON
  delay(300);                       // Allow power to settle
  int val = analogRead(sensorPin);  // Read the analog value form sensor
  digitalWrite(sensorPower, LOW);   // Turn the sensor OFF
  return val;                       // Return analog moisture value
}

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

  • 850 при сухой почве

  • 400 при полностью насыщенной почве

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

Как работает датчик влажности почвы и его подключение к Arduino

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

Код Arduino

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

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

  • Если значение меньше 500, это означает, что почва слишком влажная.

  • Если значение между 500 и 750, это идеальный диапазон.

  • Если значение больше 750, почва достаточно сухая и, вероятно, нуждается в поливе.

/* Change these values based on your calibration values */
#define soilWet 500  // Define max value we consider soil 'wet'
#define soilDry 750  // Define min value we consider soil 'dry'

// Sensor pins
#define sensorPower 7
#define sensorPin A0

void setup() {
  pinMode(sensorPower, OUTPUT);

  // Initially keep the sensor OFF
  digitalWrite(sensorPower, LOW);

  Serial.begin(9600);
}

void loop() {
  //get the reading from the function below and print it
  int moisture = readSensor();
  Serial.print("Analog Output: ");
  Serial.println(moisture);

  // Determine status of our soil
  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);  // Take a reading every second for testing
                // Normally you should take reading perhaps once or twice a day
  Serial.println();
}

//  This function returns the analog soil moisture measurement
int readSensor() {
  digitalWrite(sensorPower, HIGH);  // Turn the sensor ON
  delay(300);                       // Allow power to settle
  int val = analogRead(sensorPin);  // Read the analog value form sensor
  digitalWrite(sensorPower, LOW);   // Turn the sensor OFF
  return val;                       // Return analog moisture value
}

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

Как работает датчик влажности почвы и его подключение к Arduino

Эксперимент 2 — Измерение влажности почвы через цифровой выход (DO)

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

Подключение

Мы используем ту же схему, что и в предыдущем эксперименте. Всё, что нужно сделать — отключить провод от аналогового входа (A0) и вместо этого подключить контакт DO (цифровой выход) модуля датчика к цифровому контакту 8 на Arduino.

Вот краткая таблица подключения:

Soil Moisture SensorArduino
VCC7
GNDGND
DO8

Схема подключения показана на изображении ниже.

Как работает датчик влажности почвы и его подключение к Arduino

Настройка порога

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

Как работает датчик влажности почвы и его подключение к Arduino

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

Вот и всё — ваш модуль теперь откалиброван и готов к использованию на основе выбранного уровня влажности.

Код Arduino

Теперь загрузите скетч в Arduino. Эта программа проверяет, сухая ли почва, используя цифровой выход датчика.

// Sensor pins
#define sensorPower 7
#define sensorPin 8

void setup() {
  pinMode(sensorPower, OUTPUT);

  // Initially keep the sensor OFF
  digitalWrite(sensorPower, LOW);

  Serial.begin(9600);
}

void loop() {
  //get the reading from the function below and print it
  int val = readSensor();
  Serial.print("Digital Output: ");
  Serial.println(val);

  // Determine status of our soil moisture situation
  if (val) {
    Serial.println("Status: Soil is too dry - time to water!");
  } else {
    Serial.println("Status: Soil moisture is perfect");
  }

  delay(1000);  // Take a reading every second for testing
                // Normally you shoul take reading perhaps every 12 hours
  Serial.println();
}

//  This function returns the analog soil moisture measurement
int readSensor() {
  digitalWrite(sensorPower, HIGH);   // Turn the sensor ON
  delay(300);                        // Allow power to settle
  int val = digitalRead(sensorPin);  // Read the analog value form sensor
  digitalWrite(sensorPower, LOW);    // Turn the sensor OFF
  return val;                        // Return analog moisture value
}

После запуска скетча Arduino будет считывать цифровой сигнал с датчика и выводить результат в монитор последовательного порта.

Как работает датчик влажности почвы и его подключение к Arduino

Датчик снимает показания раз в секунду для тестирования. В реальном проекте вы, возможно, захотите снимать показания реже — например, каждые 12 часов или раз в день — для экономии энергии и уменьшения износа датчика.