Очередной пост, про мою ферму, да про сенсоры важные. Начну издалека и постараюсь простыми словами.
Зачем вообще мерить EC\TDS и температуру в питательном растворе?
Эти параметры показывают, насколько концентрирован наш раствор. А значит — хватает ли питания растениям или им через чур много и это не усвоится. Почему вообще на гидропонике все быстро растет? Потому что растениям не надо тратить силы и энергию на то, что бы искать все больше и больше ресурсов своей корневой системой и впитывать их из земли, а ещё кислород, его часто не хватает, именно поэтому часто советуют делать всякие подмесы в грунт для его "рыхлости", а в гидропонике мы выдаем все эти ресурсы сразу на блюдечке с голубой каемочкой и вот тут то главное правильно сервировать блюдо!
Нейроарт как вообще в гидропонике то все устроено.
Параметр EC.
EC = Electrical Conductivity (Электрическая проводимость)
→ Показывает, насколько хорошо раствор проводит ток. Измеряется в миллисименсах на сантиметр (мСм/см).
Чем больше солей — тем выше проводимость.
Более того, на разных стадиях роста, растениям как правило нужна ещё и разная концентрация этих ваших удобрений. Вообщем то как и с любым организмом, в разные этапы жизни - жрут по разному, поэтому этот параметр важен и нужен.
EC - это стандарт индустрии, когда вы видите EC 1.0 или EC 1000, важно обратить на какое расстояние проводится измерение. Измеряют и в миллиметрах и в сантиметрах и в метрах. Это кому как удобнее и простыми арифметическими действиями переводится в нужное вам значение.
Параметр TDS.
TDS = Total Dissolved Solids
→ Количество растворённых солей в ppm (мг/л). Это лишь приблизительный расчёт из EC:
В гидропонике чаще всего:
500 шкала — используется чаще всего (NaCl - шкала) в основном в США, Европе, Австралии, самая популярная.
700 шкала — другая, менее распространённая (KCl - шкала) в основном в Азиатских регионах, реже в Европе.
В основном используется NaCl шкала, но это нас и приводит к выводу, что в гидропонике эти шкалы нам в принципе не нужны, что то куда то переводить ещё, неудобно. Поэтому все используют одну стандартизированную единицу - EC.
Важно понимать, что оба параметра не показывают чего то конкретного. Они показывают сумму всех солей и удобрений в воде! А тоесть по этому значению мы не можем узнать, что конкретно в воде и в каком количестве. Это гораздо более сложная процедура.
Калибровка
Чем калибруются EC или TDS метры? Да все теми же буферными растворами. Для TDS это как правило 800 ppm, для EC метров - 1413 мк/см и другие (смотри на пределы измерений EC метра). Продаются так же как и для PH метров в порошках или готовом виде.
Как влияет температура?
Температура в этом аспекте, крайне важна. Хотя про неё много кто и забывает. Нет, конечно она не губительна в разумных пределах, но весьма сильно влияет на процесс выращивания растений. Мы не говорим про отрицательные температуры или около нулевые, а так же не берем в расчет температуры в пустыне. Среднестатистические 15-30 градусов для примера нам хватит.
Температура раствора — важнейший фактор в гидропонике. Если раствор слишком холодный или слишком тёплый — корни начинают "забастовку": они просто перестают нормально усваивать питательные вещества. Это как если бы человек ел лёд вместо тёплого супа — вроде есть, но толку мало.
Оптимальная температура для корней большинства растений — 18–22 °C. В этом диапазоне:
Если температура падает ниже 16 °C — корни замедляются, питание поступает плохо. А при 25–28 °C — начинаются проблемы: раствор теряет кислород, возможен корневой гниль, а соли могут вызывать ожоги. И вот тут есть главное преимущество как по мне аэропоники. Раствор разбиваясь на воздушно питательную смесь, вполне себе охлаждает и корни и при этом растения прекрасно усваивают кислород, поэтому фактор насыщения кислородом самого раствора мы можем упустить в моём случае.
Что делать при перегреве раствора? два способа. Снижать концентрацию или понижать его температуру чиллерами или другими способами. Или просто разбавить. Самый простой способ конечно разбавить водой.
Моя система
Конечно, все вышеописанное идеально соблюдается только в лабораторных условиях, весьма сложно поддерживать температуру, особенно охлаждение, или стабильный EC до сотых долей на протяжении всего цикла. Но я хотя бы попробовал к этому приблизится и забегая вперед, у меня что то получилось. За это время не было потеряно ни одного растения из за ошибок или не правильных выводов или действий системы.
Что стоит в моей системе?
В моей системе в данный момент 2 сенсора TDS. Пока не отключал старый, поэтому расскажу и про него.
Вот такой TDS метр у меня стоит, но более не используется для измерений EC(на это значение опирается вся система) а просто выводит дублирующее показание в PPM, новому сенсору.
С ним всё ок и его даже реально откалибровать. Только один ньюанс. Для гидропоники он не подходит чисто технически. У него потолок измерений 1000 PPM (около 1.0 EC) и даже его он показывает с трудом. За то идеален в обратную сторону, там где надо мерить чистоту. Вот тут у него реально нет аналогов за его стоимость. Он конечно может и 5 EC вам показать, только это будут ненадежные данные, тк его невозможно откалибровать, свыше 1 EC у него уже нелинейная интерполяция, проще говоря он становится генератором рандомных чисел. В дальнейшем я его вытащу и сделаю из него прибор для умного проточного фильтра для питьевой воды. Что бы понимать когда менять кассеты и тд.
А поскольку он не подходил то я приобрел вот такой вот EC метр.
Оверкилл для этой системы. Но работает отлично.
у него уже и питание "взрослое" (от 12 до 24 вольт) и калибровки все на борту имеются и измеряет он по правильному, EC а не PPM. PPM это в свою очередь производная от EC и считается программно. и даже крепление на DIN рейку на корпусе есть, подключать же надо строго через делитель напряжения к пину ESP, что впрочем тоже не сложно, подбирается он индивидуально под ваш контроллер.
Суть измерений ровна такая же как и в контроллерах PH. Мы считываем выдаваемое напряжение и приравниваем его к значениям EC. Подключается так же в любой аналоговый пин способный на АЦП.
Суть кода 1в1 с PH, только не нужна всякая калибровка, совсем сердитые усреднения и тд. Все сильно проще и ограничивается всего двумя функциями:
float readECVoltage_new() {
int newVal = analogRead(EC_PIN);
// Обновление кольцевого буфера
ecSum -= ecBuffer[ecIndex];
ecBuffer[ecIndex] = newVal;
ecSum += newVal;
ecIndex = (ecIndex + 1) % NUM_READ_EC;
if (ecIndex == 0) ecFilled = true;
// Вычисление среднего значения как float
int validCount = ecFilled ? NUM_READ_EC : ecIndex;
if (validCount == 0) validCount = 1; // защита от деления на 0
float average = static_cast<float>(ecSum) / validCount;
// Перевод в напряжение
float voltage = (average / ADC_RESOLUTION) * ADC_VREF;
return voltage;
}
float readEC_new() {
float voltage = readECVoltage_new();
float realVoltage = voltage * DIVIDER_RATIO;
float ecValue = (realVoltage / MAX_SENSOR_VOLTAGE) * EC_RANGE;
// EMA фильтрация
if (filteredEC == 0.0f) filteredEC = ecValue;
filteredEC = EC_SMOOTHING * ecValue + (1.0f - EC_SMOOTHING) * filteredEC;
// Перевод в mS/cm и округление до 0.1
float ecMilli = filteredEC / 1000.0f;
ecMilli = roundf(ecMilli * 10.0f) / 10.0f;
logf(LOG_DEBUG, "[EC_SENSOR] EC Voltage: %.3f V (real %.3f V) | EC: %.1f mS/cm",
voltage, realVoltage, ecMilli);
return ecMilli;
}
eadECVoltage_new() — измерение напряжения:
Считывает аналоговое значение с EC-датчика (analogRead) → от 0 до 4095
Обновляет кольцевой буфер последних измерений для сглаживания
Вычисляет среднее значение по буферу
Переводит среднее значение в напряжение (вольты) по формуле:
voltage = (среднее / ADC_RESOLUTION) × VREF
Возвращает полученное напряжение — это ещё не EC, а просто "что пришло с датчика"
readEC_new() — шаги:
Вызывает readECVoltage_new() → получает среднее напряжение
Компенсирует делитель напряжения, чтобы получить реальное напряжение на датчике
Переводит напряжение в значение EC по диапазону датчика
Сглаживает значение EC с помощью EMA-фильтра (плавное обновление)
Округляет EC до десятых (0.1) и переводит из μS в mS/cm
Логирует результат (напряжение и EC) для отладки
Возвращает EC (в мСм/см) — дальше это значение:
передаётся в WebSocket (SENSOR_UPDATE)
записывается в лог (tds_log.csv)
отображается в интерфейсе
Компенсация температуры для TDS метра.
В моем модуле, уже присутствует температурная компенсация,а в OEM китайском, такой функции нет, поэтому финальное значение надо компенсировать ещё и температурой.
TDS Компенсированный = TDS сырой/ (1 + α × (T - T₀))
формула выглядит вот так. И является довольно простой:
TDS сырой — необработанное (сырое) значение TDS
T — текущая температура раствора (в °C)
T₀ — опорная температура (обычно 25°C)
α — температурный коэффициент для солевого раствора (0.02 — то есть +2% на каждый градус)
Температура: 30°C
Сырой PPM = 1000 ppm
TDS Компенсированный = 1000 / (1 + 0.02 × (30 - 25))
= 1000 / (1 + 0.10)
= 1000 / 1.10
≈ 909 ppm
То есть фактически в растворе меньше солей, чем показывает прибор — из-за нагрева. Эта же формула подходит и к EC метрам без встроенной температурной компенсации.
Ну и соответственно, как вы понимаете уже, вместо текущей температуры, в ESP/Arduino и любых других системах, можно просто брать температуру с датчика DS18B20 например и подставлять напрямую в формулу и получать корректное значение EC/TDS.
В завершение. Естественно, вы можете вообще не парится, и заваривать раствор единожды с помощью ручного измерителя TDS\EC и будете правы. Это блажь и излишек. Но мне нравится такого рода автоматизации и упрощение своей жизни.