В этой статье приведены разные варианты управления реле в скетчах ардуино. Примеры тестировались на Arduino Uno, но они могут быть легко применимы для работы на других платах Arduino: Uno, Mega, Nano.

Схема подключения

В данном примере используется стандартный , на котором уже установлены все необходимые элементы для подключения к. Схема подключения очень проста: модуль реле присоединяется к 5 пину платы Ардуино. При этом для простоты мы можем даже не присоединять реальную нагрузку – реле будет щелкать при каждом изменении состояния, мы услышим эти щелчки и будем понимать, что скетч работает.

Скетч для работы с реле

/* * Скетч для управления реле с помощью ардуино * Используем реле SONGLE SRD-05VDC * Реле ОТКРЫВАЕТСЯ при подаче низкого уровня сигнала (LOW) на управляющий пин. * Реле ЗАКРЫВАЕТСЯ при подаче высокого уровня сигнала (HIGH) на управляющий пин. * * В данном примере мы просто открываем и закрываем реле раз в 5 секунд. * * PIN_RELAY содержит номер пина, к которому подключено реле, которым мы будем управлять * * В функции setup устанавливаем начальное положение реле (закрытое) * Если к реле будет подключена нагрузка(например, лампочка), то после запуска скетча она будет включаться и выключаться каждые 5 секунд * * Для изменения периода мигания нужно изменить параметр функции delay(): поставив 1000 миллисекунд, выполучите 1 секунду задержки * * В реальных проектах реле включается в ответ на обнаружение каких-либо внешних событий через подключение датчиков * */ #define PIN_RELAY 5 // Определяем пин, используемый для подключения реле // В этой функции определяем первоначальные установки void setup() { pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал } void loop() { digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала delay(5000); digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала delay(5000); }

Скетч управления реле с датчиком движения

В реальных проектах изменение состояния реле должно происходить в ответ на какую то реакцию среды. Например, в ответ на сигнал сработавшего датчика движения можно включить свет, замкнув цепь с помощью реле. В данном скетче мы рассмотрим такой вариант подключения.

Схема подключения реле

Следует понимать, что в реальных проектах обходятся вообще без ардуино – просто подключая сигнальный выход датчика к реле.

Пример скетча

В данном примере мы добавим в цикл loop проверку состояния PIR датчика с помощью функции digitalRead (). Если мы получаем HIGH, то это означает сработку датчика и мы выполняем действие – включаем реле. Если к нему присоединить лампочку, то она загорится. Но, как и в прошлом примере, можно просто послушать щелчки.

/* Скетч для управления реле ардуино с помощью PIR датчика PIN_RELAY содержит номер пина, к которому подключено реле, которым мы будем управлять PIN_PIR содержит номер пина с подключенным PIR-сенсором В функции setup устанавливаем начальное положение реле (закрытое) В теле функции loop проверяем наличия высокого уровня сигнала от датчика с помощью функции digitalRead Для отладки текущее значение датчика выводим в окно монитора порта */ #define PIN_RELAY 8 // Определяем пин, используемый для подключения реле #define PIN_PIR 5 // Определяем пин, используемый для подключения PIR-датчика // В этой функции определяем первоначальные установки void setup() { Serial.begin(9600); pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал } void loop() { int val = digitalRead(PIN_PIR); // Считваем значение с датчика движения в отдельную переменную if (val == HIGH) { Serial.println("Датчик сработал"); digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала } else { digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала } delay(1000); // Проверяем значения один раз в секунду. }

Сегодня расскажу о двух канальном модуле реле с оптической развязкой, который содержит два электромеханических реле, максимальным током до 10А (в реальности не выдерживают столько), а переключение осуществляется с помощью напряжения 5В.

Технические параметры

Напряжение питания: 5 В
Потребляемый ток: 30 мА … 40 мА
Сигнал включение: 0 В (низкий уровень)
Оптическая изоляция: есть
Количество реле: 2 шт.
Тип реле: электромеханическое
Коминальный ток нагрузки: 10 А
Коммутируемое напряжение: 250VAC, 30VDC
Габариты: 50.5мм x 32.5мм x 17м

Общие сведения

Данный модуль содержит два канала реле фирмы SONGLE модель SRD-05VDC-SL-C, переключение осуществляется с помощью напряжение 5В. Схематически модуль специально разработан для управления с помощью слаботочных плат, таких как arduino, raspberry и так далее, которые на выходе могут выдать ток не более 40 мА, так же для защиты добавлен оптопара EL817, которая реализует гальваническую развязку. Принципиальная схема 2-х канального модуля реле показана на рисунке ниже.


Двухкональный релейный модуль состоит из двух независимых частей за исключении питания Vcc и GND. При подключении к напряжения, вывод In1 находиться в высоком состоянии (лог 1), для переключения первого реле необходимо вывод In1 перевести в отрицательное состояние (лог 0), то есть закоротить цепь на землю. Через светодиод, которые находится в оптопаре начнет протекать ток и он засветится, следом откроет фототранзистор, через который так же начнет течь ток на базу транзистора Q1, который откроется и реле сработает. Вторая часть реле, работает аналогично, модуль может работать и от отдельного источника питания, необходимо убрать перемычку и подключить питание к JD-VCC и GND.

Назначение контактов
Модуль содержит четыре разъема, два слаботочных J1, J1 и два силовых K1 и K2, назначение каждого разъема и вывода можно посмотреть на рисунке ниже.


Разъем J1 используется для управления реле, шаг контактов 2,54 мм (PLS), разъем J2 используется для подключения внешнего источника питания, по умолчанию, между контактми JD-VCC и VCC установлена перемычка.

Габаритные размеры
На модуле предусмотрено четыре отверстия для установки, диаметр каждого 4 мм, габариты можно посмотреть на рисунке ниже.


Необходимые детали:
Arduino UNO R3 x 1 шт.
Провод DuPont x 1 шт.
Кабель USB 2.0 A-B x 1 шт.
Модуль реле 2-х канальный — 5V, 10A, 250V (lOW, OPTO) x 1 шт.

Подключение :
Для начала подключаем вывод VCC и GND к выводам Arduino 5V и GND. Выводы IN1 и IN2 можно подключить к любому выводу, в нашем случае подключены к цифровым выводам 5 и 6. В качестве примера использую светодиоды, схема подключения приведена на рисунке ниже:


/* Тестировалось на Arduino IDE 1.8 Дата тестирования 28.12.2016г. */ int in1 = 5; // Указываем, что вывод реле In1, подключен к реле цифровому выводу 5 int in2 = 6; // Указываем, что вывод реле In2, подключен к реле цифровому выводу 6 void setup() { pinMode(in1, OUTPUT); // Установим вывод 5 как выход pinMode(in2, OUTPUT); // Установим вывод 6 как выход } void loop() { digitalWrite(in1, HIGH); // Выключаем реле delay(2000); // Ждем 2с digitalWrite(in1, LOW); // Включаем реле delay(2000); // Ждем 2с digitalWrite(in2, HIGH); // Выключаем реле delay(2000); // Ждем 2с digitalWrite(in2, LOW); // Включаем реле }

Тестировалось на Arduino IDE 1.8

Дата тестирования 28.12.2016г.

int in1 = 5 ; // Указываем, что вывод реле In1, подключен к реле цифровому выводу 5

int in2 = 6 ; // Указываем, что вывод реле In2, подключен к реле цифровому выводу 6

void setup ()

pinMode (in1 , OUTPUT ) ; // Установим вывод 5 как выход

pinMode (in2 , OUTPUT ) ; // Установим вывод 6 как выход

void loop ()

digitalWrite (in1 , HIGH ) ; // Выключаем реле

delay (2000 ) ; // Ждем 2с

digitalWrite (in1 , LOW ) ; // Включаем реле

delay (2000 ) ; // Ждем 2с

digitalWrite (in2 , HIGH ) ; // Выключаем реле

delay (2000 ) ; // Ждем 2с

digitalWrite (in2 , LOW ) ; // Включаем реле

С помощью Ардуино. Но как быть, если мы задумаем управлять устройствами, подключенными к бытовой сети? Напомню, что даже небольшая настольная лампа питается от источника переменного тока с напряжением 220 Вольт. Обычный полевой транзистор, который мы использовали в схеме с двигателем уже не подойдет. Чтобы управлять мощной нагрузкой да еще и с переменным током воспользуемся реле. Это такое электромеханическое устройство, которое механическим способом замыкает цепь нагрузки с помощью электромагнита. Посмотрим на внутренности: Принцип действия реле следующий. Подаем напряжение на электромагнитную катушку. В катушке возникает поле, которое притягивает металлическую лапку. В свою очередь, лапка механически замыкает контакты нагрузки. У реле есть два основных применения. Во-первых, мы можем подав всего 5 Вольт на катушку, замкнуть цепь очень мощной нагрузки. Например, реле, используемое в уроках для Ардуино, может включить холодильник или стиральную машину. Во-вторых, некоторые виды реле могут одновременно замкнуть и разомкнуть сразу несколько разных цепей с разным напряжением.

На этом уроке мы будем работать не с отдельным реле, а с целым релейным модулем. Помимо самого реле, модуль содержит еще и оптоэлектронную развязку с транзистором, которые защищают выводы Ардуино от скачков напряжения на катушке.
У одинарного модуля реле есть всего три контакта. Подключим их по следующей схеме. Кстати, вход реле является инвертированным. Это означает, что высокий уровень на контакте In выключит катушку реле, а низкий уровень — включит.

Принципиальная схема


Внешний вид макета


2. Программа для Ардуино

Напишем простую программу, которая будет включать лампу на 3 секунды, а затем гасить на 1 секунду. const int relPin = 3; void setup() { pinMode(relPin, OUTPUT); } void loop() { digitalWrite(relPin, HIGH); delay(1000); digitalWrite(relPin, LOW); delay(3000); } Загружаем программу на Ардуино. Теперь подключаем питание к лампе и к реле. Наконец, подаем питание на контроллер.

3. Автоматический светильник или уличный фонарь

С помощью контроллера, реле и датчика света можно сделать несложный автоматический светильник. Контроллер будет зажигать лампу в момент, когда уровень света на датчике станет меньше заданного значения. В качестве датчика используем готовый модуль на основе . Подключим все три устройства по следующей схеме.

Принципиальная схема


Внешний вид макета


4. Программа автоматического светильника

Аналоговый вывод датчика дает значения в диапазоне от 0 до 1023. Причем, 0 — для максимального уровня света и 1023 для полной темноты. Сначала нам нужно определиться при каком уровне света включать лампу, а при каком выключать. В нашей лаборатории при свете дня датчик показывает значение L = 120, а ночью около L = 700. Будем включать реле при L > 600, и выключать при L < 200. Вспомним как и напишем программу. const int photoPin = A5; const int relPin = 3; void setup() { pinMode(photoPin, INPUT); pinMode(relPin, OUTPUT); } void loop() { if(analogRead(photoPin) < 200) digitalWrite(relPin, HIGH); if(analogRead(photoPin) > 600) digitalWrite(relPin, LOW); } Загружаем программу на Ардуино и проводим эксперимент. Лучше всего это делать ночью.

Задания

1. Музыка реле. Как известно, электромеханическое реле издает щелчок при срабатывании. Попробуйте воспользоваться этим для проигрывания какой-нибудь несложной мелодии. 2. Управление двигателем. Имея два трехконтактных реле, таких же как в этом уроке, можно собрать схему для изменения направления вращения двигателя.

/*
*
* Набор для экспериментов ArduinoKit
* Код программы для опыта №13: sketch 13
*
* Реле
*
* Написано для сайта http://сайт
*
*
* Помощь сообщества Arduino.
* Посетите сайт http://www.arduino.cc
*
*
*
* ИСПОЛЬЗОВАНИЕ ТРАНЗИСТОРА ДЛЯ УПРАВЛЕНИЯ РЕЛЕ
*
* Реле это электрически управляемый механический переключатель.
* Реле может управлять гораздо большим напряжением и током, чем порты
* Arduino, или скажем транзистор, включенный в комплект набора. Если
* вы хотите использовать Arduino для управления лампой накаливания,
* кофеваркой, или другим электронным устройством работающим на 220V,
* реле это отличный способ сделать это.
* Реле спокойно справляется с переключением, коммутацией, больших
* напряжений, намного больших, чем может предложить порт Arduino.
* Мы будем использовать транзистор для того чтобы управлять реле,
* точно так же, как мы использовали транзистор для управления
* двигателем в опыте №12 (Стартовый набор, программиста и робототехника).
*
* Реле состоит из катушки, проволоки, металлического сердечника и
* переключающих контактов. При подаче питания на катушку, сердечник
* намагничивается, и притягивает якорь (рычажок), тем самым
* переключает контакты. Так как контакты реле полностью изолированы
* от Arduino, вы можете спокойно использовать реле для управления
* опасным напряжением, НО! Пожалуйста, делайте это, если вы уже
* знаете, и умеете, безопасно работать с высоким напряжением!
*
* Реле иметь три контакта, — COM (общий), NC (нормально замкнутый)
* и NO (нормально разомкнутый). Когда реле выключено, COM вывод
* подключен к выводу NC (нормально замкнутый), а когда включено,
* COM вывод подключается к NO (нормально разомкнутый).
*
* Этот код очень прост — он включает реле на одну секунду, затем
* выключает, ждет секунду и снова включает, как в опыте с мигающим
* светодиодом!
*
* Подключение оборудования:
*
* Транзистор:

* Транзистор имеет три вывода. Глядя на плоскую сторону,
* выводами вниз, назначения выводов будут следующими (слева
* на право): КОЛЛЕКТОР, БАЗА, ЭМИТЕР.
*
* Подключите БАЗУ через резистор 1К к цифровому порту 2.
*
* Подключите ЭМИТЕР к земле (GND).
*
* Катушка реле:
*
* Реле имеет контакты катушки, с помощью которых можно управлять
* реле и контакты для управления нагрузкой. На верхней или
* нижней части реле должен иметься рисунок, или символ,
* указывающий на контакты катушки.
*
* Подключение одну сторону катушки к коллектору транзистора.
*
* Подключение другую сторону катушки к питанию +5 Вольт.
*
* Диод:
*
* Реле имеет катушку, которую вы запитываете, для того чтобы
* притянуть якорь. При отключении питания, катушка генерирует
* всплеск напряжения, который может повредить транзистор. Этот
* диод защищает транзистор от всплеска напряжений.
*
* Подключите вывод диода, КАТОД, к питанию +5 Вольт.
*
* Подключите другой вывод диода, АНОД, к КОЛЛЕКТОРУ транзистора.
*
* Контакты реле и светодиодов:
*
* Контакты реле могут переключать все все что можно включить или
* выключить, но мы в этом уроке будем использовать контакты реле
* для включения и выключения светодиодов.
*
* Подключите общий вывод контактной группы релеCOMMON к резистору
* 330 Ом. Второй вывод резистора питанию +5 Вольт.
*
* Подключите вывод контактной группы реле NC (нормально замкнутый)
* к положительному (длинному) выводу светодиода LED 1.
*
* Подключите вывод контактной группы реле NO (нормально разомкнутый)
* к положительному (длинному) выводу второго светодиода — LED 2.
*
* Подключите отрицательные выводы (короткие ножки) обоих светодиодов
* к земле (GND).
*
*
*
* Комментарий к программе написан
* 26 ноября 2014
* специально для http://сайт
*
*
*/
const int relayPin = 2; // порт для управления транзистором
const int timeDelay = 1000; // задержка в мс, между вкл. и выкл.

// Вы можете уменьшить время задержки, но обратите внимание, что
// реле, будучи механическим устройством, будет изнашиваться
// быстрее, если частота переключений будет слишком частой.
void setup()
{
pinMode(relayPin, OUTPUT); // установить порт как исходящий
}
void loop()
{
digitalWrite(relayPin, HIGH); // включить реле

digitalWrite(relayPin, LOW); // выключить реле

delay(timeDelay); // пауза в 1 секунду

Подключить на прямую к Arduino мощную нагрузку, например лампу освещения или электронасос не получится. Микроконтроллер не обеспечивает необходимую мощность, для работы такой нагрузки. Ток, который может протекать через выходы Arduino, не превышает 10-15 мА. На помощь приходит реле, с помощью которого можно коммутировать большой ток. К тому же, если нагрузка питается от переменного тока, например 220v, то без реле ни как вообще не обойтись. Для подключения мощных нагрузок к Arduino через реле, обычно используют реле модули.

В зависимости от количества коммутируемых нагрузок, применяют одно-, двух-, трёх-, четырёх- и более канальные реле модули.

Свои, одно и четырёх канальные модули, я купил на Aliexpress, за $ 0,5 и $ 2.09 соответственно.

Устройство реле модуля для Arduino, на примере 4-х канального модуля HL-54S V1.0.

Рассмотрим более детально устройство данного модуля, по данной схеме обычно строятся все многоканальные модули.

Принципиальная схема модуля .

Для защиты выводов Ардуино от скачков напряжения в катушке реле, применяется транзистор J3Y и оптрон 817C. Обратите внимание, сигнал с пина In подаётся на катод оптрона. Это значит, для того что бы реле замкнуло контакты, нужно подать на пин In логический 0 (инвертированный сигнал).

Так же бывают модули, у которых сигнал с пина In подаётся на анод оптрона. В таком случае, нужно подать логическую 1 на пин In , для срабатывания реле.

Мощность нагрузки, которую могут включать / отключать модули, ограничивается установленными на плате реле.

В данном случае используются электромеханические реле Songle SRD-05VDC-SL-C , имеющее следующие характеристики:

Рабочее напряжение: 5 В
Рабочий ток катушки: 71 мА
Максимальный коммутируемый ток: 10А
Максимальное коммутируемое постоянное напряжение: 28 В
Максимальное коммутируемое переменное напряжение : 250 В
Рабочий температурный режим: от -25 до +70°C

Реле Songle SRD-05VDC-SL-C имеет 5 контактов. 1 и 2 питание реле. Группа контактов 3 и 4 представляют из себя нормально разомкнутые контакты (NO ), группа контактов 3 и 5 - нормально замкнутые (NC ).

Подобные реле бывают на различные напряжения: 3, 5, 6, 9, 12, 24, 48 В. В данном случае используется 5-вольтовый вариант, что позволяет питать реле-модуль непосредственно от Arduino.

На плате имеется перемычка (JDVcc ), для питания реле либо от Arduino, либо от отдельного источника питания.

Пинами In1 , In2 , In3 , In4 модуль подключается к цифровым выводам Arduino.

Подключение реле модуля HL-54S V1.0 к Arduino.

Поскольку у нас модуль с 5-вольтовыми реле, подключим его по такой схеме, питание возьмём от самой Ардуино. В примере подключу одно реле, в качестве нагрузки буду использовать лампочку на 220 в.

Для питания реле модуля от Arduino, перемычка должна замыкать пины «Vcc » и «JDVcc », обычно по-умолчанию она там и установлена.

Если у вас реле не на 5 вольт, питать от Ардуино модуль нельзя, питание нужно брать от отдельного источника.

Нижеприведённая схема показывает, как подключить питание модуля от отдельного источника. По такой схеме нужно подключать реле, рассчитанное на питание от более или менее чем 5 В. Для 5-вольтовых реле эта схема так же будет более предпочтительная.

При таком подключении нужно убрать перемычку между пинами «Vcc » и «JDVcc ». Далее пин «JDVcc » подключить к «+ » внешнего источника питания, пин «Gnd » подключить к «- » источника питания. Пин «Gnd », который в предыдущей схеме подключался к пину «Gnd » Ардуино, в данной схеме не подключается. В моём примере, внешний источник питания 5 В, если ваше реле рассчитано на другое напряжение (3, 12 ,24 В), выбираете соответствующее внешнее питание.

Скетч для управления реле модулем через Ардуино.

Зальём в Ардуино скетч, который будет сам включать и отключать лампочку (мигалка).

int relayPin = 7;

void setup() {
pinMode(relayPin, OUTPUT);
}

void loop() {
digitalWrite(relayPin, LOW);
delay(5000);
digitalWrite(relayPin, HIGH);
delay(5000);
}

В строке int relayPin = 7; указываем номер цифрового пина Arduino , к которому подключали пин In1 реле модуля. Можно подключить на любой цифровой пин и указать его в этой строке.

В строке delay(5000); можно менять значение времени, при котором лампочка будет гореть и при котором будет погашена.

В строке digitalWrite(relayPin, LOW); указано, при подаче логического нуля (LOW ), реле-модуль замкнёт контакты и лампочка будет гореть.

В строке digitalWrite(relayPin, HIGH); указано, при подаче логической единицы (HIGH ), реле-модуль разомкнёт контакты и лампочка погаснет.

Как видим, в строке digitalWrite(relayPin, LOW); оставили параметр LOW . Если реле замкнёт контакты и лампочка загорится, значит на пин In1 вам нужно подавать логический нуль, как и у меня. Если лампочка не загорится, зальём скетч, в котором заменим параметр LOW на HIGH.


Результат скетча на видео.

Теперь давайте добавим в схему тактовую кнопку и при нажатии на неё, реле-модуль будет включать лампочку.

Кнопку подключаем вместе с подтягивающим резистором на 10к, который не позволит внешним наводкам влиять на работу схемы.

Заливаем скетч

В строкеif(digitalRead(14)==HIGH) задаём номер цифрового пина, на котором подключена кнопка. Подключать можно на любой свободный. В примере эта аналоговый пин A0 , его же можно использовать в качестве цифрового 14 пина.

В строке delay(300); задаётся значение в миллисекундах. Это значение указывает, через какое время после нажатия или отпускание кнопки, нужно производить действия. Это защита от дребезга контактов.

Для информации! Все аналоговые входы от A0 (нумеруется как 14) до A5 (19), можно использовать как цифровые (Digital PWM ).

В заключении результат выполнения скетча на видео.

Более дешёвые реле-модули могут не содержать в своей схеме оптрона, как например в моём случае с одноканальным модулем.



Схема одноканального реле-модуля . Производитель сэкономил на оптроне, из-за чего Ардуино плата лишилась гальванической развязки. Для работы такой платы, на пин In нужно подавать логический нуль.

Подключение реле модуля к Arduino Due.

Arduino Due работает от 3,3 вольт, это максимальное напряжение, которое может быть на его вводах / выводах. Если будет более высокое напряжение, плата может сгореть.

Возникает вопрос, как подключить к реле модуль?

Убираем перемычку JDVcc. Подключаем пин «Vcc » на плате реле модуля к пину «3,3V » Arduino. Если реле рассчитано на 5 вольт, соединяем пин «GND » платы реле модуля, с пином «GND » Arduino Due. Пин «JDVcc » подключаем к пину «5V » на плате Arduino Due. Если реле рассчитано на другое напряжение, то питание к реле подключаем как на рисунке, в примере это 5 вольт. Если у вас многоканальный реле модуль, пожалуйста проверьте что бы «JDVcc » подключен к одной стороне всех реле. Оптопара активируется сигналом 3,3 В, которая в свою очередь активирует транзистор, используемый для включения реле.

Твердотельное реле из симистора для коммутации мощной нагрузки через Ардуино