Подключение реле через сдвиговый регистр 595

riba
Offline
Зарегистрирован: 05.08.2015

Добрый день! Хочу использовать сдвиговый регистр для того, чтобы управлять 4-мя реле,

когда подключаю реле отдельно через цифровой пин - все нормально, реле горит, мигает и щелкает.

Как только я пытаюсь повесить реле на выход сдвигового регистра 595, светодиод на реле при смене нуля на еденицу мигает, но не щелкает и не работает! Подкажите, что не так? Не хватает напряжения? Почему? Или другая причина?
Воообще теоретически возможно подключать реле через сдвиговые регистры?

А также воозможно ли пожклю

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы бы хоть схему привели.

Это к тому, что на реле нет светодиода.

Если у Вас в схеме он есть, значит, что-то там есть и кроме реле. А что именно - мы не знаем.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

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

std
Offline
Зарегистрирован: 05.01.2012

После выхода регистра обязателен транзистор, для обычного реле 943-1C-5DS/12DS (обмока 70 Ом) достаточно "типа КТ315", S8050 или 2N7002 например. Внимательно с 7002, они не любят статику. Вообще, подходит любой дешёвый транзистор, но он обязательно должен быть.

Так же, параллельно обмотке - диод, обычный, причём он смотрит в другую сторону, не как светодиод. То есть хвостом к минусу, перекладиной к плюсу. Если будет глючить, можно ещё параллельно этому диоду конденсатор 0.022-0.1 мкФ.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Раз реле 4 штуки, можно не городить 4 транзитора, 4 реле и 4 диода, а взять одну ULN2803:

Код примерно такой, просто вместо светодиодов будут включаться реле.

riba
Offline
Зарегистрирован: 05.08.2015

Всем привет, действительно как я мог не описать подробнее! Вот: От цифрового выхода сдвигового регистра напрямую к реле-модулю  идёт провод:

 

Напряжение 4,2 В, но причина не в этом, так как когда я подключаю реле модуль напрямую, то этого напряжения достаточно.
 

 

Duino A.R

Драйверы для реле модуля и экрана? Ого а где можно почитать про это? Зачем нужен драйвер для реле? 

std

А ты давала (или давал) совет исходя из того, что я щяс изобразил на фотках или ты тоже описывала транзисторы на случай применения отдельного реле а не в виде модуля?

И еще что имеется ввиду под обмоткой?:

Tomasina

А вот этот транзистор  так и подключать по твоей прям схеме? Там на выходе около 5В будет? Доп элементов не надо будет?

 

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

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

напрямую реле к регистру нельзя, у реле ток потребления сильно выше, поэтому надо или транзисторы, или напрямую ту самую ULN2803 (у нее внутри те же самые 8 транзисторов, 8 реле и 8 защитных диодов).

riba
Offline
Зарегистрирован: 05.08.2015

ULN2003APG подойдет или это на другие случаи?

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

подойдет.

riba
Offline
Зарегистрирован: 05.08.2015

Подключил через ULN2003APG кажется заработало! но странно! Но теперь светодиод на реле-модуле не погасает до конца, а лишь сбавляет яркости! и спустя 20 включений выключения кажде две секунды, реле перестало щелкать!

То есть два реле из 4 щяс работают (но пока не давал нагрузку много циклов, теперь боюсь), а два теперь не работают (одно изначально не стало щелкать, а одно перестало спстя 20 циклов включения выключения)

В чем причина может быть?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

может быть что угодно, ведь мы не знаем схему включения и какой код используется ;)

riba
Offline
Зарегистрирован: 05.08.2015

Как регулировать напряжение у этого драйвера? на видео я услышал чот выходное напряжение 50 В! Это что же получается я подал 50В управляющий  сигнал?

Передохнув Реле очухалось и стало работать и щелкать, но чотто в этом странное есть, иногда не срабатывает

riba
Offline
Зарегистрирован: 05.08.2015
ВОТ КОД, самый обычный

int Relay = 5;
int datapin = 8; 
int clockpin = 10;
int latchpin = 9;
byte data = 0;
const int pinU = A5;

void setup() 
{                

  pinMode(datapin, OUTPUT);
  pinMode(clockpin, OUTPUT);  
  pinMode(latchpin, OUTPUT);

  pinMode(pinU, INPUT );
}

void loop() 
{
shiftOut(datapin, clockpin, MSBFIRST, 0b00000000);
  digitalWrite(latchpin, HIGH);
  digitalWrite(latchpin, LOW);
 delay(2000); 
  shiftOut(datapin, clockpin, MSBFIRST, 0b11111111);
  digitalWrite(latchpin, HIGH);
  digitalWrite(latchpin, LOW);
   delay(2000);
  }

Подключаю как у тебя на фото в первом твоем посте, крайние ноги - питание, с выхода свдигового резистора в драйвер, и оттуда на вход IN реле-модуля!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

проверить все подключения
от чего питаешь силовую часть блока реле ?
схему и код - сюда желательно

вообще-то регистр595 может управлять блоком реле напрямую , как и ардуина ( без 2003 )
входные цепи блока реле - пин-резистор-светодиодИндикаторный-светодиодОптопары-GND
или
входные цепи блока реле - пин-резистор-светодиодИндикаторный-светодиодОптопары-VСС
....смотря какой блок реле

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

для чего строки 03 , 08 , 17 , 23 , 24 , 27 , 28 ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

строки 23 , 24 , 27 , 28 - нужны !!!!!
но НЕ в том порядке , как у тибя в коде :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

riba ,   в #5 - твой блок реле ?
запитай на большой колодке GND и VCC от блока питания ( без ардуины ) , джампер на колодке питания - поставить
контрольные светодиоды загораются и реле срабатывают при подаче...
- GND на пин IN ? управляющий уровень = LOW  ( где в биты рега595 запишешь 0 - то реле и сработает )
- VCC на пин IN ? управляющий уровень = HIGH ( где в биты рега595 запишешь 1 - то реле и сработает )

общая схема подключения ( блок питания внешний !!!!!! ) :
- GND блока питания - на GND ардуины , на GND блока реле
- VCC блока питания - на VCC ардуины , на VCC блока реле ( на большой колодке , джампер по питанию - поставить )
- рег595 - по штатной схеме
- выходы рег595 - Q0 на IN1 , 
Q1 на IN2 , Q2 на IN3 , Q3 на IN4

и нужен теперь код....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#define  datapin 8
#define clockpin 10
#define latchpin 9
byte data = 0;

void setup() 
{                
  pinMode( datapin, OUTPUT );
  pinMode( clockpin, OUTPUT );  
  pinMode( latchpin, OUTPUT );
}

void loop() 
{
// перебор всех возможных состояний четырёх реле
  for ( int i = 0; i < 16; i++ )
  {
    digitalWrite( latchpin, LOW );                // выбрать регистр на запись
    shiftOut( datapin, clockpin, MSBFIRST, i );   // записать байта в регистр
    digitalWrite( latchpin, HIGH );               // защёлкнуть данные в регистре ( именно щас сработают реле )
    delay(250);
  }
  delay(2000);
// включение реле 1 , если управление реле = LOW
  digitalWrite( latchpin, LOW );                      // выбрать регистр на запись
  shiftOut( datapin, clockpin, MSBFIRST, B00001110 ); // записать байта в регистр
  digitalWrite( latchpin, HIGH );                     // защёлкнуть данные в регистре ( именно щас сработают реле )
  delay(1000);
// включение реле 1 , если управление реле = HIGH
//  digitalWrite( latchpin, LOW );                      // выбрать регистр на запись
//  shiftOut( datapin, clockpin, MSBFIRST, B00000001 ); // записать байта в регистр
//  digitalWrite( latchpin, HIGH );                     // защёлкнуть данные в регистре ( именно щас сработают реле )
//  delay(1000);
// выключение реле 1 , если управление реле = LOW
  digitalWrite( latchpin, LOW );                      // выбрать регистр на запись
  shiftOut( datapin, clockpin, MSBFIRST, B00001111 ); // записать байта в регистр
  digitalWrite( latchpin, HIGH );                     // защёлкнуть данные в регистре ( именно щас сработают реле )
  delay(1000);
// выключение реле 1 , если управление реле = HIGH
//  digitalWrite( latchpin, LOW );                      // выбрать регистр на запись
//  shiftOut( datapin, clockpin, MSBFIRST, B00001111 ); // записать байта в регистр
//  digitalWrite( latchpin, HIGH );                     // защёлкнуть данные в регистре ( именно щас сработают реле )
//  delay(1000);

// и т.д.
}

 

std
Offline
Зарегистрирован: 05.01.2012

riba пишет:
транзисторы на случай применения отдельного реле

Да, отдельного. А обмотка - это куда подаётся 5 В, или сколько там.

Сколько напряжение питания релейного модуля? Ещё есть шанс что умерла ULN2003 а не сами релюхи.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Реле и, соответственно, релейные модули выпускаются на разные напряжения: 5В, 9В, 12В...

Обычгно напряжение можно узнать по маркировке самого реле.

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

xORLx
Offline
Зарегистрирован: 22.05.2019

Есть ли у кого скетч для похожих целей , тоже для реле , но на 8 контактов ,
где каждый бит будет переменной которая будет меняться в зависимости
от других переменных , например от времяни или даты , и полный байт будет
отправляться каждый раз после изменения одного или нескольких битов ?
Через Google искал , но не где не нашёл как использовать сдвиговый
регистр для полноценного расширения выходов . Заранее спасибо .
Вроде нашёл https://forum.cxem.net/index.php?/topic/185625-%D1%83%D0%BF%D1%80%D0%B0%...
Но это не точно

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

xORLx пишет:
Через Google искал , но не где не нашёл как использовать сдвиговый регистр для полноценного расширения выходов

а для какого нашли?   "неполноценного"?

По-моему, в любом примере написано, как записать байт на сдвиговый регистр. Вот вам и восемь выходов, что еще надо?

xORLx
Offline
Зарегистрирован: 22.05.2019

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

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

изучите такие функции Ардуино, как bitSet() и bitWrite()

https://www.arduino.cc/reference/tr/language/functions/bits-and-bytes/bitwrite/

xORLx
Offline
Зарегистрирован: 22.05.2019

Я ознакомился с этими функциями , но без подходящего примера разобраться тяжело

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

xORLx пишет:
... Через Google искал , но не где не нашёл как использовать сдвиговый регистр для полноценного расширения выходов. ...

http://robocraft.ru/blog/arduino/519.html

Там есть схема, скетч и текстовое описание.

bwn
Offline
Зарегистрирован: 25.08.2014

xORLx пишет:
Я ознакомился с этими функциями , но без подходящего примера разобраться тяжело

А какой нужен пример? Если бит(ы) изменились, производим запись в регистр. Фсё.

xORLx
Offline
Зарегистрирован: 22.05.2019

Если для вас это так легко , просто напишите скетч

bwn
Offline
Зарегистрирован: 25.08.2014

if (oldData != Data) {
писать в регистр
oldData = Data;
}

xORLx
Offline
Зарегистрирован: 22.05.2019

Я ищу что-то вроде этого :
union{
struct{
unsigned bit_1 :1;
unsigned bit_2 :1;
unsigned bit_3 :1;
unsigned bit_4 :1;
unsigned bit_5 :1;
unsigned bit_6 :1;
unsigned bit_7 :1;
unsigned bit_8 :1;
};
unsigned char bytes[1];
}out_data;

Только начала скетча я не нашёл .
И вопрос , если тут едининици которые
после двоеточия стоят поменять на переменные
будет работать ?

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

xORLx пишет:
Если для вас это так легко , просто напишите скетч

вы сюда пришли, чтобы вам скетч написали? Или научится чему-то?

Если учиться - попробуйте сами написать и выкладывайте сюда - обсудим. что получилось.

А если просто код нужен - это в раздел "Ищу исполнителя". за денежку

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

xORLx пишет:
И вопрос , если тут едининици которые после двоеточия стоят поменять на переменные будет работать ?

а вы попробуйте :)

xORLx
Offline
Зарегистрирован: 22.05.2019

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

xORLx
Offline
Зарегистрирован: 22.05.2019

Я ещё не заказал 595 , мне нужно узнать сможет ли она то
что мне от неё нужно

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

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

вы сами путаетесь, что вам нужно. Как управлять каждым выходом отдельно - расписано на каждом заборе. Насколько я вижу, вам нужен не пример, как управлять регистром, а как запаковать 8 отдельных переменных в один байт, к регистру это имеет очень отдаленное отношение...

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

xORLx пишет:
Я ещё не заказал 595 , мне нужно узнать сможет ли она то что мне от неё нужно

если даже вы не знаете, нам то откуда знать. сможет ли она то. что нужно именно вам.

Управлять каждым выходом отдельно 595 регистр может легко, но вдруг вы хотите чего-то еще?

xORLx
Offline
Зарегистрирован: 22.05.2019

Если легко , то как . А если сами не знаете то зачем других запутывать ?

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

xORLx пишет:
Если легко , то как . А если сами не знаете то зачем других запутывать ?

В любом примере описано, например вот тут:

http://arduino.ru/Tutorial/registr_74HC595

еще в сообщении 25 дали пример.

Каждый светик управляется отдельно от других

bwn
Offline
Зарегистрирован: 25.08.2014

Вам ведь 707 рассказал про битсет и битрид, они могут менять и проверять любой бит в байте. Потом полученный байт надо отправить в регистр. Чем будет управлять регистр, светодиодом, реле, ядреным реактором etc, на совести разработчика.
И это, в ардуине, даже boolean равен байту. Напуя здесь структура, не пойму.

xORLx
Offline
Зарегистрирован: 22.05.2019

Нормальных примеров с битсет я не нашёл ,
если в нём можно заместо 0 и 1 использовать
переменную то мне подходит , а тут
http://arduino.ru/Tutorial/registr_74HC595
скетч для герлянды , он не подойдёт

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

xORLx пишет:
Нормальных примеров с битсет я не нашёл , если в нём можно заместо 0 и 1 использовать переменную то мне подходит

Если в переменной содержится 0 или 1 - то можно, а если число Пи - то нет.

И еще. Вы, простите, пишете, что "скетч напишу сам" - а сами даже даже не можете догадаться. как вызвать bitSet(1) или bitSet(0) в зависимости от значения переменной? :) Оператор IF не проходили? :)

xORLx
Offline
Зарегистрирован: 22.05.2019

If умею , практикую , а битсет нет . И разве в bitSet не два числа в скобках ?

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

xORLx пишет:
И разве в bitSet не два числа в скобках ?

это был псевдопример :) в код его вставлять не надо

xORLx
Offline
Зарегистрирован: 22.05.2019

В общем спасибо , буду тогда bitSet ковырять )

bwn
Offline
Зарегистрирован: 25.08.2014

xORLx пишет:
И разве в bitSet не два числа в скобках ?

Два, два, переменная и номер бита который надо изменить.
bitSet - установить.
bitClear - сбросить.
bitWrite - установить или сбросить. (в ней три параметра)