Этот кулер может справиться с тепловой нагрузкой до 130 Вт, что более чем достаточно для этого теста.
Эта скоба не нужна для установки, и я сделал небольшой столик или раму, используя тонкую МДФ панель и четыре деревянные ножки.
Добавил несколько шайб под МДФ панель, чтобы она была на одном уровне с радиатором. Конструкция с кулером выглядит достаточно стабильной.
Взял клейкую ленту по толщине элемента Пельтье для изоляции, чтобы удерживать модуль на месте и отделить горячую сторону от холодной.
Есть небольшой зазор по бокам, так как контактная поверхность этого радиатора составляет 38x36 мм, а модуль Пельтье – 40x40 мм.
Думаю это не повлияет на производительность, потому что последний миллиметр на краю модуля – это просто силикон и керамический материал, там нет нагревательных элементов.
Добавлю датчик термометра на заднюю часть горячей пластины и закреплю его клейкой лентой.
Для измерения температуры на холодной стороне я добавлю датчик термометра с термопастой на радиатор.
Охлаждающий вентилятор будет запитан от отдельного адаптера на 12 В. Температура в комнате колеблется между 23 и 24°C.
Тест элементов Пельтье напряжением 12 вольт
Начнём тест с модуля 12703. Последняя цифра обозначает максимальный ток, который он может выдержать, так что это самый экономичный модуль с максимальным током 3 ампера.
Наносим термопасту с каждой стороны для лучшего теплопередачи. Я буду использовать мой регулируемый источник питания и для первого теста подам на модули 9 вольт.
Буду использовать секундомер и тестировать каждый модуль в течение 30 минут. Белый термометр показывает температуру холодного радиатора, которая начинает снижаться, а температура на горячей стороне показана чёрным термометром, которая постепенно увеличивается.
Через 1 минуту температура холодного радиатора составляет 2,2°C. Проверим ещё раз через 10 минут – -8,4°C, это хорошо, а самая низкая температура после получаса – -10,2°C при потреблении мощности 18,58 Вт.
Вот как выглядит холодный радиатор с модулем 03 после 30 минут работы при напряжении 9 вольт.
Теперь давайте уберём его и подготовим следующий модуль Пельтье, который является одним из самых дешёвых и распространённых – 12706.
Через 1 минуту температура холодного радиатора составляет 2,9°C, аналогично модулю 03.
Вот как выглядит радиатор через 10 минут – -6,3°C, а самая низкая температура после 30 минут – -6,1°C, что уже хуже, чем у модуля 03. Льда на радиаторе также меньше.
Следующий модуль может выдерживать до 10 ампер. Я снова добавлю термопасту и для первого теста подам на него 9 вольт.
Через первую минуту у нас 1,9°C, через 10 минут – -8,2°C, и после получаса – -9,2°C.
Сравним результаты первого теста: модуль 06 пока наименее впечатляющий.
Тест элементов Пельтье напряжением 12 вольт
Рекомендуемое напряжение для модулей Пельтье – 12 вольт, так что давайте попробуем это напряжение для следующего теста. Мы возвращаемся к модулю 12703.
При отметке 60 секунд температура уже составляет 0°C, но это займёт весь день, так что давайте перейдём прямо к финишу.
Через 30 минут – -12,3°C. Температура ниже при 12 вольтах по сравнению с 9 вольтами, что неудивительно, и на холодном радиаторе больше льда.
Теперь модуль 06, работающий при 12 вольтах, проверим температуру через 30 минут – -6,3°C при 12 вольтах.
Температура аналогична напряжению 9 вольт, но температура на горячей стороне увеличилась, что означает больше потерь мощности без реальной пользы.
Теперь давайте подадим 12 вольт на последний модуль, и результат после получаса – -9,3°C. Я ожидал большего от этого мощного модуля, но это ещё не всё.
Вы можете видеть, что лучшие результаты в диапазоне модуля 12703. Он имеет самую низкую температуру при номинальном напряжении 12 вольт, и потребление мощности ниже по сравнению с другими модулями.
Лучше использовать два модуля 03 при напряжении 9 вольт вместо одного из других модулей, и вы всё равно получите более низкую температуру и меньшее потребление мощности.
Пожалуйста, поделитесь своими мыслями в комментариях ниже и нажмите на плюсик, если пост понравился.
И так, второй пост из серии про светильники. В нём я покажу актуальную версию своей умной базы, новые плафоны и новые анимации. Расскажу о дальнейших планах. В этом посте будет очень много фотографий, GIF изображений и рассуждений.
Начну с конструкции и изменений, а так же что послужило причиной этих изменений:
Причины:
DC-DC преобразователь на 2 Ампера(3 Ампера в пике и с радиатором) не подходил. Он жутко грелся, а лента в пике по расчетам могла потреблять до 5 ампер, поэтому предыдущая конструкция была жутко доколхожена вторым DC-DC модулем в параллель для хоть какого то запаса по амперажу, но это тоже особо не помогло. Поэтому два дешевых модуля были заменены на XL4016E 9A. Так как они полностью удовлетворяют моим требованиям по размеру, мощности и цене.
Добавления акселерометра для одной очень замысловатой анимации.
Перенос порта питания на другое место и соответственно изменения модели под это дело.
И вот какую внутрянку я получил, после некоторых мытарств.
Собственно сам стакан, поверх как и в прошлой версии одевается цилиндр с намотанной лентой. При необходимости, все можно разобрать и легко извлечь тот или иной компонент. Все на винтах и впаиваемых бонках.
Вот так. На этом цилиндре намотана уже сама лента. (не промоделивал, так как не видел в этом смысла для себя, а занятие гнуть компоненты во фьюжене, это мега мучительно)
Поверх собственно ленты, на следующий выступ, одевается рассеиватель, а сверху скрепляется все крышкой.
В разрезе это выглядит примерно вот так. Собирается это на клей, либо плотной посадкой, которой достаточно для того что бы изделие стало монолитным и надежным. В дальнейшем, есть мысль сделать резьбовые соединения везде где это нужно, но пока обхожусь этим
В реальности цилиндр с LED лентой выглядит вот так:
Пайка такого количества перемычек, изрядно умотала, но это того стоило, так как я получил полноценную матрицу свернутую на цилиндр и мог гораздо удобнее с ней работать, чем с намотанной по спирали лентой.
Это что касается конструкции и железа. Что касается софтверной части, ох и много же там было проблем. Ниже опишу и проблемы и все
Проект был сделан в скетче, что со временем усложнило его модификацию, отладку и работу с ним в целом. Работа в Arduino IDE мягко скажем, не была столь удобной. Поэтому проект был перенесен на VS Code в связке с PIO, где произошел рефакторинг и разделение всех функций на отдельные файлы прям как по ООП. (эх, если б я был профи и знал заранее, я бы не потратил столько времени на этот этап)
Интерфейс был допатопным, морально устаревшим, а так как его прям делать снова с 0 не хотелось, поэтому он был доработан, добавлены красивости и тд. Но мне кажется, я ещё не удволетворил все свои хотелки. и впереди меня ждет очень много интересных визуальных изменений.
Отсутствие серверной части. Я хочу видеть подключенные лампы к сети интернет, на какой прошивке они сейчас, какой аптайм у них, какой город у пользователя и какая анимация включена. Иметь возможность перепрошивки удаленно на выбранную прошивку и возможность смены анимации так же удаленно. Удаленно в этом контексте, это через интернет, без открытия портов, знания IP адреса и тд и тп. Вообщем, статистическая и прочая информация для технической поддержки в будущем. Она может каким то образом изменятся, в дальнейшем, но фундамент необходимо сделать.
Отстутствие сервера для поддержки "интернета-вещей", тоесть лампой можно управлять только находясь в одной локальной сети, то это категорически не устраивало меня, все таки в современных реалиях, хочется видеть статус той же лампы онлайн и 24\7. А так же, это стесняло меня в некоторых анимациях, о которых я расскажу позже.
Как оказалось, фаза луны отображалась не в реальном времени, а расчитывалась по расчетам. Что в целом не плохо, но зная реальное время, эти расчеты не нужны. Тоже надо было пофиксить.
Так же, из за того что вся прошивка и все анимации были написаны под накрученную спиралью ленту, новая лампа с новой конструкцией естественно отображала все анимации неверно и не корректно, это затронуло все анимации и полностью изменение логики их работы.
Вообщем, описывать все проблемы дословно, я не вижу смысла и так понятно, что багов лагов и проблем, там было ООЧЕНь много. Прям сверхдошиша. Не долго думая, приступил к исправлению.
По итогу интерфейс теперь выглядит уже более прилично, а количество настроек и каких то маленьких штучек увеличилось и работает гораздо быстрее и коректнее.
Интерфейс версии 2.0, адаптивный и под мобильные устройства и под ВЕБ версию.
Блок системных настроек.
И да, как можно заметить, в веб интерфейсе все ещё как то не сгрупировано нормально и выглядит не сказать что вау круто. Но над этим я ещё в будущем поработаю. Теперь у меня есть возможность, обновлять интерфейс отдельно от прошивки и все это с поддержкой версионности и автоматических обновлений. При этом для пользователя, ничего не изменится, всегда будет одна кнопка для обновлений, но обновится только нужная часть устройства) И вот так выглядит если доступно обновление.
Если доступно обновление.
Так же, сделал приятную мелочь и бонус, в процессе обновления естественно у нас появляется прогресс-бар с процентным заполнением и текущим статусом процесса (качается прошивка, распаковывается, обновляется и тд) и сама лампа в этот момент начинает плавно переливаться голубым цветом, что дополнительно уведомляет пользователя об обновлениях.
Рассказывать можно долго, об абсолютно всех изменениях, но пожалуй это и 2 новые анимации заняли у меня больше всего времени. 1 анимация, это связь ламп или постучись в мою дверь) В интерфейсе это выглядит вот так и суть её работы в следующем:
Постучись в мою дверь.
Первое что надо сделать, это отправить второму обладателю, свой ID что бы он вставил его в соответствующее поле и всё. Настройка завершена и лампы связаны. Теперь, когда вы трогаете свою лампу (бьете по ней, просто трогаете, гладите и тд) ровно с такой же силой, на абсолютно любом расстоянии(лишь бы был интернет) у второго пользователя его лампа загорится тем цветом, который он выбрал у себя в настройках. Получается некие парные лампы можно сказать для отношений на расстоянии или для общения морзянкой если хочется)
Я засимулировал работу второй лампы, так как сейчас второй собранной у меня нет в наличии, но уже проверял. работает и работает весьма быстро)
Устроено все весьма просто и стандартными методами. Протокол MQTT, свой сервер и базовая аутентификация, которая зашифрована и хранится уже в памяти ESP. + уникальный ID формируется из MAC адреса для каждого устройства, который не изменяется при перепрошивках или перезагрузках, возможно в будущем я упрощу этот механизм, но пока сам прототип работает и это радует. Это потребовало от меня множества усилий, но это одна из самых главных фич которые мне нравятся самому. Естественно для этого режима(как и для всех) работают настройки и установки такие как: якрость, высота подсветки, чувствительность и цвет) реализовано это всё с помощью акселерометра и вполне стандартных алгоритмов фильтрации шумов(спасибо универу, за специальность в области сигналов и фильтрации шумов и тд, наконец то пригодилось). Грубо говоря, ничего сложного.
Погодная анимация
Куда сложнее, это была следующая анимация. Симуляция режима погоды. В интерфейсе это выглядит очень просто. Нет никаких настроек (в этом и смысл).
Погодная анимация
Тут, вы задаете ваш город, поселок или область, или даже известное место(например торговый центр) и дальше происходит магия. Светильник начинает получать погоду почти ровно из этого места. (самое ближайшее к нему где есть метеостанция отдающая данные в интернет) А дальше, я эту погоду уже превращаю в соответствующие анимации. Облачно - лампа будет плавно мигать тусклым белым светом, если пойдет снег или дождь - то по лампе будут стекать синие или белые капли, если туман, то просто будет гореть тусклым белым светом, а если солнечно то будет светить ярко и желтым цветом, во время грозы и ливня, будет смешиваться режимы дождя и грозы) Бывает и такое, что лампа не знает такого состояния погоды, тогда она будет пульсировать синим цветом ровно как во время перепрошивки, сейчас это нужно мне для отладки, и регулярно записывается в логи которые отправляются мне на сервер и постепенно я фикшу все недостающие статусы)
Вот например, погода для Санкт-Петербурга и для Сочи. (1 и 2 видео соответственно). В СПБ- Облачно, а в Сочи шел небольшой дождь. (и да, я показываю на примере Марса)
Как обычно, на камере плоховато видно, но в живую результат гораздо лучше. Но либо тут уж я криворученька и снимать не умею. Автор не оператор)
Конечно же, смена погоды происходит автоматически и без участия пользователя. Лампа сама обновляет статус погоды раз в N времени, и если погода изменилась, то и отображение на лампе поменяется.
И да, может быть кто то справедливо заметит, что некоторые анимации не сказать что прям выглядят как то информативно, но пока я сделал так. В дальнейшем естественно это все будет изменятся и не один раз переработается. Сейчас я стараюсь придерживаться принципа, что плафоны это отдельный продукт, а умная база отдельный. И из за этого принципа, не всегда получается в том числе, сделать анимации информативными, так как плафон рассеивает свет и получается что диоды смешиваются. С этим я борюсь отчаенно и неоднократно модифицировал сами плафоны.
Так же, есть Температурный режим этой анимации. Он просто показывает цветом свечения, текущую температуру на улице. Диапазон можно задать самому, от -20 до + 30 градусов по умолчанию, где -20 это максимально синий цвет, а +30, максимально красный. Эти цвета так же можно изменить в настройках. И так же естественно все в Live режиме меняется.
Новая анимация луны
У меня остался бракованный плафон, так как принтер почему то решил что он допечатал. (да, я бракодел) и на нём я тестирую всякое.
Вот как выглядит секторность и фазы луны. У анимации луны есть ряд настроек: Режим работы:
Реалистичное время. (не думаю что стоит пояснять, что на небе - то на лампе)
Ускоренное время. (можно задать какое то количество минут, за которое луна сменится от полностью темной, до полной луны)
Ручной режим. ( на видео выше, мы можем изменить фазу вручную, от 0 до 12)
Интерпретация:
Реалистичная (Всегда горит строго 180 градусов луны) как и в реальной жизни, у луны всегда есть темная сторона)
Артистичная (В процессе того как луна меняет фазы, она как бы заполняется от 0 до 360 градусов и в итоге будет гореть вся сфера)
Минималистичная (всегда горит 1 из 12 столбцов, он перемещается как месяц) (на видео)
Ну и конечно остальные настройки, такие как цвет, яркость и тд. Кому что по душе.
Админка.
Ну и админку грех не показать. Очень быстро написал её, буквально за один два дня.
Собственно моя удаленная админка. Тут я вижу некоторые статистические данные, которые могут мне помочь в решении каких то вопросов удаленно. А так же то, что я описывал в начале поста.
Что в планах дальше?
В планах дальше, это:
Ещё раз переработать интерфейс, сделать его уже с анимациями, желательно на React или чем то подобным, с меню и настройками. С базовой аунтентификацией пользователей и в целом как то поприятнее.
Доработать некоторые баги, например сейчас смена цветов не всегда происходит в Live режиме, это связано с JS и миллиардами запросов, к устройству.
Собрать полноценное Android приложение, зачатки уже есть, я могу с приложения изменять анимации и их параметры, но показывать пока не буду, так как это совсем ранний прототип и я только изучаю этот вопрос. Но у меня по сути дела, есть почти полноценный API для работы с устройством, так что вопрос написания приложения не кажется мне уж очень сложной задачей.
Интеграция в Apple Home и Алису. В Apple Home, тестово уже прокидывал, но крайне упрощенную версию лампы. С полноценной лампой пока не вышло, но работаю в этом направлении. В Алису, слышал что можно через MQTT, но на стадии изучения этого вопроса.
Интеграция с Home Assistance - можно считать сделана, так как будет через MQTT, а MQTT в устройстве уже есть, осталось написать пару функций и готово, возможно для самого HA надо будет написать своё дополнение, что бы пользователь не парился с добавлением кода в Configuration.yaml и тд. Вообщем как то надо это придумать попроще чем уже протоптанная неоднократно мною дорожка.
Многое многое другое.
Если вам интересна реализация этих планов, подписывайтесь тут или на мой тг. Там я буду чаще постить какие то отрывки которые не требуют оформления и выделения времени на написание поста) https://t.me/magic_lamps
Функция измерения веса. Покажу конструкцию в 3д, так как показывать её в реальности весьма затруднительно. Я использую 60мм горшочки для гидропоники, поэтому проектировал под себя и свои нужды.
1/5
Сама измеряющая платформа с тензодатчиком. Печатается на 3д принтере и вставляется в мой кейс с растениями вместо обычной платформы (одной из 3х)
Собственно на изображениях видно, по центру стоит тензодатчик и вокруг него равноудаленно 7 слотов под горшочки с субстратом. От тензодатчика провод идет в АЦП HX711, но тут было несколько ньюансов: А) Обязательно заэкранировать кабель подключения от самого тензодатчика(я обернул экраном наполовину) и довести экран до АЦП. Б) Провести провод так, что бы если по нему капилярным эффектом начнет подниматься вода, он не добрался до датчика. Я сделал простую петлю и разместил его выше чем сам тензодатчик. Таким образом вода точно никак не попадет на АЦП. Сам же АЦП в герметичном корпусе. и вынесен отдельно от системы и подключается через TYPEC-TYPEC провод любой длины.
Это нужно для того, что бы провода от тензодатчика и до АЦП были как можно короче. а цифровой сигнал уже все равно на какое расстояние и с какими помехами передавать.
1/2
Корпус для АЦП.
Собственно сама функция измерения веса не замысловата и просто измеряет вес всего что стоит на ней. Тарирована вместе с платформой по умолчанию. Калибровка осуществляется по известному весу и выборкой в 50 измерений. Опять же, я встретил достаточно много проблем с этой фичей, но все удалось побороть. 1) Проблема влажного субстрата. Я знаю сколько весит горшочек с сухим субстратом и с мокрым. Но вода штука капающая. И эти самые капли, на начальных этапах роста дают не просто шум, а шумище. То есть когда растения весят 0.02 грамма, это начинает становится серьезной проблемой. Был введет флаг полива, и примерная интерполяция по времени, за сколько "худеет" горшочек от воды. + мы знали начальный и конечные веса. Это помогло уменьшить шум от измерений. Затем сверху накладывается алгоритм среднего, лимитации пиков (по сути фильтрация сигнала, если он превышает порог, то значит это значение либо шум, либо вода) и просто большая выборка на одно измерение, и вес стал стабильно учитываться. 2) Проблема контрафакта. Очень, ООЧЕНЬ много контрафакта на OZON. 2 штуки HX711 купленные мной, были с затертыми микрухами, неотмытым флюсом и шумели хуже чем пьяный сосед вася, периодически отваливались и отказывались измерять показания во всех режимах. (40\10), причинно следственной связи установить не удалось. В стерильном скетче и с идеальным подключением, вели себя неадекватно. Лишь на 3 раз удалось приобрести действительно хороший модуль, который ведет себя как заявляет производитель. На удивление он даже выглядел иначе.
Собственно, я упомянул, про распределение веса. у меня в системе 25 слотов на данный момент. (без весов 27). Так вот для каждого из слотов можно вычислить свой вес. Даже если растение не на весах, нужно что бы оно хотя бы раз там побывало единственное что. Работает это по принципу "разумного распределения", у каждого слота в системе есть свой индекс и 1 или 0 является ли этот индекс весами или нет. Если мы знаем, что растение например в системе 15 дней и оно одно сидит на измерительной платформе, то формула следующая
вес платформы - вес горшка - вес субстрата = вес этого конкретного растения.
Если на платформе сидят условно 5 растений, то этот вес просто делится на 5, при соблюдении того факта что это та же партия выращеваемых растений. (помните в предыдущем посте мы задавали количество посаженных растений? вот вот, там же и формируется уникальный ID посадки)
А дальше магия. У нас для каждого поддерживаемого растения системой,базово прописан теоретический вес, который перезаписывается реальным во время использования. Ну то есть по большому счету, некое самообучение. И логично предположить, что растение сидящее на весовой платформе в слоте с индексом 1, которому 5 дней примет массу A, а растения например в индексе 4,5,6 которым уже 25 дней, примет массу Общая масса растений - масса А / 3. Собственно как то так. А дальше, когда мы знаем уже реальную массу каждого растения, системе собственно не сложно предположить, что остальные растения из этой партии но в слотах не на весах, весят примерно столько же. И она присваивает массу уже этим растениям. Собственно как то так, это весьма сложно объяснить как оказалось. А дальше можно оставить на весах 7 уникальных растений например и с помощью этого алгоритма наблюдать за их поведением в зависимости от например различных факторов. (температуру поднять, чо будет? дать больше EC? и тд. ) все это пишется, запоминается и анализируется.
Ну и собственно график роста по CSV данным. Вот так салаты росли примерно с 25.04. (все что старше 30 дней улетает в долгосрочную память). Есть шумы и провалы, все таки я то трону весы, то сами растения на них, во время осмотра, все в норме.
Видно на графике, что сейчас салаты на платформе в стадии активного роста и прибавляют примерно по 0.1кг в сутки, что очень даже не плохо. Сейчас пару дней назад я снизил дозу EC до 1.2, до этого было 1.6, дальнейшие наблюдения покажут, осталась ли прежней скорость набора зеленой массы или замедлится. Салат Мини Ромэн.
Ну что бы далеко не отходить уже от конструкции, чуть вильнем в эту сторону. Это тоже отдельный и большой этап.
Контейнер для выращивания у меня сделан из ПВХ пластика на фрезерном ЧПУ. Тоесть по сути это был конструктор для склеивания. Клеил специальным клеем и сверху проходился ещё герметиком, тк вода может стоять в процессе эксплуатации весьма большим объемом. (около 1.8 литров. Возможно это не доработка и я поправлю в следующей генерации этот момент, но пока все работает отлично. Спроектирован так, что бы на обычном принтере можно было напечатать 3 крышки для высаживания растений и что бы влез в обычный металический стеллаж. Как по высоте так и по ширине. Идеально входил в стеллаж 800*300, тк изначально собственно под него и проектировался.
1/2
Конструкция контейнера.
Расположение самих форсунок тоже важно. Разместить их надо таким образом, что бы будущая корневая система не загородила собой одну\две\три из форсунок и не отняла питание у остальных растений, так же надо учесть что бы струя не била напрямую в горшочки, а увлажняла воздух вокруг, ну и естественно что бы это не было так, что из щелей фигачит водяной туман и увлажняет все вокруг и вокруг системы лужи.
Вариант 1, форсунки в верхней части направлены вниз.
Я сделал около 4-5 вариантов в модели, примерно просчитал конусами ~55 градусов, что соответствует моему давлению и диаметру форсунок. И самый нормальный вариант как по мне, без лишнего изобретательства велосипеда, это разместить их на будущем уровне воды внизу под 35 градусов к поверхности. Так же они заполняют пробелы друг друга. По одному борту стоят 4, по другому тоже 4 но со смещением на около 50мм.
В итоге финальный вариант выглядит уже вот так.
На дне имеются укрепления в виде полосок того же пластика, что необходимо для того что бы днище не прогибалось под весом жидкости и конструкция получилась легкой и жесткой и так же укреплены сами стенки ближе к крышке такими же полосами, что бы надежнее их скрепить между собой и дать опору для прямоугольника под печатные крышки уже.
Конструкция бака
Тут особо рассказывать нечего. Тут я не изобретал велосипед и сделал из контейнера удовлетворившего мои условия. Он должен закрываться плотно на защелки и быть не прозрачным, подходить по размеру. В принципе это всё. Дальше дело техники, я все монтировал на крышку, что бы при необходимости её поднять и вытащить сам бак и помыть\заполнить водой или что то ещё сделать, но честно я этого не делаю)) потому что заливаю воду просто в контейнер и она сама наполняет бак, но ситуации могут быть разные. Для обслуживания единственное что важно было, это не крепить ничего на сам контейнер, тк провода или шланги в дальнейшем будут мешать его обслуживанию. Единственное что пришлось сделать, это закрепить на быстросъемном печатном креплении датчик наличия воды на безопасном для насосе уровне. Если вдруг я все таки не увижу отсутствие раствора, он отключит насос и не даст ему работать вхолостую.
Продолжаем по функциям (системные функции)
Диспетчер задач. Да да, вы не ослышались. У меня есть свой диспетчер задач с блэкджеком и памятью. На самом деле вещь сугубо дебажная. Показывает она приоритет, ядро исполнения, сколько стека ест та или иная задача, за сколько выполняется и есть ли опасность краша системы по Watchdog, так же есть апи поинты для остановки или перезапуска задач, но пока в интерфейс не интегрировал ещё. Конечно это касается только задач FreeRTOS, задачи в Loop цикле при этом никак не отображаются.
Диспетчер задач
Лог система
Лог система, это отдельная вещь, тк в такой сложной системе надо логировать всё и ещё раз всё что можно. Но все же сталкивались с тем что в луп написал println и значение и больше в логах ты не хозяин. Да, конечно можно Усовершенствовать это делеями, а лучше миллисами или yield ами, но это разве гибкость? Когда логов становится много. Нет, не так. МНОГО, ОЧЕНЬ МНОГО, за пару секунд собирается 30-40 строк, пора что то с этим делать. А ведь так не хочется трогать уже сделанное полезное логирование, вдруг оно опять понадобится позже. Поэтому я уже известным путем и пошел. Сделал просто обертки для функций логирования, но уже с аргументами уровня логирования. DEBUG INFO WARNING ERROR. И собственно параметрами куда это самое логирование отслыать, в телегу на сд карту или в веб интерфейс. В тг просто по приколу, я хрен знает зачем, мне ни разу не пригодилось. А вот на SD очень даже, в связи с этим на фронте на самой ESP появилась даже кнопочка скачать лог. Пришлось ограничить правда размер до 4мб, как правило этого хватает для всех нужд. Но не было печали купила баба порося, это то я все сделал, но как отлавливать PANIC/WDT и прочие неприятности когда ты по ошибке вылез за предел массива или сожрал весь HEAP? Правильно, взять дешман ESP32Dev модуль и подцепить его TX\RX2 в RX\TX0 на Main ESP32S3 и заставить его читать вообще всё и отсылать по вебсокету на свой веб интерфейс. А ещё можно прикрутить кнопку принудительной перезагрузки контроллера, перепрошивки без необходимости лезть в корпус и подсоединять USB.
Возможность задать уровень настроек логирования.
Логирование всей фермы SLAVE контроллером на ESP32. Все идет в Live режиме, без перезагрузок страницы и без задержек через WebSocket.
Тут же прикрутил и фильтрацию логов по системам которые определяются автоматически, прикрутил MQTT для удаленного перезапуска Main и самое главное, на SLAVE сохраняются все Backtrace c Master контроллера и коды ошибок для дальнейшей диагностики + лог за минуту до критической ошибки. И вот это уже настоящая имба. Ты буквально независим от ошибок и USB провода и можешь прочитать всё что тебе нужно независимо от того, что с Master контроллером. Так ещё и ладно, эту идею можно развить и дальше, Slave контроллер может быть и резервным контроллером. Например самые важные функции это полив и свет, вполне можно автоматически дублировать и управлять теми же самыми реле при отключении Master контроллера. Уведомлять пользователя и тд. В будущем такое обязательно будет, но количество лапши внутри корпуса уже заставляет дергаться оба глаза. Поэтому потом, когда нибудь.
Резюмируя систему логирования, она получилась мощная, быстрая, понятная и самое главное удобная для использования. А большего мне и не надо. Красивости в ней только мешают, поэтому тут дизайна как такового и нет.
MQTT и умный дом.
Так же отдельный большой раздел.
Настройки подключения к MQTT. Все отображается в лайве, а так же есть подсказочки на какие топики подписаться если нужно это сделать вручную.
Обычно я не шел дальше ручной подписки на нужные топики, но тут что то захотелось ну прям автоматически все чтоб было. Итог таков. Если у вас дома есть Home Assistance и стоит расширение MQTT, вам больше ничего не надо делать. Все найдется и добавится в систему автоматически как надо и без танцев с конфигурациями, отдельным устройством, в котором усе уже сконфигурировано как нужно.
Мелочь, а указание авторства доставляет удовольствие.
Сама страничка сенсоров и релюшек.
Конечно забавно, но виртуальные реле из HA добавляются снова в HA, можно исправить, но не вижу смысла)
Не знаю, тут особо рассказывать то больше и нечего, из HA можно прокинуть уже куда хотите, хоть в Apple Home, хоть в Алису. Задавать сценарии и тд. В будущем возможно я расширю возможности настроек MQTT, что бы можно было выбрать а что конкретно вообще по этому вашему MQTT передавать то, но пока это жестко захардкожено и он передает все сенсоры и все реле. А больше как будто и не нужно, разве что блокировку таймеров и их настройку ещё бы завести, но как будто ту мач.
Система
Системный раздел умной фермы
Отсюда, можно забэкапить всё, что происходит в системе. конфигурацию реле, насосов, удобрений, бака, посадки и так далее и тому подобное. Всё качается в ZIP архиве и так же восстанавливается в одну кнопку на чистой системе. Это очень очень полезно, тк я за время тестирования и кучи форматирований флешек и Spifs просто устал заполнять всё руками. А так же помогает если вдруг вы сменили SD или отчистили SPIFS обновив прошивку. (Дада, кнопка файловой системы называется LittleFS так это потому что я всегда их путаю, но в данном проекте SPIFS)
Ну и возможность обновить систему через OTA .bin или обновить сам веб интерфейс, чего я делать больше не планирую.
Telegramm
Это последняя в этом посте система, телеграмм уведомления.
Ну во первых, она может срать вам в личку постоянными уведомлениями о срабатывании таймеров.
Во вторых, может уведомлять о том, что система засорена и насос не будет включен, или кончился раствор. (скриншоты из тестирования)
Конечно же она шлет ежедневные отчеты в 9 или во сколько вы выберете утра. С фотографией, параметрами и счетчиком незапланированных перезапусков за все время. (незапланированный перезапуск, это перезапуск даже от обновления прошивки, его можно скинуть)
Ну и конечно, система может выслать вам неприятные сообщения, которые вас уже изрядно бесят.
Ну и последнее
Каждый запуск системы, это куча проверок на работоспособность всех микросервисов системы. И их запуск. О чем телеграмм бот и сообщает. Тут немного дублируется логирование, тк STILL BETA. Но ничего)
Давайте на этом закончим вторую часть. В третей, я хотел бы рассказать уже о датчиках, их калибровке, температурных компенсациях, проблемах, шкалах NaCl и других. Австралийских аршинах в измерении EC. А в четвертой, если успею доделать 4.2, расскажу об интерфейсах взаимодействия с фермой. (Веб интерфейс, экран Nextion) вообщем очень много какой инфой могу поделится в этом цикле постов.
Привет мои юные инженеры! Эта история о том, как, не имея никаких знаний в робототехнике, схемотехнике и прочего, удалось собрать рабочую модель робо манипулятора и осуществить детскую мечту. Осторожно, много букв… (в второй части будет краткий итог для тех, кто не осилил текст)
Все началось в январе этого года. Был приобретен стартовый набор с ардуино от «Амперки» (не реклама, они мне не платят), первые пробы этого чуда были обычными, помигал светодиодиком, сделал управление светодиодом через ПК, поиграл с кнопками. Но хотелось чего-то более грандиозного, тут то и пришла идея создания робота манипулятора. Ладно, хватит мять сиськи, начнем же!
Для начала были куплены 3 сервомотора Tower pro 9g (160 руб. каждый) и доска бальзы (из неё вроде делают модели самолетов). Не берите бальзу для такого! Я, конечно, этого не знал, поэтому пытался сделать что-то из нее, благо материал был мягкий и легко резался канцелярским ножом. Но обработка бальзы это ад, мягкость это и плюс, и огромный минус. Намучившись с этим материалом (знатоки не ругайтесь, бальза хороша для других задач), было принято решение печатать детали на 3D принтере (можно было резать и оргстекло, но очень хотелось попробовать 3D печать). Детали моделились в SketchUp, и экспортировались в .stl с помощью расширения.
В итоге получилось следующее:
Печать вышла в 902 руб. Кстати, поскольку до этого не приходилось делать модель для печати, я накосячил с размерами отверстий, и из-за этого у манипулятора появилось мнооого люфтов (кидайте тапками).
В качестве прообраза был взят проект uArm и meArm. В первом использовались сервы u-servo us-d150a, а второй я увидел, когда уже смоделил свои детали, поэтому вышел некий гибрид .
Оказалось, что я превысил лимит по блокам в посте, поэтому через пару минут будет добавлена вторая часть с завершением сборки, рассказом про софт и прошивку, видео-примерами и общим итогом. Ссылку на вторую часть я добавлю сюда (надеюсь)
В этой статье я хочу описать свой опыт разработки такого простого, но в тоже время самого используемого элемента «Умного дома». Речь пойдет о модуле управления освещением. Забегая вперед, хочу сказать, что данный проект был реализован еще в 2021 году, но в настоящее время потребовалась реализация еще одного модуля. Я решил совместить приятное с полезным, дополнительно обновить прошивку устройства и «перепроектировать» данный модуль с помощью современного ПО и само собой — поделиться с вами. Если стало интересно, то добро пожаловать под кат.
❯ Небольшая предыстория
Домашней автоматизацией я занимаюсь давно и застал те времена, когда еще не было доступных микроконтроллеров с беспроводной коммуникацией на борту (типа ESP8266), в основном использовались проводные решения на базе 1-Wire. И мой «Умный дом» не стал исключением.
Каждый начинающий «строитель» «Умного дома» понимает, что первым делом нужно научиться включать и выключать свет, чтобы эффектно удивлять друзей, управляя освещением со смартфона. В те времена это казалось магией :) Вот и я, закупившись на Алиэкспрессе поддельными двухканальными 1- Wire свичами DS2413P, решил реализовать управление светом. В итоге была собрана плата управления на базе купленных свичей и симисторным управлением нагрузкой. Данное устройство надежно проработало аж до 2021 года. Но летом того же года была жуткая гроза и по витой паре интернет провайдера прилетел мощный разряд, который унес в электронный рай сетевую карту сервера, USB 1-Wire адаптер, ну и плату управления освещением с эффектным взрывом симистора. Тогда я подумал, что пора завязывать с проводными решениями ибо гирлянда сгоревших устройств ни на секунду меня не радовала и я принялся за разработку беспроводного модуля управления освещением.
❯ Проектируем аппаратную часть
Условно мы можем разделить модуль на три сегмента:
Система питания;
Контроллер управления;
Система силового управления.
При проектировании принципиальной схемы устройства будем придерживаться «золотого» принципа: чем проще — тем лучше, а значит — надежнее. Поэтому в качестве системы питания будет реализована схема на базе экономичного импульсного преобразователя напряжения LNK306GN, который доказал свою надежность временем и работой в аномальных условиях.
Краткая информация о LNK306GN:
LNK306GN — это понижающий преобразователь с наименьшим количеством внешних элементов. Серия микросхем LinkSwitch-TN специально разработана для замены всех неизолированных источников питания с линейным питанием и питанием от конденсаторов в диапазоне выходного тока менее 360 мА при равной стоимости системы, обеспечивая гораздо более высокую производительность и энергоэффективность. Устройства LinkSwitch-TN объединяют в монолитной IC силовой полевой МОП-транзистор с напряжением до 700 В, генератор, простую схему управления включением/выключением, высоковольтный импульсный источник тока, генератор частот, схему ограничения тока и схему отключения при перегреве.
В качестве «мозга» нашего устройства, будем использовать микроконтроллер от компании Espressif Systems ESP8266. А для силового управления нагрузкой, то есть нашими лампочками, будем использовать связку оптопары MOC3052M и симистора BT136-600. Почему не реле? — спросите вы, ну не люблю я реле, они щелкают и габаритные. Ниже можно видеть результат разработки принципиальной схемы устройства. Для разработки схем и печатных плат я использую открытое ПО KiCAD.
Принципиальная схема модуля:
Как я уже говорил ранее, источник питания реализован на высоковольтном импульсном преобразователе LNK306GN, который позволяет максимально упростить схему источника питания. На выходе источника формируется напряжение в 3,3 В, данное напряжение устанавливается обратной связью, которая организована с помощью резистивного делителя напряжения R4 и R5. Данная схема питания не имеет гальванической развязки с сетью, поэтому нужно обеспечить эффективную изоляцию платы для исключения поражения электрическим током. Первоначальный запуск устройства должен выполняться с последовательно подключенной нагрузкой (лампа накаливания 60 Вт) в цепи питания, чтобы исключить повреждения в случае ошибки при монтаже компонентов.
Трассировка платы:
Визуализация печатной платы:
Хочется добавить, что данная плата разрабатывалась с учетом современных реалий, здесь изменен форм-фактор микросхемы LNK306GN на SOP-7 в старой версии модуля используется тип корпуса DIP-7.
❯ Изготовление печатной платы
На тот момент, плата изготавливалась по канонам DIY, с помощью фоторезиста и фотошаблона. Но в настоящее время я пользуюсь для изготовления прототипов плат лазерным методом.
Активация фоторезиста с помощью фотошаблона:
Плата прототипа модуля после монтажа электронных компонентов:
❯ Разработка корпуса
Разработка корпуса устройства выполнялось в открытом ПОFreeCAD. Корпус довольно тривиальный и не содержит сложных элементов.
Визуализация корпуса с моделью платы:
Далее модель корпуса распечатывается на 3D принтере, в качестве материала печати используется HIPS пластик.
Устройство в собранном виде:
AirTag для сравнения габаритов устройства:
❯ Разработка прошивки и описание интерфейса
Разработка микро ПО устройства велась в средеArduino IDE, обновленная версия реализована на моей, ставшей уже базовой, прошивке для умный устройств. Для улучшения пользовательского опыта, в прошивке применены следующие технологии:
Captive portal;
Multicast DNS;
MQTT Auto Discovery;
SSDP.
Captive portal— это сервис, на который принудительно перенаправляется пользователь, который выполнил подключение к устройству. Данный сервис работает только в режиме «точки доступа» при первоначальной конфигурации устройства. При отсутствии сетевого соединения или при первоначальной настройке, устройство создает беспарольную точку доступа с именемCYBEREX-Light. При подключении к данной точке доступа, пользователь автоматически будет перенаправлен на страницу авторизации для выполнения первоначальной конфигурации устройства. Для конфигурации устройства необходимо ввести пароль по умолчанию "admin".
Ниже приведены несколько скриншотов веб интерфейса устройства.
Страница входа:
Главная страница с элементами управления:
Конфигурация обмена по MQTT протоколу:
Multicast DNS — данный сервис используется для поиска устройств по доменному имени в локальной сети без использования предварительно настроенного DNS сервера. Другими словами, пользователь может получать доступ к устройству без необходимости ввода IP адреса. Ниже пример использования данного сервиса, где доступ к устройству выполняется с помощью его локального имени 11395386.local.
Страница конфигурации управления устройством через API:
Как вы можете видеть на скриншоте, в устройстве реализован доступ управления каналами модуля по API. Данная функция необходима для прямого взаимодействия с устройством без посредников в виде MQTT сервера или системы «Умного дома». Эту функцию можно использовать для подключения беспроводных выключателей, пример реализации в одном из моих проектов:
Демонстрируемый беспроводной выключатель также реализован на ESP8266, в качестве элементов питания использует две батарейки формата ААА. Данный выключатель проработал уже три года на одних элементах питания, благодаря режиму DeepSleep.
А еще функция данного API применяется в моей «умной колонке» (статья первая,статья вторая) для управления освещением. Ниже пример кода для реализации прямого управления с помощью «умной колонки»:
tts.va_speak("Сожалею, но возникла ошибка, попробуйте позже!")
❯ Интеграция в «Умный дом»
Интеграция устройства в систему «Умного дома» реализована с помощью MQTT Auto Discovery. MQTT Auto Discovery— сервис, позволяющий максимально упростить интеграцию нашего устройства в систему «Умного дома». В моем случае, в качестве системы «умного дома», я использую Home Assistant, поэтому сервис MQTT Auto Discovery адаптирован именно под неё. Ниже код реализации MQTT Auto Discovery в микро ПО устройства:
После успешного подключения устройства к сети и настройки MQTT соединения, в «объектах» Home Assistant появятся объекты нашего устройства, пользователю останется только настроить карточку объектов на панели управления, чтобы иметь возможность управлять данным модулем. Ниже приведен пример кода карточки объектов:
Пример кода карточки объектов:
type: horizontal-stack
cards:
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: light.cl1
name: Свет 1
show_state: true
hold_action:
action: more-info
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: light.cl2
name: Свет 2
show_state: true
hold_action:
action: more-info
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: light.cl3
name: LED
show_state: true
hold_action:
action: more-info
В результате карточка объектов будет выглядеть следующим образом:
Осталось упомянуть о последнем сервисе SSDP. Чтобы как-то «повелевать» всем зоопарком моих умных устройств, был реализован данный сервис.
SSDP (Simple Service Discovery Protocol) — сетевой протокол, основанный на наборе протоколов Интернета, служащий для объявления и обнаружения сетевых сервисов. SSDP позволяет обнаруживать сервисы, не требуя специальных механизмов статической конфигурации или действий со стороны серверов, таких как DHCP или DNS. Для моего удобства, я написал мобильное приложение, которое позволяет в три нажатия обнаружить и сконфигурировать устройство без лишних хлопот и похода в роутер. Ниже представлены скриншоты приложения, ссылка на приложение будет размещена в конце статьи.
Приложение для поиска устройств в сети:
❯ Использование аппаратного выключателя
Дабы не исключать классическую схему управления освещением с помощью обычного выключателя, который обычно встраивается в стену, в устройстве также реализован вход (J5) для подключения аппаратного выключателя. Данное решение позволяет без дополнительных переделок интегрировать модуль в существующую систему освещения.
❯ Итоги
Ну что ж, давайте подведем итоги. В итоге у нас получилось простое, но эффективное и относительно компактное устройство для управления освещением, с возможностью работы как в автономном режиме, так и в составе «Умного дома». Данное устройство разрабатывалось, прежде всего, для управления светодиодным освещением, но примененные силовые симисторы позволяют коммутировать осветительную нагрузку до 300Вт на канал, без ощутимого нагрева силовых элементов.
На этом можно и завершить статью. Надеюсь, мой опыт будет вам полезен. Если у вас есть замечания, предложения или вы хотите поделиться подобным опытом, то добро пожаловать в комментарии! Если статья вам понравилась, то поддержите её стрелочной вверх. Всем добра, здоровья и спасибо за внимание!
Очередной пост, про мою ферму, да про сенсоры важные. Начну издалека и постараюсь простыми словами.
Зачем вообще мерить EC\TDS и температуру в питательном растворе?
Эти параметры показывают, насколько концентрирован наш раствор. А значит — хватает ли питания растениям или им через чур много и это не усвоится. Почему вообще на гидропонике все быстро растет? Потому что растениям не надо тратить силы и энергию на то, что бы искать все больше и больше ресурсов своей корневой системой и впитывать их из земли, а ещё кислород, его часто не хватает, именно поэтому часто советуют делать всякие подмесы в грунт для его "рыхлости", а в гидропонике мы выдаем все эти ресурсы сразу на блюдечке с голубой каемочкой и вот тут то главное правильно сервировать блюдо!
Нейроарт как вообще в гидропонике то все устроено.
→ Показывает, насколько хорошо раствор проводит ток. Измеряется в миллисименсах на сантиметр (мСм/см). Чем больше солей — тем выше проводимость.
Например:
Чистая вода: 0.0–0.05 мСм/см
Рассада салатов: 0.8–1.2 мСм/см
Клубника: 1.6–2.2 мСм/см
Помидоры: 2.0–3.5 мСм/см
Более того, на разных стадиях роста, растениям как правило нужна ещё и разная концентрация этих ваших удобрений. Вообщем то как и с любым организмом, в разные этапы жизни - жрут по разному, поэтому этот параметр важен и нужен.
EC - это стандарт индустрии, когда вы видите EC 1.0 или EC 1000, важно обратить на какое расстояние проводится измерение. Измеряют и в миллиметрах и в сантиметрах и в метрах. Это кому как удобнее и простыми арифметическими действиями переводится в нужное вам значение.
Параметр TDS.
TDS = Total Dissolved Solids → Количество растворённых солей в ppm (мг/л). Это лишь приблизительный расчёт из EC:
TDS ≈ 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;
Считывает аналоговое значение с 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 китайском, такой функции нет, поэтому финальное значение надо компенсировать ещё и температурой.
То есть фактически в растворе меньше солей, чем показывает прибор — из-за нагрева. Эта же формула подходит и к EC метрам без встроенной температурной компенсации.
Ну и соответственно, как вы понимаете уже, вместо текущей температуры, в ESP/Arduino и любых других системах, можно просто брать температуру с датчика DS18B20 например и подставлять напрямую в формулу и получать корректное значение EC/TDS.
В завершение. Естественно, вы можете вообще не парится, и заваривать раствор единожды с помощью ручного измерителя TDS\EC и будете правы. Это блажь и излишек. Но мне нравится такого рода автоматизации и упрощение своей жизни.
Как и говорил кто то в комментариях к предыдущему моему посту. -"начало гидропоники..."
И да. Реально. Начало было положено похоже с этого комментария. Долго пытался себя убедить, что это мне не нужно, достаточно моей минифермы, но идею не победить и не сломить. Я решился опять на самую сложную наверное из реализуемых систем - Аэропонику.
Аэропоника это система, где раствор подается в виде распыления на корни. Так же в ней вроде бы как есть корреляция между размером капли и скоростью и качеством роста растений. Об этом есть подробнейшая статья на хабре, которую если интересно можно с упоением прочесть. А я на этот раз без долгих вступлений перейду сразу к делу.
И так мои требования к аэропонике:
Не менее 15 растений (в основном салаты)
Что бы влезла в имеющийся стеллаж из говна и палок леруа. (тот который деревянный, как в IKEA)
Форсунки низкого или среднего давления до 6 бар.
Умная и автономная система, корректирование раствора по показателям PH, PPM(EC) в автоматическом режиме, для выбранных растений.
Освещенность по заданному времени.
Интеграция с Home Assistance.
Интеграция в существующую систему. (1 насос, 2 бака, разные растения и разные типы полива)
Основное питание всех систем отвечающих за самые необходимые функции должно быть 12 вольт.
Резерв управляющих программ непосредственно в самом контроллере (время полива, периоды)
Резерв самого контроллера путем добавления второй UNO общающийся по шине I2C с основной, которая "бэкапит" заданные параметры в себя, и если произойдет отключение мастера по той или иной причине - она уже управляла реле(клапана и насос) и осуществляла полив.
Возможность добавления UPS, для резервации питания.
Отображение на экране оффлайн всех параметров.
И так, цели были обозначены, в моей голове тогда это было возможно не так подробно и структурированно, но примерно были такие мысли. Что было закуплено:
Arduino Mega в связке с ESP8266 от RobotDyn.
Ещё 2 соленоида 12 вольт с выходами на 1\2.
Дождеватели\Туманообразователи на трубку 8\11мм
Контейнер
Трубка 8\11мм
Блок реле на 6 штук.
Датчик уровня влажности (для расширения показаний в моей почвенной ферме)
Термопара
Бак на 10 литров
2 контейнера для еды.
Субстрат пеностекло
Горшочки для выращивания в гидропонике 55мм.
Удобрения A+B двухкомпонентные
PH Up PH Down
TDS метр.
2 перистальтических насоса.
PH модуль для Arduino
TDS модуль для Arduino
Разъемы 3\4\5 пин, по типу авиационных с контровкой(какие были)
Стойки для плат, либо нашел в загашнике либо на барахолке купил по дешевке.
Болтики, и прочую муть либо была найдена, либо докуплена по необходимости в зеленом магазе.
Экраны ( но об этом чуть позже и почему так много.) (OLED, TFT LCD и наконец таки Nextion Intelligent 800*480 с емкостным сенсором)
Врезки, шланги, переходники.
Началось всё с прототипирования. Пару вечеров кодинга скетчей для Arduino и ESP. Что то взял из старого кода, что то пришлось запилить с нуля. И в итоге получил вот такую картину.
Состояние подключения на экране. Т.к. экран обновляется с определенной частотой, к сожалению на фото попал именно момент обновления.
Кружочки сверху - состояние реле, температура с термопары, датчики влажности почвы от S1 до S3 ( на тот момент ещё не было функционала отображения отключения датчика, а 100% это именно отключенный датчик). Скорость потока и уровень воды в емкости.
Все это весело переключалось раз в 10 секунд между "экранами" и отображало мне необходимую статистику. Я хотел сделать управление кнопочным или через энкодер, но что то в какой то момент, мне показалось это не столь удобным и я порывшись на озоне, нашел достаточно большую для моего проекта панель LCD TFT с резистивным сенсором, которая была по скидке. Ну и пошло поехало. Перепиливаем интерфейс, перепиливаем половину кода. Разбираемся с тем, как вообще работает это китайское чудо
Управление блоком реле. Отображение статуса. первые тесты.
Ну и собственно пока что, я остановился на этом дисплее. В данный момент времени, мне едет дисплей Nextion Intelligent, который я планирую вынести как отдельный модуль в удобное место, т.к. он подключается по 4 контактам и позволяет это сделать, тогда как текущая панель вообще является шилдом и контактов там ну проще сказать дохера. Причина по которой я решил сменить экран проста: медленное обновление(ооочень) и крайне тупой тач. И как бы одно дело, если бы я всегда обновлял при изменениях весь экран, но нет. Я обновляю и перерисовываю только то - что действительно изменилось. Тач я откалибровал и нажатия успешно считываются как ногтем, так и стилусом, но происходит это через раз, и выглядит как будто я попал в 2005 год все манипуляции. Вообщем мне такой вариант не понравился. Скоро будет обновление.
Как я и говорил в прошлом посте, связь с Home Assistance установлена посредством MQTT, да и остальная логика почти не изменилась. Добавился лишь небольшой функционал. Поэтому описывать принцип работы смысла особого не вижу.
Собственно собранное устройство, но в тот момент реле были в основном корпусе.
Включенное устройство.
Растишка салата
Небольшой видеообзор. (автор не блогер и не видеооператор, да и оратор так себе из меня, постарался вырезать эк бэк меки, но не везде)
В основном, вся автоматика работает хорошо, осталось только следить за раствором, температурой, как чусвствуют себя растения и мониторить обстановку. В теме аеропоники я не сильно спец, если тут есть такие - жду ваших советов, комментариев.
Интересный тепловизор для самостоятельной сборки в прозрачный акриловый корпус, в нем используется инфракрасный тепловой датчик AMG8833-8X8. Диапазон измерения температуры тепловизионной камеры от 0 до 80 градусов. ссылка на источник.
2) Пирометр
Набор для сборки прибора для измерения температуры на базе Arduino. Диапазон измерения температуры: -70 ℃ ~ 382,2 ℃. ссылка
3) Пушка Гаусса
Интересный набор для сборки и пайки Пушки Гаусса, одной из разновидностей электромагнитного ускорителя масс. ссылка
4) Музыкальный спектр
Набор для создания дисплея с музыкальным спектром. ссылка
5) EEG сенсор
Специальный набор для сборки датчика для измерения активности мозга. ссылка на источник
6) Генератор молний
Почти собрранный интересный генератор электрической дуги. ссылка
7) Музыкальная колонка
Набор для самостоятельной сборки и пайки мощной аудиоколонки. ссылка
8) Аппарат для точечной сварки
Комлпект для создания устройства точечной сварки. ссылка
9) Усилитель звука
Комлпект для сборки усилителя звука с 2 трубками. ссылка
10) Педаль Эффектов
Overdrive педаль эффектов для электрогитары. ссылка на источник
11) Электрогитара
Комлпект для сборки и пайки собственной гитары. ссылка
12) Регулятор мощности
Комплект для сборки платы питания с защитой от короткого замыкания. ссылка
13) Модуль HF и LF/MF
В основном используется для средневолновых и коротковолновых радиостанций. ссылка