Датчик влажности почвы, аналоговый

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

Общие сведения:

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

Видео:

Спецификация:

  • Напряжение питания Vcc: 5 В или 3,3 В
  • Напряжение на выходе датчика: 0 ... 4,5 В
  • Максимальный потребляемый ток: < 4,5 мА, при Vcc = 5 В и датчик погружён в грунтовую воду.
  • Потребляемый ток: I=Us/1000, где Us - напряжение на выходе Signal (S) датчика
  • Глубина погружения в почву: 45 мм
  • Рабочая температура: 4 ... 85 °С
  • Габариты: 65х22х7 мм (с учётом колодки выводов)
  • Вес: 1 г

Подключение:

В комплекте имеется кабель для быстрого и удобного подключения к Trema Shield.

Выход датчика подключается к любому аналоговому входу Arduino.

Модуль удобно подключать 2 способами, в зависимости от ситуации:

Способ - 1 :  Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO

Способ - 2 :  Используя проводной шлейф и Shield

Используя 3-х проводной шлейф, к  Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Питание:

Входное напряжение питания 5 В или 3,3 В, постоянного тока, подаётся на выводы Vcc (V) и GND (G) датчика. Датчик можно подключить к постоянному питанию (тип подключения 1), а можно управлять питанием датчика (тип подключения 2) если подавать питание на датчик с любого информационного вывода, тогда функцией digitalWrite() можно включать или выключать датчик. Питание датчика от информационного вывода (тип подключения 2), возможно, благодаря низкому энергопотреблению датчика (потребляемый ток <4,5мА), что в разы меньше чем у аналогичных датчиков влажности почвы.

Схема подключения датчика влажности почвы к Arduino Uno

Подробнее о модуле:

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

где:

  • 0...300 - сухая почва*
  • 300...500 - увлажнённая почва*
  • 500...800 - влажная почва*

Из графика видно, что электропроводность почвы, а следовательно и выходной сигнал датчика имеет флуктуации (хаотичные отклонения от среднего значения). Уровень сигнала на выходе датчика лежит в диапазоне от 0 В до 4,5 В.

*На показания датчика влияют следующие факторы:

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

Примеры:

Считывание показаний с датчика:

Показания датчика считываются вызовом функции analogRead(номер_вывода); которая возвращает число от 0 до 1023 (см. график выше).

Датчик запитан от выводов A0 и A1. Если датчик подключён к постоянному питанию (тип подключения 1), то строки с символом * в комментариях, можно удалить.

const uint8_t  pinSensor   = A2;          //   Константа с указанием номера аналогового входа, к которому подключен датчик влажности почвы
const uint8_t  pinVcc      = A1;          // * Константа с указанием номера вывода, от которого запитан датчик (вывод Vcc)
const uint8_t  pinGND      = A0;          // * Константа с указанием номера вывода, от которого запитан датчик (вывод GND)
void setup(){
  Serial.begin(9600);                     //   Инициируем передачу данных по последовательному порту на скорости 9600 бот
  pinMode     (pinVcc,    OUTPUT);        // * Переводим вывод pinVcc    в режим выхода
  pinMode     (pinGND,    OUTPUT);        // * Переводим вывод pinGND    в режим выхода
  digitalWrite(pinVcc,    LOW   );        // * Подаем уровень логического 0 на вывод Vcc датчика
  digitalWrite(pinGND,    LOW   );        // * Подаем уровень логического 0 на вывод GND датчика
}
void loop(){
  digitalWrite(pinVcc,    HIGH  );        // * Включаем датчик
  Serial.println(analogRead(pinSensor));  //   Выводим текущую влажность почвы из датчика в последовательный порт
  digitalWrite(pinVcc,    LOW   );        // * Выключаем датчик
  delay(5000);                            //   Приостанавливаем выполнение программы на 5 секунд
}

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

const uint8_t  pinSensor   = A0;          //   Константа с указанием номера аналогового входа, к которому подключен датчик влажности почвы
      uint16_t arrMoisture[10];           //   Массив для хранения 10 последних значений влажности почвы
      uint16_t valMoisture;               //   Переменная для расчёта среднего значения влажности почвы
void setup(){
  Serial.begin(9600);                     //   Инициируем передачу данных по последовательному порту на скорости 9600 бот
}
void loop(){
  valMoisture=0;                          //   Обнуляем среднее значение влажности почвы
  for(int i=0; i< 9; i++){                //   Создаём цикл от 0 (включительно) до 9 (не включительно)
    arrMoisture[i]=arrMoisture[i+1];      //   Сдвигаем значения элементов массива на одну ячейку влево (0=1, 1=2, 2=3 ... 8=9)
  } arrMoisture[9]=analogRead(pinSensor); //   Сохраняем текущую влажность почвы из датчика в последний (9) элемент массива
  for(int i=0; i<=9; i++){                //   Создаём цикл от 0 (включительно) до 9 (включительно)
    valMoisture+=arrMoisture[i];          //   Сохраняем в переменную valMoisture сумму значений всех элементов массива
  } valMoisture/=10;                      //   Вычисляем среднее значение влажности почвы (делим сумму значений, на их количество)
  Serial.println(valMoisture);            //   Выводим среднее значение влажности почвы в последовательный порт
}

Применение:

    • Система автополива растений

    Ссылки:

    Обсуждение