Про мини кто сталкивался

vova20081
Offline
Зарегистрирован: 08.08.2015

Здравствуйте. С новым годом! Новых проектов всем! Собрал на про мини терморегулятор для подвала. Состав: промини, реле, ds18b20. При +1 включается реле при+5 выключается. При вкоючении реле включается светодиод на 13 ноге(для индикации) . Релюх две на разных пинах( на разных пинах, работают параллельно,для надежности, обрубают 220). При включении все ок. Через некоторое время ( неделя - две- три) начинаются глюки. Может сработать не по температуре, может зажеться индикаторный светодиод, может сработать одно из реле. После перезапуска все ОК. Блок питания доя ардуины - зарядка от сотового( пробовал разные результат один). Подскажите что может быть.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Схему !

vova20081
Offline
Зарегистрирован: 08.08.2015

Да нет схемы. Стандартные китайские реле и термометр.
Реле на 10 11 пинах

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

код!

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Ну тогда в голову приходит только одно - помеха по питанию.

Т.К. вы коммутируете сильноточную нагрузку (220 в), а БП воткнут, наверное, рядом с ним, тут и засада.

Что за нагрузка хоть ? Электролит побольше на питание Ардуинки.

Я бы, вместо "стандартных китайских реле" спользовал:

http://www.ebay.com/itm/24V-380V-40A-250V-SSR-40-DA-Solid-State-Relay-Module-3-32V-DC-To-AC-/201414937205?hash=item2ee5440a75:g:0MoAAOSwD0lUduWt

ADD:

Ну, да и на код хотелось бы глянуть...

vova20081
Offline
Зарегистрирован: 08.08.2015

Нагрузка обычный тепловентилятор. Но таеая хрень и без нагрузки происходит( без 220) дома проверял. Конденсатор по питанию на ардуину какой нужно ставить?

vova20081
Offline
Зарегистрирован: 08.08.2015

Код дома. Пишу с мобилы.

lex2k
Offline
Зарегистрирован: 17.12.2015

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

vova20081
Offline
Зарегистрирован: 08.08.2015

С влажностью все ОК. Сначала работала в подвале, а потом дома. Другую мини не пробовал, т.к. Эту залил клеем после сборки, для герметичности.

lex2k
Offline
Зарегистрирован: 17.12.2015

и толку ноль так понимаю

vova20081
Offline
Зарегистрирован: 08.08.2015

Да

vova20081
Offline
Зарегистрирован: 08.08.2015

Я думаю проблема в питании.

vova20081
Offline
Зарегистрирован: 08.08.2015

Просто я с таким не сталкивался.

lex2k
Offline
Зарегистрирован: 17.12.2015

запитай от батареек или КРЕН5 собери

может прога виснет........сделай из 13 ноги моргалку........если зависнет моргать перестанет и увидешь

 

slavyan75
Offline
Зарегистрирован: 30.11.2015

vova20081 пишет:
Блок питания доя ардуины - зарядка от сотового( пробовал разные результат один).

уточни - пробовал разные блоки питания или разные зарядки от сотовых ?

vova20081
Offline
Зарегистрирован: 08.08.2015

Разные зарядки

lex2k
Offline
Зарегистрирован: 17.12.2015

зарядки тоже разные бывают........

lex2k
Offline
Зарегистрирован: 17.12.2015

все таки на  КРЕН5 попробуй

vova20081
Offline
Зарегистрирован: 08.08.2015

Спасибо попробую

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Может переполнение по millis() 32-битного числа? Там что-то в районе 3-х суток получается
Можно поставить перезагрузку принудителную каждые сутки, если в коде нет сил разобраться

ESV
Offline
Зарегистрирован: 16.12.2015
 //общая регулярная  перезагрузка  - раз в неделю
unsigned long tmillis = millis();
if (604800000-long(tmillis)  <=  0) 
 //1000*60*60*24*7
 {
  asm volatile ("jmp 0x0000");
 }

 

vova20081
Offline
Зарегистрирован: 08.08.2015

Спасибо буду пробовать

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

ESV пишет:

 //общая регулярная  перезагрузка  - раз в неделю
unsigned long tmillis = millis();
if (604800000-long(tmillis)  <=  0) 
 //1000*60*60*24*7
 {
  asm volatile ("jmp 0x0000");
 }

 

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

if (current - previous > interval) {}

когда current, previous, interval имеют тип unsigned long 

 

ESV
Offline
Зарегистрирован: 16.12.2015

Клапауций 322 пишет:

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

if (current - previous > interval) {}

когда current, previous, interval имеют тип unsigned long

То есть кошерней так?

 //общая регулярная  перезагрузка  - раз в неделю
unsigned long current_millis = millis();
unsigned long a_week_millis = 604800000; //1000*60*60*24*7
if (current_millis - a_week_millis  >  0) 
{
 asm volatile ("jmp 0x0000");
}

 

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Я всегда делаю так: 
 

if( ( current - previus ) > interval || current < previus ){
   previus = current;
 }

Тогда с любым типом работает

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

ESV пишет:

Клапауций 322 пишет:

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

if (current - previous > interval) {}

когда current, previous, interval имеют тип unsigned long

То есть кошерней так?

 //общая регулярная  перезагрузка  - раз в неделю
unsigned long current_millis = millis();
unsigned long a_week_millis = 604800000; //1000*60*60*24*7
if (current_millis - a_week_millis  >  0) 
{
 asm volatile ("jmp 0x0000");
}

Можно перезагружать так:

void(* resetFunc) (void) = 0; 

resetFunc();