автополив
- Войдите на сайт для отправки комментариев
Чт, 21/07/2016 - 19:59
Всем привет!
Я очередной новичок :)
Нужна помощь и советы.
Таких проектов, как автополив много, но не все понятно. Датчик влажности почвы подвержен электролизу. Цитата: “Срок жизни сенсора можно значительно увеличить, если подключить питание к нему через силовой ключ. Когда надо получить данные — включаем питание сенсора, снимаем показания и тут же выключаем питание.”
Вопрос: я разве нельзя включать/выключать его без ключа? Ключ вроде как нужен только если питание внешнее и мощнее, чем может дать ардуина. Но датчик влажности на прямую подключается без проблем.
Есть на этом форуме тема http://arduino.ru/forum/apparatnye-voprosy/pomogite-vybrat-sensor-vody?page=1#comment-175658 , если не читали - рекомендую. Особо обратите внимание на http://arduino.ru/forum/apparatnye-voprosy/pomogite-vybrat-sensor-vody#comment-39196 , там и код, и простейшая схема датчика типа "два гвоздя".
Я очередной новичок :)
Это заметно, можно было и не говорить. Новички отличаются от остальных тем, что свято уверены в том, что все знают какие у них датчики, какие платы, и какие программы.
Вот, например, Вы пишете ...
Я не знаю, что у Вас за датчик. Если, например, вот такой. То у него ток 50mA, а у ноги Ардуины - максимум 40.
Подключить-то можно всё, что угодно, хоть двухкиловаттный утюг - вопрос лишь в том, сколько всё это хозяйство проживёт.
А когда пишут "подключить питание к нему через силовой ключ" имеют в виду "не подавать питание постоянно", а уж какое Вы выберете техническое решение - дело Ваше. Нога ардуины - тоже разновидность силового ключа. Если Вам хватает её тока - подключайте на здоровье.
Есть на этом форуме тема http://arduino.ru/forum/apparatnye-voprosy/pomogite-vybrat-sensor-vody?page=1#comment-175658 , если не читали - рекомендую. Особо обратите внимание на http://arduino.ru/forum/apparatnye-voprosy/pomogite-vybrat-sensor-vody#comment-39196 , там и код, и простейшая схема датчика типа "два гвоздя".
Спасибо! Читал это и многое другое. Вот примерный вариант:
http://wiki.amperka.ru/projects:irrigator
Цитата выше была от туда. Но вопрос про ключ остался. Вот еще цитата: "Подавать напряжение вовремя несложно - +5 от датчика подключаем не к +5 на плату, а на D1, например и перед чтением (за полсекудны, например) выдаём туда HIGH, ну, а после чтения - LOW."
Как я понимаю, в этом случае можно без ключа? Или тогда не хватит мощности порта? Если там 40мА, а датчик потребляет 50мА, то конечно лучше через ключ.
Что у Вас за датчик ?
Вот такой:
http://www.ebay.com/itm/222185747871?_trksid=p2060353.m2749.l2649&ssPage...
Но можно купить любой другой, при необходимости.
Как я понимаю, это простой аналоговый "сенсор", как два гвоздя :) и подсоединяется к аналоговому входу. Но там еще есть отделная плата с цифровым выходом и переменным резистором для установки порога. При таком подключении электролиз тоже будет или нет?
Указанный Вами датчик потрясно выглядит, украшен светодиодами, компаратором и т.д. Но, если речь идёт не о макетно/выставочно-презентационном проекте, то я бы предпочёл систему "два гвоздя" ))). Цифровой выход (и вся связанная с ним начинка) Вам врядли понадобится, фольгированный пластик в почве долго не проживёт, ну и прочие моменты, в Интернетах, да и тут на форуме, немало об этом писано.
спасибо, про электролиз читал. Но если включать такой датчик только на время измерения раз в 15мин, то его хватает на долго. В одном проекте пол-года работает уже (со слов автора).
Закопай этот датчик на огороде поглубже и забудь.
Поливай по таймеру.
по таймеру не получится. У меня огород на балконе в горшках. И сильно зависит от погоды. Иногда нужно поливать каждый час, иногда раз в день. В горшках очень быстро все меняется. Помидоры могут много воды выпить, а могут мало. Без датчика влажности никак.
Кстати уже тестирую, набираю статистику. Подключил питание сенсора на цифровой порт, мощности с запасом. Но вот данные от датчика очень сильно плавают. Если питание на нем постоянно, то через несколько минут данные стабилизируются в небольшим разбросом. Но если подавать питание только перед измерением, то совсем другая картина. Как вариант можно использовать графитовые стержни, они не подвержены электролизу и питать датчик постоянно.
примерно те же проблемы только в открытом грунте, поэтому размыты на недели.+ удобрил - получи больше влажность.
Горшководы АУУУ! где вы? как иррегатор амперки работает?
Еще есть особенность с помидорами. Один сорт чери гибридный просто какой то великан растет и воду пьет ведрами. Везде пишут, что нельзя переливать помидоры, но этот как раз наоборот любит очень мокрую землю. Если она просто влажная, то верхние листья начинают обвисать, не хватает уже корням влаги. Как только дольеш воды, сразу выпрямляются. И все это усложняет работу сенсора. Так как диапазаон показаний довольно узкий. А с учетом их разброса, сложно подобрать порог для включения насоса. Другие сорта пьют воду на много меньше и терпят некоторое время даже сухой горшок.
С простыми комнатными растениями все на много проще и можно только по таймеру поливать.
Ну, никто ведь не заставляет ограничиваться только одним сенсором. И никто не мешает сделать переключатель на несколько видов растений.
Я вам больше скажу, при такой цене на ардуино и сенсоры, я сразу решил делать отдельный комплект на каждый горшок :)
великан - это промышленный помидор, метров в 20 в высоту. Предназначен чтоб его из соски кормили маточным раствором(кажется так). так что в воду можно сразу удобрения наливать. а землю выкинуть - ему и на вате хорошо.
влажность 70 процентов....летом 75 а осенью 80 - ну это прямо фантастика.
С таким то датчиком ваги...я смотрел на промышленные..о ужас - они такие же. Как ими меряют - что меряют - не пойму.
------
Подведём итог: ты не на том фруме интересуешся этими датчиками. Иди в форум проф. тепличных хозяйств - там действительно и датчики с компьютерами и гигантские помидоры.
Я вот интересовался....тем же вопросом - глухо. может у тебя получится.
Будет информация - пиши. У меня от этого датчика пока одно разочарование.
Пока собираю статистику показаний и поливаю в ручную. Но уже вырисовывается некий алгоритм. При одинаковых показаниях сенсора и примерно одинаковой влажности на вид, днем на солнце и ночью должны быть разные поливы. Ночью можно вообще не поливать. А на солнце надо переливать. В тени все примерно на 50% меньше. То есть даже, если бы датчик работал идеально, все-равно надо еще и другие параметры учитывать, как температуру воздуха, время суток и самое главное попадает ли прямое солнце. Но все это легко решается.
Так же важно горшок больше объемом. Тогда перепады будут меньше. Есть высокие горшки с подводом воды снизу. Это тоже дает некий запас растению.
Свежие новости. После тестирования в течении суток, от датчика осталось только 70% покрытия. И это при том, то он под напряжением только в течении двух секунд в минуту. При таком активном поливе, как у меня, электролиз не оставляет шансов. А значит надо менять на графитовые стержни.
Золота туда....
Прошла неделя. Заменил сенсор на два гвоздя, вроде нержавейка. Пока все работает нормально. Скетч примитивный, но задачу выполняет. Только есть один глюк. Вывожу показания сенсора через сериал монитор. Но если вывод реже, чем раз в минуту, то приходится закрывать и снова открывать окно сериал монитора, иначе данные перестают поступать. Как будто какой то лимит ожидания присутствует.
И второй вопрос: при подключении USB все работает нормально, но если отключить, то происходит пауза и ардуино перестает управлять. Если снова воткнуть USB, то программа продолжает работать. Если закомментировать строку Serial.println(sensorValue); то все работает нормально и без USB.
Я как новичок не могу понять причину. Наверное, если нет подключения по USB, то Serial.println ставит на паузу все? Как этого избежать?
Мне не нравится, что везде используется delay, но пока не знаю, как сделать иначе.
int sensorPin = A0; //назначаем номер порта для аналогово сенсора влажности int sensorValue = 0; //объявляем переменную для аналогово сенсора влажности int sensorValueRun = 70; //объявляем переменную для порога срабатываения аналогово сенсора влажности int sensorDataDelay = 2000; //объявляем переменную для времени стабилизации даных сенсора влажности int sensorTimeDelay = 30000; //объявляем переменную для интервала опроса сенсора влажности int pumpTimeRun = 10000; //объявляем переменную для времени работы Pump int pumpTimeDelay = 30000; //объявляем переменную для паузы работы Pump между порциями в цикле int pumpTimeEndDelay = 60000; //объявляем переменную для паузы после цикла для впитывания воды int iloop = 5; //объявляем переменную для количества циклов включения Pump void setup() { Serial.begin(115200); //устанавливаем скороcть Serial порта pinMode(13, OUTPUT); //устанавливаем порт на выход (Pump) pinMode(12, OUTPUT); //устанавливаем порт на выход (Питание Датчика) } void loop() { digitalWrite(12, HIGH); //включаем питание датчика влажности delay(sensorDataDelay); //пауза для стабилизации данных sensorValue = analogRead(sensorPin); //считываем показания датчика влажности Serial.println(sensorValue); //печатаем показания датчика влажности в Serial Monitor delay(500); //пауза 0,5сек if (sensorValue > sensorValueRun) //если значение больше заданного, то: { digitalWrite(12, LOW); //выключаем питание датчика влажности for (int i = 1; i <= iloop; i++) //запускаем цикл работы помпы { digitalWrite(13, HIGH); //включаем Pump delay(pumpTimeRun); //время работы Pump digitalWrite(13, LOW); //выключаем Pump delay(pumpTimeDelay); //пауза работы Pump внутри цикла } delay(pumpTimeEndDelay); //пауза после цикла для впитывания воды } else digitalWrite(13, LOW); //иначе выключаем Pump digitalWrite(12, LOW); //выключаем питание датчика влажности delay(sensorTimeDelay); //пауза для интервала опроса сенсора влажности }вместо delay есть millis() и RTC модуль.
Про влияние USB на работу ардуины - можешь диссертацию написать.
Питание на датчик влажности постоянно подаёшь? следы электролиза есть?
Спасибо за ответ.
В скетче видно, что питание подается только за две секунды до измерения. Примерно раз в 40 сек. Следов электролиза пока не видно.
Но уже пришли графитовые старжни, возможно их поставлю позже.
На счет USB не знаю, но факт такой есть. Программа почему то от этого зависит, если не закоментировать строку
Serial.printlnУточню на счет Serial.println, если даже подключено USB, но не активировано окно Сериал Монитора в IDE, то программа останавливается до тех пор, пока не откроется окно Сериал Монитора.
Кто знает почему так и как решить это?
Очевидных решений 2:
1. Удалить Serial.println.
2. Открыть терминальное окно.
Действительно:
- есть труба,
- если один конец заткнуть, а с другого что-то пихать, труба забивается,
- если либо открыть один конец, либо нимчего не пихать с другого - все нормально,
Как решить проблему?
PS. А "почему так происходит" - смотрите исходники Serial. Кстати, возможно, решение есть (например, аварийный клапан сбоку трубы, который нужно открыть) и искать его нужно там же - в исходниках.
Serial тебе нужен для отладки. Сейчас все настроил так закоменти Serial, это самый простой способ.
либо использовать конструкцию
хотя очень странно, на меге и уно у меня рабортает без каких либо танцев с бубном. А версия IDE какая?
Спасибо за ответ :)
Сегодня специально заморочился и поискал инфу про это. Не смог найти. Полно подобного:
http://arduino.ua/ru/prog/
А так же всяких примеров использования. Но нислова о том, что нужно как то, что то закрывать или выключать. От сюда и непонимание.
Так значит эта команда:
Serial.printlnостанавливает программу в моем случае?Serial тебе нужен для отладки. Сейчас все настроил так закоменти Serial, это самый простой способ.
либо использовать конструкцию
хотя очень странно, на меге и уно у меня рабортает без каких либо танцев с бубном. А версия IDE какая?
Версия последняя 1.6.10 вроде
Arduino nano:
http://www.ebay.com/itm/152164755207?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Так значит эта команда:
Serial.printlnостанавливает программу в моем случае?Так как подключение отключение вывода в Serial влияет я и предположил что виноват или Serial.println или Serial.begin(115200);
попробуй их отключить. а там видно будет они или нет.
Спасибо!
Проблема ...экзотическая
работаю с мегой, уно, нано....ни разу не сталкивался с зависанием модуля из-за "не открытого окна serial monitor". Работает с USB. Работает без USB. Работает с гипертерминалом(можешь попробовать).
Serial monitor перезагружает модуль при открывании.
Может у тебя проблема с запуском модуля? (Reset всм.)
он не зависает, а как бы на паузу становится. Как только открываю окно монитора, програма продолжает работу.
Из-за этого уже несколько раз не включился вовремя полив. Листья начали вянуть, земля сухая, запускаю монитор, показывает значение сенсора на много выше порогового. И тут же включается полив. Первый раз подумал совпадение. Но специально проверил и убедился, что причина именно в этом. Ничего об этом не нашел в инете. Если закоментировать строку Serial, то никаких проблем, все работает нормально.
Как новичек я понимаю, что сначала нужно поискать на форуме, затем в других местах инфу и только затем задавать вопрос в теме.
У меня iMac, может в этом причина?
1) светодиодик на d13(или другой если этот занят) заставь моргать раз в секунду во время выполнения программы (проверенный метод).
2) подключи к windows , посмотри в гипертерминале
3) совсем без usb работает?
на счет светодиода, как раз собирался так сделать :)
Спасибо!
заменил гвозди у датчика влажности на графитовые стержни. Показания стали другими. Пытаюсь понять, как лучше опрашивать сенсор.
Проблема в том, что если датчик включается на 1 сек для замера и затем пауза 30 сек, то показания плывут в сторону уменьшения. От 80 вниз. Если включать сенсор на 5сек и пауза 3 сек, то показания наоборот плывут вверх от 80. Разумеется проверял в одно время после полива. Тут не только больщой разброс по средним числам, а еще и направление меняется. И пока не удается подобрать что то похожее на реальную картину (время включения датчика и пауза между замерами). Из-за этого невозмочно выставить порог включение полива. Что с этим делать не понятно. С гвоздями тоже самое, только цифры другие. Прям, как в квантовой механие, когда измерение влияет на результат :)
Держать сенсор все время под напряжением не хотелось бы, из-за экономии расхода батареи.
И еще вопрос: пытаюсь заменить delay на millis. Пишут, что возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней. В коде от текущего времени будет вычитаться прошлое время, и когда произойдет сброс на 0, то нарушится логика программы. Так как прошлое время будет больше настояшего. Как этого избежать?
Кажется разобрался. Правильно ли понимаю, что при использовании переменной unsigned long, вопрос решиается сам собой?
И еще вопрос: пытаюсь заменить delay на millis. Пишут, что возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней. В коде от текущего времени будет вычитаться прошлое время, и когда произойдет сброс на 0, то нарушится логика программы. Так как прошлое время будет больше настояшего. Как этого избежать?
Кажется разобрался. Правильно ли понимаю, что при использовании переменной unsigned long, вопрос решиается сам собой?
нет сам собой не решится, но и проблема не так страшна. ничего не рушится.
В самом плохом случае у тебя будет пропущен один цикл измерения / полива в два дня. Потому как прошлое время может быть больше настоящего только один раз в двое суток, да и то программно это тоже решается.
Можно добавить условие что если прошлое время больше настоящего то прошлое равно настояшему и все.
Спасибо! Уже провел эксперимент и выяснил, что все-таки вопрос решается переменной unsigned long.
"Переменные типа unsigned long, в отличие от обычного long, хранят только положительные числа в диапазоне от 0 до 4 294 967 295 "
Например, если от 5 отнять 4 294 967 291, то получиться 10. То есть не будет отрицательных значений.
Кажется разобрался. Правильно ли понимаю, что при использовании переменной unsigned long, вопрос решиается сам собой?
Нет, неправильно понимаете. Само собой ничего не делается, хотя бы щучье веление нужно.
При правильном программировании проблема не возникает вовсе. Причём нет никакой разницы использовать unsigned long или просто long - проблема всё равно не возникакает. Пример правильного программирования.
Однако, если в нём строку
if(currentMillis - previousMillis > interval) {заменить на
if(currentMillis > previousMillis + interval) {то проблема возникнет в полный рост.
Почему? Внимательно изучите правила арифметики в дополнительном коде. Материалов навалом.
Спасибо за ответ, уже разобрался :)
Итак, после замены delay на millis() все работает правильно и от сериал монитора не зависит. Так же заменил тип переменных int на unsigned long.
После замены гвоздей, которых электролиз все-таки не много пожевал, на графитовые стержни диаметром 4mm, показания сенсора стали на много стабильнее. После запуска программы идет стабилизация показаний пару минут, затем они выравниваются и меняются очень плавно, в зависимости от влажности почвы. График получается понятный. Порог срабатывание полива подобрал под конкретный горшок и уже несколько дней система работает правильно.
Всем спасибо за помощь!
Вот простой скетч, если кто из новичков захочет повторить:
unsigned long sensorPin = A0; //назначаем номер порта для аналогово сенсора влажности unsigned long sensorValue = 0; //объявляем переменную для аналогово сенсора влажности unsigned long sensorValueRun = 30; //объявляем переменную для порога срабатываения аналогово сенсора влажности unsigned long sensorDataDelay = 500; //объявляем переменную для времени стабилизации даных сенсора влажности unsigned long sensorTimeDelay = 30000; //объявляем переменную для интервала опроса сенсора влажности unsigned long pumpTimeRun = 10000; //объявляем переменную для времени работы Pump unsigned long pumpTimeDelay = 30000; //объявляем переменную для паузы работы Pump между порциями в цикле unsigned long pumpTimeEndDelay = 180000; //объявляем переменную для паузы после цикла для впитывания воды unsigned long iloop = 5; //объявляем переменную для количества циклов включения Pump unsigned long currentTime; //объявляем переменную для текущего времени unsigned long previousTime; //объявляем переменную для прошлого времени void setup() { Serial.begin(115200); //устанавливаем скороcть Serial порта pinMode(13, OUTPUT); //устанавливаем порт на выход (Pump) pinMode(12, OUTPUT); //устанавливаем порт на выход (Питание Датчика влажности) Serial.println("Automatic Watering System ver.1"); //печатаем "Automatic Watering System ver.1" в Serial Monitor } void loop() { digitalWrite(12, HIGH); //включаем питание датчика влажности delay(sensorDataDelay); //пауза для стабилизации данных sensorValue = analogRead(sensorPin); //считываем показания датчика влажности Serial.println(sensorValue); //печатаем показания датчика влажности в Serial Monitor if (sensorValue > sensorValueRun) //если значение больше заданного, то: { digitalWrite(12, LOW); //выключаем питание датчика влажности for (int i = 1; i <= iloop; i++) //запускаем цикл работы помпы { digitalWrite(13, HIGH); //включаем Pump currentTime = millis(); //присваиваем переменной текущее время из таймера previousTime = currentTime; //присваиваем прошлому времени значение из текущего времени Serial.print("Pump ON: "); //печатаем "Pump ON: в Serial Monitor Serial.println(i); while (currentTime - previousTime < pumpTimeRun) //время работы Pump внутри цикла { currentTime = millis(); //присваиваем переменной текущее время из таймера } digitalWrite(13, LOW); //выключаем Pump currentTime = millis(); //присваиваем переменной текущее время из таймера previousTime = currentTime; //присваиваем прошлому времени значение из текущего времени Serial.print("Pump OFF: "); //печатаем "Pump OFF: в Serial Monitor Serial.println(i); while (currentTime - previousTime < pumpTimeDelay) //пауза работы Pump внутри цикла { currentTime = millis(); //присваиваем переменной текущее время из таймера } } currentTime = millis(); //присваиваем переменной текущее время из таймера previousTime = currentTime; //присваиваем прошлому времени значение из текущего времени Serial.print("Waiting For Absorption: "); //печатаем "Waiting For Absorption: в Serial Monitor Serial.println(pumpTimeEndDelay); while (currentTime - previousTime < pumpTimeEndDelay) //пауза после цикла для впитывания воды { currentTime = millis(); //присваиваем переменной текущее время из таймера } } else digitalWrite(13, LOW); //иначе выключаем Pump digitalWrite(12, LOW); //выключаем питание датчика влажности currentTime = millis(); //присваиваем переменной текущее время из таймера previousTime = currentTime; //присваиваем прошлому времени значение из текущего времени while (currentTime - previousTime < sensorTimeDelay) //пауза для интервала опроса сенсора влажности { currentTime = millis(); //присваиваем переменной текущее время из таймера } }Прошло время, наработана статистика с разными растениями и горшками. Проблема с показаниями датчика влажности. Не смотря на графитовые стержни, показания сильно отличаются в разных горшках, а так же в разное время. Из-за этого постоянно приходится корректировать уровень срабатывания.
Например сухая почва 30, влажная от 0 до 5. Но в какой то момент, по непонятной причине этот диапазон может в корне поменяться. И теперь сухая почва 60, а влажная 40. Причем по графику может скакнуть резко вверх в любой момент. Как следствие, пару раз заливал горшок. Все вытекало через дренажные отверстия. Или наоборот, скакнуть вниз и земля пересыхает. Никакой логики не обнаружил. В разных горшках и растениях показания тоже разные. Это еще можно объяснить. Но такие скачки во всех происходят периодически. Так же иногда странно ведет себя график. После полива показания обычно уменьшаются, так как происходит впитывание влаги и сопротивления падает. Но иногда все с точность наоборот. После полива идет резкое падение и быстро поднимается обратно, причем на много выше, чем было при сухой почве, что совершенно не логично.
Использую вот такой датчик, только стержни графитовые 4мм диаметр и 5см длина.
http://www.ebay.com/itm/262434588858?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Возможно причина в его “мозгах”, хотя там все элементарно вроде. Питание датчика включается на 2сек для замера. Хотя можно его все время держать под напряжением, так как графит не боится электролиза. Но не уверен, что растениям будет приятно и батарея быстрее разрядится.
У кого какие мысли на эту тему?
Надо простой ёмкостной датчик влажности изобретать: http://www.compel.ru/2014/11/07/emkostnoy-datchik-priblizheniya-serii-cr-ot-autonics
тут в картинках: http://www.kit-e.ru/articles/sensor/2006_4_14.php
(S=100 мм кв. , d=1 мм => C=1нФ в воздухе)
Делаем автогенератор LC, измеряем его частоту.
Вот готовые:
http://www.it-lynx.com/equipment/capacitive-fuel-level-sensor-smartsensor/
http://www.elekitsorparts.com/product/gravity-analog-capacitive-soil-moisture-sensor-corrosion-resistant/
(5 минут терпения - и вы срисовали схему этого датчика, все номиналы видны)
Прошло время …
Автополив работал, пока огород не надоел. С датчиком влажности так и не смог наладить алгоритм. Очень разные показания, зависит от многих факторов. Для простых домашних цветов на много легче, а для овощей в горшках лучше по таймеру.
И вот снова понадобилось сделать что то подобное, но с учетом новых возможностей. Подключил Blynk к esp8266, все работает по таймеру и в ручную. Взял емкостной датчик влажности почвы на пробу:
https://wiki.iarduino.ru/page/capacitive-soil-moisture-sensor/
Он простой, легко подключается. Пока собираю статистику. И обнаружил старые проблемы. Показания очень разные, как и раньше. Настроить по ним срабатывание полива пока невозможно. Например утром при показании 50 нужно включать, днем при 100, а вечером влажность растет в 1,5 раза даже без полива. На следующий день утром при 100 земля сухая, а после полива значения почти не поменялись. Толку от таких показаний никакого. В руках сенсор работает предсказуемо, а так же в воде и на суше. Все логично. Но в почве полный бардак с данными.
Сейчас все работает по таймерам, которые выставлены опытным путем в течении дня. В дальнейшем можно привязать данные по температуре (солнце или пасмурно). Все управляется через Blynk, так было проще начать. Но теперь хочу сделать автономно, чтоб на Blynk только отчеты шли и ввод новых значений. То есть, чтоб автополив работал, если пропадет WiFi.
Мало статистических данных.
Возвращайся лет через 10...
Будем ждать.
В руках сенсор работает предсказуемо, а так же в воде и на суше. Все логично. Но в почве полный бардак с данными.
Такова уж специфика емкостных датчиков. А у той модели что по ссылке еще и вопрос к качеству и долговечности изоляции. Я тут показывал свое http://arduino.ru/forum/apparatnye-voprosy/uroven-vody-v-septike#comment-600113 . Сейчас ведро с керамзитом
И показания датчиков уже не стоят как вкопанные, а скачут. Подцепил был ESP, снял показания. Получил.
Четыре графика - 4 датчика по 2 на 2 ведра по ходу наполнения водой. Хотя датчики одинаковые - абсалютные значения раза в полтора различаются, особенно для состояния "сухо".
И это после усреднения по 8 замерам с паузами в десяток мксек. Причем различия между этими 8 замерами не настолько большие. Получается усреднять надо с постоянной времени в 5-10сек.
Это после фильтра Y(i+1)=Y(i)-Y(i)/8+X(i), Res=Y(i+1)/8
Вполне годно.
В общем снимайте графики, смотрите в экселе, подбирайте обработку, фильтрацию, возможно гистерезис и т.д.
Ну и алгоритм принятия решения тоже нужен сильный, с учетом и влажности и времени. Например, (не как решение, как подход), если со времени прошлого полива прошло время более заданного, и влажность в течении некоторого времени ниже чем пороговая, то включаем полив на некоторое время. И далее пауза для выравнивания влажности. Хороший алгоритм должен "прощать " не значащие редкие ошибки от датчика.
ПС. Может показаться что контроль воды в гидропонике и влажность в грунте сильно разное. Но это не так, суть практически та же. Только в гидропонике еще слив есть, а в грунте нет четкой границы уровня воды, вместо ее градиент. Но в обоих определяем содержание воды в пространстве вблизи датчиков и на основании этого делаем полив.
Спасибо!
Есть некоторые выводы по наблюдаемой статистике. В горшках много зависит от объема и растения. Даже среди разных сортов томатов, потребление воды отличается значительно. Черри тоже разные бывают. Один сорт достаточно поливать раз в день, а другой нужно каждый час. Оба на одном балконе стоят рядом. То есть все условия у них одинаковые. Чем больше листьев, тем больше испаряется влага на солнце, тем чаще нужно поливать.
Сам полив тоже имеет свои особенности, независимо от сорта. Можно быстро подать большой (относительно) объем воды, а можно медленно, но дольше (капельный). Вода может поступать из одного источника (шланг) или из форсунки, которая может быть как у душа или кольцевая и тд. Это сильно влияет на равномерность увлажнения и впитывания в горшке. Для сорта, который много пьет, важно поддерживать влажным верхний слой почвы, тогда как другому сорту это не проблема. Получается в этом уравнение много разных переменных/составляющих. Нужно сначала понять алгоритм этой системы. Сами датчики скорее всего ставить в разных местах и усреднять их значения. Ну и все это корректировать по мере роста.
Пока все не плохо работает по таймеру и собирается статистика наблюдений датчика.
P.S. Есть вот такой датчик, надо попробовать его прицепить на пластиковый горшок.
https://amperka.ru/product/sensor-liquid-level-contactless
Если принять во внимание средние показатели эвапотранспирации для данного региона/культуры, можно без особых проблем настроить автополив на простой сезонный график. Грубо говоря, выливаем за период времени под каждый вид растений определенный объем воды. Например, газон - 20 литров на квадрат раз в неделю. Туи - 20 литров под дерево раз в месяц. Значимые индикаторы, влияющие на поправочные коэффициенты - температура воздуха и дата (месяц). Дождь, сам по себе, не должен нарушать график полива. Обычная норма типичного дождя, по крайней мере в МО, крайне недостаточна для беззаботной жизни агрария. Более того, отключение полива во время легкого дождя может сильно попортить посадки. Для газона, например, это крайне нежелательно - будет слабая корневая система, здравствуйте сорняки.
Датчик интенсивности осадков нужен для внесения корректировок в расписание полива, если выпало более 20+мм осадков в течении суток. Вот тут возникает поле для творчества. В идеале, система должна фиксировать момент начала дождя, ставя на паузу текущие программы полива в ожидании развития событий. Если в течении определенного времени уровень осадков достиг предельного (20+мм), то обнуляем все расписания и ждем сигнала "подсохло". Если критический уровень не достигнут - продолжаем текущие программы полива, но, возможно, в сокращенном виде.
Я делал 2 емкостных датчика в железной тубе из под вискаря. В доннышке тубы мелкие дырочки и геотекстиль (дренаж). В тубе мытый песок. На уровнях -50 и -150 установлены датчики. ЕСПшка читает показания и выдает приказы на контроллер полива. Проблема в том, что китайские емкостные датчики показывают всякую херь, но не то, что должны. Но общий смысл такой
PS: для "горшочников" можно не напрягаться)) Нам бы ваши проблемы))
Пока все не плохо работает по таймеру и собирается статистика наблюдений датчика.
По таймеру я в прошлом году в горшках с землей помидоры растил.
Не смотря на результат в виде урожая мне не понравилось. И именно из-за полива по таймеру. Не учитывается реальное потребление воды кустом. Пару относительно прохладных дней в разгар лета и из-за обильного полива начинают корни загнивать, куст вянет, хотя земля под ним влажная. Надо прекращать полив, ждать пока земля высохнет, куст приходит в себя тогда. В этом году - только гидропоника, таких проблем в ней просто нет.
P.S. Есть вот такой датчик, надо попробовать его прицепить на пластиковый горшок.
https://amperka.ru/product/sensor-liquid-level-contactless
Я бы не стал с ним связываться. Его дискретный выход - ни о чем. Ведь по большому счету контролируемая среда (что в гидропонике, керамзит и вода, что почва) - смесь. Из многих компонент: 1.Твердая составляющей, в составе которой входит некоторое кол-во воды в разных формах: химически связанной, смочившей поверхность, застрявшей в порах. 2.Жидкая, подвижная вода занимающая часть пространства в капилярах и промежутках между твердыми частицами 3. Воздух - газ, и тоже насыщенный водяными парами 4. корни растений, органика, говорят оно из воды на 90%. И что покажет дискретный датчик? А ХЗ. Переход через некоторый порог, нам неизвестный. А надо следить за динамикой процесса.
Например, газон - 20 литров на квадрат раз в неделю. Туи - 20 литров под дерево раз в месяц.
Туи на куи...
Ты вообще читал о чем тут? процитирую...
для овощей в горшках
PS: для "горшочников" можно не напрягаться)) Нам бы ваши проблемы))
Вали к своим туям, не напрягайся о наших проблемах. У нас газон растет без полива под дождем.
ПС. Следующим явится кто-то и расскажет как он забор красит у газона и краска проливается на землю )))
Вали к своим туям, не напрягайся о наших проблемах. У нас газон растет без полива под дождем.
Вау, бро! Вы свои горшочки из графинчика поливаете и думаете о вечной жизни)) Вот газон - это настоящий автополивный хардкор! Чуть что не так - запаришься потом репей выщипывать))
Сделать абсолютно автономную систему надобности нет. Мне достаточно, чтоб неделю работала самостоятельно. Вода на балконе в большой пластиковой емкости, которую все-равно нужно заполнять в ручную. Так же опрыскивать иногда, подкармливать удобрениями, обрезать листья и тд. Но и собирать урожай тоже, так как черри сорт быстро созревает. А на неделю составить план по таймерам не проблема. Собственно через Blynk это можно корректировать в любую минуту по погоде. Поэтому сенсор влажности почвы пока больше, как дополнительный мониторинг и наблюдение. Если удастся по нему ориентироваться, то можно скомбинировать алгоритм с таймерами.
В горшках нужен дренаж, для выведения лишней воды, тогда перелив не проблема. Но если горшок в какой то емкости и дренаж вытекает туда, то смысл теряется, так как закон сообщающихся сосудов пока еще работает. У меня дренаж стекает прям с балкона на улицу.
tomato ,да просто настрой раз в неделю поливать на 1/5 емкости горшка и все у них будет зашибись