Обзор электромеханических реле
Чтобы управлять электроприборами с помощью микроконтроллера существует специальный тип выключателей — электромагнитные реле. Электромагнитное реле замыкает цепь нагрузки с помощью электромагнита. При подаче напряжения на катушку, в ней возникает поле, которое притягивает металлическую лапку, которая замыкает контакты нагрузки. Для работы с Arduino подойдут реле, которые управляются напряжением 5В. Такие реле способны коммутировать нагрузку до 10А 30В постоянного тока или до 10А 250В переменного тока. Но напрямую к выводу Arduino подключить реле не получится, т.к. пины Arduino не могут обеспечить мощность, необходимую для работы катушки реле. Поэтому в схему управления реле включается транзистор по схеме с общим эмиттером для усиления управляющего тока. Схема управления реле с вывода Arduino с использованием npn-транзистора показана на рис. 1. Необходима установка ограничительного резистора между выводом Arduino и базой транзистора.Рисунок 1. Схема управления реле с помощью npn-транзистора (p-канальное управление)
При подаче на вывод Arduino сигнала HIGH реле включается, при подаче сигнала LOW – выключается. Но гораздо чаще используется используется n-канальное управление (с помощью pnp-транзистора (рис. 2)). При таком управлении реле включается подачей на вывод Arduino низкого уровня LOW.Рисунок 2. Схема управления реле с помощью pnp-транзистора (n-канальное управление)
Для работы с Arduino используют релейные модули на несколько реле (см. рис. 3), которые кроме схемы управления реле реле содержит еще и гальваническую развязку с помощью оптрона, которая защищает контроллер от скачков напряжения на катушке.Рисунок 3. Релейный модуль на 8 каналов
Релейные модули содержат от 1 до 8 каналов реле (n-канальное управление) , которые управляются с помощью напряжение 5В. Модули специально разработаны для управления с помощью Arduino.Технические характеристики релейного модуля
- Рабочий ток одного канала – 15 – 20мА;
- Управляющее напряжение – 5В;
- Коммутируемая нагрузка – AC250V 10A, DC30V 10A;
- Светодиодная индикация состояния;
- Управление – n-канальное;
Подключение реле к плате Arduino
Релейный модуль имеет два интерфейса:- для подключения контроллера;
- для подключения нагрузок к реле.
Рисунок 4. Схема подключения релейного модуля к плате Arduino
Пример использования
Рассмотрим использование релейного модуля для управления пылесосом, но не простым, а подключенным к импульсному монетоприемнику. При получении монет необходимо включить пылесос на определенное время. Нам потребуются следующие компоненты:- Плата Arduino Uno -1;
- Плата прототипирования – 1;
- Релейный модуль - 1;
- Монетоприемник CH-926 - 1;
- Блок питания 12В;
- Резистор 4.7 кОм – 1;
- Провода.
Рисунок 5. Схема подключения вендингового пылесоса
Монетоприемник по получении монеты выдает на выход OUT несколько импульсных сигналов (программируется при настройке монетоприемника). Ловить эти импульсы плата Arduino будет по прерыванию 1. После приема импульсов, плата Arduino, включает реле, к которому подключен пылесос на время, пропорциональное количеству полученных импульсов. По прошествии заданного времени реле выключается. Содержимое скетча представлено в листинге 1. Листинг 1//******** константы // стоимость 1 пульса - сек #define TIME1 30 // пины подключения #define PIN_RELAY 7 #define PIN_MONEY 3 #define RELAY_ON 0 #define RELAY_OFF 1 // для подсчета количества пульсов int counter1=0; unsigned long timeAllPulse1=1200; // макс. время приема монеты unsigned long timeCount1=0; // включение пылесоса boolean run_cleaner=false; // для подсчета времени работы пылесоса unsigned int time_run=0; // unsigned long millis1=0; void setup() { Serial.begin(9600); // настройка пинов pinMode(PIN_RELAY,OUTPUT); // реле digitalWrite(PIN_RELAY,RELAY_OFF); // выключить // запуск обработчика прерываний монетоприемника attachInterrupt(1,count_pulse1,FALLING); Serial.println("start!!!"); } void loop() { // истекло время приема монеты? if(pulse1>0 && (millis()-timeCount1)>timeAllPulse1) { Serial.print("counter1=");Serial.println(counter1); time_run=time_run+ counter1*TIME1; Serial.print("time_run=");Serial.println(time_run); pulse1=0; run_cleaner=true; millis1=millis(); cleaner_start(); } // отсчет времени работы пылесоса if(run_cleaner) { if(millis()-millis1>=100) { millis1=millis(); time_run=time_run-1; Serial.print("time_run=");Serial.println(time_run); if(time_run<1) { // выключить cleaner_stop(); run_cleaner=false; } } } } // обработка прерывания монетоприемника - получить кол-во импульсов void count_pulse1() { detachInterrupt(1); counter1++; if(counter1==1) timeCount1=millis(); delay(5); attachInterrupt(1,count_pulse1,FALLING); } // включить пылесос void cleaner_start() { digitalWrite(PIN_RELAY,RELAY_ON); // включить } // выключить пылесос void cleaner_stop() { digitalWrite(PIN_RELAY,RELAY_OFF); // выключить delay(3000); counter1=0; time_run=0; }
Рисунок 6. Схема в сборе
Загружаем скетч на плату и проверяем работу.Часто задаваемые вопросы FAQ
1. Релейный модуль не работает- Проверьте подано ли питание на релейный модуль.
- Проверьте, установлена ли перемычка Vcc to JD-Vcc.
- Проверьте подано ли питание на релейный модуль.
- Проверьте соединение входов IN1-IN8 с платой Arduino
- Идут помехи – подайте внешнее питание на модуль.