Кратковременное срабатывание реле при включении питании ардуино

ledom
Offline
Зарегистрирован: 19.05.2013

Возникла проблема при подключении реле к ардуино ( реле с напряжением управления 5 вольт, переключается уровнем "0" ).

Питание беру с ардуины соответственно подключив: Vcc на +5 ардуины, и соеденяю земли. Управление реле - пин IN подключаю к 7 пину ардуины.

Т.е изначально для разомкнутого состояния реле на пине упраления 7 должна быть "1". 

Использую код:

void setup()
{
    pinMode(rele, OUTPUT); 
    digitalWrite(rele, HIGH);  
}

А для переключения реле должен быть низкий уровень: 

digitalWrite(rele, LOW);  

Проблема в следющем: при подаче питания (включении ардуины) происходит кратковременное срабатывание реле. 

Подскажите пожалуйста как решить данную проблему?

Были варианты подавать питание на реле с пина арудины, на котором выставлять +5 только после установления "1" на выводе 7 (выводе управления).  Но такая схема не дала результатов, так как не хватает напряжения для срабатывания реле.

 

leshak
Offline
Зарегистрирован: 29.09.2011

Строкой 4-ре, вы устанавливаете нужный уровень. Но, к сожалению, проходит какое-то время между включением ардуины и тем когда эта строка выполнится (пока отработает бутлоадер и т.п.). А, по умолчанию, на выходах ноль. Вот оно и успевает "клацнуть".

Варианты выхода:

1. Брать другое реле, которое управляется логическое единицей, а не нулем.
2. Использовать внешний подтягивающий резстор. То есть между пином rele и питанием поставить вкорячить резистор номинало побольше (10k-20K).
3. Химичить какой-то "инвертер", который будет 0 превращат в единицу, а 1-цу в ноль.

IMHO самый простой - второй вариант.

toc
Offline
Зарегистрирован: 09.02.2013

поменяйте местами две строки в методе setup.

желательно подключать реле к МК через транзистор, иначе может сгореть пин.

ledom
Offline
Зарегистрирован: 19.05.2013

Спасибо, сейчас попробую второй вариант.

Но не совсем понимаю, как подтянув мой пин rele к +5, я получу "0"  на пине IN реле при  сотсоянии LOW ?  

leshak
Offline
Зарегистрирован: 29.09.2011

 

toc пишет:

поменяйте местами в setup две строки.

По умолчанию, все выходы в Z-состоянии. То есть могут ловить любые наводки из эфира. А это значит, что даже если смена строк поможет, то это "просто повезло". И "прощелки", все равно могут потом позникать если где-то в этот момент включится холодильник, волновка и т.п.  Лучше, все-таки, гарантированно его притянуть к питанию.

toc пишет:

желательно подключать реле к МК через транзистор, иначе может сгореть пин.

Судя по " Vcc на +5 ардуины, и соеденяю земли. Управление реле - пин IN" - это не голое реле, а модуль реле уже содержащий упоминаемую вами обвязку, а значит "самому ее добавлять" не нужно.

ledom
Offline
Зарегистрирован: 19.05.2013

Простите сразу не уточнил, я подключаю не напрямую реле, а  маленький "реле-шилд" на одно реле.

Строки менял местами, результат прежний.

leshak
Offline
Зарегистрирован: 29.09.2011

ledom пишет:

Спасибо, сейчас попробую второй вариант.

Но не совсем понимаю, как подтянув мой пин rele к +5, я получу "0"  на пине IN реле при  сотсоянии LOW ?  

Да очень просто :)  Как работает любой подтягивающий резистор.

У вас получится "делитель напряжения".

http://bsvi.ru/kalkulyator-delitelya-na-rezistorax/

Седьмой пин это GND с этой схемы (R2=0). Vout - то что пошло на реле. R1=20K, R2=0

Когда на на седьмой пин податие HIGH, то у вас c пина, просто пойдет 5v на IN реле. Через R1 ток вообще идти не будет, так как с обоих сторон у него 5v.

А когда вы дадите LOW. То есть 7-мой пин станет землей как на схеме, то у вас выйдет 

Нижнее плечо 0 килоом.

Что естественно пересилит слабенький ток из R1 - 250uA

Эти 250uA - потери. Расплата за потяжку. Но, как видите - довольно маленькие.

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

 

leshak
Offline
Зарегистрирован: 29.09.2011

Вот, можете почитать

http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html

Там внизу есть коммикс-картинки, для объяснения идеи подтягивающиго резистора.

Пообщем считайте его такое "слабой пружинкой", которая подтягивает выход к питанию, что-бы он не "болтался", до тех пор пока мы "по серьезному" не дадим на него питания digitalWrite. А когда digitalWrite(.., LOW) - он просто пересилит эту пружинку.

leshak
Offline
Зарегистрирован: 29.09.2011

И наверное, совет от toc тоже имеет смысл применить. То есть нужен и резитор и digitalWrite делать до переключение portMode

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

попробуйте подтянуть базу транзистора к питанию(если pnp)

ledom
Offline
Зарегистрирован: 19.05.2013

Попробовал вариант  от leshak с подтягивающим резистором, номиналы брал 22 кОм, 10 кОм, 1кОм, но результат так и не получил, все равно есть кратковременно клац...(

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

Вашу схему и программу в студию  :)

triada13
Offline
Зарегистрирован: 04.01.2013

Уважаемый  leshak, а что это у вас за программа скрин которой вы засветили в посте №6?

leshak
Offline
Зарегистрирован: 29.09.2011

Ну вообщем, вариант от Michal это тот же самый вариант.

Может вы нарисуете схему, как вы, в итоге, поняли мое текстовое описание. Что куда вы подключили?

Если подтянуть резистором (все, верно меньше 1K - не нужно пробовать), но при этом залить "пустой скетч"

void setup(){
}

void loop(){
}

"Клац", при включении, наблюдается?

ledom
Offline
Зарегистрирован: 19.05.2013

Спасибо всем за помощь) так не ожиданно все помогают)

могу нарисовать но думаю все делаю верно. Резистор включал не посредственно на клемы реле между IN и Vcc.

Попробовал с "пустым скетчем" - клацанья нет!!!!

Написал в цикле включение выключение каждые 5 сек через delay, так же клацанья при подаче питания нет!!!

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

leshak
Offline
Зарегистрирован: 29.09.2011

 

triada13 пишет:

Уважаемый  leshak, а что это у вас за программа скрин которой вы засветили в посте №6?

Программа называется "вы не ходили по ссылке из предыдущего поста"  (№5) ;)

Это скриншот не программы, а сайта.

Из программ, которые умеют делать то же самое я пользую ElectroDroid - Приложения на Google Play на планшете  (правда я пользую его скорее как справочник маркировки резисторов, но это он тоже умеет).

Но вообщем-то, расчитать делитель не сложно и без всяких програм, обычным калькулятором. Напряжение падает в той же пропорции, что и соотношение R1/R2 Делитель напряжения — Википедия Формула не сложна Uout=U*R2/(R1+R2)

 

leshak
Offline
Зарегистрирован: 29.09.2011

ledom пишет:

Попробовал с "пустым скетчем" - клацанья нет!!!!

Написал в цикле включение выключение каждые 5 сек через delay, так же клацанья при подаче питания нет!!!

Ну значит "железную" проблему вы решили. Теперь уже в логика копайтесь.

Натыкайте по коду, там где включаете/выключаете реле что-то типа

Serial.print(millis()); Serial.println(": src 1: ON");
и
Serial.print(millis()); Serial.println(": src 3: OFF");

И смотрите по логу где у вас выскакивает включение-нежданчик.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

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

как вариант переделать блок реле на срабатывание по "1", ну или как советовали, запустить через инвертор...

и да светодиод не показатель правильной работы... осцилоскопер в помощь :)

ledom
Offline
Зарегистрирован: 19.05.2013


Выше я писал, что проверил с пустым скетчем, но проверил то я на другой плате, написав такой скетч:

int rele = 0;
void setup(){
digitalWrite(rele, HIGH);
pinMode(rele, OUTPUT);
}

void loop(){
}

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

кстати если это имеет значение, то у меня пин управления 0.

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

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

попробуйте настраивать порты не  спомощью pinMode:

DDRx |= <маска для порта> "1" значит вывод
PORTx |=<маска > "1" в соответствующем бите для вашей ножки

только по схеме гляньте к какому порту реальному на МК подключено реле

ledom
Offline
Зарегистрирован: 19.05.2013

не совсем понимаю, что нужно написать (

подскажите пожалуйста.

управляющий пин реле пдключен к 0 пину ардуины.

что охначает маска для порта? что там нужно написать имя перменной которая используется для обозначения вывода? (по типу int led  = 0;  идальше везде пишем обращение к выводу как led.)

leshak
Offline
Зарегистрирован: 29.09.2011

Да не, "плохо" ему от этого не будет. От того что вначале дернули, а потому уже pinMode включили. Ну включится из-за этого, вначале, на микросекунду, внутренний подттягивающий, ну и что? Зато, как раз, избежим LOW в момент переключения pinMode

А вот то что он rele = 0 - это может играть рояль. Пины 0,1 - лучше вообще никогда не использовать. На них Serial висит. Так что "дергать вам пин 0" может еще сам компьютер. И если этот пин в этот момент поставлен в Output, то проблемы могут быть от "скетчи не заливаются", до "карачун ему пришел".

leshak
Offline
Зарегистрирован: 29.09.2011

Я вот счас специально потестил

void setup(){
  digitalWrite(13,HIGH);
  pinMode(13,OUTPUT);
}

void loop(){
}

Вполне нормально зажигает светик (то есть, в итоге HIGH на пине устанавлиается).

Так что не замудрятей, пока, с масками. Просто смените пин, на что-то отличное от 0 или 1

ledom
Offline
Зарегистрирован: 19.05.2013

leshak пишет:

А вот то что он rele = 0 - это может играть рояль. Пины 0,1 - лучше вообще никогда не использовать. На них Serial висит. Так что "дергать вам пин 0" может еще сам компьютер. И если этот пин в этот момент поставлен в Output, то проблемы могут быть от "скетчи не заливаются", до "карачун ему пришел".

Понял, спасибо,  попробую пересесть на другую ногу.

leshak пишет:

 "карачун ему пришел".

очень плохо? или это очень плохо уже случилось?

leshak
Offline
Зарегистрирован: 29.09.2011

ledom пишет:

очень плохо? или это очень плохо уже случилось?

Ну если бы он угорел и не работал как вход - вы бы об этом уже знали. У вас-бы скетчи не заливались (на разве что у вас плата Leonardo).

Проверить угорел ли он как выход - начать давать на него HIGH/LOW и смотреть тестером происходит ли переключение 5v/0v (но тут опять-таки, возникает риск добить его).

Но не вижу особого смысла. Если скетчи заливаются - просто забудте про него :)  Как вход - рабоает, как выход - а не нужно ;)

ledom
Offline
Зарегистрирован: 19.05.2013

Пересел на пин 19 и все, все заработало))))

ОГРОМНАЯ благодарность всем кто откликнулся) 

пол дня убил на это, на форуме зарегился, хорошие люди тут собрались, еще раз спасибо!!!!!

есть ли тут система благодарности, плюсанул бы? 

и подскажите пожалуйста, что это за баллы в профиле пишут?

leshak
Offline
Зарегистрирован: 29.09.2011

ledom пишет:

Пересел на пин 19 и все, все заработало))))

ОГРОМНАЯ благодарность всем кто откликнулся) 

пол дня убил на это, на форуме зарегился, хорошие люди тут собрались, еще раз спасибо!!!!!

На самом деле 80% того что вам охотно отвечали является то что вы вопросы внятно задавали :) Ваша собственная заслуга.

И не ленились проверять советы.

Если бы вы назвали тему "помогите новичку", а в ней спросили бы "как мигать диодом без делай" или "как прочитать число из сериал", а потом еще начали возмущатся на "посылание в поиск" и рассказывать как нужно отвечать на вопросы - вас ждал бы совсем другой танец ;)

ledom пишет:

есть ли тут систем благодарности, плюсанул бы? 

и подскажите пожалуйста, что это за баллы в профиле пишут?

Давно не заходил. Раньше балы в профиле - это было просто количество сообщений. Но явно был какое-то апдейт движка.  Вот вижу, что возле каждого сообщения еще появились стрелочки вверх/вниз. Думаю это что-то типа youtub-бовского like или маркировать "полезный совет". Но на что они влияют и где виден их результат - для самого загадка :)

ledom
Offline
Зарегистрирован: 19.05.2013

leshak, спасибо Вам горомное)

раньше когда сталкивался с проблемами читал этот форум, но регится надобности пока не было)

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

 

шилд с 12 вольтовыми реле.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

та чо нить типа 8550 или 8050(они разного типа) только в Smd упаковке, а диоды обынчые 1n4148, ну и оптрон стандарт pc817

недавно тема была про блок реле, там крупным планом есть фотка, все номиналы видны

MaksMS
Offline
Зарегистрирован: 11.03.2013

Логично ,прыгало на 0 пине из-за того что где-то есть строчка иницилизации сериал порта Serial.begin()  и/или работа с ним.Тут или убрать все строки ,ипользующие последовательный порт или переделать на другой свободный пин.Возможно в библиотеках есть обращение к нему для дебага..