Как подключить реле к arduino
Содержание:
- Электромагнитные и твердотельные реле
- 2Подключение к Arduino модуля с часами реального времени DS1307
- Как подключить светодиодную ленту к Ардуино
- Что такое LDR?
- Тестирование кода для датчика Arduino LDR
- Timer1
- Прерывания таймеров в Arduino
- Как подключить блютуз модуль к Ардуино
- Программирование таймеров в плате Arduino UNO
- Комплектующие
- Как использовать релейный модуль с устройствами высокого напряжения
- Скетч управления реле с датчиком движения
Электромагнитные и твердотельные реле
Электромагнитное реле
Электромагнитное реле – это электрическое устройство, которое механическим путем замыкает или размыкает цепь нагрузки при помощи магнита. состоит из электромагнита, подвижного якоря и переключателя. Электромагнит – это провод, который намотан на катушку из ферромагнетика. В роли якоря выступает пластина из магнитного материала. В некоторые модели устройства могут быть встроены дополнительные электронные компоненты: резистор для более точного срабатывания реле, конденсатор для уменьшения помех, диод для устранения перенапряжений.
Работает реле благодаря электромагнитной силе, возникающей в сердечники при подаче тока по виткам катушки. В исходном состоянии пружина удерживает якорь. Когда подается управляющий сигнал, магнит начинает притягивать якорь и замыкать либо размыкать цепь. При отключении напряжения якорь возвращается в начальное положение. Источниками управляющего напряжения могут быть датчики (давления, температуры и прочие), электрические микросхемы и прочие устройства, которые подают малый ток или малое напряжение.
Электромагнитное реле применяется в схемах автоматики, при управлении различными технологическими установками, электроприводами и другими устройствами. Реле предназначено для регулирования напряжений и токов, может использоваться как запоминающее или преобразующее устройство, также может фиксировать отклонения параметров от нормальных значений.
Классификация электромагнитных реле:
- Управляющий ток может быть как постоянным, так и переменным. В первом случае устройство может быть нейтральным или поляризованным. Для переменного тока якорь выполняется из электротехнической стали, чтобы уменьшить потери.
- Якорное или герконовое реле. Для якорного процесс замыкания и размыкания происходит при помощи перемещения якоря, для герконового характерно отсутствие сердечника, магнитное поле воздействует на электрод с контактами.
- Быстродействие – до 50 мс, до 150 мс и от 1 с.
- Зщитное покрытие – герметизированное, зачехленное и открытое.
По сравнению с полупроводниковыми устройствами электромагнитное реле обладает преимуществами – оно стоит недорого, коммутация большой нагрузки при небольшом размере устройства, малое выделение тепла на катушке. Из недостатков можно выделить медленное срабатывание, помехи и сложность коммутации индуктивных нагрузок.
Твердотельные реле
Твердотельные реле считаются хорошей альтернативой электромагнитным, они представляет собой модульное полупроводниковое устройство, которое производится по гибридной технологии. В составе реле имеются транзисторы, симисторы или тиристоры. По сравнению с электромагнитными устройствами твердотельные реле обладают рядом преимуществ:
- Долгий срок эксплуатации.
- Быстродействие.
- Малые размеры.
- Отсутствуют посторонние шумы, акустические помехи, дребезги контактов.
- Низкое потребление энергии.
- Качественная изоляция.
- Стойкость к вибрации и ударам.
- Нет дугового разряда, что позволяет работать во взрывоопасных местах.
Работают по следующему принципу: подается управляющий сигнал на светодиод, происходит гальваническая развязка управляющей и коммутируемой цепей, затем сигнал переходит на фотодиодную матрицу. Напряжение регулирует силовым ключом.
Твердотельные реле также имеют несколько недостатков. Во-первых, при коммутации происходит нагрев устройства. Повышение температуры устройства приводит к ограничению регулируемого тока – при температурах, превышающих 60 градусов, уменьшается величина тока, максимальная рабочая температура 80 градусов.
Твердотельные реле классифицируются по следующим признакам:
- Тип нагрузки – однофазные и трехфазные.
- Способ управления – коммутация происходит за счет постоянного напряжения, переменного или ручного управления.
- Метод коммутации: контроль перехода через ноль (применяется для слабоиндуктивных, емкостных и резистивных нагрузок), случайное включение (индуктивные и резистивные нагрузки, которым необходимо мгновенное срабатывание) и фазовое управление (изменение выходного напряжения, регулировка мощности, управление лампами накаливания).
2Подключение к Arduino модуля с часами реального времени DS1307
Таймер DS1307 в отличие от DS3231 проще по функциональности: он имеет меньше регистров, не имеет встроенного датчика температуры и встроенного генератора тактовой частоты. Не имеет он также и функции будильника. Шина I2C функционирует только на частоте 100 кГц. Модуль с часами реального времени DS1307 может выглядеть вот так:
Внешний вид модуля с часами реального времени DS1307
Здесь номером 1 обозначена микросхема собственно таймера DS1307, номер 2 – микросхема памяти AT24C32 объёмом 32 кбит, 3 – кварцевый резонатор с частотой 32,768 кГц, 4 – держатель для батареи типа 2032. Схема датчика приведена на рисунке:
Схема часов реального времени на датчике DS1307. Изображение с сайта easyelectronics.ru
На модуле имеются две группы контактов: P1 и P2. Группа P2 имеет стандартные выводы для шины I2C, плюс дополнительный вывод DS, к которому можно подключить внешний датчик температуры DS18B20. Группа P1 имеет большее число контактов:
Название | Назначение вывода |
---|---|
SQ | Выход прямоугольного сигнала 30 кГц; |
DS | подключение внешнего датчика температуры DS18B20; |
SCL | шина тактирования интерфейса I2C; |
SDA | шина данных интерфейса I2C; |
VCC | питание модуля – 3.3 или 5 вольт; |
GND | земля; |
BAT | вход питания от внешней батареи с напряжением в диапазоне 2,0…3,5 В. |
Подключение этого модуля к Arduino осуществляется абсолютно так же, как и рассмотренного ранее: VCC модуля – 5V Arduino, GND – GND, SDA – A4, SCL – A5.
Теперь пришла пора познакомиться с устройством регистров часов DS1307. Карта регистров приведена на рисунке:
Карта регистров часов реального времени DS1307
Если присмотреться, увидим, что регистры 0x00…0x06 в точности совпадают с аналогичными регистрами рассмотренного таймера DS3231, а регистр 0x07 отвечает за частоту генерируемого прямоугольного сигнала. Кроме того, I2C адрес DS1307 также аналогичен адресу модуля DS3231. Поэтому логично предположить, что скетч установки времени подойдёт и здесь. В этом легко убедиться, если загрузить скетч в Arduino с подключённым модулем DS1307. Не забудьте только обновить установочный массив в соответствии с временем, которое будете выставлять на часах. Пример разобран в предыдущем разделе.
Скетч вывода времени также будет работать с этим модулем. После установки времени загрузим скетч и проверим это. Всё работает!
Модуль с таймером DS1307 подключён к Arduino
Библиотеки для работы с часами реального времени DS1307 и DS3231
В приложенном архиве лежат две разные библиотеки для Arduino (используйте ту, которая будет вам наиболее удобна), а также технические описания (datasheet) на микросхемы DS1307 и DS3231.
Установка библиотек проводится стандартным способом: помещением директории с библиотекой в директорию libraries среды Arduino IDE или через меню Sketch Include Library. Проще всего начать знакомство с библиотекой с изучения примеров, которые появятся в меню File Examples после установки библиотеки. Там имеются примеры и установки времени, и чтения показаний часов.
Как подключить светодиодную ленту к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- источник постоянного тока 12 Вольт;
- светодиодная лента;
- полевые / биполярные транзисторы;
- реле Ардуино 12 Вольт;
- датчик движения;
- макетная плата;
- резисторы;
- провода «папа-папа», «папа-мама».
Подключение светодиодной ленты к Ардуино через реле
На картинке мы представили первый вариант подключения светодиодной ленты к Ардуино: через реле, а полевой транзистор рассмотрим далее. Первый и второй скетч, размещенные ниже, можно применять на двух схемах. Третий пример с плавным включением / затуханием можно использовать только в схеме с транзистором. После сборки схемы загрузите следующие примеры программ в плату Arduino.
Программа для светодиодной ленты Ардуино
void setup() { pinMode(12, OUTPUT); // объявляем пин 12, как выход } void loop() { digitalWrite(12, HIGH); delay(1000); digitalWrite(12, LOW) delay(1000); }
Пояснения к коду:
- Для зажигания LED ленты через реле можно использовать цифровой пин;
- Код повторяет программу для мигания светодиода на Ардуино;
- Для данного примера датчик движения к Ардуино можно не подключать.
Скетч для светодиодной ленты с датчиком движения
unsigned long counttime; byte w = 1; #define LED 12 // назначаем порт для реле #define PIR 2 // назначаем порт для датчика void setup() { pinMode(LED, OUTPUT); // объявляем пин LED, как выход pinMode(PIR, INPUT); // объявляем пин PIR, как вход } void loop() { delay(200); // если есть движение - включаем свет if (digitalRead(PIR) == HIGH) { digitalWrite(LED, HIGH); w = 1; } // если движения нет - включаем счетчик if (digitalRead(PIR) == LOW) { counttime = millis(); w = 0; while (w == 0) { delay(200); // если движения нет в течении 10 секунд - выключаем свет и выходим из цикла if (millis() - counttime > 10000) { digitalWrite(LED, LOW); w = 1; } // если обнаружено движение в течении 10 сек. - включаем свет и выходим из цикла if (digitalRead(PIR) == HIGH) { digitalWrite(LED, HIGH); w = 1; } } } }
Пояснения к коду:
- В выражении можно поставить любое значение в миллисекундах, при котором свет не будет выключаться;
- Задержка может влиять на скорость срабатывания датчика, но позволяет немного разгрузить процессор.
Что такое LDR?
LDR сенсор на английском звучит как Light Dependent resistor, что в переводе означает «светозависимый резистор».
Неправда ли, было бы интересно иметь под рукой устройство, которое включает свет при наступлении сумерок? Цель нашего проекта сделать именно такое устройство.
Всякий раз, когда комната становится темной, лампочка автоматически будет включаться. Вы можете использовать это как систему аварийного освещения. Используйте её, чтобы автоматически включать свет, когда в комнате недостаточно света.
Чтобы обнаружить интенсивность света или темноты, мы используем датчик, называемый LDR (резистор, зависящий от света или светозависимый резистор).
LDR — это особый тип резистора, который позволяет пропускать через себя более высокие напряжения (низкое сопротивление), когда есть высокая интенсивность света, и пропускает низкое напряжение (высокое сопротивление), когда слабая интенсивность света. Мы можем воспользоваться этим свойством LDR и использовать его в нашем проекте Ардуино.
Тестирование кода для датчика Arduino LDR
После подключения LDR к Arduino вы можете проверить значения, поступающие из LDR через Arduino. Для этого подключите Arduino через USB к компьютеру и откройте программное обеспечение Arduino IDE. Затем вставьте этот код и загрузите его в Arduino:
int sensorPin = A0; // select the input pin for LDR int sensorValue = 0; // variable to store the value coming from the sensor void setup() { Serial.begin(9600); //sets serial port for communication } void loop() { sensorValue = analogRead(sensorPin); // read the value from the sensor Serial.println(sensorValue); //prints the values coming from the sensor on the screen delay(100); }
После загрузки кода нажмите кнопку на Arduino IDE под названием «Последовательный монитор» (Serial Monitor). Это откроет новое окно, которое печатает на экране различные значения.
Теперь, проверьте датчик, закрыв его поверхность от света и посмотрите, какие значения показывает серийный монитор. Вот как выглядит последовательный монитор:
Timer1
Данная библиотека представляет собой набор функций для настройки аппаратного 16-битного таймера Timer1 в ATMega168/328. В микроконтроллере доступно 3 аппаратных таймера, которые могут быть настроены различными способами для получения различных функциональных возможностей. Начало разработки данной библиотеки было вызвано необходимостью быстро и легко установить период или частоту ШИМ сигнала, но позже она разраслась, включив в себя обработку прерываний по переполнению таймера и другие функции. Она может быть легко расширена или портирована для работы с другими таймерами.
Точность таймера зависит от тактовой частоты процессора. Тактовая частота таймера Timer1 определяется установкой предварительного делителя частоты. Этот делитель может быть установлен в значения 1, 8, 64, 256 или 1024.
Делитель | Длительность одного отсчета, мкс | Максимальный период, мс |
---|---|---|
1 | 0,0625 | 8,192 |
8 | 0,5 | 65,536 |
64 | 4 | 524,288 |
256 | 16 | 2097,152 |
1024 | 64 | 8388,608 |
В общем:
- Максимальный период = (Делитель / Частота) × 217
- Длительность одного отсчета = (Делитель / Частота)
Скачать можно здесь (TimerOne-r11.zip) или с Google Code.
Для установки просто распакуйте и поместите файлы в каталог Arduino/hardware/libraries/Timer1/.
Прерывания таймеров в Arduino
Прерывания таймеров являются видом программных прерываний. В Arduino присутствуют следующие виды прерываний таймеров.
Прерывания переполнения таймера (Timer Overflow Interrupt)
Это прерывание происходит всегда, когда значение счетчика достигает его максимального значения, например, для 16-битного счетчика это 65535. Соответственно, процедура обработки (обслуживания) прерывания (ISR) вызывается когда бит прерывания переполнения таймера установлен (enabled) в TOIEx присутствующем в регистре масок прерываний TIMSKx.
ISR Format:
Output Compare Register (OCRnA/B) – регистр сравнения выхода
Процедура обработки прерывания сравнения выхода (Output Compare Match Interrupt) вызывается при вызове функции TIMERx_COMPy_vect если установлен бит/флаг OCFxy в регистре TIFRx. Эта процедура обработки прерывания (ISR) становится доступной при помощи установки бита OCIExy, присутствующем в регистре маски прерываний TIMSKx.
Захват входа таймера (Timer Input Capture)
Процедура обработки этого прерывания вызывается если установлен бит/флаг ICFx в регистре флагов прерываний таймера (TIFRx — Timer Interrupt Flag Register). Эта процедура обработки прерываний становится доступной при установке бита ICIEx в регистре маски прерываний TIMSKx.
Как подключить блютуз модуль к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- Bluetooth модуль HC-05/06;
- светодиоды и резисторы;
- сервомотор;
- провода «папа-папа» и «папа-мама».
Обратите внимание, что при подключении любого модуля к портам TX и RX на Arduino, скетч загрузить в плату не получится — у вас будет выходить ошибка, что Arduino Nano не доступна. Перед загрузкой скетча — отключайте Bluetooth модуль
Во-вторых, вам потребуется установить приложение на смартфон для отправки данных на блютуз модуль hc-05/06, скачайте приложение здесь и загрузите на телефон с компьютера.
Схема подключения блютуз модуля к Ардуино
Для начала мы будем дистанционно включать и выключать светодиод, подключенный параллельно к 13 порту на Ардуино и, расположенный на самой плате. После установки приложения на смартфон или планшет и загрузки скетча (скачать архив со скетчем можно далее), подключите блютуз модуль к Ардуино, как изображено на схеме выше. До сопряжения устройств, светодиод на модуле HC-05 начнет быстро мигать.
Скетч для Bluetooth модуля Arduino
int val; // освобождаем память в контроллере для переменой void setup() { Serial.begin(9600); // подключаем последовательный порт pinMode(13, OUTPUT); // объявляем пин 13 как выход } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { val = Serial.read(); // переменная val равна полученной команде if (val == '1') {digitalWrite(13, HIGH);} // при 1 включаем светодиод if (val == '0') {digitalWrite(13, LOW);} // при 0 выключаем светодиод } }
Соединение с телефоном Bluetooth модуля
Для сопряжения смартфона с Bluetooth модулем HC-06 и HC-05 перейдите в настройки телефона и включите блютуз. У вас активируется поиск устройств, кроме названия HC-05 или HC-06, вы увидите адрес устройства. Для подключения потребуется ввести пароль, обычно, это «1234» или «0000». Пароль потребуется ввести только один раз, при последующих подключениях сопряжение будет происходить автоматически.
Соединение между смартфоном и блютуз модулем HC-05
Далее откройте приложение, которое вы установили на смартфон или планшет и нажмите на кнопку «Подключить Блютуз». У вас появится список устройств с адресами — выберите нужное устройство. Если сопряжение прошло успешно, то светодиод на модуле начнет мигать реже — примерно 1 раз в две секунды. Теперь вы можете дистанционно включать/выключать светодиод на Ардуино, используя блютуз модуль.
Приложение для управление Ардуино через блютуз модуль
В следующем примере мы добавим к светодиоду сервопривод. Вы уже знаете, как подключить сервомотор к Ардуино, осталось лишь загрузить в плату новый скетч. Скачать скетч и приложение для смартфона можно одним архивом здесь.
Скетч для управления блютуз модулем
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом Servo servo1; // объявляем переменную servo типа "servo1" int val; // освобождаем память в контроллере для переменой void setup() { servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11 Serial.begin(9600); // подключаем последовательный порт pinMode(13, OUTPUT); // объявляем пин 13 как выход } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { val = Serial.read(); // переменная val равна полученной команде if (val == '1') {digitalWrite(13, HIGH);} // при 1 включаем светодиод if (val == '0') {digitalWrite(13, LOW);} // при 0 выключаем светодиод if (val == '4') {servo1.write(0);} // ставим угол поворота 0 if (val == '5') {servo1.write(90);} // ставим угол поворота 90 if (val == '6') {servo1.write(180);} // ставим угол поворота 180 } }
Программирование таймеров в плате Arduino UNO
В этом проекте мы будем использовать прерывание переполнения таймера (Timer Overflow Interrupt) и использовать его для включения и выключения светодиода на определенные интервалы времени при помощи установки заранее определяемого значения (preloader value) регистра TCNT1 с помощью кнопок. Полный код программы будет приведен в конце статьи, здесь же рассмотрим его основные части.
Для отображения заранее определяемого значения используется ЖК дисплей, поэтому необходимо подключить библиотеку для работы с ним.
Анод светодиода подключен к контакту 7 платы Arduino, поэтому определим (инициализируем) его как ledPin.
Затем сообщим плате Arduino к каким ее контактам подключен ЖК дисплей.
Установим заранее определенное значение (preloader value) равное 3035 – это будет соответствовать интервалу времени в 4 секунды. Формула для расчета этого значения приведена выше в статье.
Затем в функции void setup() установим режим работы ЖК дисплея 16х2 и высветим приветственное сообщение на нем на несколько секунд.
Затем контакт, к которому подключен светодиод, установим в режим вывода данных, а контакты, к которым подключены кнопки – в режим ввода данных.
После этого отключим все прерывания.
Далее инициализируем Timer1.
Загрузим заранее определенное значение (3035) в TCNT1.
Затем установим коэффициент деления предделителя равный 1024 при помощи конфигурирования битов CS в регистре TCCR1B.
Разрешим вызов процедуры обработки прерывания переполнения счетчика с помощью установки соответствующего бита в регистре маски прерываний.
Теперь разрешим все прерывания.
Теперь процедура обработки прерывания переполнения счетчика будет отвечать за включение и выключение светодиода с помощью функции digitalWrite. Состояние светодиода будет меняться каждый раз когда будет происходить прерывание переполнения счетчика.
В функции void loop() предварительно загружаемое значение увеличивается и уменьшается на 10 (инкрементируется и декрементируется) при помощи кнопок в схеме. Также это значение отображается на экране ЖК дисплея 16х2.
Комплектующие
Автоматический вентилятор Ардуино, который включается сам, когда температура в помещении достигнет определенной величины.
Мы будем использовать датчик DHT22 для получения значения температуры и выведем это значение температуры на ЖК-дисплее. Затем мы проверим, будет ли значение температуры больше 35 или нет, если температура будет больше 35, тогда реле будет активировано и вентилятор начнет вращаться.
Нам понадобятся следующие детали для нашего проекта:
Кол-во | Комплектующие |
---|---|
1 | Arduino Uno |
1 | 16×2 LCD / ЖК Дисплей |
1 | DHT22 датчик температуры и влажности |
1 | DC motor / Двигатель постоянного тока |
1 | 9В батарейка |
1 | 10K потенциометр |
1 | 220 Ом резистор |
Набор проводов | |
1 | Макетная плата |
Как использовать релейный модуль с устройствами высокого напряжения
Сначала давайте посмотрим на принципиальную схему. Как описано ранее, мы будем использовать адаптер 5 В в качестве отдельного источника питания для электромагнита, подключенного к JDVcc и заземляющему выводу. Вывод Arduino 5V будет подключен к выводу Vcc модуля, а вывод 7 к входному выводу In1 для управления реле. Теперь для части «высокое напряжение» нам понадобится вилка, розетка и кабель с двумя проводами. Один из двух проводов будет обрезан и подключен к общему и нормально разомкнутому контакту выходного разъема модуля. Таким образом, в этой конфигурации, когда мы активируем реле, мы получим замкнутую и рабочую высоковольтную цепь.
Ниже коснемся того, как сделать кабель. Нам нужны вилка, розетка и кабель. Аккуратно обрезаем кабель и обрезаем один из проводов, как показано на рисунке ниже. Подключаем их к нормально разомкнутым контактам релейного модуля. Также подключаем концы кабеля к вилке и розетке.
Примечание! Убедитесь, что вы используете другие провода, а не желтый и зеленый, так как они предназначены для заземления.
Окончательный вид кабеля, готового к использованию, ниже. Прежде чем использовать кабель, убедитесь, что он работает правильно. Вы можете проверить это с помощью мультиметра или сначала проверить его при низком напряжении.
Скетч управления реле с датчиком движения
В реальных проектах изменение состояния реле должно происходить в ответ на какую то реакцию среды. Например, в ответ на сигнал сработавшего датчика движения можно включить свет, замкнув цепь с помощью реле. В данном скетче мы рассмотрим такой вариант подключения.
Схема подключения реле
Следует понимать, что в реальных проектах обходятся вообще без ардуино – просто подключая сигнальный выход датчика к реле.
Пример скетча
В данном примере мы добавим в цикл 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); // Проверяем значения один раз в секунду. }