Для электронщиков и радиолюбителей

Почему Arduino перезагружается при включении реле

Почему Arduino перезагружается при включении реле

Сценарий знакомый: вы подключаете реле, загружаете скетч, всё работает … и в момент включения реле Arduino внезапно перезагружается. Иногда — только первый раз. Иногда — случайно. Иногда — всегда.

Новички грешат на «плохой клон», опытные — на «наводки». На самом деле причина почти всегда электрическая, и она вполне объяснима.


Главная причина: просадка питания

Реле — это индуктивная нагрузка.
Когда его катушка включается, она:

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

Arduino же очень чувствительна к питанию, особенно:

  • при питании от USB
  • при использовании линейного стабилизатора
  • при плохой развязке по земле

Если напряжение падает ниже порога brown-out, микроконтроллер просто честно делает reset.


Brown-out reset — тихий убийца проектов

В ATmega328P есть схема Brown-Out Detection (BOD).
Она следит за питанием и перезагружает MCU, если напряжение становится опасно низким.

Особенности:

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

Особенно часто это происходит, если:

  • реле питается от той же линии 5 В
  • используется USB-питание от слабого источника
  • длинные провода и тонкие дорожки

Вторая причина: выбросы от катушки реле

При выключении реле катушка создаёт высоковольтный выброс (закон Ленца никто не отменял).

Если:

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

выброс летит:

  • в питание
  • в землю
  • в управляющий пин

И снова: reset, зависание или странные глюки.


Третья причина: плохая земля (GND)

Очень частая ошибка — общая земля «где-то есть», но не там, где надо.

Проблемы возникают, если:

  • реле и Arduino имеют общую землю через длинный провод
  • по этой земле течёт ток катушки
  • нет «звезды» по питанию

В итоге:

  • земля «подпрыгивает»
  • логические уровни плывут
  • RESET-пин получает ложный импульс

Неочевидный виновник: RESET-пин

RESET у Arduino — очень чувствительный вход.

Если:

  • рядом проходят силовые дорожки
  • нет подтяжки
  • длинные провода
  • наводки от реле

краткий импульс — и микроконтроллер честно перезагружается.


Почему это часто происходит «через раз»

Потому что всё зависит от:

  • момента включения
  • текущего потребления
  • температуры
  • качества USB-источника
  • длины проводов

Это не «мистика», а аналоговая реальность.


Что делать: практический чеклист

Правильное питание

  • отдельный источник для реле
  • DC-DC вместо линейного стабилизатора
  • конденсаторы 100 нФ + 10–100 мкФ рядом с реле

Защита катушки

  • диод параллельно катушке (обязательно!)
  • правильная полярность
  • лучше — быстрый диод (1N4148, UF4007)

Развязка

  • оптрон с отдельным питанием
  • транзисторный драйвер
  • реле-модуль с нормальной схемой

Земля

  • топология «звезда»
  • минимизировать общий путь тока
  • толстые провода для силовой части

RESET

  • конденсатор 100 нФ на RESET
  • короткие трассы
  • не вести рядом с реле и силой

Почему «готовые реле-модули» иногда тоже подводят

Потому что:

  • диод стоит, но далеко
  • земля разведена плохо
  • оптрон питается от Arduino
  • стабилизатор не справляется

Не все модули одинаково полезны.


Итог

Arduino не перезагружается просто так.
Если это происходит при включении реле — значит, система честно сигнализирует:

«У тебя проблемы с питанием или помехами».

Это не баг Arduino.
Это урок схемотехники.

И именно такие проблемы превращают «скетч» в настоящий embedded-проект.