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

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

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

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

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

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

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

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

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

Питание:

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

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

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

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

Пример считывания показаний датчика с управляемым питанием (тип подключения 2), датчик запитан от выводов 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);            //   Выводим среднее значение влажности почвы в последовательный порт
}

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

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

Примечание:

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

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


Обсуждение

Присоединяйся

На главную