Подключение реле к Arduino: активный LOW, JD-VCC и нагрузка 220 В
Модуль реле это самый дешёвый способ заставить Arduino щёлкать настоящей розеткой: насос, обогреватель, лампа на 220 В. Но именно с реле новички попадают в три ловушки подряд. Реле втягивается само сразу после загрузки скетча, команда digitalWrite(HIGH) его выключает вместо включения, а четвёртый канал на четырёхрелейной плате просаживает питание так, что плата перезагружается. Все три ловушки лечатся пониманием одной схемы: транзистор, оптопара и перемычка JD-VCC на плате.
Ниже что стоит между пином и катушкой, почему логика инвертирована (активный LOW), сколько миллиампер съедает катушка SRD-05VDC-SL-C и готовый скетч термостата с гистерезисом. Репетировать схему можно в симуляторе платы, а термостат на готовом датчике температуры собирать по статье про DHT22.
Отдельные разделы ниже отвечают на вопросы, которые возникают после первой сборки: почему реле щёлкает само, почему оно гудит, но не переключает контакты, чем реле отличается от транзистора и что делать, чтобы не получить 220 В на руку.
Что стоит на плате между пином и катушкой
Катушка реле SRD-05VDC-SL-C при 5 В потребляет 70–90 мА, втрое-вчетверо больше потолка пина (20 мА рабочий, 40 мА предел). Поэтому пин катушкой не рулит: на модуле стоит NPN-транзистор (чаще всего S8050), и он переключает обмотку. Рядом светодиод-индикатор, обратный диод против выброса самоиндукции (катушка при размыкании выбрасывает в обратную сторону сотни вольт) и оптопара PC817, отделяющая логику от силовой части. Пину достаётся лёгкая работа: зажечь светодиод оптопары на 5–10 мА.
| Модуль | Ток всех катушек | Питание | Когда брать |
|---|---|---|---|
| 1 канал | 70–90 мА | 5 В от платы | Первые проекты, один потребитель |
| 2 канала | 140–180 мА | 5 В, лучше с запасом | Ворота, шторы, два направления |
| 4 канала | 280–350 мА | Отдельный БП через JD-VCC | Поливалка, свет по комнатам |
Активный LOW: включаем нулём
На большинстве модулей с оптопарой логика инвертирована: анод светодиода оптопары сидит на VCC, и чтобы ток потёк, вход IN должен стать землёй, принять эти миллиамперы на себя. Пин в режиме OUTPUT с LOW работает именно стоком. Итог: digitalWrite(pin, LOW) означает реле втянуто, digitalWrite(pin, HIGH) отпущено. Надпись low level trigger на плате это оно и есть.
Перемычка JD-VCC: питание катушек отдельно
Жёлтая перемычка рядом с клемником это JD-VCC. С перемычкой логика и катушки питаются от одного 5 В: модуль работает как единое целое, развязки от платы нет. Снимите перемычку, и клемма JD-VCC оживёт: подайте на неё отдельные 5 В только для катушек, а VCC оставьте подключённым к 5 В платы для светодиодов оптопар. GND общий. Тогда щёлкающие катушки не просаживают питание ATmega, а гальваническая развязка становится честной: силовая часть живёт своей жизнью, пин лишь моргает светодиодом оптрона.
Скетч: термостат с гистерезисом
const int PIN_RELE = 7;const int POROG_VKL = 400; // включаем ниже этого значенияconst int POROG_VYKL = 450; // выключаем выше: зона гистерезиса 50 отсчётов bool nagrevVkluchen = false; void setup() { Serial.begin(9600); digitalWrite(PIN_RELE, HIGH); // сначала ВЫКЛЮЧАЕМ: активный LOW pinMode(PIN_RELE, OUTPUT); // и только потом объявляем выход} void loop() { int uroven = analogRead(A0); // 0..1023, потенциометр вместо датчика if (!nagrevVkluchen && uroven < POROG_VKL) { nagrevVkluchen = true; } if (nagrevVkluchen && uroven > POROG_VYKL) { nagrevVkluchen = false; } digitalWrite(PIN_RELE, nagrevVkluchen ? LOW : HIGH); Serial.print("u="); Serial.print(uroven); Serial.print(" rele="); Serial.println(nagrevVkluchen ? 1 : 0); delay(200);}Вся соль скетча это два порога вместо одного. Включаем при 400 отсчётах (примерно 1,95 В), выключаем при 450 (около 2,20 В): зона в 50 отсчётов кажется мелочью, но без неё датчик, дрожащий у порога, заставит реле щёлкать десятки раз в минуту. Контакты подгорают, щелчки бесят. Для термостата пороги задают в градусах, включить при 24 °C и выключить при 23 °C; принцип и разбор на реальном датчике в уроке про гистерезис и клацающее реле.
COM, NO, NC и 220 В: проверьте до включения
Тупик: реле гудит, но нагрузка не переключается
Симптом, который пугает сильнее всего: щёлкнуло, гудит, а лампа не горит. Мы решили, что пробит транзистор, и начали прозванивать модуль мультиметром, проверяя питание и клеммы.
Питание было в норме, и тут мы посмотрели на саму надпись SRD-05VDC-SL-C и вспомнили про 75 процентов: катушка втягивается при напряжении выше примерно 3,75 В, а отпускает только когда напряжение падает ниже 0,5 В. Если по питанию идут просадки, катушка не втягивается до конца, и реле гудеть может, а контакты при этом не переключаются. Лечится это не заменой реле, а нормальным питанием: отдельный источник на JD-VCC, конденсатор по питанию и общая земля. Второй случай с похожим поведением был банальнее: нагрузка была подключена к NC вместо NO, и реле честно переключало контакты, только в другую сторону.
Личный опыт: почему мы больше не питаем катушки от платы
Мы собрали стенд из четырёхканального модуля и запитали его от USB компьютера, как было написано в первой инструкции. При включении всех четырёх каналов плата уходила в перезагрузку: светодиод L мигал, скетч стартовал заново, и так по кругу. Порог оказался близко к 300 мА, а остальные потребители платы тоже что-то брали.
Мы сняли перемычку JD-VCC, запитали катушки от отдельного блока 5 В и соединили минусы. Проблема ушла, и заодно появилась возможность спокойно щёлкать реле подряд: раньше каждый щелчок вызывал просадку, которую чувствовали даже кнопки. Отдельное наблюдение: контакты реле ресурсные, и каждый переключаемый цикл их расходует. Поэтому мы перевели термостат на гистерезис и поставили его на 10–15 секунд удержания, чтобы реле не дёргалось на каждый шум датчика.
Авторская позиция: реле, транзистор или твердотельное
Мы советуем начинать с модуля реле, потому что это самый понятный способ: вы видите, как контакт замыкается, и слышите щелчок. Для лампы, обогревателя и насоса это правильный выбор, и ни о какой силовой электронике новичку думать не придётся.
Но мы не советуем управлять через реле то, что реле не умеет. Вентилятор, светодиодная лента, электромагнитный клапан: всё это постоянная нагрузка, и реле для неё избыточно, оно только изнашивается. Там правильнее транзистор или полевой MOSFET, а если нагрузка живёт на постоянном токе большой мощности, твердотельное реле: оно не щёлкает, не изнашивается и переключается за миллисекунды. Обратная сторона у твердотельного реле в том, что оно не разрывает цепь, и при коротком замыкании в нагрузке сгорает уже оно. Выбор мы сводим к простому правилу: надо слышать щелчок, берём реле; не надо, берём MOSFET.