Пока реле лежало рядом с платой, сбой случался раз в день. Стоило убрать всё в корпус — каждые три-четыре переключения. Поначалу я зря смотрел в сторону обработчика кнопок.

На линии 3,3 В коротким земляным пружинным контактом увидел провал примерно до 2,9 В. Длинный провод земли щупа давал совсем другую картину. Катушка возвращала ток через узкий участок рядом со стабилизатором.
Проверка на столе
Разрезал дорожку, провёл возврат отдельным проводом к входной ёмкости и повторил серию из 500 переключений. Перезапусков не было. В ревизии 2 этот провод стал широкой дорожкой, а у разъёма появился электролит 470 мкФ. Лечение прошивкой отложил в ящик с плохими идеями.
Как я отделил питание от программы
Сначала заменил обработчик кнопки на переключение по таймеру с периодом две секунды. Сбой остался. Затем отключил катушки, оставив светодиоды на выходах драйверов, — счётчик запусков перестал расти. Это ещё не доказывало причину, но позволило убрать из подозреваемых вход кнопки и его провод.
Следующим шагом запитал катушку отдельно, сохранив общую точку у входного разъёма. На экране снова появилась спокойная линия 3,3 В. Важным оказался именно путь возвратного тока: просто поставить рядом ещё один конденсатор было недостаточно. Электролит помогал пережить часть переключений, но не лечил узкую общую дорожку.
Что записал перед заказом новой платы
- Разнести возврат катушек и возврат стабилизатора до входной ёмкости.
- Оставить площадки для измерения 12 В, 5 В и 3,3 В вместе с землёй рядом.
- Проверить ориентацию SS14 на каждом реле до подачи питания.
- Повторить испытание с теми же проводами и в том же корпусе.
Серия из 500 переключений заняла чуть больше шестнадцати минут. Этого мало для заявления о надёжности, зато достаточно, чтобы воспроизвести старый дефект несколько десятков раз. В журнале отдельно оставил длину проводов, ток нагрузки и положение крышки. Иначе следующий удачный прогон легко сравнить с совсем другим опытом.

Продолжение и история ревизий: Комнатный контроллер на ESP32.
Ещё из журнала
Четыре вывода шунта — не украшение
Сменил шунт на 10 мОм, но показания при 2 А всё равно зависели от того, с какой стороны припаян провод. Ошибка была в меди до резистора, а не в INA226.