Гидропонная система периодического затопления «Гидрогоршок»
Гидропонные системы – это прогрессивный способ выращивания растений. Основная идея в том, что корни находятся не в почве или субстрате, а в питательном растворе, откуда растение берет все необходимые для роста вещества. Существует много разновидностей таких систем, одна из которых основана на принципе периодического затопления корневой системы. Таким образом растение попеременно будет получать и необходимые для роста вещества из питательного раствора, и кислород для того, чтобы корни не начали загнивать.
Видеообзор
Как устроен «Гидрогоршок»
Что понадобится
- Сетчатый гидропонный горшок
- Удобрения для питательного раствора
- Керамзит
- Двойной горшок или два ведёрка разного объёма
Как собрать
Установи Slot Shield на Arduino Uno.
Не забудь поставить джампер на Slot Sield в положение V2-VIN
Добавь на Slot Sield светодиод, потенциометр и силовой ключ.
Не забудь поставить джампер на силовом ключе в положение V=P+
Собери корпус гидрогоршка из двух ёмкостей, как показано на рисунке.
В верхнем резервуаре просверли отверстие для силиконовой трубки и дренажное отверстие для стекания питательного раствора обратно в нижнюю ёмкость.
Дренажное отверстие не должно быть очень большим, иначе помпа не будет успевать накачать питательный раствор из одной ёмкости в другую.
Просверли отверстия под датчики уровня и установи их. Помпу помести в нижний резервуар, выведи провод питания наружу и зачисти изоляцию на проводах.
Установи сетчатый горшочек для гидропоники и засыпь его керамзитом.
Подключи помпу к силовому ключу, а датчики уровня к цифровым пинам на Slot Sield.
Исходный код
Прошей Arduino Uno скетчем
- gidroponic.ino
// Пин, к которому подключен датчик минимального уровня питательного раствора #define LowLevel 7 // Пин, к которому подключен датчик максимального уровня питательного раствора #define MaxLevel 6 // Пин, к которому подключен датчик уровня заполнения верхнего резервуара #define FloodLevel 4 // Пин, к которому подключен светодиодный индикатор #define LedPin 13 // Пин, к которому подключена помпа #define PumpPin 12 // Пин, к которому подключен потенциометр регулировки #define potPin A0 // Переменные для хранения времени long previousMillis = 0; long BlinkPreviousMillis = 0; unsigned long interval; // два часа = 7200000, 15 минут = 900000 // Переменные-флаги для хранения состояния работы гидрогоршка bool blinkState = 0; bool waterStart = 0; bool pumpState = 0; // Переменные для хранения состояния датчиков уровня bool LowLevelState; bool MaxLevelState; bool FloodLevelState; // Переменная для хранения состояния мигающего светодиода bool ledState; void setup(){ // Притянем пины датчиков уровня к плюсу pinMode(LowLevel, INPUT_PULLUP); pinMode(MaxLevel, INPUT_PULLUP); pinMode(FloodLevel, INPUT_PULLUP); // Установим пины светодиода и помпы как выходы pinMode(LedPin, OUTPUT); pinMode(PumpPin, OUTPUT); // Проверим уровень раствора. Если уровень меньше минимального - зажигаем светодиодный индикатор. // Ждем срабатывания датчика максимального уровня, после этого гасим светодиод. if (digitalRead(LowLevel)){ while (!digitalRead(MaxLevel)){ digitalWrite(LedPin, 1); } } digitalWrite(LedPin, 0); // Сохраняем текущее время для подсчета интервалов затопления. previousMillis = millis(); // Устанавливаем флаг для начала работы помпы. pumpState = 1; } void loop(){ // Считываем значение потенциометра для установки следующего затопления. interval = map(analogRead(potPin), 0, 1023, 900000, 7200000); // Присваиваем переменным состояния датчиков уровня. // Некоторые датчики установлены "вверх ногами", поэтому значения с них нужно инвертировать. LowLevelState = !digitalRead(LowLevel); MaxLevelState = digitalRead(MaxLevel); FloodLevelState = digitalRead(FloodLevel); // Проверяем, настало ли время затапливать корневую систему растения. // Если настало - устанавливаем флаг затопления. if (millis() - previousMillis > interval){ waterStart = 1; } // Если необходимо затапливать корни, и уровень в резервуаре выше минимального - // включаем помпу и сбрасываем флаг затопления. if (waterStart && LowLevelState){ pumpState = 1; waterStart = 0; } // Проверяем, в каком состоянии находится флаг работы помпы. // В зависимости от этого включаем её или выключаем. if (pumpState){ digitalWrite(PumpPin, HIGH); } else{ digitalWrite(PumpPin, LOW); } // Если сработал датчик уровня затопления - выключаем помпу и обновляем переменную хранения времени. // Если вдруг раствора стало слишком мало и сработал датчик минимального уровня - выключаем помпу. if (!LowLevelState || FloodLevelState){ pumpState = 0; previousMillis = millis(); } // Если сработал датчик минимального уровня раствора - устанавливаем флаг мигания светодиода. if (!LowLevelState){ blinkState = 1; } // Если установлен флаг мигания светодиода - мигаем им ))) if (blinkState){ Alarm (); } // Если светодиод мигает, сигнализируя о нехватке уровня раствора, и в этот момент сработал // датчик максимального уровня - значит раствор долили и светодиод гаснет. if (blinkState && MaxLevelState){ blinkState = 0; digitalWrite(LedPin, 0); } } // Функция мигания светодиодом void Alarm (){ if (millis() - BlinkPreviousMillis > 300){ BlinkPreviousMillis = millis(); if (!ledState){ ledState = 1; } else{ ledState = 0; } digitalWrite(LedPin, ledState); } }
Первый запуск
Выставь на блоке питания 12 Вольт и подключи его к Arduino Uno.
Включи блок питания в розетку.
Светодиодный индикатор горит, значит датчик минимального уровня сообщает о недостатке питательного раствора для начала работы. Доливай питательный раствор до тех пор, пока не сработает датчик максимального уровня. После этого светодиод погаснет и заработает помпа.
Режим работы
После первого затопления корневой системы питательный раствор стекает обратно в нижнюю ёмкость. Таким образом корневая система насыщается и питательными веществами, и кислородом.
По истечении времени, заданного потенциометром, цикл повторится вновь.
Если во время затопления датчик минимального уровня питательного раствора сработает раньше датчика уровня затопления, замигает светодиодный индикатор, сигнализирующий о нехватке питательного раствора. При этом работа системы не прекратится, а последующие затопления будут происходить по графику. Но питательный раствор необходимо долить.
Если во время мигания светодиодного индикатора сработает датчик максимального уровня, индикатор погаснет, и гидрогоршок продолжит работу в штатном режиме.