Модуль реле 5V для Arduino
Релейный модуль — это готовое решение для управления мощной нагрузкой (лампы, насосы, обогреватели 220V) от микроконтроллера. Модуль содержит реле, транзисторный ключ и защитный диод — всё, что нужно для безопасной работы.
Типы модулей
| Модуль | Каналов | Размер | Применение |
|---|---|---|---|
| 1-Channel | 1 | 50×26 мм | Один прибор |
| 2-Channel | 2 | 50×40 мм | Два прибора |
| 4-Channel | 4 | 75×55 мм | Умный дом |
| 8-Channel | 8 | 140×55 мм | Автоматизация |
| 16-Channel | 16 | 190×110 мм | Промышленность |
Характеристики типичного модуля
| Параметр | Значение |
|---|---|
| Напряжение катушки | 5V DC |
| Ток катушки | 70-90 мА |
| Контакты AC | 250V / 10A |
| Контакты DC | 30V / 10A |
| Время срабатывания | ~10 мс |
| Управление | LOW или HIGH (зависит от модуля) |
| Изоляция | Оптопара (на некоторых модулях) |
Распиновка модуля
Сторона управления (низковольтная)
┌─────────────────────────────┐
│ RELAY MODULE 5V │
│ │
│ VCC GND IN1 [IN2] [IN3] │
│ │ │ │ │
│ 5V GND GPIO │
└─────────────────────────────┘
- VCC — питание модуля (5V)
- GND — земля (общая с Arduino)
- IN1, IN2… — входы управления (GPIO)
Сторона нагрузки (высоковольтная)
┌─────────┐
COM ─┤ ├─ NC (Normally Closed)
│ RELAY │
│ ├─ NO (Normally Open)
└─────────┘
- COM — общий контакт
- NO (Normally Open) — разомкнут, пока реле выключено
- NC (Normally Closed) — замкнут, пока реле выключено
Схема подключения
Базовая схема (управление лампой 220V)
Arduino Relay Module Нагрузка 220V
5V ────────────────────────── VCC
GND ────────────────────────── GND ┌────┐
D7 ────────────────────────── IN1 │💡 │
│ L ──┤LAMP├── N
│ └────┘
COM ─────── Фаза (L) ────────────────┘
NO ────────────────────────────────┘
⚠️ ВНИМАНИЕ: Работа с 220V опасна для жизни! Все подключения выполняйте при отключённом питании. Используйте изолированные провода и клеммники.
Схема с оптоизоляцией
Некоторые модули имеют оптопару для полной гальванической развязки:
Arduino 5V ────────────────────── VCC (логика)
│
Arduino GND ───────────────────── GND (логика)
│
Arduino D7 ────────────────────── IN1
│
┌──────────────────────┼─── JD-VCC (питание реле)
│ │
Внешний 5V ──┴──────────────────────┴─── GND (реле)
Когда нужна оптоизоляция:
- Управление 220V нагрузкой рядом с чувствительной электроникой
- Длинные провода до реле (помехи)
- Требования безопасности
Код Arduino
Простое включение/выключение
#define RELAY_PIN 7
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Выключено (для LOW-active модуля)
}
void loop() {
digitalWrite(RELAY_PIN, LOW); // Реле ВКЛ
delay(5000); // 5 секунд
digitalWrite(RELAY_PIN, HIGH); // Реле ВЫКЛ
delay(2000);
}
Определение типа управления модуля
// Некоторые модули включаются по HIGH, другие по LOW
// Этот код определяет тип вашего модуля
#define RELAY_PIN 7
void setup() {
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
Serial.println("Тест модуля реле");
Serial.println("Слышите щелчок при HIGH или LOW?");
Serial.println("Подаём HIGH...");
digitalWrite(RELAY_PIN, HIGH);
delay(2000);
Serial.println("Подаём LOW...");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
Serial.println("Тест завершён");
}
void loop() {}
Класс для управления реле
class RelayModule {
private:
uint8_t pin_;
bool activeLow_; // true = включается по LOW
bool state_;
public:
RelayModule(uint8_t pin, bool activeLow = true)
: pin_(pin), activeLow_(activeLow), state_(false) {
pinMode(pin_, OUTPUT);
off();
}
void on() {
state_ = true;
digitalWrite(pin_, activeLow_ ? LOW : HIGH);
}
void off() {
state_ = false;
digitalWrite(pin_, activeLow_ ? HIGH : LOW);
}
void toggle() {
state_ ? off() : on();
}
void set(bool state) {
state ? on() : off();
}
bool isOn() const { return state_; }
};
// Использование:
RelayModule lamp(7, true); // LOW-active
RelayModule pump(8, false); // HIGH-active
void loop() {
lamp.on();
delay(1000);
lamp.off();
delay(1000);
}
Многоканальное управление
#define NUM_RELAYS 4
const int relayPins[NUM_RELAYS] = {4, 5, 6, 7};
void setup() {
for (int i = 0; i < NUM_RELAYS; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], HIGH); // Все выключены
}
}
void setRelay(int channel, bool state) {
if (channel >= 0 && channel < NUM_RELAYS) {
digitalWrite(relayPins[channel], state ? LOW : HIGH);
}
}
void allOff() {
for (int i = 0; i < NUM_RELAYS; i++) {
digitalWrite(relayPins[i], HIGH);
}
}
void loop() {
// Последовательное включение
for (int i = 0; i < NUM_RELAYS; i++) {
setRelay(i, true);
delay(500);
}
delay(1000);
allOff();
delay(1000);
}
Защита и безопасность
1. Защита от дребезга контактов
При переключении контакты реле “дребезжат” несколько миллисекунд, создавая множественные импульсы.
Программное решение:
void safeRelaySwitch(int pin, bool state, unsigned long debounce = 50) {
static unsigned long lastSwitch = 0;
if (millis() - lastSwitch > debounce) {
digitalWrite(pin, state ? LOW : HIGH);
lastSwitch = millis();
}
}
2. Защита от одновременного включения
Для некоторых нагрузок (например, реверс мотора) нельзя включать два реле одновременно:
class InterlockRelays {
private:
uint8_t pinA_, pinB_;
public:
InterlockRelays(uint8_t pinA, uint8_t pinB) : pinA_(pinA), pinB_(pinB) {
pinMode(pinA_, OUTPUT);
pinMode(pinB_, OUTPUT);
allOff();
}
void allOff() {
digitalWrite(pinA_, HIGH);
digitalWrite(pinB_, HIGH);
}
void activateA() {
digitalWrite(pinB_, HIGH); // Сначала выключить B!
delay(50); // Пауза для размыкания
digitalWrite(pinA_, LOW);
}
void activateB() {
digitalWrite(pinA_, HIGH); // Сначала выключить A!
delay(50);
digitalWrite(pinB_, LOW);
}
};
3. Ограничение тока при включении
Некоторые нагрузки (лампы накаливания, моторы) имеют пусковой ток в 5-10 раз выше номинального. Реле на 10A может не выдержать.
Решение: Использовать soft-start или реле с запасом (16A для 10A нагрузки).
Типичные проблемы
Реле щёлкает, но нагрузка не включается
- Проверьте подключение COM и NO/NC
- Проверьте напряжение на контактах (мультиметром)
- Возможно, контакты окислились — несколько раз переключите реле
Реле не срабатывает
- Проверьте питание модуля (должно быть 5V)
- Проверьте GPIO (подайте 5V напрямую на IN)
- Возможно, модуль LOW-active, а вы подаёте HIGH
Arduino перезагружается при включении реле
- Реле потребляет ~70-90 мА — много для одного GPIO!
- Решение: Питайте VCC модуля от внешнего 5V, а не от Arduino
Помехи при переключении
- Добавьте конденсатор 100 мкФ на питание модуля
- Используйте модуль с оптоизоляцией
- Разнесите силовые и сигнальные провода
Альтернативы реле
| Технология | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Реле (ЭМР) | Изоляция, низкое сопротивление | Износ, щелчки, медленно | 220V, редкие переключения |
| SSR (твердотельное) | Бесшумно, долговечно | Греется, дороже | Частые переключения |
| MOSFET | Быстро, дёшево, ШИМ | Нет изоляции, только DC | DC-нагрузки, моторы |
| Симистор | Дёшево, AC | Нет изоляции | Диммеры, AC-нагрузки |
Применение
- 💡 Умный дом — управление светом, розетками
- 🚿 Системы полива — насосы, клапаны
- 🌡️ Терморегуляция — обогреватели, вентиляторы
- 🔔 Сигнализация — сирены, замки
- 🏭 Автоматизация — станки, конвейеры
