pH и ЕС регуляторы

На базе четырех канального контроллера для любителей аквариумов и гидропоники   данный момент разрабатываю pH регулятор. После недолгих поисков, нашел подходящую схему, доработал и получил такой вот усилитель.

ph_1

Сделал разводку платы в Proteuse.

ph_2

Получилась такая плата.

  Комбинированный pH электрод ЭСК-10608/4  заказал в компании «Измерительная техника»www.izmteh.ru  Он имеет пластмассовый корпус, заправлен загущенным электролитом. Не требует обслуживания.

Диапазон измерений 0 …12 pH.  Рабочая температура 0 …80 °С.

Настроил с помощью калибровочных растворов усилитель так, что бы диапазон измерений 0 …12 pH что бы соответствовал напряжению на выходе в диапазоне 0…5 вольт.

В качестве контроллера использовал плату от контроллера Джинн.

Подключил плату к одному из аналоговых входов RA0, правда, пришлось порезать дорожки, так как этот вход использовался для управления дисплеем в изначальном варианте.

Отладка схемы и написание программы.

Схема в Proteuse, вместо усилителя включен переменный резистор, он имитирует его работу.

ph_5

Задачи прибора:

1.       Возможность калибровки.

2.       Точное поддержание заданного pH.

3.       Управление двумя дозирующими насосами.

4.       Возможность установки на емкости любого объема.

Для калибровки приборов, если выход с датчика линейный, обычно применяется уравнение прямой Y=k*X-b. Для калибровки я использую два раствора с разным pH.

На дисплее, если войти в калибровку, первая цифра отображает текущее оцифрованное напряжение в разрядах АЦП, которое мы получаем с выхода усилителя. Нужно опустить электрод в раствор с нижним значением  pH(кислота) и установить кнопками это значение на приборе, (вторая цифра).

Нажав кнопку «режим», настроим вторую, верхнюю точку. Ополоснув электрод в воде опустим в раствор с высоким pH(щелочь). И также установим на приборе pH.

Расчет производиться по такому алгоритму:

Х1 – значение с АЦП. У нас пусть будет 113 в десятичной системе.

Y1 – pH раствора с нижним значением, у нас пусть будет 4.

Х2 – значение с АЦП. У нас пусть будет 992 тоже в десятичной системе.

Y2 – pH раствора с нижним значением, у нас пусть будет 9.

Получилась система из двух линейных уравнений

Y1=k*X1-b      4 = k*113-b

Y2=k*X2-b      9 = k*992-b

Составляем уравнения для нахождения коэффициентов.

k:=(y2-y1)/(x2-x1);     k = (9-4)/(992-113)=5/879 = 0.0057

b:=k*x1-y1;                 b = 0.0057*113-4 = 0.62

Получается такое вот уравнение.

Y = 0.0057*X – 0.62

И уже сигнал, пересчитанный по этому уравнению, выдается на дисплей и на регулятор.

После того как научился получать реальное pH, встала задача регулирования. Для экспериментальной установки взял в качестве емкости для реагентов (кислоты и щелочи) баки от автомобиля, для воды для стеклоомывателя и насосы к ним. Через реле с катушкой на 220 вольт подключил к выходу прибора насосы.

ph_8

Из какой-то пищевой упаковки сделал пробоотборник, в него вставлен электрод.

ph_9

Из емкости, в которой требуется поддерживать pH, при помощи насоса раствор подается в пробоотборник и по шлангу стекает обратно в емкость. Штуцера внутри приподняты так, чтобы электрод для измерения pH всегда оставался растворе.

Вот что у меня получилось.

ph_10

Ёмкости с реагентами стоят по уровню ниже рабочей емкости. Шланги от насосов закреплены к краю ведра, и не касаются раствора, а то он перетечет в реагенты, или наоборот, смотря, где выше уровень.

Программная часть регулятора.

В качестве регулятора взял ПИД. Чтобы не изобретать велосипед, взял исходник с сайтаMicrochip.

en0 = zadanie*10-Ph;  // рассчитываем рассогласование(ошибку).

//*************************************

void PID()           //  C(n) = K(E(n) + (Ts/Ti)SumE + (Td/Ts)[E(n) — E(n-1)])

{

// Вычисление интегральной составляющей

   integral_term = derivative_term = 0; // интегральная и производная составляющие равны нулю

                SumE = SumE + en0;        // накапливаем интегральную сумму

               if(SumE > SumE_Max){      // ограничиваем её по верхнему пределу

                               SumE = SumE_Max;}

                if(SumE < SumE_Min){      // ограничиваем её по нижнему пределу

                               SumE = SumE_Min;}

                   // / Интегральное звено (Ts / Ti) * SumE, где Ti является Kp / Ki

                   // /  Ts является периодом выборки

                   // / Актуальное уравнение используется для расчета интегрального члена

                   // / Ki * Sum/ (Kp * Fs * X), где X является неизвестный коэффициент масштабирования

                   // / И Fs задает частоту дискретизации

                integral_term = SumE / 256;                        // Разделим на частоту дискретизации

                integral_term = integral_term * ki;          // Умножим на интегральный коэффициентKi

                integral_term = integral_term / 16;          // Сочетание коэффициента масштабирования и Kp

// Вычисление производной составляющей

                derivative_term = en0 — en3;

                if(derivative_term > 120){                                    // проверка по верхнему пределу

                               derivative_term = 120; }

                if(derivative_term < -120){                                // проверка по нижнему пределу

                               derivative_term = -120;               }

                              // / Вычислить производную составляющую (Td/Ts)[E(n) — E(n-1)]

                          // / Где Td является Kd / Kp

                           // / Актуальные уравнение используется Kd (en0-en3) / (Кр * Х * 3 * Ts)

                          // / Где X является неизвестный коэффициент масштабирования

                derivative_term = derivative_term * kd; // умножаем на коэффициент дифференцирования

              derivative_term = derivative_term >> 5;

                // делим на 32 предварительно расчитанные Kp*X*3*Ts

                if(derivative_term > 120)

            {  derivative_term = 120; }          // проверка по верхнему пределу

                if(derivative_term < -120)

            {  derivative_term = -120;               }                      // проверка по нижнему пределу

// Вычисляем переменную на выходе ПИД регулятора

                // C(n) = K(E(n) + (Ts/Ti)SumE + (Td/Ts)[E(n) — E(n-1)])

                Cn = en0 + integral_term + derivative_term;     // сумма составляющих

                Cn = Cn * kp / 1024;      // умножить на Kp затем масштабировать

                if(Cn >= 1000)   // Используется для ограничения выхода с регулятора

                {   Cn = 1000;   }

              if(Cn <= -1000)

                {   Cn = -1000;  }

//******************************************************

                en3 = en2;                          // Сохранение рассогласований (ошибки регулировании)

                en2 = en1;                   // три цикла назад

                en1 = en0;

                en0 = 0;

                return; }

После нескольких экспериментов и анализа работы регулятора, выяснилось, что такой регулятор не подходит для управления устойчивыми объектами.

Когда рассогласование (ошибка) равна нулю, интегральная сумма уже имеет какое-то значение, которое накопилась за некоторый промежуток времени, когда рассогласование не равнялось нулю. И дозирующий насос будет продолжать добавлять реагент. Добавил в регулятор мертвую зону (гистерезис) в один pH и сделал сброс интегральной суммы при входе измеряемой величины в мертвую зону.

//— задаем мертвую зону —

    err=zadanie*10-Ph;

if ((err > 5) || (err < -5)) { en0 = err;}

if ((err < 5) && (err > -5)) { SumE = 0;} // збрасываем интегральную сумму если в мертвой зоне.

И регулятор стал прекрасно поддерживать pH.

Вкратце расскажу алгоритм пид регулятора использованного здесь.

Переменные для настройки ПИД – регулятора. Из первых букв названия этих коэффициентов и происходит его название.

kp — пропорциональный коэффициент

ki — интегральный коэффициент

kd — коэффициент дифференцирования

С помощью пропорционального коэффициента kp  настраивается количество (объем) реагента для добавления в измеряемый раствор. Если у нас задано поддерживать 7.0 pH, а у нас на текущий момент 7.5 pH, то разница между ними будет 0.5 pH. Поставим коэффициент 10, тогда насос будет подавать раствор кислоты с периодичностью три секунды, а поставим коэффициент 100, то раствор кислоты будет подаваться с периодичностью 10 секунд. Все значения примерные и приведены для общего понимания, соответственно ими можно варьировать в больших диапазонах. Периодичность подачи растворов кислоты и щелочи также можно настроить, от нескольких секунд, до нескольких дней. С помощью пропорционального коэффициента, регулятор настраивают под соответствующий объем и концентрацию раствора кислоты и щелочи.

Интегральный коэффициент ki, предназначен для настройки изменения скорости подачи кислоты или щелочи. Пусть между заданным и текущим pH разница будет 0.5 pH, а периодичность десять минут. Если зададим интегральный коэффициент десяти, то в первый раз регулятор включит насос на пол секунды, через десять минут, если  pH не пришла в норму, он уже включит насос на одну секунду, ну и далее будет увеличивать время подачи кислоты или щелочи пока pH не начнет понижаться, тогда он также начнет снижать время работы насосов. Если интегральный коэффициент увеличить например до ста, то в следующее включение насоса он уже проработает три секунды, далее шесть секунд и так далее.

Коэффициент дифференцирования kd в этой системе можно не использовать, так как он в основном необходим в быстро меняющихся процессах. Здесь бы он понадобился, если бы регулятором пытаться регулировать pH в малом объеме, с помощью насос большой производительности, но в нашем случае это не к чему.

Как он работает. Если после подачи кислоты и щелочи pH резко пошла к норме, то следующая подача сильно уменьшиться по времени. Чем он выше, тем сильнее будет уменьшаться время подачи кислоты и щелочи. По сути, он следит за скоростью изменения pH раствора, и вносит свои коррективы на работу насосов дозирования.

В конечной конструкции, пользователь такого регулятора конечно будет избавлен от такого количества настроек, достаточно будет выбрать объем рабочей емкости гидропонной системы или аквариума, да уровень pH.

Как появиться время, переведу систему регулирования с ПИД – регулятора на адаптивный FUZZY LOGIC – регулятор.

ph_11

На дисплее отображается текущее значение pH. Ниже, слева внизу выход с регулятора, чуть дальше не масштабированный сигнал с АЦП.

После испытаний в ванной, настала пора придумать внешний вид, и проверить, как регулятор pH будет работать на гидропонной установке.

После проб с разными насосами и схемами получился такой вариант. Для прототипа взял плату контроллера от двухканального «Джина».

ph_36

 Насосы  от какой-то иномарки, вроде Дэу Матиз.  Каркас из толстого оргстекла. Емкости стандартные, от растворов регулирования pH.

ph_12

Вот такой девайс получился. Розетки с выходом 220 вольт, для подключения помпы пробоотборника и если необходимо (большая емкость) дополнительной перемешивающей помпы.

ph_13

А это с пробоотборником.

Растворы pH UP, pH DOWN, подаются по шлангам через компенсационные капельницы с дозировкой 12 литров в час.

ph_14

А это пробоотборник с pH- электродом. Снизу к одной из трубок прикреплена помпа, которая постоянно прокачивает раствор через  pH- электрод.

ph_15

Задал задание 6,0 pH. Мертвую зону (гистерезис) уменьшил до 0.1, то есть регулятор должен держать от 5.9 до 6.1 pH.  За время работы при установлении текущей pH до 6.3 pH, регулятор думал два дня (накапливал интегральную сумму), а потом выровнял pH до 6.1.  Три недели четко держит pH, в норме. Насосам, после трех месяцев работы сделаю вскрытие на контроль действия кислоты и щелочи.

Ну и сейчас нужно про мониторить работу регулятора, Для этого мой друг пишет прогу на делфи, которая будет опрашивать по сети 1-Wire датчики температуры и АЦП, с подключёнными к нему датчиков pH. И все это будет записываться в базу данных, можно просмотреть за любое время любой параметр в графиках.

ph_16

Собрал пробоотборник и поставил три электрода pH, один на дозатор, другой на показывающий прибор, а третий на компьютер, для записи показаний. А также воткнул два ЕС  датчика, один показывает, а другой мне, для разработки контроллера дозирования удобрений. вот что у меня получилось.

ph_17

ph_18

В течение двух недель регулятор регулировал исправно, но потом pH ушло вверх, а регулятор жужжит насосом подачи кислоты, а pH не выравнивается. Разобрал, чего ждал то и получил. Кислота съела ось моторчика и всю смазку, крыльчатка отвалилась.

ph_19

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

Да, и эксперименты с выравниванием pH привели к тому что вид у клубники очень печальный.

И как раз один добрый и умный человек Павел, в переписке, подсказал:

1. ph — не должен меняться резко, это приводит к стрессу у растений. Резкое изменение ph — более вредно, чем выход его за заданные границы (в пределах разумного, конечно).

2. ph — все таки желательно регулировать таким образом, чтобы не вносить лишние элементы в раствор (поскольку, они могут повлиять на усвоение растениями веществ, уже находящихся в растворе). Я предпочитаю повышать ph добавляя воду (можно очищать с помощью осмоса, но ее буферность в этом случае — уменьшится). Как правило, понижение ph раствора связано с поглощением воды растениями и для нормализации — достаточно ее долить. Однако, при этом надо еще следить за концентрацией раствора, не допуская резкого ее изменения (иначе тоже возможен стресс у растений и задержка в их развитии и урожайности).

3. Гистерезис у регулирующей системы нужен обязательно, причем надо учитывать еще инерционность всей системы: т.е. окончательное значение ph устанавливается только через некоторое время, порой достигающее нескольких часов. Это время зависит от объема раствора, а также конструкции установки (если она замкнута — должно пройти несколько циклов подачи раствора к растениям).

При настройке регулятора, для поддержания заданного pH с точностью 0.1 pH, автоматика сразу реагировала на изменения pH и добавляла то кислоты то щелочи, и в итоге получался компот из смеси разных солей.

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

Так клубника выглядит сейчас.

Такую же измерительную систему для записи pH и EC на компьютер в ближайшее время планируется установить на две промышленные гидропонные системы для выращивания салата и другой зелени, одного из спонсоров проекта.

Итог данного проекта — регулятор pH и регулятор ЕС.

Внутри.

Регулятор ЕС позволяет производить дозировку 1 — 3 компонентных удобрений.

По умолчанию он настроен на удобрения Flora Series, но можно настроить на любые другие удобрения.

В контроллерах для регулирования pH и ЕС, использован ПИ регулятор. Записывая показания с датчиков на компьютер, отладил процесс регулирования, и получил такую вот картину.

ph_37

На графике видно как происходит дозировка удобрений, сначала отрабатывает пропорциональное звено, а потом до заданного значения ЕС доводит интегральное звено, pH регулятор работает аналогично.

Инструкции на контроллеры:

Инструкция EC

Инструкция pH

Приборы можно приобрести на официальном сайте https://e-mode.pro/ или здесь  https://dzagigrow.ru/catalog/e_mode_pro/ .

Сейчас разрабатывается прибор с контролем и управлением через интернет, а так же с облачным сервисом здесь находится статья об управлении через интернет.

Это IP для доступа на сайт тестируемого прибора   http://78.159.233.204:7775   достаточно вставить его в адресную строку браузера и нажать Enter.

Сам сайт находиться  в самом приборе, доступ к нему возможен по IP-адресу, если у вас динамический IP, что предоставляют большинство провайдеров, то можно настроить доступ через Dynamic DNS Clien. Более подробно в статье об управлении через интернет.