Руководство по модулю реле с Arduino
В этой статье показано, как управлять сетевым напряжением с помощью Arduino, используя модуль реле. Мы кратко познакомимся с модулем реле и создадим простой пример проекта с Arduino. В примере, который мы рассмотрим, показано, как управлять модулем реле с помощью Arduino и PIR-датчика движения.
К концу этого руководства вы сможете управлять любыми электрическими приборами с помощью Arduino, используя модуль реле.
Знакомство с модулем реле
Реле — это электрически управляемый переключатель, который можно включать или выключать, пропуская или прерывая ток, и которым можно управлять низким напряжением, например 5 В, обеспечиваемым выводами Arduino.
Управление модулем реле с помощью Arduino так же просто, как управление любым другим выходом, в чём мы убедимся далее.
Этот модуль реле имеет два канала (те синие кубики). Существуют и другие модели с одним, четырьмя и восемью каналами. Данный модуль должен питаться напряжением 5 В, что подходит для использования с Arduino. Существуют также модули реле, которые питаются от 3,3 В, что идеально подходит для ESP32, ESP8266 и других микроконтроллеров.
Приобрести модуль реле:
Распиновка реле
На следующем рисунке показана распиновка модуля реле.
Шесть контактов с левой стороны модуля реле подключаются к высокому напряжению, а контакты с правой стороны подключаются к компоненту, требующему низкого напряжения — выводам Arduino.
Подключение сетевого напряжения
Высоковольтная сторона имеет два разъёма, каждый из которых содержит три гнезда: общий (COM), нормально замкнутый (NC) и нормально разомкнутый (NO).
COM: общий контакт
NC (Normally Closed, нормально замкнутый): нормально замкнутая конфигурация используется, когда вы хотите, чтобы реле было замкнуто по умолчанию, то есть ток протекал до тех пор, пока вы не отправите сигнал от Arduino на модуль реле для размыкания цепи и прекращения тока.
NO (Normally Open, нормально разомкнутый): нормально разомкнутая конфигурация работает наоборот: реле всегда разомкнуто, поэтому цепь разорвана, пока вы не отправите сигнал от Arduino для замыкания цепи.
Если вы просто хотите время от времени зажигать лампу, лучше использовать нормально разомкнутую конфигурацию цепи.
Подключение выводов
Низковольтная сторона имеет набор из четырёх контактов и набор из трёх контактов.
Набор справа состоит из VCC и GND для питания модуля, а также входа 1 (IN1) и входа 2 (IN2) для управления нижним и верхним реле соответственно.
Второй набор контактов состоит из контактов GND, VCC и JD-VCC. Контакт JD-VCC питает электромагнит реле.
Примечание: обратите внимание, что на модуле есть перемычка (джампер), соединяющая контакты VCC и JD-VCC; показанная здесь перемычка синего цвета, но ваша может быть другого цвета. Перемычка позволяет выбрать, будет ли цепь физически подключена к цепи Arduino или нет, и вы можете решить, устанавливать её или нет. С установленной перемычкой контакты VCC и JD-VCC соединены. Это означает, что электромагнит реле питается непосредственно от вывода питания Arduino, поэтому модуль реле и цепь Arduino не изолированы физически друг от друга (именно эту конфигурацию мы будем использовать). Без перемычки необходимо обеспечить независимый источник питания для питания электромагнита реле через контакт JD-VCC. Такая конфигурация физически изолирует реле от Arduino с помощью встроенного в модуль оптрона.
Подключения между модулем реле и Arduino действительно просты:
GND: подключается к земле
IN1: управляет первым реле (подключается к цифровому выводу Arduino)
IN2: управляет вторым реле (должен быть подключён к цифровому выводу Arduino, если вы используете это второе реле. В противном случае подключать его не нужно)
VCC: подключается к 5V
Пример: Управление лампой с помощью модуля реле и PIR-датчика движения
В этом примере мы создаём лампу, реагирующую на движение. Лампа загорается на 10 секунд каждый раз, когда обнаруживается движение.
Движение будет обнаруживаться с помощью PIR-датчика движения. Если вы не знакомы с PIR-датчиком движения, вы можете прочитать следующую статью:
Для управления лампой с сетевым напряжением мы будем использовать модуль реле в нормально разомкнутой конфигурации.
Предупреждение о безопасности
Прежде чем приступить к этому проекту, хочу сообщить вам, что вы будете работать с сетевым напряжением. Пожалуйста, внимательно прочитайте предупреждение о безопасности ниже.
Предупреждение: когда вы делаете проекты, подключённые к сетевому напряжению, вам действительно нужно знать, что вы делаете, иначе вы можете получить удар электрическим током. Это серьёзная тема, и мы хотим, чтобы вы были в безопасности. Если вы не на 100% уверены в том, что делаете, сделайте себе одолжение и ничего не трогайте. Попросите кого-нибудь, кто знает!
Необходимые компоненты
Вот список необходимых компонентов для этого примера:
Arduino UNO — читайте Лучшие стартовые наборы Arduino
Шнур с патроном для лампы (посмотреть на eBay)
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Код
Скопируйте следующий код в Arduino IDE и загрузите его на плату Arduino.
Предупреждение: не загружайте новый код, пока Arduino подключён к реле.
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
// Relay pin is controlled with D8. The active wire is connected to Normally Closed and common
int relay = 8;
volatile byte relayState = LOW;
// PIR Motion Sensor is connected to D2.
int PIRInterrupt = 2;
// Timer Variables
long lastDebounceTime = 0;
long debounceDelay = 10000;
void setup() {
// Pin for relay module set as output
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
// PIR motion sensor set as an input
pinMode(PIRInterrupt, INPUT);
// Triggers detectMotion function on rising mode to turn the relay on, if the condition is met
attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);
// Serial communication for debugging purposes
Serial.begin(9600);
}
void loop() {
// If 10 seconds have passed, the relay is turned off
if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
digitalWrite(relay, HIGH);
relayState = LOW;
Serial.println("OFF");
}
delay(50);
}
void detectMotion() {
Serial.println("Motion");
if(relayState == LOW){
digitalWrite(relay, LOW);
}
relayState = HIGH;
Serial.println("ON");
lastDebounceTime = millis();
}
Как работает код
Сначала мы создаём переменные для хранения вывода, к которому подключён контакт IN1 реле, и для сохранения состояния реле:
int relay = 8;
volatile byte relayState = LOW;
PIR-датчик движения подключён к выводу 2:
int PIRInterrupt = 2;
Нам нужно создать несколько вспомогательных переменных для работы с таймерами датчика движения PIR. Переменная lastDebounceTime сохраняет время последнего обнаружения движения. Переменная debounceDelay сохраняет, как долго лампа должна оставаться включённой после обнаружения движения (здесь мы устанавливаем 10 секунд = 10000 миллисекунд).
long lastDebounceTime = 0;
long debounceDelay = 10000;
В setup() мы устанавливаем реле как OUTPUT и выключаем его по умолчанию:
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
Поскольку мы используем нормально разомкнутую конфигурацию, контакт между COM и NO отсутствует, пока вы не активируете реле. Реле срабатывает, когда вход опускается ниже примерно 2 В. Это означает, что если вы отправите сигнал LOW от Arduino, реле включится, а если вы отправите сигнал HIGH, реле выключится; оно работает с инвертированной логикой.
Устанавливаем PIR-датчик движения как прерывание:
pinMode(PIRInterrupt, INPUT);
// Triggers detectMotion function on rising mode to turn the relay on, if the condition is met
attachInterrupt(digitalPinToInterrupt(PIRInterrupt), detectMotion, RISING);
Каждый раз, когда срабатывает PIR-датчик движения, вызывается функция detectMotion(), объявленная в конце кода, для включения реле:
void detectMotion() {
Serial.println("Motion");
if(relayState == LOW){
digitalWrite(relay, LOW);
}
relayState = HIGH;
Serial.println("ON");
lastDebounceTime = millis();
}
В loop() мы проверяем, прошло ли 10 секунд с момента включения реле. Если это условие истинно, мы можем выключить реле.
if((millis() - lastDebounceTime) > debounceDelay && relayState == HIGH){
digitalWrite(relay, HIGH);
relayState = LOW;
Serial.println("OFF");
}
Схема
Соберите все компоненты, как показано на схеме.
Предупреждение: не прикасайтесь к проводам, подключённым к сетевому напряжению. Также убедитесь, что вы хорошо затянули все винты модуля реле.
Лампа подключена к реле в нормально разомкнутой конфигурации. Arduino управляет реле через вывод 8 (вывод 8 подключён к контакту IN1 реле). Наконец, PIR-датчик движения подключён к выводу 2.
Демонстрация
После загрузки кода и сборки схемы вы можете протестировать вашу установку.
Когда обнаруживается движение, лампа загорается. Если в течение 10 секунд движения нет, лампа выключается.
Заключение
Управление модулем реле с помощью Arduino так же просто, как управление выходом — вам нужно лишь отправлять сигналы HIGH или LOW, используя цифровой вывод Arduino. С помощью модуля реле вы можете управлять практически любыми электрическими приборами переменного тока (не только лампами).
Надеемся, что это руководство было для вас полезным. Если вам понравился этот проект, вам также может понравиться наш курс по Arduino:
У нас есть более 60 бесплатных руководств и проектов с Arduino. Если вы ищете руководство по конкретному модулю, у нас, вероятно, есть то, что вам нужно.
Спасибо за чтение.