# PDU - power distribution unit - умные розетки для шкафа

**URL:** <https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283>\
**Category:** 03. Проекты самохостят\
**Tags:** homelab\
**Created:** [26.Июнь.2025 15:41:45 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283 "2025-06-26T15:41:45Z")\
**Posts on this page:** 8\
**Page:** 3

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [16.Февраль.2026 14:16:29 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/41 "2026-02-16T14:16:29Z")

</div>

внезапно увидел на ебее упс вот в таком корпусе

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/8/82c7be6bffa1ed805af18c7850179c421daebf5f.jpeg)

и сразу подумалось, что это неплохой корпус для пду

можно так же воткнуть 2х цветные светодиоды или даже ргб со встроеным контроллером

 ![8FF4E83F070F84928525761F0048C8F7_MMAE_7VBHRH_misc_h_hi_1500](https://forum.samohosting.ru/uploads/default/original/2X/9/9d16ec9e775416f94bfb851c68f59b9fa4403667.jpeg)

есть уже дырка для сетевого порта

вторую дырку можно использовать для соединения по юарт со вторым блоком

---

<div class="post-metadata">

**Author:** ![ZHV](https://forum.samohosting.ru/letter_avatar_proxy/v4/letter/z/b5a626/32.png) [@ZHV](https://forum.samohosting.ru/u/ZHV)\
**Post date:** [16.Февраль.2026 20:01:29 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/42 "2026-02-16T20:01:29Z")

</div>

тоже интересуюсь подобной темой

для свой лабы я купил APC AP7921 и успокоился 😀, но для варианта DIY я давно придумал рецепт из готовых компонентов, который нигде на просторах интернета не встречал:

1. приобретаем KinCony контроллер, например [KC868-A8](https://www.kincony.com/arduino-esp32-8-channel-relay-module-kc868-a8.html) (8 встроенных реле):

 ![KC868-A8-1_03](https://forum.samohosting.ru/uploads/default/original/2X/3/3f0568c39c940401afc654ef50924e1b6ed46c7e.jpeg)

или вариант более продвинутый [T16M](https://www.kincony.com/esp32-tiny-smart-controller-t16m-16ch-mosfet.html) (16 mosfet, с более новым ESP32 на борту и в более симпатичном металлическом корпусе):

 ![T16M-2](https://forum.samohosting.ru/uploads/default/original/2X/3/3fe5a9a32fac924706c569b58929ef09aab1461f.jpeg)

+ [KC868-E8](https://www.kincony.com/kc868-e8-din-rail-relay-module-released.html) :

 ![kc868-e8-1_pix450](https://forum.samohosting.ru/uploads/default/original/2X/9/99c994de5c3f1af49295b79d9d441e75440fd94e.jpeg)

прошивку можно использовать заводскую или tasmota или esphome

контроллер обеспечивает нам связь по сети ethernet/wifi/RS485/modbus на ваше усмотрение. логику управления розетками - управление группами, таймеры/расписания, нотификации и мониторинг по SNMP или MQTT.

1. DIN рейка для 19” rack, ну или корпус под ваши индивидуальные условия

 ![dks9d1gh0e0ojz4k27ap21kpizz8c5xr](https://forum.samohosting.ru/uploads/default/original/2X/a/a59714b6ba10068dfae2db7caf32d4146928869c.jpeg)

+розетки на DIN:

 ![modular-socket-a9a15310](https://forum.samohosting.ru/uploads/default/original/2X/1/11bb489972bfe63ad85e30716ed5a57fc5a1420b.jpeg)

если у вас большие пиковые токи, то можно попробовать поставить реле Hongfa серии HF115F-S, с контактом с вольфрамовым покрытием, которые как говорят не “спекаются”

---

<div class="post-metadata">

**Author:** ![KRom](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/krom/32/362_2.png) [@KRom](https://forum.samohosting.ru/u/KRom)\
**Post date:** [16.Февраль.2026 22:19:40 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/43 "2026-02-16T22:19:40Z")

</div>

Напомнило

 ![image](https://forum.samohosting.ru/uploads/default/original/2X/e/e6a9b3ac7f6dcdd8dafa515ad6735a7c00790a13.jpeg)

---

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [17.Февраль.2026 00:38:41 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/44 "2026-02-17T00:38:41Z")

</div>

дин рейку под 19” я еще не видел 😆

но все это слишком дорого выходит, один контроллер 20 евров только стоит

розетки эти тоже 3.40 х 8 = 27

дин рейка 34

итого 80 евров где-то

---

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [18.Май.2026 11:59:43 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/45 "2026-05-18T11:59:43Z")

</div>

продолжаем тему про пду

внезапно, теме почти год, а еще ничего не сделано 🙀 😆

купил я еще 6 пду без выключателей о тдельных IBM PDU 97P6221

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/9/956ba171f4d58c6b1747bae7c80d3cc5ae8ed0c8.jpeg)

долго искал что-то подходящее и дешевое и вот купил за все с пересылкой отдал 45 евров где-то

одна такая штука весит порядка 4кг  
думал сделать такое из корпуса от свитча, но пилить его пришлось бы долго и покупать маленькую болгарку, так что охотился на такие вот готовые

решил сразу разобрать и выставить фотки

 ![IMG_20260518_130239](https://forum.samohosting.ru/uploads/default/original/2X/d/d2d2cab406a915c8f77ea1bffb84dc83b4cf2ad7.jpeg)

под железными крышками автоматы ампер на 10 наверное

 ![IMG_20260518_130212](https://forum.samohosting.ru/uploads/default/original/2X/e/ec6833ac079cde3c4a3e6e625718fc9601cbf150.jpeg)

2 розетки на 6 групп

 ![IMG_20260518_130304](https://forum.samohosting.ru/uploads/default/original/2X/1/19a8031f77b3dfd2cf496d71563161e73a25282f.jpeg)

 ![IMG_20260518_130220](https://forum.samohosting.ru/uploads/default/original/2X/2/26b1d4d73b1d6acb877791eb91d4087f89267815.jpeg)

на зеленых платах сделаны “блоки питания” для светодиодов, на варисторах съэкономили, хотя все сделано очень качественно - особенно провода обжаты, а не просто впаяны, что уменьшает механические поперечные нагрузки на пайку и уменьшает вероятность образования кольцевых трещин, а токи там по 10а на розетку, а это 2.3квт

 ![IMG_20260518_130216](https://forum.samohosting.ru/uploads/default/original/2X/9/9ca49689d5d8955561a988ccf5aa7c447cef040c.jpeg)

 ![IMG_20260518_130230](https://forum.samohosting.ru/uploads/default/original/2X/c/c8514bd7a9d4d39d36c1bb8c7acf7967b4488478.jpeg)

на круглый разъем идут провода толщиной чуть ли не с мой палец  
2 синих, 2 желто зеленых и по одному белый, коричневый и черный (3 фазы)

* * *

что я задумал с этими железками?

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

сначала я подумал сделать на микросхеме 555 генератор импульсов и 2 микросхемы регистров 595 + оптопары с переходом нуля и симисторы - это дало бы плавный пуск импульсных блоков питания, что всегда хорошо для диодного моста и конденсаторов, чтобы не было импульсных бросков и ток плавно нарастал

потом подумал, что слишком просто и тиристор можеть пробить, да и никто пду не делает на тиристорах

надо ставить хорошие реле, а одно реле стоит от 1.5 евров, а надо будет 72 штуки, а это порядка 130 евров, если брать омрон с прозрачным корпусом

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/d/d721aa9ef724821ef9acf66421494864d8403fd1.jpeg)

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

я тут я подумал еще раньше - зачем 555 таймер и 2 регистра, если можно взять контроллер с 12 выводами гпио? там легко делается задержка, надо будет только 2 микросхемы драйверов для реле, чтобы не паять кучу транзисторов и резисторов и защитных диодов (все это уже встроено)

и тут я вспомнил, что в регуляторах мощности на контроллерах есть схема детектора перехода на оптопаре

отсюда рождается алгоритм, когда мы детектим переход, зная частоту тока в 50гц, то мы знаем, что один полупериод длится 10мс

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/5/5b07d3e33c966b0242f9909e783a44216b41257c.jpeg)

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

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

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

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

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

* * *

сейчас я пока занят подсчетом стоимости переделки 6 пду и пересчет на единицу готового изделия

с реле очень дорого выходит + как оказалось нельзя сделать 10вт источник питания на 12в без трансформатора, только с дросселем

а 12 реле жрут порядка 6вт + нужен запас еще, итого 10вт надо

поэтому нужен блок питания на 12в 1а с трансформатором, а он еще стоит денег + надо городить еще фильтр от помех до и после, т.к. продается только сам модуль, а ему обвязка нужна

если бы все делалось на контроллере и симисторах, то там бы хватило маломощного источника и все вышло бы гораздо дешевле

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

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

я так описал данные для таблиц и связи между ними, чтобы ии сделал код для заполнения бд и это не пришлось бы делать вручную

такие дела 🥸

---

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [18.Май.2026 12:21:29 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/46 "2026-05-18T12:21:29Z")

</div>

по поводу детектора нуля

вчера я скормил гемини один документ

> прочитай [http://www.atmel.com/dyn/resources/prod\_documents/doc2508.pdf](http://www.atmel.com/dyn/resources/prod_documents/doc2508.pdf) и скажи, в чем смысл статьи и как там определяется переход напряжения через ноль? алгоритм программы объясни

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/9/98ccba362c1711b68d9d6100576930e784b1eaa3.png)

> Ссылка, которую вы указали, ведет на официальный документ компании Atmel (ныне Microchip) — **Application Note AVR182: Zero Cross Detector** (документ `doc2508.pdf`).
> 
> В этой статье описывается физический принцип работы схемы, смысл предложенного решения и алгоритм работы управляющей программы.
> 
> ### 1. В чем смысл статьи?
> 
> Основная цель статьи — показать, как реализовать **эффективный, надежный и максимально дешевый детектор перехода напряжения через ноль (Zero Cross Detector)** для сетей переменного тока (например, 220 В / 50 Гц) с использованием минимального количества внешних компонентов.
> 
> Вместо использования громоздких и дорогих внешних схем (трансформаторов, компараторов, транзисторов или оптопар) Atmel предлагает изящное инженерное решение: использовать **встроенные защитные диоды** самого микроконтроллера AVR (семейств ATtiny и ATmega) для ограничения высоковольтного сигнала до безопасного логического уровня.
> 
> > ⚠ **Важное предупреждение из статьи:** Данный метод **не имеет гальванической развязки** от сети 220 В. Земля микроконтроллера напрямую соединяется с силовой нейтралью, поэтому при отладке и эксплуатации устройства необходимо строго соблюдать технику безопасности: вся низковольтная часть схемы находится под опасным для жизни потенциалом.
> 
> * * *
> 
> ### 2. Как там определяется переход напряжения через ноль?
> 
> Определение происходит за счет взаимодействия простой аппаратной обвязки и внутренней структуры портов ввода-вывода AVR.
> 
> **Аппаратный принцип:**
> 
> Сетевая фаза (L) подключается напрямую к выводу внешнего прерывания микроконтроллера (например, `INT0`) через один большой ограничительный резистор номиналом **1 МОм**. Нейтраль (N) подключается к общему проводу схемы (GND).
> 
> **Физика процесса внутри микроконтроллера:**
> 
> 1. На каждом выводе микроконтроллера AVR установлены внутренние защитные кремниевые диоды (clamping/clipping diodes), предназначенные для защиты от электростатических разрядов (ESD). Один диод подключен анодом к пину и катодом к шине питания $V\_{CC}$, второй — анодом к земле GND и катодом к пину.
> 
> 2. Когда синусоида сетевого напряжения уходит в положительную полуволну и превышает уровень $V\_{CC} + 0.5\text{ В}$, открывается верхний защитный диод. Он «срезает» верхушку синусоиды, удерживая напряжение на пине на безопасном уровне около $V\_{CC} + 0.5\text{ В}$.
> 
> 3. Когда синусоида уходит в отрицательную полуволну (падает ниже $GND - 0.5\text{ В}$), открывается нижний диод, удерживая напряжение на уровне около $-0.5\text{ В}$.
> 
> 4. Резистор 1 МОм ограничивает ток через эти диоды до ничтожно малой величины (для 230 В ток равен примерно $230\text{ В} / 1\,000\,000\text{ Ом} \approx 0.23\text{ мА}$). Документация указывает, что встроенные диоды безопасно выдерживают постоянный ток до 1 мА, поэтому кристалл не повреждается.
> 
> **Преобразование в меандр:**
> 
> В результате высоковольтная синусоида на входе пина превращается в прямоугольный сигнал (меандр) с амплитудой от $-0.5\text{ В}$ до $V\_{CC} + 0.5\text{ В}$. Частота этого меандра в точности равна частоте сети (50 или 60 Гц).
> 
> Порог переключения цифрового входа микроконтроллера из состояния логического «0» в «1» находится примерно на уровне $V\_{CC}/2$.
> 
> - **Восходящий фронт** (rising edge) прямоугольного сигнала возникает чуть _после_ реального перехода сетевого напряжения через ноль.
> 
> - **Нисходящий фронт** (falling edge) возникает чуть _до_ реального перехода через ноль. Так как спад сигнала происходит непосредственно перед нулевой точкой, микроконтроллер ориентируется именно на нисходящий фронт прерывания, чтобы успеть среагировать точно в момент нуля.
> 
> * * *
> 
> ### 3. Алгоритм программы
> 
> Программа полностью построена на прерываниях (Interrupt Driven), что позволяет не загружать центральный процессор постоянным опросом пина в основном цикле.
> 
> **Этап 1: Инициализация**
> 
> - Настраивается порт ввода-вывода (пин прерывания `INT0` конфигурируется на вход).
> 
> - Настраивается внешнее прерывание `INT0` на срабатывание по **нисходящему фронту** (falling edge).
> 
> - Глобально разрешаются прерывания (`sei()`).
> 
> **Этап 2: Обработка прерывания (внутри ISR — Interrupt Service Routine)**
> 
> Когда напряжение сети падает и пересекает порог $V\_{CC}/2$, генерируется прерывание, и управление передается функции-обработчику:
> 
> 1. **Программный фильтр шума (дебаунсинг):** В электросети всегда присутствует большое количество импульсных помех и выбросов, которые могут вызвать ложные срабатывания. Чтобы защититься от этого, алгоритм выполняет быструю проверку:
> 
> 2. **Выполнение полезного действия:** Если фильтр подтвердил истинность перехода, выполняется целевое действие. В демонстрационном коде статьи микроконтроллер просто кратковременно выставляет высокий уровень на тестовом пине `PB0`, чтобы разработчик мог проверить точность работы детектора с помощью осциллографа. В реальных задачах в этот момент обычно запускается аппаратный таймер (например, для отсчета фазовой задержки при управлении яркостью лампы или оборотами двигателя через симистор).
> 
> 3. **Подготовка к следующему циклу:** Внешнее прерывание временно сбрасывается/очищается, чтобы избежать повторного дребезга, и микроконтроллер снова переходит в режим ожидания следующего спада сигнала.

ну и смысл был как раз в том, чтобы гемини накидал бы и код, чтобы 2 раза не ходить

> напиши алгоритм для atmega328, чтобы при обнаружении перехода какой нибудь вывод контроллера переходил в лог1, при следущем обнаружении перехода вывод переходил в лог0, используй прерывания.

> Для реализации этой задачи на микроконтроллере **ATmega328P** (который используется, например, в Arduino Uno) мы напишем программу на чистом Си (AVR-GCC).
> 
> В качестве входного пина для детектора выберем **PD2 (вывод `INT0`)**, так как он поддерживает аппаратные внешние прерывания. В качестве выходного пина, который будет менять свое состояние (ноль/единица), возьмем **PB0**.

```c
#include <avr/io.h>
#include <avr/interrupt.h>

#define DETECT_PIN PD2 // Вход детектора нуля (INT0)
#define OUTPUT_PIN PB0 // Выход, который будет переключаться

void init_system(void) {
    // 1. Настройка портов ввода-вывода
    DDRD &= ~(1 << DETECT_PIN); // PD2 на вход
    DDRB |= (1 << OUTPUT_PIN); // PB0 на выход
    PORTB &= ~(1 << OUTPUT_PIN); // Изначально на выходе логический 0

    // 2. Настройка внешнего прерывания INT0
    // Согласно апноуту AVR182, ловим нисходящий фронт (falling edge),
    // так как он наиболее точно предшествует переходу через ноль.
    // Для этого задаем биты ISC01 = 1, ISC00 = 0 в регистре EICRA.
    EICRA |= (1 << ISC01);
    EICRA &= ~(1 << ISC00);

    // 3. Разрешаем прерывание INT0
    EIMSK |= (1 << INT0);

    // 4. Глобально разрешаем прерывания
    sei();
}

// Обработчик прерывания INT0
ISR(INT0_vect) {
    unsigned char i;

    // Программный фильтр шума (дебаунсинг из AVR182)
    // Считываем состояние пина 5 раз подряд
    for (i = 0; i < 5; i++) {
        if (PIND & (1 << DETECT_PIN)) {
            // Если хотя бы раз проскочила "1" — это ложная помеха.
            // Немедленно выходим из прерывания, ничего не меняя.
            return; 
        }
    }

    // Если проверка пройдена — переход через ноль истинный.
    // Переключаем состояние пина PB0 на противоположное (Toggle)
    // Операция XOR (^) превратит 0 в 1, а 1 в 0.
    PORTB ^= (1 << OUTPUT_PIN);
}

int main(void) {
    init_system(); // Инициализация периферии

    while (1) {
        // Основной цикл пуст. 
        // Микроконтроллер может спать или выполнять другие задачи.
        // Вся логика работает аппаратно через прерывания.
    }
}

```

> Для реализации этой задачи на микроконтроллере **ATmega328P** (который используется, например, в Arduino Uno) мы напишем программу на чистом Си (AVR-GCC).
> 
> В качестве входного пина для детектора выберем **PD2 (вывод `INT0`)**, так как он поддерживает аппаратные внешние прерывания. В качестве выходного пина, который будет менять свое состояние (ноль/единица), возьмем **PB0**.
> 
> ### Код программы
> 
> C
> 
> ```auto
> #include <avr/io.h>
> #include <avr/interrupt.h>
> 
> #define DETECT_PIN PD2 // Вход детектора нуля (INT0)
> #define OUTPUT_PIN PB0 // Выход, который будет переключаться
> 
> void init_system(void) {
> // 1. Настройка портов ввода-вывода
> DDRD &= ~(1 << DETECT_PIN); // PD2 на вход
> DDRB |= (1 << OUTPUT_PIN); // PB0 на выход
> PORTB &= ~(1 << OUTPUT_PIN); // Изначально на выходе логический 0
> 
> // 2. Настройка внешнего прерывания INT0
> // Согласно апноуту AVR182, ловим нисходящий фронт (falling edge),
> // так как он наиболее точно предшествует переходу через ноль.
> // Для этого задаем биты ISC01 = 1, ISC00 = 0 в регистре EICRA.
> EICRA |= (1 << ISC01);
> EICRA &= ~(1 << ISC00);
> 
> // 3. Разрешаем прерывание INT0
> EIMSK |= (1 << INT0);
> 
> // 4. Глобально разрешаем прерывания
> sei();
> }
> 
> // Обработчик прерывания INT0
> ISR(INT0_vect) {
> unsigned char i;
> 
> // Программный фильтр шума (дебаунсинг из AVR182)
> // Считываем состояние пина 5 раз подряд
> for (i = 0; i < 5; i++) {
> if (PIND & (1 << DETECT_PIN)) {
> // Если хотя бы раз проскочила "1" — это ложная помеха.
> // Немедленно выходим из прерывания, ничего не меняя.
> return; 
> }
> }
> 
> // Если проверка пройдена — переход через ноль истинный.
> // Переключаем состояние пина PB0 на противоположное (Toggle)
> // Операция XOR (^) превратит 0 в 1, а 1 в 0.
> PORTB ^= (1 << OUTPUT_PIN);
> }
> 
> int main(void) {
> init_system(); // Инициализация периферии
> 
> while (1) {
> // Основной цикл пуст. 
> // Микроконтроллер может спать или выполнять другие задачи.
> // Вся логика работает аппаратно через прерывания.
> }
> }
> 
> ```
> 
> * * *
> 
> ### Как работает этот алгоритм?
> 
> 1. **Ожидание события:** Микроконтроллер спокойно выполняет код в цикле `while(1)` (в данном случае ничего не делает). В это время аппаратный модуль `INT0` следит за напряжением на пине `PD2`.
> 
> 2. **Фиксация спада:** Как только синусоида сети начинает пересекать ноль и уходить в отрицательную полуволну, напряжение на пине `PD2` падает ниже порогового. Аппаратный контроллер прерываний видит этот спад (нисходящий фронт) и мгновенно ставит основную программу “на паузу”, передавая управление функции `ISR(INT0_vect)`.
> 
> 3. **Фильтрация помех:** Первым делом в прерывании запускается быстрый цикл проверки. Сетевое напряжение «грязное», и в момент перехода через ноль могут быть микровсплески. Программа делает 5 сверхбыстрых проверок пина. Если на пине стабильный ноль — прерывание признается валидным.
> 
> 4. **Инверсия выхода (Toggle):** Строка `PORTB ^= (1 << OUTPUT_PIN);` выполняет побитовое исключающее ИЛИ (XOR).
> 
> 5. **Возврат:** Программа выходит из прерывания и возвращается к тому месту в `main`, где её прервали, ожидая следующего перехода через ноль.
> 
> > 💡 **Важный нюанс по частоте:** Поскольку данный алгоритм настроен на прерывание по _нисходящему фронту_ (falling edge), он срабатывает ровно **один раз за полный период** синусоиды (то есть на частоте 50 Гц прерывание будет вызываться 50 раз в секунду).
> > 
> > Если вам нужно, чтобы пин переключался **на каждой полуволне** (и в плюс, и в минус — то есть 100 раз в секунду при 50 Гц), измените настройку регистра `EICRA` на срабатывание по _любому изменению логического уровня_ (Any logical change):
> > 
> > `EICRA |= (1 << ISC00); EICRA &= ~(1 << ISC01);`
> > 
> > _(В этом случае программный фильтр шума из кода придется убрать или переписать, так как уровень на пине при прерывании будет каждый раз разным)._

я так сходу не ковырялся в регистрах контроллера по этой теме, но думаю все норм он сделал

надо будет как нибудь попробовать этот код, у меня завалялись трансформаторы 50гц

кстати 10вт 50гц трансформатор стоит в 10 раз дороже импульсного блока питания такой же мощности 🤦‍♂️

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

* * *

в результате дальнейших поисков и детального изучения детекторов перехода нуля я случайно наткнулся на готовую микросхему ETA5001 для этого

 ![grafik](https://forum.samohosting.ru/uploads/default/original/2X/1/11f146d23ff30b441d621fe181ee9615a03bdf93.png)

оказывается все давно придумано до нас  
стоит 5 центов всего

---

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [31.Май.2026 02:05:15 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/47 "2026-05-31T02:05:15Z")

</div>

осиливаю потихоньку новую прогу для рисования схем kicad, вот накидал базовую схему последовательного включения розеток

 ![image](https://forum.samohosting.ru/uploads/default/original/2X/7/77001b6ea5d2f760b7e08a394323a266db18db3b.png)

на оптопаре сделан детектор нуля + специальная микросхема (нарисовал ее символ и прилепил корпус)

есть китайский контроллер, пока еще не определился, к каким выводам какие реле подключать - это надо будет потом при разводке платы смотреть, какие выводы контроллера в каким вывода улн2003 ближе

всего будет 12 розеток

* * *

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

если у нас частота 50гц, то 1 период это 20мс, а максимальный пик напряжения составляет 1\4 от перехода через ноль и 3\4

причем судя по графигу на картинке из прошлого поста - микросхема срабатывает только на полном периоде, значит нам надо учитывать 2 пика

судя по даташиту срабатывание контактов происходит максимально через 15мс, что как раз попадает в пик синусоиды, если мы будем включать контакты прямо при срабатывании детектора нуля

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

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

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

 ![test2](https://forum.samohosting.ru/uploads/default/original/2X/e/ef01d692105f73f3bbb225979ca9c8c5fbb278a6.png)

нам надо сделать специальную вилку (тут изображены обычные розетки, а на пду специальные и там фазу с нулем не перепутать)

синий провод подключается к общему проводу на плате, для чего будет предусмотрен маленький “тестовый разъем” на 3 контакта, а коричневый провод подключается ко входу контроллера

основная вилка пду в сеть не включается, а ее фазный провод подключается к контакту +12в и туда собственно подается 12в от внешнего блока питания для работы реле и контроллера пду

таким макаром на девайсе нет 230в никаким образом и сильно много городить не надо в схеме

на плате будет еще кнопка теста и если ее зажать и подать 12в, то контроллер увидит на этотм выводе лог0 и прога запустится в режиме калибровки

далее втыкаем спец вилку в первую выходную розетку, нажимаем кнопку и реле замыкается и размыкается раз 10, среднее время записывается в первую ячейку памяти

перетыкаем вилку, жмем кнопку и так 12 раз

потом отключаем питание, вытаскиваем провода вилки из разъема и девайс готов к работе

* * *

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

теперь останется только специальный 3х контактный разъем - он замыкает землю 5в и 230в синим проводом, подает 12в для работы пду в целом через красный провод и через коричневый провод подает 12в (через ограничительный резистор на плате) на вход контроллера

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

**как работает?**

при нажатии на кнопку теста или прихода по юарт запускать теста и номера розетки - контроллер стартует _аппаратный таймер_ и тут же выставляется лог1 на выводе контроллера, который подключен к нужному реле

реле замыкает контакты, 12в подается на выходную розетку, через спец вилку по коричневому проводу поступает на вход контроллера, который улавливает изменение состояния вывода и определяет переход из 0 в 1, что вызывает прерывание, где останавливается _аппаратный таймер_

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

* * *

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

еще есть спецификация усб хид, но она вроде как не поддерживается официально и не запилена в браузерах

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

* * *

вот сейчас пишу и у меня в башке параллельно развивается идея целого тестировщика реле 😆

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

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

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

---

<div class="post-metadata">

**Author:** ![kalobyte](https://forum.samohosting.ru/user_avatar/forum.samohosting.ru/kalobyte/32/243_2.png) [@kalobyte](https://forum.samohosting.ru/u/kalobyte)\
**Post date:** [07.Июнь.2026 11:00:53 UTC](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/48 "2026-06-07T11:00:53Z")

</div>

при помощи ии я создал прогу для предварительного тестирования реле и описал это подробней в соседней теме

> [@мои AI картинки на тему IT юмора, самохостинга и типа того](https://forum.samohosting.ru/t/moi-ai-kartinki-na-temu-it-yumora-samohostinga-i-tipa-togo/2018/51):
>
> давно ничего тут не писал - изучаю пока еще ролики про клод для написания проги с комнатами и розетками пока что я сделал обновление в теме [PDU - power distribution unit - умные розетки для шкафа - #45 от пользователя kalobyte](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283/45) где я разрабатываю новые пду с последовательным включением всех розеток там я описал алгоритм и методику калибровки всех реле, а тут я напишу, как я это вчера сделал при помощи гемини, но пока еще в железе не тестил, а то стол завален барахлом и надо еще принтер доделат…

так же я боле менее разобрался с кикадом и дорисовал схему, но еще не до конца

 ![image](https://forum.samohosting.ru/uploads/default/original/2X/8/8c35bd98c4cb00330f48ccf3f9bebb45798c0f2e.png)

 ![image](https://forum.samohosting.ru/uploads/default/original/2X/7/71bc22532fe99ba9f243f60ac07f3646190cb14c.png)

вчера заказал деталья на 121 евру 🙀

[Предыдущая страница](https://forum.samohosting.ru/t/pdu-power-distribution-unit-umnye-rozetki-dlya-shkafa/283.md?page=2)
