Общие сведения:
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мА), что в разы меньше чем у аналогичных датчиков влажности почвы.
Подробнее о модуле:
Чем выше влажность почвы, тем выше её электропроводность. Датчик погружается в грунт на расстояние до 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); // Выводим среднее значение влажности почвы в последовательный порт }
Применение:
- Система автополива растений
Обсуждение