Авторизация
Регистрация

Напомнить пароль

Сетевой фильтр Франкенштейна. Небольшой ремонт, обернувшийся большой переделкой

В один прекрасный день (а вернее ночь), у меня сломался сетевой фильтр. Как я это понял? Утро меня встретило отсутствием интернета и зарядки на телефоне. Тумблер на сетевом фильтре был включен, но рядом с ним зловеще тлел багровый индикатор перегрузки сети, а девайс при этом угрожающе потрескивал. Очевидно, ему пришел конец. Но 5 стадий принятия горя я проходить не стал, а просто воскресил несчастного с «небольшими усовершенствованиями». Подробнее об этом под катом.

Введение


Сначала поговорим о сетевых фильтрах в целом, и о моей модели в частности. Для чего они нужны? Очевидно, сетевой фильтр должен фильтровать помехи в сети. Фактически, современный вариант должен состоять из минимум двух блоков — варисторной защиты, подавляющий высоковольтные скачки напряжения и LC-фильтра, снижающего высокочастотные помехи от импульсных цепей современных топологий блоков питания.


Сам термин ничего кроме этого не означает, но язык — гибкая штука. Так что для краткости удлинители со встроенными фильтрами стали просто называть сетевыми фильтрами.


Но, повторяю, язык — гибкая штука. Так что когда маркетологи выкинули все дорогостоящие фильтрующие цепи из удлинителей, они продолжили называть это «сетевой фильтр», и даже прижилось.
Яркий образчик

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

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

Удлинитель Most HV6, который у меня сломался спустя более 10 лет эксплуатации, как раз имеет перечисленные ранее защитные цепи.


Все они умещаются на одной двуслойной плате.


Цепь защиты с реле аналоговая и работает на основе сравнение напряжения с помощью стабилитронов и биполярных транзисторов. Целиком кроме конденсаторов и реле расположена на нижней стороне платы. Питание осуществляется через диодный мост и сглаживающий конденсатор (развязки от сети нет). Для понижения напряжения используется smd-резистор. От нагрева дорожки около него пожелтели и вспучились. Но это не причина неисправности.


Сверху расположен LC-фильтр и варисторная защита.


Плата запитывается от двойного выключателя, так что в выключенном состоянии в розетках нет ни нуля, ни фазы (что похвально). Сами розетки реализованы в виде двух колодок (пластины сварены контактной сваркой) и заземления. Колодки фиксируются в пластике и припаяны к выводам платы.

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


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


Итак, что же в итоге неисправно? Да банально выключатель. Через него проходит вся нагрузка в сети, отчего со временем обгорает контакт. Все удлинители, от самых дешевых до премиальных не застрахованы от этой проблемы. В качестве временной меры я разобрал кнопку (нужно поддеть верхнюю часть отверткой) и зачистил контакты дремелем. После сборки лампочка цепи защиты снова зазеленела и удлинитель заработал. А я полез покупать новую кнопку на АлиЭкспресс.

Нехитрый ремонт - чистим контакты-качельки


Мне попалась вот такая «куласная» кнопка на 30 китайских Ампер. Она так же, как и оригинал, двойная, то есть отсекает фазу и ноль. Оставалось только дождаться приезда и запаять ее на место…

Эпилог


Но пока я ждал, мне пришло в голову, что я давно хотел себе «умный» удлинитель. Насколько он может быть умен? Современный умный удлинитель это устройство, способное удаленно, по расписанию, сценарию или в ручном режиме управлять подачей напряжения на розетки (в дешевых управляет всеми розетками только одновременно). Данная функция полезна для уменьшения износа аккумуляторов на зарядке (например, в смартфонах), может удаленно запускать компьютер, перезагружать роутер, управлять освещением и многое другое. Также существуют модели, оснащенные мониторингом энергопотребления. Думаю, пояснять его полезность излишне. И наконец, самые продвинутые мониторят перегрузки сети и имеют встроенную защиту.
Не реклама (реклама)

В моем удлинителе оказалось все необходимое для переделки в умный — много свободного места а также качественные компоненты и материалы корпуса. Такие до сих пор продаются по цене 1500 и выше! А ко всему еще и встроенная защита. Оставалось только впихнуть недостающие кишки… Кстати, что по ним?

Начало истории


Для отсечения напряжения используют симисторные цепи или реле. Последние чаще всего. Симисторы хороши тем, что позволяют не только включать-выключать, но и регулировать мощность от 0 до 100%. Кроме того, они бесшумны, а их ресурс значительно выше.


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


Для мониторинга напряжения я использовал аналоговые датчики ACS-712. Это датчики на основе эффекта Холла. Они измеряют токи, возникающие в проводнике перпендикулярно его сечению под воздействием магнитного поля.


Защитная цепь уже есть в фильтре, но я решил интегрировать ее в управляющий контур. Для этого вывод одного из транзисторов я через резисторный делитель отправил на вход микроконтроллера. В момент срабатывания защиты на нем появляется 18 вольт, так что, думаю, вопрос о необходимости делителя отпадает. При этом если его притянуть к земле, защита сбрасывается в рабочее состояние. Также нужно синхронизировать землю цепи с управляющим контуром. При работе с этой цепью важно понимать, что развязки от сети 220 в ней нет, а работа с высоким напряжением ОПАСНА ДЛЯ ЖИЗНИ. Так что не стоит забывать о технике безопасности.


Почему именно этот вывод? Не углубляясь в работу цепи так и не скажешь, а на это, пожалуй, уйдет еще статья. Так что просто исходим из логики «транзистор делает вкл-выкл», а мы делаем «дёрг-дёрг».

Итак, пора поговорить о схеме в целом. В качестве «мозга» устройства я избрал дешевый модуль ESP-12F. Он имеет 3.3В логику и 1В АЦП. Реле были выбраны дешевые китайские 5В модули, а датчик тока изначально планировался на 20А. Исходя из этого в схеме появляются некоторые особенности.


Первая — 5V реле напрямую не работают с 3.3V логикой. Но это были единственные компактные реле с обвязкой, которые влезали в корпус (и стоили 40 рублей/штука). Есть небольшая хитрость, которая способна подружить реле с микроконтроллером. Для этого нужно подключить светодиод последовательно входу реле. При этом на светодиоде падает пресловутые 1.7 вольт, которых не хватало, а реле наконец-то способно триггериться низким логическим уровнем МК. Поскольку он еще и зажигается при этом, то работает как индикатор. Так что я просто выпаял зеленые светодиоды из самого реле и подключил их по схеме:

Что касается датчика тока, он рассчитан на 5 вольт. При этом при нуле ампер он выдает 2.5В (он также определяет направление тока). Это сразу поднимет в потолок показания нашего АЦП (рассчитанного на 1В), так что для корректной работы необходим резисторный делитель 1:4 (2 к 8 для 10 кОм).

Примерно по тем же соображениям рассчитываем делитель для мониторинга защиты (16.7 к 83.3 для 100кОм).

Остается запитать от БП 5В со стабилизатором на 3.3(для МК) и все заработает!


Получив схему, я приступил к реализации проекта. Реле я купил локально, датчик тока у меня имелся, ESP-12F был небольшой пакетик, а БП в принципе валялось много в виде зарядок для телефонов. Также были извлечены силовые провода из старого компьютерного БП, а также по мелочи рассыпуха и низковольтные проводки.

Поехали!


Начнем с самого простого, но трудоемкого — блока управления розетками. У него простейшая схема и понятная логика управления, но придется попаять.

Выбираем колодку и разрезаем ее так, чтобы получить 6 отдельных — по одной на розетку. Делаем отверстия и паяем к ним провода от реле. Колодкам больше негде держаться, крепления слишком редкие. Ничего! Поправим 3д-печатными стойками, которые крепятся к оригинальным трением.


Теперь раскладываем реле и укладываем провода. Укладка немаловажна, поскольку силовые высоковольтные цепи необходимо надежно изолировать от управляющих контуров. Снизу кладем управляющую реле 6-канальную шину (у меня выполнена куском шлейфа IDE). На ней должны лежать провода питания реле 5В, белые потолще. Сверху лежат толстые провода 220 вольт, соединяющие все реле с одной стороны с сетью, а с другой с управляемыми розетками. Провода взял с толстыми жилами, от старого компьютерного БП.


Теперь в крышке наметим отверстия под светодиоды, а их подготовим, выведя длинными проводами и вклеив в отверстия.


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

Далее подключаем датчик тока ACS-712. В целом, ничего сложного нет, подводим питание 5 вольт и резисторный делитель. Я немного залил контакты термоклеем для надежности.


Для управления защитой я спаял нехитрый модуль, состоящий из подстроечника и NPN-транзистора. Заизолировал и влепил его рядом с датчиком тока, подключив к указанным выводам схемы защиты.

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


Перед пайкой МК в удлинитель лучше прошить ее сгенерированным по умолчанию кодом. Заходим в ESPHome Builer и ищем там зеленую кнопку «New device». Выбираем параметры платы и способ загрузки (bin-файл). Затем прошиваем в любой программе UART-загрузчика или попросту открыв хаб ESPHome. Можно использовать USB-TTL программатор или ардуино. Кнопки сброса и программирования я после прошивки выбросил.

Дополнительная информация


Для питания использовал БП 5В 1А от какого-то старого девайса. Его хватит с запасом.


Укладываем провода и дело остается за программой!

Имплантация личности


Прошивка, как и обновленное устройство, делится на 3 основные части (кроме конфигурации по умолчанию). Первая — розетки.
switch:
  - platform: gpio 
    pin: GPIO01 
    name: "PowerSocket #0" 
    id: relay_0 
 
  - platform: gpio 
    pin: GPIO03 
    name: "PowerSocket #1" 
    id: relay_1
  - platform: gpio
    pin: GPIO05
    name: "PowerSocket #2"
    id: relay_2

  - platform: gpio
    pin: GPIO04
    name: "PowerSocket #3"
    id: relay_3

  - platform: gpio
    pin: GPIO00
    name: "PowerSocket #4"
    id: relay_4
    
  - platform: gpio
    pin: GPIO02
    name: "PowerSocket #5"
    id: relay_5
Здесь ничего объяснять, думаю, не нужно. Вторая часть относится к защите.
output:
  - platform: gpio
    pin: GPIO15
    id: output1

button:
  - platform: output
    name: "Reset Protection"
    output: output1
    duration: 200ms    

binary_sensor:
  - platform: gpio
    pin: GPIO13
    name: "Overload Sensor"
Кнопка прижимает ресет защиты к земле на 200ms и может перезагружать защиту без щелканья тумблером. Сенсор перегрузки имеет два состояния — ошибка и норма.

Ну и наконец сенсор тока и мощности. Он сделан с использованием лямбды и кастомных компонентов, что намного сложнее всего, что описывалось ранее.
sensor:
  - platform: custom
    lambda: |-
      auto acs712_sensor = new ACS712Sensor();
      App.register_component(acs712_sensor);
      return {acs712_sensor->current_sensor, acs712_sensor->power_sensor};
    sensors:
    - name: "Amperes"
      unit_of_measurement: A
      accuracy_decimals: 2
    - name: "Watts"
      unit_of_measurement: W
      accuracy_decimals: 2
Дело в том, что расчет мощности в цепи переменного тока — задача нетривиальная. Для ее реализации нужно считывать несколько раз в секунду значения тока (на разных точках синусоиды) и усреднять их с применением цифровых фильтров. Для этого я подключил стороннюю библиотеку ACS712, а также руками закинул в директорию ESPHome модифицированный файл кастомного компонента. В конфигурации подключил их так:
esphome:
  name: smart-power-strip
  friendly_name: Smart power strip
  libraries:
    - https://github.com/RobTillaart/ACS712.git
  includes:
    - components/ACS/acs712_component.h
В ходе теста выяснилось, что библиотека почему-то показывает значения в 10 раз меньше нормальных (паяльная станция показывала 50 ватт вместо 500), причем линейно. В файле компонента я увеличил значения в 10 раз. Также выяснилось, что датчик на 20 ампер вообще не показывает ничего в диапазоне 0-1000 Вт. Пришлось заменить его на 5-амперный. Так максимальная показываемая мощность теперь стала 1100 Вт, но для фильтра для ПК и периферии этого достаточно. Для настройки под себя в файле нужно изменить строку инициализации. Конкретные значения можно узнать из гитхаба библиотеки.
acs712_component.h
#include "ACS712.h"

class ACS712Sensor : public PollingComponent {
   public:
    ACS712 *ACS = new ACS712(A0, 1.0, 1023, 185); //Параметры инициализации для ACS712 5А и ESP12
    Sensor *current_sensor = new Sensor();
    Sensor *power_sensor = new Sensor();

    ACS712Sensor() : PollingComponent(15000) {}

    void setup() override {
        ACS->autoMidPoint();
        ESP_LOGD("acs712", "MidPoint: %d", ACS->getMidPoint());
        ACS->setNoisemV(43);
        ESP_LOGD("acs712", "Noise mV: %d", ACS->getNoisemV());
    }

    void update() override {
        float average = 0;
        //uint32_t start = millis();
        int count = 5;
        for (int i = 0; i < count; i++) {
            average += ACS->mA_AC();
        }
        float amps = average / count / 1000.0;
        // float mA = ACS.mA_AC(50,10);
        //uint32_t duration = millis() - start;

        //ESP_LOGD("acs712", "Time: %d A: ", duration, amps);

        current_sensor->publish_state(amps*10); //увеличил в 10 раз
        power_sensor->publish_state(amps * 2200); //увеличил в 10 раз
    }
};

Чтобы закинуть файл компонента в HomeAssistant, надо использовать файловый сервер. Я использовал дополнение Samba-share (гайд по использованию). Закинуть нужно сюда:


После этого компонент должен без ошибок быть виден конфигурации ESPHome. Полный код компонента прилагаю.
Дополнительная информация
esphome:
  name: smart-power-strip
  friendly_name: Smart power strip
  libraries:
    - https://github.com/RobTillaart/ACS712.git
  includes:
    - components/ACS/acs712_component.h


esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

captive_portal:

switch:
  - platform: gpio 
    pin: GPIO01 
    name: "PowerSocket #0" 
    id: relay_0 
 
  - platform: gpio 
    pin: GPIO03 
    name: "PowerSocket #1" 
    id: relay_1
  - platform: gpio
    pin: GPIO05
    name: "PowerSocket #2"
    id: relay_2

  - platform: gpio
    pin: GPIO04
    name: "PowerSocket #3"
    id: relay_3

  - platform: gpio
    pin: GPIO00
    name: "PowerSocket #4"
    id: relay_4
    
  - platform: gpio
    pin: GPIO02
    name: "PowerSocket #5"
    id: relay_5

output:
  - platform: gpio
    pin: GPIO15
    id: output1

button:
  - platform: output
    name: "Reset Protection"
    output: output1
    duration: 200ms    

binary_sensor:
  - platform: gpio
    pin: GPIO13
    name: "Overload Sensor"

sensor:
  - platform: custom
    lambda: |-
      auto acs712_sensor = new ACS712Sensor();
      App.register_component(acs712_sensor);
      return {acs712_sensor->current_sensor, acs712_sensor->power_sensor};
    sensors:
    - name: "Amperes"
      unit_of_measurement: A
      accuracy_decimals: 2
    - name: "Watts"
      unit_of_measurement: W
      accuracy_decimals: 2
    

Теперь, когда конфигурация завершена, можно добавить автоматизации. Вот эти для зарядки гаджетов только в ночное время. У меня есть набор запасных устройств — повербанки, колонки, наушники и т.д. От постоянного стояния на зарядке аккумуляторы портятся. Поэтому если настроить режим прерывания, то это позволит сэкономить электроэнергию и ресурс батарей. Если бы это был аквариум, думаю, принцип был бы такой же.
Дополнительная информация
automation:
  - alias: "Turn off PowerSocket after print finishes"
    trigger:
      platform: state
      entity_id: binary_sensor.klipper_printer_state  # или ваша сущность, которая отслеживает состояние
      to: 'idle'  # или состояние, которое обозначает завершение печати
    action:
      service: switch.turn_off
      target:
        entity_id: switch.powersocket_1  # Идентификатор вашей розетки

Также можно автоматизировать выключение 3д принтера после завершения печати, если он управляется klipper или octoprint.
Дополнительная информация
automation:
  - alias: "Turn off PowerSocket after print finishes"
    trigger:
      platform: state
      entity_id: binary_sensor.klipper_printer_state  # или ваша сущность, которая отслеживает состояние
      to: 'idle'  # или состояние, которое обозначает завершение печати
    action:
      service: switch.turn_off
      target:
        entity_id: switch.powersocket_1  # Идентификатор вашей розетки

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

Для того, чтобы перезагрузить роутер, текущего кода для розеток мало, ведь роутер раздает через сеть команды, а выключив его удаленно, мы сразу потеряем соединение. Поэтому в программу розетки добавим скрипт и кнопку. По нажатию скрипт перезагрузит роутер, и удлинитель сразу подключится к нему снова.
Дополнительная информация
script:
script:
  - id: reboot_router
    then:
      - switch.turn_off: relay_0
      - delay: 10s  # Подождать 10 секунд (выключение роутера)
      - switch.turn_on: relay_0
      - delay: 5s  # Подождать 5 секунд (включение роутера)

button:
  - platform: template
    name: "Reboot Router"
    icon: mdi:restart
    turn_on:
      service: script.reboot_router  # Это запускает скрипт в ESPHome

Пока что, думаю, довольно примеров. В целом, я доволен получившимся результатом и бюджетом проекта.
  • Реле — 40руб. x6
  • Esp8266 — 86руб x1
  • ACS-712 5A — 80руб. x1
  • Кнопка (починка) — 56руб. x1
Итого: 462руб.

Остальное было в наличии. Учитывая, что самый хиленький умный удлинитель стоит около 1000 (а в нем особо ничего нет), считаю, что вариант переделки более чем оправдан, особенно в случае качественного сетевого фильтра, взятого за основу. Единственное, что я не рассчитал, эту логику индикации реле: когда устанавливал, мне казалось логичным, что загорается либо красный, либо зеленый. Но по итогу оказалось, что красные горят все время. Но это даже как-то празднично выглядит…


Ну а ваши мысли по этому поводу буду рад услышать в комментариях. Поздравляю всех со Старым Новым Годом!
Добавить в избранное
+36 +47
свернутьразвернуть
Комментарии (17)
RSS
+
avatar
+7
Шикарное месиво, работает и ладно, но как-то стремно выглядит)
+
avatar
+7
Если бы делал с нуля, вышло бы поаккуратнее. Но жаль было выбрасывать такой качественный корпус, тем более кишки влезли без проблем
+
avatar
+2
  • drejana
  • 14 января 2025, 22:27
на одной двуслойной плате
плата однослойная, монтаж компонентов двусторонний
+
avatar
0
Плата двуслойная! Оценивается по количеству слоев с печатными проводниками. Раз они на обеих сторонах, значит слоев два.
+
avatar
-5
  • redcap
  • 14 января 2025, 22:28
+
avatar
+13
  • cofein
  • 15 января 2025, 00:12
Ну не 24/7 же работать. Иногда время для хобби есть, чем и занялся автор
+
avatar
+6
«Время, потерянное с удовольствием, не считается потерянным» Джон Леннон.
+
avatar
+1
  • Kroock
  • 14 января 2025, 22:32
подскажите, где брали по таким ценам?:
Esp8266 — 86руб x1
ACS-712 5A — 80руб. x1
+
avatar
+1
  • EEhd
  • 14 января 2025, 23:00
Дедовские запасы.)
Я, Esp03 с 512кБайтами памяти купленной еще в год анонса, применил спустя 5 лет для WLED. Сейчас использую ESP32, хотя уже пора переходить на ESP32-S3/C3
+
avatar
+3
Прочитал с удовольствием. Автору однозначно плюс!
Если кому надо, то есть и готовые варианты.
+
avatar
+3
  • maxik
  • 14 января 2025, 23:42
Ещё и гирлянда получилась.
+
avatar
+2
  • wasp
  • 15 января 2025, 00:43
По доброму завидую человеку, который может все это сам.
+
avatar
+5
  • nsn
  • 15 января 2025, 00:55
Интересно, что туда такое люди втыкают, что а) скучковано в одном месте; б) требует удалённого управления. Для себя я и одно-то с трудом могу придумать, не то что шесть.
+
avatar
0
  • leonbk
  • 15 января 2025, 06:55
У меня за телеком в удлинитель подключено: телек, роутер, андроид приставка, домашний кинотеатр, усилитель звука, приставка для караоке,
В ближайшем будущем придется туда еще подключить сервер с хоум ассистентом.
Приходится вставлять удлинитель в удлинитель, что бы розеток добавить.
Правда удаленного управления на этом участке мне особо не надо.
+
avatar
+3
Мдя… когда коту делать нечего…
+
avatar
+1
  • Stils
  • 15 января 2025, 06:48
Это конечно здорово но не мой уровень к сожалению.
Есть простые статьи по доработке сетевых фильтров? Типа вот сюда варистор допаять, а вот суда конденсатор…
+
avatar
0
Комментарий ожидает проверки администрацией сайта. Подробнее...
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.