Arduino.ru
Приобрел Arduino Mega 2560 Rev3 (питание 12В) и модуль на 16 реле (питание также на 12В). Пытаюсь запитать.
На реле посадил блок питания на 12В 4,16А (при 80мА на канал ему надо много мощности), контролер запитан пока от USB.
Соединяю 5В МК с входом 5В реле , GND c GND — Ардуино вообще не кажет.
Если только 5В МК на 5В входа релейной платы и канал на канал — Ардуино светится, но после подачи питания на реле импульсный регулятор на плате реле начинает страшно греться.
- Войдите на сайт для отправки комментариев
Втр, 01/12/2015 — 16:21
Зарегистрирован: 16.06.2015
Для начала попытайтесь копнуть в сторону более внятного объяснения ваших манипуляций и происходящего.
Приведите ссылку на ваш «модуль на 16 реле».
alex_mouj пишет:
Соединяю 5В МК с входом 5В реле , GND c GND — Ардуино вообще не кажет.
А что именно она должна «казать» в этом случае?
alex_mouj пишет:
Если только 5В МК на 5В входа релейной платы и канал на канал — Ардуино светится
Этого я вообще не понял. Нарисуйте схему, по которой вы все соединяете. И что светится у ардуины (понятно, что не она вся, а какая-то ее часть)?
P.S. И да, я считаю, что питать ардуину от 12В — это рисковано (хоть и допустимо). Бедному встроенному стабилизатору куда-то надо девать целых 7 вольт. Как по мне, то оптимальнее будет где-то 7-9В.
- Войдите на сайт для отправки комментариев
Ср, 02/12/2015 — 09:34
Зарегистрирован: 30.11.2015
Извиняюсь. Но форум пестрит жаргонизмами. Постараюсь излагать более аккуратно.
В принципе, разобрался.
Может кому-то будет полезно. Модуль моего 16-ти канального реле имеет отдельное питание 12В. Специально приобрел блок питания от какого-то ноутбука большой мощности (ток до 4,16А = 50Вт). Каждый канал потребляет 80мА. Получается только на реле будет ток в 1,28А
Это питание также питает все микросхемы релейного модуля. При соединении питающих контактов модуля с такими же на Arduino (+5,GRN) и воткнутом USB-кабеле от компьютера к Arduino, светодиоды на Arduino не светятся. Как только убираю USB-кабель всё становится нормальным. Получается, что Arduino питается от релейного модуля.
- Войдите на сайт для отправки комментариев
Ардуино: модуль реле
Мы уже знаем как управлять слабым светодиодом и даже мощным двигателем с помощью Ардуино. Но как быть, если мы задумаем управлять устройствами, подключенными к бытовой сети? Напомню, что даже небольшая настольная лампа питается от источника переменного тока с напряжением 220 Вольт. Обычный полевой транзистор, который мы использовали в схеме с двигателем уже не подойдет.
Чтобы управлять мощной нагрузкой да еще и с переменным током воспользуемся реле. Это такое электромеханическое устройство, которое механическим способом замыкает цепь нагрузки с помощью электромагнита. Посмотрим на внутренности:
Принцип действия реле следующий. Подаем напряжение на электромагнитную катушку. В катушке возникает поле, которое притягивает металлическую лапку. В свою очередь, лапка механически замыкает контакты нагрузки.
У реле есть два основных применения. Во-первых, мы можем подав всего 5 Вольт на катушку, замкнуть цепь очень мощной нагрузки. Например, реле, используемое в уроках для Ардуино, может включить свет в доме или отключить забытый утюг. Во-вторых, некоторые виды реле могут одновременно замкнуть и разомкнуть сразу несколько разных цепей с разным напряжением.
Список необходимых компонентов
Для выполнения простого примера с модулем реле, потребуется Ардуино-совместимый контроллер, датчика света, макетная плата и немного проводов вилка-розетка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.
Подключение реле к Arduino
В связи с особой популярностью вопросов как сделать умный дом своими руками, рассмотрим, как взаимодействовать с электроникой, требующей 220В. Напомним, что наши контроллеры, будь то Arduino, esp или что-то другое, способны работать только от напряжения 5В. Для того, чтобы в одном месте использовать различные типы устройств, ставят релейный модуль. Принцип устройства механизма весьма прост, что дало ему широкое распространение.
На обмотку подаётся разность потенциалов 5V, по ней течёт ток и в возникает магнитное поле. Рядом находится контур с разностью потенциалов 220V, к которому можно подключить любую электронику, например лампу накаливания. Здесь есть подпружиненный ключ, который размыкает её. Магнитное поле, создаваемое управляемой катушкой, способно притянуть контакты ключа, тем самым замкнуть цепь. Вот и вся хитрость, реализовать это просто и дёшево.

Давайте разберёмся, как подключить реле к ардуино и, например, создадим умный светильник, который можно применять везде в вашем smart home.
В качестве образца возьмем релейный модуль Channel Relay PIC AVR MCU. У него есть 3 ножки: GND, 5V и управляющий Пин. Первые два нужны для питания, а последнее для передачи команд с контроллера. Стоит отметить, что у реле есть транзистор, предохраняющий от скачков напряжения при включении высоковольтной части.
Соединяем выходы GND и 5V платы управления и реле, как показано на электрической схеме ниже. Управляющий Пин подключаем на любой цифровой, например, на 9.
К другой стороне реле в терминалы устанавливаем контур с 220В (проводите все работы, соблюдая правила безопастности).
Заметим, что необходимо крепко зажимать зачищенные концы и брать провод с достаточно прочной и толстой медной жилой.
Теперь все собрано, осталось лишь составить и закачать прошивку.
Для тех, кто умеет программировать и знает соответствующие команды, данная задача не отнимет много времени. Например, можно сделать так, что микроконтроллер будет подавать сигнал зажигания лампочки в определённые часы. Предположим, что на момент создания проекта было 15:00. Планируется включение освещения с 20:00 до 23:00. Тогда код будет выглядеть следующим образом:
Arduino.ru
Управление обогревом комнаты при помощи Arduino и Dallas18B20
- Войдите на сайт для отправки комментариев
140 ответов [Последнее сообщение]
Пнд, 20/05/2013 — 16:45
Зарегистрирован: 17.01.2012
Идея проекта
В нашем дачном домике установлена стальная конвекционная печь. Греет она очень хорошо, но вот под утро остывает. Домик старый и не очень хорошо утепленный, так что в условиях «сурового северного лета» ложишься спать в тепле, а просыпаешься – вроде как бы уже и нет ;))
В хозяйстве нашелся электрический тепловентилятор, оставалось только сделать автомат, который включал бы его при похолодании в комнате. Устройство было сделано за один вечер буквально из подручных материалов и уже в ближайшие выходные было испытано в «боевых условиях». Испытания прошли удачно ;)) так что теперь в течение всей ночи температура в спальне поддерживается на постоянном уровне. Первые шаги к «умному дому» ;)))
Аппаратная часть
Итак, для создания мегадевайса были использованы:
- Плата Arduino Uno
- Шильд LCD+Keypad от DFRobot, состоящий из дисплея 16х2 и т. н. «аналоговой клавиатуры» на 5 кнопок.
- Термодатчик на микросхеме Dallas DS18B20. Был использован вот такой датчик в герметичном корпусе:

Но можно применить и просто микросхему:
- Твердотельное реле SSR-25 на 25А

- Две коробки для розеток-выключателей для открытой проводки. Например, такие:

- Одна розетка, любая подходящая для вышеупомянутой коробки
- Провод на 10А с вилкой (был использован стандартный «хвост» от компьютерного БП)
- Кусок провода для соединения контроллера и реле (обычный электрический или монтажный)
- 1 резистор на 4,5-5кОм
- Блок питания для Arduino (использовался обычный блок питания 12В 1А)
Немного подробнее об LCD-шильде
LCD-шильд представляет собой довольно удобное решение для несложных устройств, требующих отображения 1-2 параметров, а также несложных настроек. Он состоит из традиционного дисплея – 2 строки по 16 символов с контроллером Hitachi HD44780, подключенного по параллельному 4-битовому интерфейсу и «аналоговой» клавиатуры, подключенной к одному из аналоговых входов. Клавиатура основывается на делителе напряжения из нескольких резисторов, который выдает различное напряжение при нажатии той или иной кнопки.
Дисплей занимает пины D4-D7 (шина данных), D8 (сигнал RS), D9 (сигнал E) и D10 (включение-выключение подсветки). Контраст дисплея регулируется подстроечным резистором, расположенным в левом верхнем углу шильда. Для работы с таким дисплеем давно и успешно используется стандартная библиотека LiquidCrystal.h.
Строка инициализации для моего экземпляра шильда выглядит так:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Клавиатура занимает аналоговый пин A0 и состоит из 5 кнопок. Прежде чем начать работать с такой клавиатурой желательно определить значения на аналоговом входе Arduino, соответствующие нажатию каждой из кнопок. Разные экземпляры клавиатур могут выдавать разные значения. Это можно сделать при помощи следующего тестового скетча:
int val = 0; // переменная для хранения считываемого значения void setup() < Serial.begin(9600); // установка связи по serial >void loop() < val = analogRead(A0); // считываем значение Serial.println(val); // выводим полученное значение >
Нажимая последовательно кнопки клавиатуры запишем значения, которые соответствуют разным клавишам. Поскольку значения могут колебаться в некоторых пределах, определим границы диапазонов (LOW-HIGH), в которых обеспечивается однозначная идентификация клавиш. На моем экземпляре получилось примерно так:
#define ButtonUp_LOW 90 #define ButtonUp_HIGH 100 #define ButtonDown_LOW 240 #define ButtonDown_HIGH 280 #define ButtonLeft_LOW 390 #define ButtonLeft_HIGH 450 #define ButtonRight_LOW 0 #define ButtonRight_HIGH 50 #define ButtonSelect_LOW 620 #define ButtonSelect_HIGH 650
Еще немного про Dallas DS18B20
Про термометр на этой микросхеме написано уже достаточно, поэтому буквально несколько слов.
Схема включения – типовая, сигнальный провод подтянут к питанию резистором на 4,5-5кОм:
Для подключения к контроллеру был выбран один из свободных после подключения LCD-шильда пинов, а именно D2. Для работы с датчиком существует библиотека DallasTemperature.h, которую можно скачать, например, отсюда: http://download.milesburton.com/Arduino/MaximTemperature/DallasTemperature_372Beta.zip
Также потребуется библиотека OneWire.h, которую можно взять здесь: http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
И еще о твердотельном реле
Использование твердотельного реле – отличный способ управления мощной нагрузкой при помощи микроконтроллера. В отличие от механических реле, оно не обладает подгорающими или приваривающимися при больших токах контактами, не щелкает при переключении, потребляет ток по цепи управления не более 25мА. Практика показала, что при мощностях 500-800 Ватт реле вполне может обойтись без радиатора, будучи установлено в коробку от розетки оно практически не нагревалось даже при длительной работе нагревателя. Реле имеет 4 винтовых клеммы. Две из них, помеченные знаком «~» включаются в разрыв цепи нагрузки (как обычный выключатель). Управляющий вход реле, обозначенный знаком «+» подключается напрямую к выходу Arduino. Для подключения был использован свободный пин D11. Вход, обозначенный знаком «–» подключается к контакту GND Arduino.
Схема подключения реле выглядит так:

Собранная силовая часть помещается в двух коробках от розеток для наружной проводки. В одной установлена розетка, в другой помещается реле. Кабель с вилкой подключается к источнику напряжения 220В, управляющий кабель подключается к контроллеру:
Собранная управляющая часть (пока без корпуса) выглядит вот таким образом (резистор и провода, которыми подключен термодатчик располагаются между «этажами» под платой LCD-keypadShield). Контроллер питается от отдельного блока питания 9-12В 1A. Датчик крепится в любом удобном месте, обеспечивающем адекватный замер температуры в комнате:

Немного о функциональности
Логика работы устройства предельно проста. Задаем некое значение температуры, которое хотим поддерживать, регулярно измеряем температуру в комнате, сравниваем значение с заданным – если текущая температура ниже заданной включаем реле, если выше – выключаем. Если температура равна заданной – ничего не делаем ;)) Измерения будем проводить с частотой 1 раз в секунду (в принципе можно и реже, это дело индивидуальное).
На дисплее будет постоянно отображаться текущая температура в комнате. Заданное значение температуры будет выводиться на дисплей по нажатию клавиши Select. При этом его можно будет редактировать клавишами (Up – увеличить на единицу, Down – уменьшить на единицу). Повторное нажатие Select – сохранение изменений, клавиша Right – отмена изменений. Для того, чтобы при отключении питания заданное значение не потерялось будем хранить его в EEPROM микроконтроллера. Для этого нам понадобится библиотека EEPROM2.h, которую можно скачать здесь:
Чтобы подсветка дисплея ночью не мешала спать сделаем ее отключаемой с клавиатуры (например при нажатии клавиши Up подсветка включается, при нажатии Down – выключается). Для управления подсветкой в LCD-keypad-Shield используется пин D10.
Вот, вроде бы, и все.
Программная часть
Разберем исходный текст программы:
// Подключаем библиотеку для работы с шиной OneWire // Термометр будет подключен на Pin2 #include OneWire oneWire(2); //Подключаем библиотеку для работы с термометром #include //Создаем объект sensors, подключенный по OneWire DallasTemperature sensors(&oneWire); //Создаем переменные для работы с термометром DeviceAddress tempDeviceAddress; //переменная для хранения адреса датчика float temp1=0; //переменная для текущего значения температуры int setTmp=0; // переменная для заданного значения температуры //Подключаем LCD-дисплей #include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Подсветка управляется через пин D10 #define BACKLIGHT_PIN 10 //Создаем переменную для хранения состояния подсветки boolean backlightStatus = 1; // Подключаем библиотеку для работы с ARDUINO EEPROM //Заданная температура будет храниться по адресу 0 #include //Реле подключено к пину D11 #define RELAY_PIN 11 //Объявим переменную для хранения состояния реле boolean relayStatus1=LOW; //Объявим переменные для задания задержки long previousMillis1 = 0; long interval1 = 1000; // интервал опроса датчиков температуры //Аналоговая клавиатура подключена к пину A0 #define KEYPAD_PIN A0 //Определим значения на аналоговом входе для клавиатуры #define ButtonUp_LOW 90 #define ButtonUp_HIGH 100 #define ButtonDown_LOW 240 #define ButtonDown_HIGH 280 #define ButtonLeft_LOW 390 #define ButtonLeft_HIGH 450 #define ButtonRight_LOW 0 #define ButtonRight_HIGH 50 #define ButtonSelect_LOW 620 #define ButtonSelect_HIGH 650 void setup() < //Настроим пин для управления реле pinMode(RELAY_PIN,OUTPUT); digitalWrite(RELAY_PIN,LOW); //Считаем из постоянной памяти заданную температуру setTmp=EEPROM_read_byte(0); //Инициализируем термодатчик и установим разрешающую способность 12 бит (обычно она установлена по умолчанию, так что последнюю строчку можно опустить) sensors.begin(); sensors.getAddress(tempDeviceAddress, 0); sensors.setResolution(12); //Настроим подсветку дисплея pinMode(BACKLIGHT_PIN, OUTPUT); digitalWrite(BACKLIGHT_PIN, backlightStatus); //Выведем на дисплей стартовое сообщение на 2 секунды lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Temp. Controller"); lcd.setCursor(0, 1); lcd.print(" v1.0 "); delay(2000); // выведем на дисплей заданное значение температуры на 2 секунды lcd.setCursor(0, 1); lcd.print(" Set temp: "); lcd.setCursor(12,1); lcd.print(setTmp); delay(2000); //Очистим дисплей lcd.begin(16, 2); >//Определим функцию для опроса аналоговой клавиатуры //Функция опроса клавиатуры, принимает адрес пина, к которому подключена клавиатура, и возвращает код клавиши: // 1 - UP // 2 - DOWN // 3 - LEFT // 4 - RIGHT // 5 - SELECT int ReadKey(int keyPin) < int KeyNum=0; int KeyValue1=0; int KeyValue2=0; //Читаем в цикле аналоговый вход, для подавления дребезга и нестабильности читаем по два раза подряд, пока значения не будут равны. //Если значения равны 1023 – значит не была нажата ни одна клавиша. do < KeyValue1=analogRead(keyPin); KeyValue2=analogRead(keyPin); >while (KeyValue1==KeyValue2&&KeyValue2!=1023); //Интерпретируем полученное значение и определяем код нажатой клавиши if (KeyValue2ButtonUp_LOW) //Up if (KeyValue2ButtonDown_LOW) //Down if (KeyValue2ButtonLeft_LOW) //Left if (KeyValue2ButtonRight_LOW) //Right if (KeyValue2ButtonSelect_LOW) //Select //Возвращаем код нажатой клавиши return KeyNum; > //Определим процедуру редактирования заданной температуры //Вызывается по нажатию клавиши Select, отображает на дисплее заданную температуру и позволяет изменять ее клавишами Up и Down void setTemperature() < int keyCode=0; //выводим на дисплей заданное значение температуры lcd.begin(16,2); lcd.setCursor(0, 0); lcd.print(" Setting temp "); lcd.setCursor(7, 1); lcd.print(setTmp); //Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем значение на 1, если Down – уменьшаем на 1 //Если нажаты клавиши Select или Right – цикл опроса прерывается //Задержки введены для борьбы с дребезгом, если клавиши срабатывают четко – можно уменьшить время задержек или вообще их убрать do < keyCode=ReadKey(KEYPAD_PIN); if (keyCode==1)if (keyCode==2) > while (keyCode!=5 && keyCode!=4); delay(200); //По клавише Select – созраняем в EEPROM измененное значение //По клавише Right – восстанавливаем старое значение if (keyCode==5) if (keyCode==4) > void loop() < //Модуль опроса датчиков и получения сведений о температуре //Вызывается 1 раз в секунду unsigned long currentMillis1 = millis(); if(currentMillis1 - previousMillis1 >interval1) < previousMillis1 = currentMillis1; //Запуск процедуры измерения температуры sensors.setWaitForConversion(false); sensors.requestTemperatures(); sensors.setWaitForConversion(true); Delay(750) // задержка для обработки информации внутри термометра, в данном случае можно не задавать //Считывание значения температуры sensors.getAddress(tempDeviceAddress, 0); temp1=sensors.getTempC(tempDeviceAddress); // Вывод текущего значения температуры на дисплей lcd.setCursor(0, 0); lcd.print(" Current temp "); lcd.setCursor(5, 1); lcd.print(temp1); // Serial.println(temp1,4); >//Проверка условия включения/выключения нагревателя if (temp1 if (temp1>setTmp&&relayStatus1==HIGH) // Опрос клавиатуры int Feature = ReadKey(KEYPAD_PIN); if (Feature==1 ) //Включение подсветки if (Feature==2 ) //Отключение подсветки if (Feature==5 ) //Переход к редактированию заданной температуры >
Вот, собственно и все. В заключение – как всегда несколько полезных ссылок:
Страница про LCD Keypad Shield от DFRobot:
Даташит на Dallas DS18B20 на русском от Геннадия Чернова:
Фирменный datasheet на Dallas DS18B20:
Страничка о библиотеке DallasTemperature.h:
Страничка о библиотеке OneWire.h:
Параметры твердотельных реле фирмы Fotek:
Еще одна страничка про твердотельные реле:
Страничка про EEPROM от Freeduino.ru:
