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

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

Способ — 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мА), что в разы меньше чем у аналогичных датчиков влажности почвы.

Подробнее о модуле:
Чем выше влажность почвы, тем выше её электропроводность. Датчик погружается в грунт на расстояние до 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 valMoisture/=10; // Вычисляем среднее значение влажности почвы (делим сумму значений, на их количество) Serial.println(valMoisture); // Выводим среднее значение влажности почвы в последовательный порт >
Применение:
- Система автополива растений
Ссылки:
Емкостной датчик влажности почвы
Trema-модуль емкостной датчик влажности почвы — в отличие от резистивных датчиков влажности не подвержен коррозии. Датчик является аналоговым, напряжение на выходе обратно пропорционально влажности почвы. Датчик идеально подходит для наблюдения изменений влажности почвы, для создания систем автоматического полива растений и для мониторинга целостности грунтового трубопровода.

Способ — 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;
- НАЧАЛЬНОЕ НИЖНЕЕ ЗНАЧЕНИЕ — начальное значение входного диапазона для конвертирования. В данном случае оно больше чем верхнее для инвертирования результата
- НАЧАЛЬНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ — конечное значение входного диапазона. В данном случае оно меньше нижнего для инвертирования результата.
- КОНЕЧНОЕ НИЖНЕЕ ЗНАЧЕНИЕ — начальное значение выходного диапазона
- КОНЕЧНОЕ ВЕРХНЕЕ ЗНАЧЕНИЕ — конечное значение выходного диапазона
Применение:
- Система автополива растений, сбор информации об изменениях влажности почвы, контроль протечек грунтового трубопровода, контроль уровня воды
Ссылки:
Датчик влажности почвы Ардуино подключение

FC-28 Arduino — это датчик для определения содержания влаги в почве, который часто используется в системах автоматического орошения сельскохозяйственных культур. Модуль состоит из щупа с двумя открытыми электродами и электронного модуля на основе компаратора LM393 с цифровым и аналоговым выходами. Рассмотрим оптимальное подключение модуля датчика влажности почвы FC-28 или YL-69 к Arduino Uno.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- soil moisture sensor FC-28
- светодиоды и резисторы
- макетная плата
- коннекторы
- Датчик влажности почвы своими руками
- Как подключить датчик воды к Ардуино
- Как подключить к Ардуино датчик DS18B20
Зонд датчика (щуп) действует как переменный резистор, сопротивление которого изменяется в зависимости от содержания воды в почве. Чем больше влаги в почве, тем ниже сопротивление, и наоборот, чем меньше влаги содержится в земле, тем выше становится сопротивление. Далее, в зависимости от сопротивления окружающей среды, датчик влажности почвы FC-28 выдает аналоговое напряжение на выходе A0.
Датчик FC-28 Arduino распиновка, характеристики

Характеристики датчика FC-28 Arduino (datasheet)
- Источник питания: 3,3 — 5В
- Потребляемый ток: 35 мА
- Выход: цифровой и аналоговый
- Размер модуля: 16 × 30 мм
- Размер зонда: 20 × 60 мм
Щуп датчика соединяется двумя проводами с компаратором LM393. Для регулировки чувствительности датчика используется потенциометр, который позволяет установить минимальное значение содержания влаги в почве, при котором датчик будет выдавать низкий логический уровень (LOW) на цифровом выходе D0. Пока минимальное значение не достигнуто, цифровой выход модуля будет выдавать высокий уровень (HIGH).
Подключение датчика влажности почвы к Ардуино

В первом примере подключите датчик влажности почвы к Ардуино через аналоговый выход, поскольку аналоговый сигнал позволяет более точно отслеживать даже самые незначительные изменения влажности почвы. Для этого подключите питание модуля — GND и 5 Вольт (см. схему подключения выше), а вывод A0 соедините с портом A1 микроконтроллера. После загрузки этого скетча откройте монитор порта Arduino IDE.
Скетч для измерения влажности почвы с Ардуино
#define FC A1 // порт подключения сенсора #define LED 13 // порт подключения светодиода int minsoil = 300; // минимальное значение влажности int soil; void setup() < Serial.begin(9600); pinMode(FC, INPUT); pinMode(LED, OUTPUT); >void loop()< soil = analogRead(FC); Serial.print("fc28 4">Как подключить цифровой датчик FC-28 к Ардуино

При калибровке аналогового датчика влажности почвы установите пороговое значение в программе, при котором будет активирован автоматический полив. Цифровой сигнал датчика калибруется аппаратно с помощью переменного резистора — поворот встроенного потенциометра по часовой стрелке — увеличивает чувствительность датчика. Загрузите следующую программу в микроконтроллер и отрегулируйте потенциометр на модуле.
Датчик влажности почвы (ёмкостный): инструкция по использованию и примеры
Ёмкостный сенсор влажности почвы пригодиться для создания систем автоматического полива растений. Датчик не даст засохнуть комнатным цветкам и флоре на огороде.

Принцип работы
Ёмкостный датчик выполнен в виде штыря, которым погружается в грунт на расстояние до 80 мм. На штыре в виде дорожек расположены два электрода, но в отличии от резистивной модели, электроды ёмкостного сенсора защищены токоизолирующей маской и неподвержены коррозии.
Внутри ёмкостного датчика находится RC-генератор на таймере 555, частота которого зависит от ёмкости между двумя электродами, которые выполняю роль конденсатора. Изменение влажности грунта сказывается на его диэлектрических свойствах и меняет ёмкость, что приводит к повышению или понижению выходного сигнала датчика. Итоговое напряжение пропорционально степени влажности почвы.
Пример работы для Arduino и XOD
В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например Arduino Uno.
Схема устройства
Подключите датчик влажности почвы к аналоговому пину A0 платформы Arduino. Для коммуникации понадобятся соединительные провода «мама-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.

Код для Arduino IDE
Прошейте платформу Arduino скетчем приведённым ниже.
// любой GPIO пин с поддержкой АЦП constexpr auto pinSensor = A0; void setup() { // открываем Serial-порт Serial.begin(9600); } void loop() { // считываем данные с датчика влажности почвы int valueSensor = analogRead(pinSensor); // выводим данные в Serial-порт Serial.println(valueSensor); // ждём 100 мс delay(100); }
После загрузки скетча, в Serial-порт будут выводиться текущие показания сенсора в 10-битном диапазоне.