Емкостной датчик влажности почвы

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

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

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

  • Напряжение питания Vcc: 5 В или 3,3 В
  • Напряжение на выходе датчика при Vcc 5В: ~3 ... 1,75 В; при Vcc 3,3В: ~2 ... 1 В
  • Выход датчика инверсный
  • Максимальный потребляемый ток: < 5,3 мА, при Vcc = 5 В и датчик погружён в грунтовую воду.
  • Глубина погружения в почву: 65 мм
  • Рабочая температура: 0 ... 85 °С
  • Габариты: 105х16х7 мм (с учётом колодки выводов)
  • Вес: 5 г

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

В комплекте имеется кабель для быстрого и удобного подключения к 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() можно включать или выключать датчик. При таком подключении нужно дать датчику время для включения генератора частоты, примерно 50 миллисекунд.

 Питание датчика от информационного вывода (тип подключения 2), возможно, благодаря низкому энергопотреблению датчика (потребляемый ток <5,3мА).

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

Модуль использует технологию шунтирования высокой частоты за счет чего электроды датчика физически не контактируют с почвой и не подвержены коррозии. Датчик возвращает инверсное значение: чем больше влажность, тем ниже показания. Максимальные показания  - датчик находится в воздухе, минимальные - датчик находится в воде по линию пиктограммы деревьев (65мм). 

В зависимости от влажности почвы, при питании 5 вольт показания датчика находятся в диапазоне от ~3 до ~1.75 вольт; при питании 3,3 вольта от ~2 до ~1. Соответственно, диапазон показаний функции analogRead() будет зависеть от напряжения питания датчика.

График зависимости выходного напряжения датчика от влажности почвы при питании 5В

Примеры:

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

Показания датчика считываются вызовом функции analogRead(номер_вывода);

Тип подключения 1:

#define  SENSOR      A0                    // Определяем номер аналогового входа, к которому подключен датчик влажности почвы.

void setup(){
  Serial.begin(9600);                      // Инициируем передачу данных по последовательному порту на скорости 9600 бот.
}
void loop(){
  uint16_t sensor = analogRead(SENSOR);    // Читаем данные с датчика,
  Serial.println(sensor);                  // выводим текущую влажность почвы из датчика в последовательный порт,
  delay(5000);                             // приостанавливаем выполнение программы на 5 секунд.
}

Тип подключения 2: датчик запитан от выводов A0 и A1.

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

Так как датчик является инверсным, для удобства чтения данных можно воспользоваться встоенной функцией map(), которая в следующем скетче преобразует и инвертирует "сырые" показания датчка в диапазон от 0 до 100

#define  SENSOR      A2                    // Определяем номер аналогового входа, к которому подключен датчик влажности почвы.
                                           // Датчик инверсный: больше влажность - меньше значение.
#define  MIN        630                    // Определяем минимальное показание датчика (в воздухе),
#define  MAX        330                    // определяем максимальное показание датчика (в воде),
uint16_t sensor;                           // создаем переменную для хранения адаптированных показаний,
void setup(){
  Serial.begin(9600);                      // Инициируем передачу данных по последовательному порту на скорости 9600 бот.
}
void loop(){
  sensor = analogRead(SENSOR);             // Читаем сырые данные с датчика,
  sensor = map(sensor, MIN, MAX, 0, 100);  // адаптируем значения от 0 до 100,
  Serial.println(sensor);                  // выводим текущую влажность почвы из датчика в последовательный порт,
  delay(500);                              // приостанавливаем выполнение программы на 0.5 секунд.
}

Описание функции map():

  • Синтаксис: map(ПЕРЕМЕННАЯ, НАЧАЛЬНОЕ НИЖНЕЕ ЗНАЧЕНИЕ, НАЧАЛЬНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ, КОНЕЧНОЕ НИЖНЕЕ ЗНАЧЕНИЕ, КОНЕЧНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ);
  • ПЕРЕМЕННАЯ - переменная или функция, возвращающая значение int;
  • НАЧАЛЬНОЕ НИЖНЕЕ ЗНАЧЕНИЕ - начальное значение входного диапазона для конвертирования. В данном случае оно больше чем верхнее для инвертирования результата
  • НАЧАЛЬНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ - конечное значение входного диапазона. В данном случае оно меньше нижнего для инвертирования результата.
  • КОНЕЧНОЕ НИЖНЕЕ ЗНАЧЕНИЕ - начальное значение выходного диапазона
  • КОНЕЧНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ - конечное значение выходного диапазона

Применение:

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

    Ссылки:

    Обсуждение