2 relay module переделка в "active high"

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Приветствую участников форума!

Получил очередную бандерольку от китайцев, в которой были в том числе 2-хрелейные модули. Самые обычные двухрелейные модули с опторазвязкой, которых полно на али, поэтому картинку или ссылку не привожу. Если все-таки понадобится, то обязательно уточню.

Так вот модули эти оказались "active low", что было для меня полнейшей неожиданностью. Само по себе это не критично и, наверное, правильно. Но эти реле будут частью домашней автоматизации, и состояние реле является флагом для некоторых событий. Проще говоря, сейчас в OpenHab я вижу что реле находится в состоянии OFF, когда оно включено, и в состоянии ON, когда выключено. Это вносит путаницу и неразбериху.

Поэтому есть задача переделать реле из "active low" в "active high", то есть, чтобы управлялись они не низким уровнем а высоким - подачей напряжения на пин. Поиск в интернете дал решение в виде транзистора инвертирующего сигнал. Мне такое решение не очень нравится, потому что транзисторов у меня под рукой нет, и куда его крепить на плату я даже не представляю (навесным монтажом?). В голове родилась следующая переделка схемы реле. На первой картинке исходная схема. На второй картинке в моей модификации. На словах попробую объяснить, что я хочу сделать. Во0первых убираем перемычку и запитываем катушку реле отдельно. Два входа, которые раньше надо было притягивать к земле для управления, сразу соединяем с землей. Теперь для управления двумя реле нам надо подавать питание отдельно на каждую катушку, что мы делаем, игнорируя вход VCC и подпаивая управляющие провода к резисторам.

Вроде должно работать, но реле дома, а решение пришло в голову прямо сейчас. И я хотел бы посоветоваться со старшими товарищами, прежде чем сжигать модули. Есть ли у кого-то опять подобной переделки? Будет ли работать моя схема? Есть ли еще более простые варианты?

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А нельзя просто вместо контакта NC использовать контакт NO для потребителя?

Алексей Н
Offline
Зарегистрирован: 02.01.2016

sadman41 пишет:

А нельзя просто вместо контакта NC использовать контакт NO для потребителя?

Потребителем будет моторчик, у которого меняется полярность.

Да и "согласование" состояния включено/выключено все равно таким образом не достигается.

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

То есть проще резать дорожки и орудовать пальником чем проинвертировать флаг?
Сам электонщик, а не программист, но  даже это освоил :

#define motor_ run   digitalWrite ( pin_motora, LOW)

#define motor_is_running    !digitalRead  ( pin_motora)

или

if ( !pin_motora )................................

b707
Offline
Зарегистрирован: 26.05.2017

trembo пишет:

То есть проще резать дорожки и орудовать пальником чем проинвертировать флаг?

+100500

афигеть....

MaksVV
Offline
Зарегистрирован: 06.08.2015

+100501. Добавить то всего один символ - воскл. знак

digitalWrite (Relay,  !flag);

Алексей Н
Offline
Зарегистрирован: 02.01.2016

b707 пишет:

trembo пишет:

То есть проще резать дорожки и орудовать пальником чем проинвертировать флаг?

+100500

афигеть....

 

Конечно, гораздо проще проинвертировать флаг. И, если бы я писал самостоятельно прошивку для ардуино, я бы так и сделал. Но к ардуино данный вопрос не имеет никакого отношения. Прошу заметить, я нигде этого не писал.  Реле управляется ESP8266 с прошивкой ESPEasy, обратная связь с OpenHab сервером через MQTT. Можно, конечно писать скрипты на сервере, инвертировать флаги. И наверное, вы правы, это в целом проще.

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

b707
Offline
Зарегистрирован: 26.05.2017

Алексей Н пишет:

Реле управляется ESP8266 с прошивкой ESPEasy, обратная связь с OpenHab сервером через MQTT. Можно, конечно писать скрипты на сервере, инвертировать флаги. И наверное, вы правы, это в целом проще.

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

вы уверены. что на готовой прошивке сумеете заставить моторчик делать то. что нужно именно вам? - это редко бывает.

Мне обычно проще сразу написать свою прошивку. чем подгонять железо под чужую. Тем более что примеров MQTT брокеров в сети просто море

Алексей Н
Offline
Зарегистрирован: 02.01.2016

b707 пишет:

вы уверены. что на готовой прошивке сумеете заставить моторчик делать то. что нужно именно вам? - это редко бывает.

Уже заставил. Смущает только управление "шиворот-навыворот". Для того чтобы все выглядело правильно (типа отправили 1 - включилось, отправили 0 -выключилось) мне надо, во-первых, инвертировать отправляемые команды. Во-вторых, инвертировать принимаемые сообщения о состоянии пина. Хотя это и не сложно, но вносит запутанность. Поэтому я решил это оставить на потом и начать именно с железа.

SLKH
Offline
Зарегистрирован: 17.08.2015

А чем вариант #1 от sadman41 плох? Ничего не резать, не паять, не программировать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Он хочет состояние с пина читать, а не из переменной.

Мне бы столько энергии... А то я все ленюсь резать и паять - проще местами проводки поменять и переменную завести ))

SLKH
Offline
Зарегистрирован: 17.08.2015

Алексей Н пишет:

b707 пишет:

вы уверены. что на готовой прошивке сумеете заставить моторчик делать то. что нужно именно вам? - это редко бывает.

Уже заставил. Смущает только управление "шиворот-навыворот". Для того чтобы все выглядело правильно (типа отправили 1 - включилось, отправили 0 -выключилось) мне надо, во-первых, инвертировать отправляемые команды. Во-вторых, инвертировать принимаемые сообщения о состоянии пина. Хотя это и не сложно, но вносит запутанность. Поэтому я решил это оставить на потом и начать именно с железа.

Ну какая там запутанность? если писать по всей программе LOW/HIGH и помнить, где что - да, будет. А если 1 раз в начале скетча прописать дефайны (см.#3), а дальше забыть про нули и единички, то ничего и не запутается.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

читаешь в переменную состояние реле, делаешь XOR 1 и вуаля.  (( n & 0x01) ^ 0x01) в терминах богомерского С. 

b707
Offline
Зарегистрирован: 26.05.2017

SLKH пишет:

 Ну какая там запутанность? если писать по всей программе LOW/HIGH и помнить, где что - да, будет. А если 1 раз в начале скетча прописать дефайны (см.#3), а дальше забыть про нули и единички, то ничего и не запутается.

это если писать самому. А ТС, как я понял, сам ничего прогить не хочет,  хочет готовую прошивку использовать....

Алексей Н
Offline
Зарегистрирован: 02.01.2016

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

Возможно я как-то неправильно задал вопрос? Я задал вопрос по железу в подфоруме "Аппаратные вопросы". Вопрос я постарался изложить максимально подробно, и даже попытался его самостоятельно решить. Что и хотел обсудить с вами. Когда мне надо будет написать свой скетч и возникнут вопросы, я обязательно создам тему в соответствующем подфоруме.

Вопрос остается прежним как переделать релейный модуль их из "active low" в "active high"?

sadman41
Offline
Зарегистрирован: 19.10.2016

Алексей Н пишет:

Уже заставил. Смущает только управление "шиворот-навыворот". Для того чтобы все выглядело правильно (типа отправили 1 - включилось, отправили 0 -выключилось) мне надо, во-первых, инвертировать отправляемые команды. Во-вторых, инвертировать принимаемые сообщения о состоянии пина. Хотя это и не сложно, но вносит запутанность. Поэтому я решил это оставить на потом и начать именно с железа.

Я еще иногда поступаю таким образом:


// Задаем: нормальные реле или инверсные
#define RELAY_INVERTED

...
#if defined(RELAY_INVERTED)
#define RELAY_OPEN                       HIGH
#define RELAY_CLOSE                      LOW
#else
#define RELAY_OPEN                       LOW
#define RELAY_CLOSE                      HIGH
#endif

...
// Потом так
if (RELAY_OPEN == digitalRead(RELAY)) {
...
digitalWrite(RELAY, RELAY_CLOSE);
}
...
// Или так
state = (RELAY_OPEN == digitalRead(RELAY));

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак ведь и реле до тебя сделано, не?  Почему туда можно лезть, а в прошивку (что существенно проще) - нет?

Алексей Н
Offline
Зарегистрирован: 02.01.2016

DetSimen пишет:

Дак ведь и реле до тебя сделано, не?  Почему туда можно лезть, а в прошивку (что существенно проще) - нет?

Верно говоришь. Но тогда бы я создал тему в разделе "программирование". А вопрос-то у меня совершенно другой.

Давайте представим, что у меня вообще нет ардуино. А сигнал берется из какого-нибудь будильника. Или детской машинки, или еще какой неваляшки.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тада тебе к специалистам. Я пас. 

SLKH
Offline
Зарегистрирован: 17.08.2015

Алексей Н пишет:

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

Возможно я как-то неправильно задал вопрос? Я задал вопрос по железу в подфоруме "Аппаратные вопросы". Вопрос я постарался изложить максимально подробно, и даже попытался его самостоятельно решить. Что и хотел обсудить с вами. Когда мне надо будет написать свой скетч и возникнут вопросы, я обязательно создам тему в соответствующем подфоруме.

Вопрос остается прежним как переделать релейный модуль их из "active low" в "active high"?

"Будет ли работать моя схема?" да.

"Есть ли еще более простые варианты?" да. Их сразу же и предложили.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Если опторазвязка ненужна, можно подпаяться (пин МК) к левому концу R2 и R3. Ненужные детальки можно отпаять-пригодятся в хозяйстве).

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Попробовал схему. Работает. Правда резать одну дорожку пришлось все-таки.

Спасибо всем отвечавшим.