Подключение реле к ардуино

Подключение Bluetooth-модуля к Arduino

Так теперь нам нужно подключить нашу Arduino с Bluetooth. Если на Arduino нет вывода с 3.3В, а только 5В то нужен будет поставить стабилизатор чтобы снизить питание. Назначение выводов HC-05 легко найти в интернете. Для использования рекомендуем вам сделать плату с выведенными линиями питания, Rx и Tx. Подключение к Arduino необходимо производить в следующем порядке:

  • вывод Arduino 3.3В или (5В через стабилизатор!) — к 12 пину модуля Bluetooth
  • вывод Arduino GND — к 13 пину модуля Bluetooth
  • вывод Arduino TX — к 2 пину модуля RX Bluetooth
  • вывод Arduino RX — к 1 пину модуля TX Bluetooth

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

Char incomingByte; // входящие данные
int LED = 12; // LED подключен к 12 пину
void setup() {
Serial.begin(9600); // инициализация порта
pinMode(LED, OUTPUT); //Устанавливаем 12 вывод как выход
Serial.println(«Press 1 to LED ON or 0 to LED OFF…»);
}
void loop() {
if (Serial.available() > 0) { //если пришли данные
incomingByte = Serial.read(); // считываем байт
if(incomingByte == «0»)
{
digitalWrite(LED, LOW); // если 1, то выключаем LED
Serial.println(«LED OFF. Press 1 to LED ON!»); // и выводим обратно сообщение
}
if(incomingByte == «1») {
digitalWrite(LED, HIGH); // если 0, то включаем LED
Serial.println(«LED ON. Press 0 to LED OFF!»);
}
}
}

Принципы работы GSM модуля

GSM модуль используется во многих устройствах, которые ориентированы на взаимодействие с технологией GSM. Обычно он используется для взаимодействия компьютера с GSM сетью. Однако в роли компьютера может выступать и плата Arduino.

GSM модуль понимает только AT команды и может на них отвечать. На большинство AT команд модуль отвечает сообщением “OK“ если он выполнил ее успешно, и сообщением “ERROR” если во время выполнения команды произошли какие либо проблемы. Существуют различные AT команды, например, ATA – ответить на звонок, ATD – сделать звонок, AT+CMGR — прочесть сообщение, AT+CMGS – передать SMS сообщение и т.д. AT команды должны заканчиваться символом возврата каретки, то есть \r (0D в шестнадцатеричном формате), например, “AT+CMGS\r”. К примеру, в нашем проекте мы можем использовать следующие AT команды:

ATE0 For echo offAT+CNMI=2,2,0,0,0 <ENTER> режим автоматического открытия принимаемых сообщений ATD<Mobile Number>; <ENTER> осуществить вызов (например, ATD+919610126059;\r\n)AT+CMGF=1 <ENTER> выбор текстового режимаAT+CMGS=”Mobile Number” <ENTER> назначение мобильного номера получателя>>после этого мы можем написать наше сообщение>>после написания сообщенияCtrl+Z команда передачи сообщения (26 в десятичном коде).ENTER=0x0d в шестнадцатеричном формате

SIM900 представляет собой четырех диапазонный GSM/GPRS модуль, способный функционировать в диапазонах 850/900/1800/1900 МГц в режимах передачи/приема голоса, SMS и данных. Отличается низким энергопотреблением. Внешний вид данного модуля показан на следующем рисунке.

Помехи и защита от них

Если в одной цепи питания с Ардуино стоят мощные потребители, такие как сервоприводы, адресные светодиодные ленты, модули реле и прочее, на линии питания могут возникать помехи, приводящие к сильным шумам измерений с АЦП, а более мощные помехи могут дергать прерывания и даже менять состояния пинов, нарушая связь по различным интерфейсам связи и внося ошибки в показания датчиков, выводя чушь на дисплеи, а иногда дело может доходить до перезагрузки контроллера или его зависания. Некоторые модули также могут зависать, перезагружаться и сбоить при плохом питании, например bluetooth модуль спокойно может зависнуть и висеть до полной перезагрузки системы, а радиомодули rf24 вообще не будут работать при “шумном” питании.

Более того, помеха может прийти откуда не ждали – по воздуху, например от электродвигателя, индуктивный выброс ловится проводами и делает с системой всякое. Что же делать? “Большие дяди” в реальных промышленных устройствах делают очень много для защиты от помех, этому посвящены целые книги и диссертации. Мы с вами рассмотрим самое простое, что можно сделать дома на коленке.

  • Питать логическую часть (Ардуино, слаботочные датчики и модули) от отдельного малошумящего блока питания 5V, то есть разделить питание логической и силовой частей, а ещё лучше питаться в пин Vin от блока питания на 7-12V, так как линейный стабилизатор даёт очень хорошее ровное напряжение. Для корректной работы устройств, питающихся отдельно (драйверы моторов, приводы) нужно соединить земли Ардуино и всех внешних устройств;
  • Поставить конденсаторы по питанию платы, максимально близко к пинам 5V и GND: электролит 6.3V 100-470 uF (мкФ, ёмкость зависит от качества питания: при сильных просадках напряжения ставить ёмкость больше, при небольших помехах хватит и 10-47 мкФ) и керамический на 0.1-1 uF. Это сгладит помехи даже от сервоприводов;
  • У “выносных” на проводах элементах системы (кнопки, крутилки, датчики) скручивать провода в косичку, преимущественно с землёй. А ещё лучше использовать экранированные провода, экран естественно будет GND. Таким образом защищаемся от электромагнитных наводок;
  • Соединять все земли одним толстым проводом и по возможности заземлять на центральное заземление;
  • Металлический и заземленный корпус устройства (или просто обернутый фольгой ), на который заземлены все компоненты схемы – залог полного отсутствия помех и наводок по воздуху.

Ещё лучше с фильтрацией помех справится LC фильтр, состоящий из индуктивности и конденсатора. Индуктивность нужно брать с номиналом в районе 100-300 мкГн и с током насыщения больше, чем ток нагрузки после фильтра. Конденсатор – электролит с ёмкостью 100-1000 uF в зависимости опять же от тока потребления нагрузки после фильтра. Подключается вот так, чем ближе к нагрузке – тем лучше:

Подробнее о расчёте фильтров можно почитать здесь.

Индуктивные выбросы

На практике самая подлая помеха обычно приходит при коммутации индуктивной нагрузки при помощи электромагнитного реле: от такой помехи очень сложно защититься, потому что приходит она по земле, то есть вас не спасёт даже раздельное питание проекта. Что делать?

  • Для цепей постоянного тока обязательно ставить мощный диод обратно-параллельно нагрузке, максимально близко к клеммам реле. Диод примет (замкнёт) на себя индуктивный выброс от мотора/катушки;
  • Туда же, на клеммы реле, можно поставить RC цепочку, называемую в этом случае искрогасящей: резистор 39 Ом 0.5 Вт, конденсатор 0.1 мкФ 400V (для цепи 220В);
  • Для сетей переменного тока использовать твердотельное (SSR) реле с детектором нуля (Zero-cross detector), они же называются “бесшумные” реле. Если в цепи переменного тока вместо реле стоит симистор с оптопарой, то оптопару нужно использовать опять же с детектором нуля, такая оптопара, как и SSR zero-cross будут отключать нагрузку в тот момент, когда напряжение в сети переходит через ноль, это максимально уменьшает все выбросы.

Подробнее об искрогасящих цепях можно почитать вот в этой методичке.

“Универсальное” электромагнитное реле

Электромагнитное реле является по сути управляемым механическим выключателем: подали на него ток – оно замкнуло контакты, сняли ток – разомкнуло. Контакты являются именно контактами: металлическими “пятаками”, которые прижимаются друг к другу. Именно поэтому такое реле может управлять как нагрузкой постоянного, так и переменного тока. 

Сама катушка реле является неслабой индуктивной нагрузкой, что приводит к дополнительным проблемам (читай ниже), поэтому для управления “голым” реле нам понадобится дополнительная силовая и защитная цепь.

После изучения данного урока вы сами сможете её составить (транзистор и диод), а сейчас мы поговорим о модулях реле: готовая плата, на которой стоит само реле, а также цепи коммутации, защиты и даже оптическая развязка. Такие модули бывают “семейными” – с несколькими реле на борту. Спасибо китайцам за это! Купить можно на Aliexpress, также смотрите варианты у меня в каталоге ссылок на Али.

Такое реле сделано специально для удобного управления с микроконтроллера: пины питания VCC (Vin, 5V) и GND подключаются к питанию, а далее реле управляется логическим сигналом, поданным на пин IN. С другой стороны стоит клеммник для подключения проводов, обычно контакты подписаны как NO, NC и COM. Это общепринятые названия пинов кнопок, переключателей и реле:

  • COM – Common, общий. Реле является переключающим, и пин COM является общим.
  • NO – Normal Open, нормально открытый. При неактивном реле данный контакт не соединён с COM. При активации реле он замыкается с COM.
  • NC – Normal Closed, нормально закрытый. При неактивном реле данный контакт соединён с COM. При активации реле он размыкается с COM.

Подключение нагрузки через реле думаю для всех является очевидным:

Важный момент: катушка реле в активном режиме потребляет около 60 мА, то есть подключать больше одного модуля реле при питании платы от USB не рекомендуется – уже появятся просадки по напряжению и помехи:

Такие модули реле бывают двух типов: низкого и высокого уровня. Реле низкого уровня переключается при наличии низкого сигнала (GND) на управляющем пине . Реле высокого уровня соответственно срабатывает от высокого уровня . Какого типа вам досталось реле можно определить экспериментально, а можно прочитать на странице товара или на самой плате. Также существуют модули с выбором уровня:

На плате, справа от надписи High/Low trigger есть перемычка, при помощи которой происходит переключение уровня.

Электромагнитное реле имеет ряд недостатков перед остальными рассмотренными ниже способами, вы должны их знать и учитывать:

  • Ограниченное количество переключений: механический контакт изнашивается, особенно при большой и/или индуктивной нагрузке.
  • Противно щёлкает!
  • При большой нагрузке реле может “залипнуть”, поэтому для больших токов нужно использовать более мощные реле, которые придётся включать при помощи… маленьких реле. Или транзисторов.
  • Необходимы дополнительные цепи для управления реле, так как катушка является индуктивной нагрузкой, и нагрузкой самой по себе слишком большой для пина МК (решается использованием китайского модуля реле).
  • Очень большие наводки на всю линию питания при коммутации индуктивной нагрузки.
  • Относительно долгое переключение (невозможно поставить детектор нуля, читай ниже), при управлении индуктивными цепями переменного тока можно попасть на большой индуктивный выброс, необходимо ставить искрогасящие цепи.

Важный момент связан с коммутацией светодиодных светильников и ламп, особенно дешёвых: у них прямо на входе стоит конденсатор, который при резком подключении в цепь становится очень мощным потребителем и приводит к скачку тока. Скачок может быть настолько большим, что 15-20 Ваттная светодиодная лампа буквально сваривает контакты реле и оно “залипает”! Данный эффект сильнее выражен на дешёвых лампах, будьте с ними аккуратнее (за инфу спасибо DAK).

При помощи реле можно плавно управлять сильно инерционной нагрузкой, такой как большой обогреватель. Для этого нужно использовать сверхнизкочастотный ШИМ сигнал, у меня есть готовая библиотека. Не забываем, что реле противно щёлкает и изнашивается, поэтому для таких целей лучше подходит твердотельное реле, о котором мы поговорим ниже.

Уроки Arduino #8 - управление релеУроки Arduino #8 — управление реле

Часть 2. Соединение с телефоном (Android)

В качестве подопытного будет взят телефон Samsung Galaxy Ace 2 на операционке Android.

Соединяем с телефоном

. Действие 2

В качестве терминала выберем опять-таки простой и бесплатный, но уже «Bluetooth Terminal «

P.S. В случае если не удается подключиться, отключайте питание от блютуза и подключайте заново.

В этой статье представлена пошаговая инструкция, которая поможет вам самостоятельно создать приложение для Android-смартфона, предназначенное для управления чем-либо через Bluetooth. Для демонстрации мы подробно разберем пример мигания светодиодом на Arduino по командам с телефона или планшета. В результате выполнения наших инструкций вы научитесь делать вот так:
Для управления домашним роботом достаточно добавить кнопок и обработать их команды на стороне Arduino.

Пример использования

relayClick.ino
//Определяем на каких пинах находятся реле
#define RELAY_1 7
#define RELAY_2 6
#define RELAY_3 5
#define RELAY_4 4
 
void setup() {
  // Конфигурируем нужные пины на выход
  for (int i = 4; i <= 7; ++i)
  {
    pinMode(i, OUTPUT);
  }
}
 
void loop() {
 
  //Включаем реле 1 на 5 секунд
  digitalWrite(RELAY_1, HIGH);
  delay(5000);
  //Отключаем реле 1
  digitalWrite(RELAY_1, LOW);
 
  //через секунду включаем реле 2 на 5 секунд
  delay(1000);
 
  digitalWrite(RELAY_2, HIGH);
  delay(5000);
  digitalWrite(RELAY_2, LOW);
 
  //Повторим с оставшимися реле то же самое
  delay(1000);
 
  digitalWrite(RELAY_3, HIGH);
  delay(5000);
  digitalWrite(RELAY_3, LOW);
 
  delay(1000);
 
  digitalWrite(RELAY_4, HIGH);
  delay(5000);
  digitalWrite(RELAY_4, LOW);
 
  delay(1000);
}

Пример для Espruino

В качестве мозга для управления реле рассмотрим платформу Iskra JS.

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

Подключите мини-реле к цифровому пину платформы Iskra JS. Для любителей надёжности, линии питания и управление реле мы вывели на специальный клеммник.

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield. А для коммуникации используйте трёхпроводной шлейф «мама-папа», который идёт в комплекте с реле.

А если вы уже отладили устройство и планируете упаковать всю конструкцию в корпус, рекомендуем взять Srew Shield и надёжно зафиксировать все сигналы через соединительные провода «мама-папа».

Исходный код

Прошейте платформу Iskra JS скриптом приведённым ниже.

relayBlink.js
// создаём объект для работы с реле на пине P8
var myRelay = require("@amperka/led").connect(P8);
// включаем реле на одну секунду и выключаем на две секунды
// далее процесс повторяется
myRelay.blink(1, 2);

2 Схема подключения модуля реле SRD-05VDC-SL-C

Будем использовать модуль с двумя одинаковыми реле типа SRD-05VDC-SL-C или аналогичный .

Модуль имеет 4 разъёма: силовые разъёмы K1 и K2, управляющий разъём и разъём для подачи внешнего питания (с джампером).

Реле типа SRD-05VDC-SL-C имеет три контакта для подключения нагрузки: два крайних неподвижных, а средний — переключающийся. Именно средний контакт является своего рода «ключом», который коммутирует цепи тем или иным образом. На модуле есть подсказка, какой именно контакт реле является нормально замкнутым: маркировка «K1» и «K2» соединяет средний контакт с крайним левым (на фото). Подача управляющего напряжения на вход IN1 или IN2 (слаботочный управляющий разъём) заставит реле скоммутировать средний контакт контактной группы K1 или K2 с правым (силовой разъём). Ток, достаточный для переключения реле — около 20 мА, цифровые выводы Arduino могут выдавать до 40 мА.

Разъём для подачи внешнего питания используется для того, чтобы обеспечить гальваническую развязку платы Arduino и модуля реле. По умолчанию, на разъёме между штырьками JD-VCC и VCC имеется перемычка. Когда она установлена, модуль использует для питания напряжение, поданное на вывод VCC управляющего разъёма, а плата Arduino не имеет гальванической развязки с модулем. Если нужно обеспечить гальваническую развязку модуля и Arduino, необходимо подавать питание на модуль через разъём внешнего питания. Для этого убирается перемычка, и дополнительное питание подаётся на контакты JD-VCC и GND. При этом питание на вывод VCC управляющего разъёма также подаётся (от +5 В Arduino).

Кстати, реле может коммутировать не только слаботочную нагрузку, как в нашем примере. С помощью реле можно замыкать и размыкать достаточно большие нагрузки. Какие именно – нужно смотреть в техническом описании к конкретному реле. Например, данное реле SRD-05VDC-SL-C может коммутировать сети с током до 10 А и напряжением до 250 В переменного тока или до 30 В постоянного тока. То есть его можно использовать, например, для управления освещением квартиры.

Откуда получило своё название реле

От фамилии британского учёного лорда Рэлея — 28.6%

От процедуры смены уставших почтовых лошадей — 57.1%

От названия физической величины измерения яркости — 0%

В данном примере нам не нужна гальваническая развязка Arduino и модуля реле, поэтому будем питать модуль напрямую от платы Arduino, а джампер оставим на своём месте. Соберём схему, как показано на рисунке. Используемые резисторы — 220 Ом, светодиоды любые.

Подключение реле к Ардуино

Рассмотрим одноканальный модуль реле. Он имеет всего 3 контакта, подключаются они к Ардуино Uno следующим образом: GND – GND, VCC – +5V, In – 3. Вход реле – инвертирован, так что высокий уровень на In выключает катушку, а низкий – включает.

Светодиоды нужны для индикации – при загорании красного LED1 подается напряжение на реле, при загорании зеленого LED2 происходит замыкание. Когда включается микроконтроллер, транзистор закрыт. Для его открытия на базу нужен минус, подается при помощи функции digitalWrite(pin, LOW);. Транзистор открывается, протекает ток через цепь, реле срабатывает. Чтобы его выключить, на базу подается плюс при помощи digitalWrite(pin, HIGH);.

Электромагнитные и твердотельные реле

Электромагнитное реле

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

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

Классификация электромагнитных реле:

  • Управляющий ток может быть как постоянным, так и переменным. В первом случае устройство может быть нейтральным или поляризованным. Для переменного тока якорь выполняется из электротехнической стали, чтобы уменьшить потери.
  • Якорное или герконовое реле. Для якорного процесс замыкания и размыкания происходит при помощи перемещения якоря, для герконового характерно отсутствие сердечника, магнитное поле воздействует на электрод с контактами.
  • Быстродействие – до 50 мс, до 150 мс и от 1 с.
  • Зщитное покрытие – герметизированное, зачехленное и открытое.

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

Твердотельные реле

  • Долгий срок эксплуатации.
  • Быстродействие.
  • Малые размеры.
  • Отсутствуют посторонние шумы, акустические помехи, дребезги контактов.
  • Низкое потребление энергии.
  • Качественная изоляция.
  • Стойкость к вибрации и ударам.
  • Нет дугового разряда, что позволяет работать во взрывоопасных местах.

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

Твердотельные реле также имеют несколько недостатков. Во-первых, при коммутации происходит нагрев устройства. Повышение температуры устройства приводит к ограничению регулируемого тока – при температурах, превышающих 60 градусов, уменьшается величина тока, максимальная рабочая температура 80 градусов.

Твердотельные реле классифицируются по следующим признакам:

  • Тип нагрузки – однофазные и трехфазные.
  • Способ управления – коммутация происходит за счет постоянного напряжения, переменного или ручного управления.
  • Метод коммутации: контроль перехода через ноль (применяется для слабоиндуктивных, емкостных и резистивных нагрузок), случайное включение (индуктивные и резистивные нагрузки, которым необходимо мгновенное срабатывание) и фазовое управление (изменение выходного напряжения, регулировка мощности, управление лампами накаливания).

Скетч для Ардуино

Ниже вы можете скопировать и загрузить код в свою Ардуино Уно.

#include "DHT.h" 
#include "LiquidCrystal.h"
LiquidCrystal lcd(7, 8, 9, 10, 11 ,12);
#define DHTPIN 6 
#define DHTTYPE DHT22  
DHT sensor(DHTPIN, DHTTYPE); 
int relay_pin = 9;

void setup() { 
lcd.begin(16,2); 
sensor.begin(); 
pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, HIGH);
}
void loop() { 
lcd.clear();
float t = sensor.readTemperature(); //считывание температуры с датчика
// Проверка, посылает ли датчик значения или нет
if (isnan(t)) {
lcd.print("Failed");
delay(1000);
return;
}
lcd.setCursor(0,0); 
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
if (t > 35){
  digitalWrite(relay_pin, LOW);
  lcd.setCursor(0,1); 
  lcd.print("Fan is ON "); 
  delay(10);
}
else{
  digitalWrite(relay_pin, HIGH);
  lcd.setCursor(0,1); 
  lcd.print("Fan is OFF "); 
}
delay(2000);
}

Объяснение кода

Прежде всего, мы включили библиотеки для датчика DHT22 и для ЖК-дисплея. Библиотеки помогут сделать код более простым.

Скачать все необходимые библиотеки для своих проектов вы можете на нашем сайте в разделе — Библиотеки.

#include "DHT.h"
#include "LiquidCrystal.h"

Затем мы инициализировали контакты к которым мы подключили ЖК-дисплей и датчик DHT22. После этого мы определили тип датчика DHT, который используется

Существует множество других типов датчиков DHT, таких как DHT11, поэтому здесь важно определить тип

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

#define DHTPIN 8

#define DHTTYPE DHT22
DHT sensor(DHTPIN, DHTTYPE);

В функции настройки мы дали команду DHT22 и LCD, чтобы начать общение с Arduino. Затем мы объявили контакт реле как выходной вывод, потому что мы дадим напряжение от Ардуино к реле для активации реле. Реле работает обратно (High означает Low для реле).

lcd.begin(16,2);
sensor.begin();

pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, HIGH);

В функции цикла мы очищаем ЖК-экран, а затем считываем значение температуры от датчика.

lcd.clear();
float t = sensor.readTemperature();

if (isnan(t)) {
lcd.print("Failed");
delay(1000);
return;
}

Затем мы печатаем значение температуры на ЖК-дисплее, и если значение температуры будет больше 35, тогда реле будет активировано, и вентилятор начнет вращаться.

lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");

if (t > 35){
digitalWrite(relay_pin, LOW);
lcd.setCursor(0,1);
lcd.print("Fan is ON ");
delay(10);
}

На этом всё. Хороших вам проектов!

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

PIR-sensor конструктивно разделен на две половины

Это обусловлено тем, что для устройства сигнализации важно именно наличие движения в зоне чувствительности, а не сам уровень излучения. Поэтому части установлены таким способом, что при улавливании одной большего уровня излучения, на выход будет подаваться сигнал со значением high или low

Основными техническими характеристиками датчика движения Ардуино являются:

  • Зона обнаружения движущихся объектов составляет от 0 до 7 метров;
  • Диапазон угла слежения – 110°;
  • Напряжение питания – 4.5-6 В;
  • Рабочий ток – до 0.05 мА;
  • Температурный режим – от -20° до +50°С;
  • Регулируемое время задержки от 0.3 до 18 с.

Модуль, на котором установлен инфракрасный датчик движения включает дополнительную электрическую обвязку с предохранителями, резисторами и конденсаторами.

Принцип работы датчика движения на Arduino следующий:

  • Когда устройство установлено в пустой комнате, доза излучения, получаемая каждым элементом постоянна, как и напряжение;
  • При появлении в комнате человека, он первым делом попадает в зону обозрения первого элемента, на котором появляется положительный электрический импульс;
  • Когда человек перемещается по комнате, вместе с ним перемещается и тепловое излучение, которое попадает уже на второй сенсор. Этот PIR-элемент генерирует уже отрицательный импульс;
  • Разнонаправленные импульсы регистрируются электронной схемой датчика, которая делает вывод, что в поле зрения Pir-sensor Arduino находится человек.

Подключение реле к Ардуино

Рассмотрим одноканальный модуль реле. Он имеет всего 3 контакта, подключаются они к Ардуино Uno следующим образом: GND – GND, VCC – +5V, In – 3. Вход реле – инвертирован, так что высокий уровень на In выключает катушку, а низкий – включает.

Светодиоды нужны для индикации – при загорании красного LED1 подается напряжение на реле, при загорании зеленого LED2 происходит замыкание. Когда включается микроконтроллер, транзистор закрыт. Для его открытия на базу нужен минус, подается при помощи функции digitalWrite(pin, LOW);. Транзистор открывается, протекает ток через цепь, реле срабатывает. Чтобы его выключить, на базу подается плюс при помощи digitalWrite(pin, HIGH);.

Работа схемы

Схема устройства представлена на следующем рисунке.

В схеме необходимо сделать следующие соединения:

  • подсоединить нормально замкнутые выводы обоих реле к положительному выводу батареи;
  • подсоединить нормально разомкнутые выводы обоих реле к стоку MOSFET транзистора;
  • подсоединить исток MOSFET транзистора к отрицательному выводу батареи и к земле платы Arduino UNO;
  • затвор MOSFET транзистора подключить к контакту 6 платы Arduino (на этом контакте возможно формирование ШИМ сигнала);
  • подсоединить резистор 10 кОм между затвором и истоком MOSFET транзистора, а также подсоединить диод 1N4007 между истоком и стоком MOSFET транзистора;
  • подсоединить двигатель между средними выводами реле;
  • один из оставшихся выводов реле (для каждого реле) подключить к контакту Vin платы Arduino, а другой – к коллектору транзистора;
  • подсоединить эмиттеры обоих транзисторов к контакту GND (земля) платы Arduino;
  • контакты 2 и 3 платы Arduino подключить к кнопкам, вторые концы кнопок подключить к базе транзисторов;
  • подключить диоды параллельно выводам реле как показано на схеме;
  • оконечные контакты потенциометра подсоединить к контактам 5v и Gnd платы Arduino, а средний контакт потенциометра – к контакту A0.

Если батареи на 24 В у вас нет, то можно последовательно соединить две батареи на 12 В.

Функции транзисторов

Цифровые контакты платы Arduino не могут обеспечить достаточный ток для срабатывания реле на 5v. К тому же мы используем реле на 12v. Контакт Vin платы Arduino не может обеспечить достаточный ток для обоих реле. Поэтому транзисторы используются для «доставки» тока от контакта Vin платы Arduino к реле. Транзисторы управляются с помощью кнопок, один вывод которых подключен к их базе, а другой – к цифровому контакту платы Arduino

Функции платы Arduino

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

Функции MOSFET

MOSFET транзистор используется для управления скоростью вращения двигателя. Он включается и выключается (открывается и закрывается) с высокой частотой, поэтому и двигатель, соединённый последовательно со стоком MOSFET, управляется данной ШИМ (широтно-импульсной модуляцией). Чем больше коэффициент заполнения ШИМ, тем выше скорость вращения двигателя. Более подробно о подобном механизме управления с помощью ШИМ и MOSFET транзистора можно прочитать в статье про понижающий преобразователь напряжения постоянного тока на Arduino.

Расчеты тока

  • сопротивление катушки реле, измеренное нами с помощью мультиметра, составило примерно 400 Ом;
  • контакт Vin платы Arduino обеспечивает 12v;
  • поэтому получаем ток, необходимый для переключения реле равный 12/400 = 30 mA;
  • если энергия подается на оба реле, то получаем ток 30*2=60 mA;
  • контакт Vin платы Arduino рассчитан на максимальный ток 200mA, поэтому проблем с обеспечением тока возникнуть не должно.

Подключение нагрузки

В качестве теста будем управлять сетевым фильтром, к которому в будущем можно подключить любую бытовую электронику с вилкой на конце и потребляем тока до 15 А.

  1. Возьмите сетевой фильтр, разрежьте провод питания посередине и зачистите контакты от изоляции.
  2. Скоммутируйте сетевой фильтр с реле:
    1. Подключите один провод со стороны вилки к контакту .
    2. Подключите один провод со стороны розеток от фильтра к контакту .
    3. Соедините второй провод со стороны вилки и второй со стороны розеток от фильтра между собой. Для хорошей изоляции контактов используйте изоленту.


Нагрузка подключена, теперь можно подключать модуль реле к управляющим платформам.

Реле

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

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

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

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

При отсутствии тока, проходящего через катушку, реле находится в нормально замкнутом состоянии:

Когда выключатель закрыт, ток течет через катушку, и электромагнитное поле, создаваемое катушкой, приводит к тому, что высоковольтная клемма переключается в нормально открытое положение:

При работе с индуктивными нагрузками, такими как реле, соленоиды, двигатели или шаговые двигатели, важно защитить Вашу цепь от обратного ЭДС. Обратный ЭДС возникает, когда электромагнитное поле, окружающее катушку, падает обратно в катушку

Это вызывает большой обратный ток в катушке, который может повредить другие компоненты в цепи

Обратный ЭДС возникает, когда электромагнитное поле, окружающее катушку, падает обратно в катушку. Это вызывает большой обратный ток в катушке, который может повредить другие компоненты в цепи.

Для предотвращения обратного электромагнитного поля, диод должен быть размещен параллельно катушке.

Запись/чтение регистра

Существует несколько способов установки битов в регистрах. Мы рассмотрим их все, чтобы столкнувшись с одним из них вы знали, что это вообще такое и как работает данная строчка кода. Абсолютно вся работа с регистрами заключается в установке нужных битов в нужном байте (в регистре) в состояние 0 или 1. Рекомендую прочитать урок по битовым операциям, в котором максимально подробно разобрано всё, что касается манипуляций с битами.

Давайте вернёмся к регистру таймера, который я показывал выше, и попробуем его сконфигурировать. Первый способ, это явное задание всего байта сразу, со всеми единицами и нулями. Сделать это можно так:

TCCR1B = 0b01010101

Таким образом мы включили и выключили нужные биты сразу, одним махом. Как вы помните из урока о типах данных и чисел, микроконтроллеру всё равно, в какой системе исчисления вы с ним работаете, то есть число у нас в двоичной системе, в десятичной это будет , а в шестнадцатеричной – . И вот эти три варианта абсолютно одинаковы с точки зрения результата:

TCCR1B = 0b01010101;
TCCR1B = 85;
TCCR1B = 0x55;

Только на первый можно посмотреть и сразу понять, что где стоит. Чего не скажешь про остальные два. Очень часто в чужих скетчах встречается такая запись, и это не очень комфортно.

Гораздо чаще бывает нужно “прицельно” изменить один бит в байте, и тут на помощь приходят логические (битовые) функции и макросы. Рассмотрим все варианты, во всех из них это байт-регистр, и это номер бита, считая с правого края. То есть BIT это цифра от 0 до 7, либо название бита из даташита.

Установка бита в 1 Установка бита в 0 Описание
Использование битового сдвига <<
Используем 2 в степени <номер бита> (пример не рабочий!)
Используем ардуиновский макрос bit(), заменяющий сдвиг
Используем встроенную функцию _BV(), опять же аналог сдвига
Используем общепринятые макросы sbi и cbi
Используем ардуиновские функции bitSet() и bitClear()

Что хочу сказать по перечисленным вариантам: они все по сути являются одним и тем же, а именно – первым, просто обёрнуты в другие функции и макросы. Время выполнения всех вариантов одинаково, т.к. макро-функции не делают лишних действий, а приводят все способы к первому, со сдвигом и и . Все эти способы вы можете встретить в скетчах из интернета, это факт. Лично мне больше всего нравится ардуиновский bitSet и bitClear, потому что они имеют читаемое название и заранее сидят в библиотеке. Что касается и – то для их использования нужно в самом начале документа создать макросы:

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) 
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

И после этого можно пользоваться и . 

Давайте рассмотрим пример, где просто подёргаем разными способами:

// для использования sbi и cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

void setup() {
  TCCR1B = 0;             // обнулили регистр
  bitSet(TCCR1B, CS11);   // включили бит №1
  cbi(TCCR1B, CS11);      // вЫключили бит №1
  TCCR1B |= _BV(4);       // включили бит №4
  TCCR1B |= (1 << WGM12); // включили бит №3
  TCCR1B &= ~_BV(WGM13);  // вЫключили бит №4
  bitClear(TCCR1B, 3);    // вЫключили бит №3
}

Можно ещё добавить вариант, где в одной строчке можно “прицельно” установить несколько битов:

void setup() {
  TCCR1B = 0;  // обнулили регистр
  // ставим бит 1, 3 и 4(WGM13)
  TCCR1B |= _BV(1) | _BV(3) | _BV(WGM13);
}

Я думаю тут всё понятно, давайте теперь попробуем “прицельно” прочитать бит  из регистра:

Чтение бита Описание
Вручную через сдвиг
Ардуиновская макро-функция

Два рассмотренных способа возвращают 0 или 1 в зависимости от состояния бита. Пример:

void setup() {
  TCCR1B = 0;             // обнулили регистр
  bitSet(TCCR1B, CS12);   // включили бит №2
  Serial.begin(9600);     // открыли порт
  Serial.println(bitRead(TCCR1B, 2)); // получили 1
}

Ещё больше примеров работы с битами смотри в предыдущем уроке по битовым операциям.

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий