Зачем всё это (или как я три года таскал идею в голове)

Доброго времени суток. Идея «родилась» в голове больше 3-х лет назад, но «то ли лыжи не едут, то ли я молодец».

У меня стоит «Фильтр ПРОФИ Осмо 100 М с насосом» в самом начале (когда было интересно) меняли фильтры по значению TDS была штучка от Xiaomi, потом потерялась. Потом меняли раз в полгода, ну а сейчас меняем по «вкусу», который увеличил срок до раза в год. Так же в самом начале приобретения фильтра, а это 8–7 лет назад +/‑ рассматривал к покупке «Индикатор ресурса БАРЬЕР для проточных фильтров» но тогда цена сильно кусалась, да и в наличии ни где не было. Сейчас ситуация не изменилась, их все также нет, а ценник в 3 раза дороже стал. И вот мы плавно переходим в DIY.

Так вот центральным игрок тут у нас датчик YF‑S201. Изначально план был банально прост: Arduino NANO на ATMEGA328P и 6 светодиодов, которые меняют яркость по мере уменьшения ресурса, а по истечению моргают. Мысль пришла, зафиксировалась ну и на этом я остановился на 3 года. (Кстати только сейчас подумал, а может такие проекты уже есть/были, а я и не «гуглил», но да ладно) Время шло, я подружился с «семейством» ESP32, с адресными лентами, потыкал библиотеку Settings от AlexGyver (Да и вообще можно сказать он это устройство и сделал, так как почти все библиотеки от него, от меня только задумка и пару лишних строк кода, а ну и корпус на 3D принтере).

Железо и корпус

Недалёкое прошлое, когда я вновь поменял все 6 ступеней на фильтре, и вновь встал вопрос их ресурса. Можно было бы собрать собственное устройство под свои нужды по схеме 3-х летней давности, но возникла мысль «Эй парень, какая ATMEGA328P в 2026». И вот на сцену вышла ESP32-C3 SuperMini, кусок ленты с 6 светодиодов, датчик YF‑S201 пару резисторов, чутка проводов и погружение в код. Первым делом собрал схему, поднял прерывания, вывел счёт в порт. Дунул в датчик — импульсы пошли, можно ехать дальше. Дальше в ход пошла Settings, сначала поднял финальное «окно». (Отдельно хочу отметить, как же удобно прошивать плату по воздуху в этой библиотеке, огромная экономия времени и сил, это сильно упрощает разработку, особенно если плата уже «Часть команды — часть корабля!») Далее был написан «обработчик» сброса фильтра, и на этом этапе, можно сказать, устройство для меня было готово. Но тут голос в голове «а может такая корова нужна кому‑то еще» и тут стали возникать резонные вопросы, а как люди будут настраивать, а если у них не 6 ступеней, а 3, а если другие ресурсы на картриджах, это же нужно лезть в код, а если кто‑то не сообразит и так далее.

В самом начале практически сразу решил отказаться от разведения и травления печатной платы (можно было и такое конечно, но сейчас вероятность встретить дома 3D принтер или у знакомого выше, чем найти/купить:

— термотрансферная бумага

— омедненный текстолит

— что‑то сверлящее что зажмет сверло 0,8 мм

— болгарка или ножовка по металлу

— жена, которая разрешит взять её любимый утюг,

— немного химии для самого травления)

Таквот у меня печатная плата из PLA+ пластика, (думаю сам DIY “офигел” от такого) распечатанная с канавками, куда вставляется куски зачищенного провода от витой пары, вставляются все 2,54 разъемы и пару капель припоя с обратной стороны, удивительно но это работает, и я бы сказал отлично, особенно в единственном экземпляре и для себя, чем все выше упомянутое.

Собрался с мыслями и силами и начался процесс создания первоначального меню настройки, задача была проста, (а вышло это или нет, «судьи» в студию) прошил (не залезая в код от слова вообще) → включил и все, далее интуитивно все понятно. Постарался, и вроде, сделал, ну а «судьи» поправят.

И вот на свет рождается первая плата, за ней вторая и третья, и финальная (Может не презентабельно, но работает, и все можно заменить, не люблю когда все жестко припаяно «насмерть» вдруг разбирать нужно будет):

Фото платы с «компонентами»
Фото «устройства»
Торец 1 (да можно было лучше)
Торец 1 (да можно было лучше)
Торец 2 (и тут)
Торец 2 (и тут)
Брусок спереди
Брусок спереди
Ну и все кое как в корпусе
Ну и все кое как в корпусе
Установленная лента под прижимной пластиной
Установленная лента под прижимной пластиной
Все компоненты, а так же тот длинный кусок ленты.
Все компоненты, а так же тот длинный кусок ленты.
Тут видно ячейки под ленту, чтобы цвета на ленте не смешивались. Тут же видно выступы которые не позволяют датчику потока воды "ездить" в корпус.
Тут видно ячейки под ленту, чтобы цвета на ленте не смешивались. Тут же видно выступы которые не позволяют датчику потока воды «ездить» в корпус.
Фото интерфейса
Жизнь под мойкой

Было ли сложно или что там по коду?

Если рассматривать устройство как «для себя» то все чудно было через буквально час времени. Но когда встал вопрос, что возможно кто‑то будет пользоваться, тут прям началась боль (Т_Т)

  1. Изначально хотел чтобы была дата установки фильтра, зачем? Да хз. Если использовать стандартный виджет библиотеки, во первых он почему‑то выводит мм.дд.гггг. (либо это, лыжи, ну Вы поняли) и он «кликабельный» то есть можно выбрать дату из под вебморды что ломало мою задумку, мне нужная дата как «лейбл» и дд.мм.гггг. Пф... где‑то в библиотеке прочел что они может брать дату из браузера, также узнал, что дату выводит «встроенная» библиотека" от все того же AlexGyver ну и тут входит в дело костыли решение поставленной задачи, пришлось заранее создавать объекты, передать по указателю в структуру, ну и создавать массив по адресу (очень интересно, но ни чего не понятно). Решено.

  2. Но, а если будет не 6 фильтров или другие ресурсы/название, тут все просто. Просто сделал «меню» настройки. Решено.

  3. Калибровка из под «вебморды» тоже достаточно просто, так как для себя делал бы это в коде, но соглашусь так проще/интереснее. Решено.

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

  5. Ну а вот тут «финальный босс». Нет я не знаю, зачем и почему. Но сколько же ушло часов «человекомыслия» на решения того, что вероятно встретится 1/10000000 когда человек заходит на «вебморду» и прямо в этот момент, он или кто‑то открывает кран, и происходит «перерасход» в реальном времени... (рука‑лицо) У меня то браузер не обновлялся (сразу автоматически), то заливка не менялась на красный, то менялась, но не во время, то надпись не менялась. Но «Терпение и труд всё перетрут». (Больной человек, что с него взять) Решено.

  6. Чтобы я бахнул еще? «Можно, но зачем?» 1) Регулировка яркости диодов из под «вебморды» 2) Вкл/выкл оных из под «вебморды» 3) Вероятно выключение их (диодов) по таймеру и включение при потоке воды (открытие крана)

Подводные камни (или FAQ скептика)

Минусы? Пф.. запросто! А вагон и тележку всегда помогут знающие и комментаторы, за Вами сила!

  1. «Друг, а ты где видел розетку под раковиной, ты в своем уме?» Питается от USB Type‑C, а значит нужная розетка под раковиной, у меня фильтр с насосом, как упоминал выше, с этим проблем нету. (Замечу эта штука НЕ будет работать с обратным ОСМОС’ом БЕЗ гидроаккумулятора, об этом ниже) Можно ли было от батареек или от «сосиски» 18650? «Можно, но зачем?» Настраивать глубокий сон, думать что‑нибудь с уведомлением о разряде, да и хотелось выкидывать мусор и видеть реальный остаток на светодиодах. Да и как же вебморда? В общем от USB и все!)

  2. «Друг у тебя датчик стоит в разрыве от бака к крану, а я знаю, что фильтр обратного осмосе сбрасывает часть воды в канализацию, значит твой учет не верен! Сжечь ведьму!» Спасибо, знаю. Я просто забил, это раз, во‑вторых почему в фильтрах обратного осмоса есть бак для воды, только потому, что он ОЧЕНЬ медленный от 0,1 до 0,3 литра в минуту, датчик YF‑S201 даже не поймет что его «обворовали», Так же нужно учитывать что ступени 1–3 ресурс от 12к до 20к литров, в то время как верхние фильтры 4–6 ресурсы от 1к до 5к литров, да и первые стоят копейки, а последние прилично, их мы и «ловим». Ну а те, у кого просто 3 ступени, проточный, для них разницы нету. (Кстати Вы в курсе, что желательно ставить «барашковый» кран на подачу, НЕ шаровой, (он со временем тупо «протрется» и не будет держать на закрытую) чтобы отрегулировать поток согласно заявленной скорости производителя л/м ибо она всегда намного выше и фильтры не «успевают» или теряют ресурс, да и вообще я в этом не разбираюсь)

  3. «Друг мне кажется, что это не корпус, если это вообще можно назвать корпусом, а кирпич… И ты что, не мог утопить USB в корпус. ДЕРВНЯ!!!» Да, к сожалению датчик YF‑S201 большой, тем более с 2-мя переходниками с 1/4" — 1/2" да и кусок ленты был с 60 диодами на метр, а это прям длинный кусок вышел. Когда‑нибудь закажу 144 на метр и переделаю.

  4. «Друг, а ты вообще смотрел всю спецификацию библиотеки Settings? Где моя статистика потребления воды за сутки/неделю/месяц? Где графики и так далее? Ты вообще старался и в потолок плевал?» Да все это можно, но излишне для подобного устройства.

  5. «Друг, ты сейчас нам что‑то загоняешь про ESP32, а где поддержка Home Assistant, где голосовая интеграция с УДЯ, да и почему у тебя нету банального бота в телеге для уведомлений через интернет?» Ну тут я соглашусь, что‑то из этого интересное, но мои познания в «программирование» скудны, заниматься изучением всего вышеперечисленного может быть когда‑нибудь, просто на это уходит очень много времени, а семья все же на первом месте. Что до нынче модного вайб‑кодинга, он не укладывается в «кодекс самурая». Использовал ли я ИИ в написании кода? Да. Весь код написан ИИ? Нет. В данном случае ИИ был исключительно как инструмент в роли учебника или «учителя»: как, зачем, почему, что за «&», почему тут «::», как тут вышло это, что тут имя собственное, а что метод и так далее. Поэтому 95% всего кода было написано саморучно с полным осознанием (а может бессознательным) того зачем я это пишу, для чего и куда это ведет. В связи с этим, вероятно есть мертвые переменные, не логические действия, дублирование логики и так далее. Так как DIY и программирование в данном случае для меня — хобби, и один из способов не получить «немца любовника» на старости по имени «Альцгеймер» или его друга деменции.

  6. «Дружище, я перешел по ссылке на GitHub, а где всё: схема, где все *.stl файлы для 3D печати, где ссылки на все комплектующие, ты вообще хоть раз видел, как оформляются НОРМАЛЬНЫЕ проекты?» Да, да и да. На это нужно время, а его крайне мало последнее время (тавтология, но, а куда без нее?) Если наберется хотя бы 10 заинтересованных, найду его (время) и выложу. И как писал выше, закажу ленту на 144 диода и переделаю корпус на более «современны», и, да утоплю панель USB внутрь корпуса, это самому не нравится, но кому это важно под мойкой?))) Даже можно рассмотреть вариант реализации «не ходовых» позиций через «Авито» (правда на это нужно будет еще время, чтобы то купить и сделать некий «хаб» безделушек), чтобы не по купать каждому метр ленты, 10 коннекторов USB, 100 винтов и так далее чтобы проект не вырастал в стоимости и терял DIY выгоду.

Итог

— Устройство работает 3 недели, ресурсы вижу на ленте под мойкой и в браузере (по желанию остаток в литрах), надеюсь фильтры буду менять вовремя (впервые за 8 лет — не по «вкусу»).

— Код, схема подключения и еще чего‑то, чего нету тут: https://github.com/TheSith05/TS_OSMO

— STL корпуса и ссылки на комплектующие — если будет интерес в комментариях, у меня интерес их читать xD

P. S. Это мой первый пост на habr’е, да и вообще в интернете, сильно не пинать, если понравится, то прокачаю «скил». Если с малой вероятностью «это» зайдет, то у меня еще на «полке» есть «контроллер» управления чиллером (охлаждение) и автоматическое увлажнение террариума для паука. Все это с кодом + корпуса.

P. S.S. Ну так вот, как и писал в начале «то ли лыжи не едут, то ли я молодец» понимание/подача/объяснение и так далее у каждого свои и уникальные (кто‑то объясняет и при этом сам не понимает, что объясняет, кто‑то уже хорошо понимает и объясняет как понял, он не раскрывая сути и так далее. Все туторуалы типа создаем переменную типа бла бла, вызываем функцию, передаем переменные, пишем serial видим все в консоли. Какая функция, что я должен кому передать, зачем, почему? Или если вы создадите переменные такие и такие, и передадите им такие и такие значения тут будет ошибка, тут ошибка, а тут все ок. Чем эта переменная отличается от этой, почему эта val и val_1, а эта str), но за все это время я не нашел тот источник, который бы использовал постоянно и там мне было все понятно. Базу я «накапливал» годами и понимаю, что объяснил бы все иначе, от чего мне в самом начале было бы легче! В связи с этим мог бы попробовать в постах изложить материал так, как он понятен мне (вероятно только одному), но что‑то мне подсказывает, что тут все «батьки» и это никому не нужно.

Автор статьи: я.

Главный редактор: жена, которая была не против предоставить утюг.

Всех обнял, хоть обниматься и не люблю (^_^)

Комментарии (4)


  1. GoblinHero
    21.09.2026 12:10

    фильтры буду менять вовремя

    О... вот только что считать "вовремя"... Поехали:

    1. Минерализатор. Если есть - просто выкиньте его как бесполезную хрень.

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

    3. Мембрана. По моему многолетнему опыту мембрану пора менять когда она забивается и начинает фильтровать ну очень медленно. Лет на 5 (мне и родителям) хватает её точно. Тут счетчик не поможет. Ну и за TDS надо следить в моменты замены фильтров на всякий случай.

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

    5. Механические префильтры - тут все зависит от качества воды, я меняю их сразу все с угольным префильтром. Но если вода ппц, то первый надо менять почаще.

    Раз в 6 месяцев меняю 3 префильтра, раз в год - угольный постфильтр, мембрану по мере её забивания. Запись в планировщике отлично заменяет счетчик расхода :)


    1. nafikovr
      21.09.2026 12:10

      Запись в планировщике отлично заменяет счетчик расхода

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


  1. sav13
    21.09.2026 12:10

    А разве ресурс мембраны осмоса не зависит от качества входной воды?

    Столько усилий ради обычного расходомера с невнятной индикацией. Вполне можно было вычислить среднемесячное месячное потребление питьевой воды (вряд ли оно сильно скачет) и подкорректировать замену раз в под-года на раз в X месяцев.

    Вот если бы pH метр поставили в реальном времени!


    1. GoblinHero
      21.09.2026 12:10

      разве ресурс мембраны осмоса не зависит от качества входной воды

      Зависит. И причем очень сложно. Мембрану портят жесткость воды и свободный хлор. С жесткостью ничего не поделаешь, а вот угольный префильтр лучше менять вовремя. С другой стороны, мембрана сейчас стоит как полтора угольных фильтра, так что можно менять её часто без особого ущерба карману.

      Вот если бы pH метр поставили в реальном времени!

      Кстати да, от этого есть хоть какая-то польза - можно будет отследить с что с фильтром что-то не так. На алике вроде есть недорогие.