Перезагрузка контроллера ?
- Войдите на сайт для отправки комментариев
Добрый день!
Не уверен что писать нужно в этот форум, но есть такая проблема:
Коробка с лампой для цветов. Стоит контроллер роботдин уно. Подключены часы реального времени, датчик температуры-влажности, дисплей и пара реле. Суть - считывать температуру, показывать её и время на дисплее. На ночь включать свет. Все работало прекрасно около месяца. Потом случайно заметил во время работы лампы - в какой то момент свет отключается и включается заново через время цикла программы. Долго искал в чем проблема - судя по всему происходит либо перезагрузка контроллера, либо что-то подобное. Лампа с пускателем, так что такой режим является неблагоприятным для нее. Суть вопроса - в чем может быть проблема и почему контроллер перезапускается?
Убирать выключание реле при старте пробовал - не помогло. Плата питается от адаптера на 1 ампер. Адаптер пробовал менять - то же самое.
#include <DHT.h> #include <TM1637.h> #define CLK 3 #define DIO 2 #define rele6 6 #define rele7 7 #define DHTPIN 4 DHT dht(DHTPIN, DHT22); TM1637 disp(CLK,DIO); // пины clk и dio в цифре #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1307); void setup() { pinMode(rele6, OUTPUT); //реле digitalWrite(rele6, HIGH);//выкл реле pinMode(rele7, OUTPUT); //реле digitalWrite(rele7, HIGH);//выкл реле disp.init(); disp.set(); time.begin(); dht.begin(); } void loop() { float temp = dht.readTemperature(); disp.clearDisplay(); // очистить дисплей disp.display(temp); // вывести температуру delay(5000); // пауза 5 секунд disp.clearDisplay(); // очистить дисплей int timer = atoi(time.gettime("Hi")); // получить часы и минуты в timer disp.display(timer); // вывести время delay(5000); // пауза 5 секунд int chas = atoi(time.gettime("H")); if (chas < 9 || chas > 17) { digitalWrite(rele6, LOW); digitalWrite(rele7, LOW); } else { digitalWrite(rele6, HIGH); digitalWrite(rele7, HIGH); } }
Попробуйте растащить питание ардуины и высокое на лампу в разные розетки. Код тут явно не при чем. И желательно схему всей этой радости.
Лампа питается от тех же 220 вольт (ДНАТ). Это если "высокое" было к этому.
Сейчас всё от одной розетки. Если в двух словах - модуль на два реле рвет фазу на лампу (реле запараллелены для снижения пускового тока). Лампа 400 ватт, 2 реле по 10А.
Схема ниже. Нули все объединены. В контроллере соответственно все по пинам. Питание модулей через макетную плату.
Вот и попробуйте 220 которые с реле (кстати, что за реле, опторазвязки или с транзисторными ключами) идут на лампы кинуть из другой комнаты (временно). Надо понять, где и как проскакивает помеха.
Ну тут есть два варианта. Первый - лампа дает помехи, и он самый вероятный. Второй - подглючивает часовой модуль и переменная chas в 39 строке принимает значение, при котором по условию лампа выключается. Этот вариант ну очень маловероятен, но, как говорится, а вдруг. Чтобы сразу отмести этот вариант для отладки выводите в сериал что-нибудь в сетапе (чтобы было понятно, что ардуина перегрузилась) или в том же сетапе моргните светодиодом, а также в тот же сериал выводите значение переменной chas (между 39 и 40 строкой).
Теперь что касается первого. Как у Вас подается питание на ардуину? Блок питания скольки вольтовый? Куда подключается: на +5 или Vin? Неплохо бы замерять, что творится с напряжением на пине +5 вообще и в момент сбоя в частности. Также неплохо было бы повесить дополнительный электролит на питание (сразу после блока питания).
Также пробовали ли Вы, как это все работает, когда лампа не подключена или если вместо нее подключить обычную маломощную лампочку накаливания?
С первым - я понял. Попробую запитать лампу из другого места.
Модуль реле ywrobot 2 relay. Из описания "Управляющая и управляемая электроника независимы друг от друга, что позволяет избежать помех."
Блок питания 12 вольт. Подключается в разъем на контроллере.
Повесить электролит это как?
Проблема в отслеживании в том - что происходило это раза три за месяц. Отследить крайне тяжело. При случае попробую отследить по индикации самого контроллера
Модуль реле ywrobot 2 relay. Из описания "Управляющая и управляемая электроника независимы друг от друга, что позволяет избежать помех."
Тут помеху ловит ардуина, а не релейный модуль, так что с этим должно быть все в порядке.
Повесить электролит это как?
Это чтобы немного сгладить и минимизировать провалы и/или броски питающего напряжения. На самой ардуине уже стоит электролитический конденсатор, но он там всего-лишь на 47 мкФ. Можно попробовать подцепить какой-нибудь с большей емкостью. Я бы поставил порядка 470-1000 мкФ (на 25В). На Uno легче всего его подпаять к разъему питания: ближний к краю платы (грубо говоря, к дырке самого разъема) контакт - минус, дальний - плюс, боковой не трогаем.
Проблема в отслеживании в том - что происходило это раза три за месяц. Отследить крайне тяжело. При случае попробую отследить по индикации самого контроллера
Да, такое отследить - проблема. На самый крайний случай, если и когда уже ничего не поможет, можно в сетапе поставить ну очень большую паузу, чтобы лампа не так быстро включалась после выключения. Но это таааакой костыль...
Перегревается стабилизатор 5 Вольт на плате.
Найдите блок питания на 9 Вольт.
Или поставьте Step Down сразу на 5 Вольт.
И кондёров на вход стабилизатора 2200 на 16 Вольт добавьте.
Если на блоке 12 Вольт есть ещё нагрузка - развяжитесь от неё диодом.
UPS на всё поставьте, вместе с лампами.
С конденсатором понял. Спасибо.
По второму - как вариант. Тут вопрос сберечь лампу. Я ещё думал можно сделать проверку, на сколько изменяется время в каждом цикле. Но это ещё большый костыль. Так что как вариант - применю. Спасибо
Проблема в отслеживании в том - что происходило это раза три за месяц. Отследить крайне тяжело. При случае попробую отследить по индикации самого контроллера
Да, такое отследить - проблема. На самый крайний случай, если и когда уже ничего не поможет, можно в сетапе поставить ну очень большую паузу, чтобы лампа не так быстро включалась после выключения. Но это таааакой костыль...
Я бы завел логическую переменную rebootControl, которую бы делал true в сетапе и false при нажатии на доп. кнопку. Потом в лупе жег бы светодиод, пока rebootControl взведена. Включили, кнопочкой загасили индикатор и сидим, ждем, пока он загорится. Загорелся - значит был непредвиденный ребут, пока отворачивались. Потом думаем - с чем событие совпало. Холодильник включился рядом или кот прошёл, к примеру.
Первым делом попробую перейти на 9 вольт. И еще вопрос о питании же - если использовать например зарядку для телефона и подавать питание на разъем usb - это может решить проблему?
Зарядки разные бывают. У некоторых внутри только провода и китайский флюс ))
Ежели у зарядки выход USB, то шансы счастливого исхода повышаются.
Особенности национальной китайской схемотехники иногда довольно интересны.
"Управляющая и управляемая электроника независимы друг от друга, что позволяет избежать помех." - врут.
Как правило, есть только опторазвязка по входу, при этом 5в и земля общие с контроллером - т.е. никаких преград от помех по цепи питания нет.
Реле обеспечивает гальваническую развязку цепей 220 и 5 в, но остается индуктивная. При выключении лампы (дроссель!) контакты реле рвут индуктивную нагрузку рядом с катушкой, в которой могут наводиться ощутимые помехи.
Рекомендации понятные:
1. повесить искрогасящие цепочки на контакты реле
2. Питать ардуину от 9 в и добавить конденсатор.
3. полностью изолировать обмотки реле от ардуины, т.е. кое-какие дорожки на релейной плате порезать и запитать катушки от отдельного источника 5в. Вот здесь вполне годятся зарядники от телефонов, лишь бы тока/напряжения хватало для надежного срабатывания.
1 и 2 - актуальны при всех властях, 3 - для модулей без нормальной развязки.
Да, ещё:
"Питание модулей через макетную плату" может давать любые эффекты.
Питание модулей через макетную плату.
А вот это я что-то и не заметил сразу. Какая еще макетная плата в готовом устройстве? Только пайка!
Не, ну все мы не без греха. У меня вон тоже часы на матрицах, которые появились в процессе освоения ардуины, уже третий год на макетке ))) Все никак не соберусь плату вытравить и в корпус запихнуть. Но держать устройство на макетке и страдать от нестабильной работы - это перебор.
Да и вообще, Uno больше для макетирования, в готовое устройство лучше пихать микроконтроллер (но это в идеале и не для всех) или Pro Mini (или Nano если не хотите заморачиваться с прошивкой). Они паяются, занимают значительно меньше места и стоят дешевле.
Кстати, разъем питания тоже может плохо контачить и учавствовать в этом безобразии. По себе знаю, чуть пошевелил и питание прерывается.
Да и вообще, Uno больше для макетирования, в готовое устройство лучше пихать микроконтроллер (но это в идеале и не для всех) или Pro Mini (или Nano если не хотите заморачиваться с прошивкой).
А я разве против?
Спасибо всем за советы.
Первым делом заменил питание на зарядку от самсунга и переделал макетную плату на ваги. Очень большое подозрение на неё, т.к. штекеры в ней весьма болтаюстя. Даже не знаю как я сам об этом не подумал.
Один день полёт нормальный
У меня 17 светильников ДНАТ 400 включаются частями через магнитные пускатели. При определенной помехе в сети (может пропуск полупериода или отключение сети на несколько мсек) лампы тухнут. Пускатели не успевают отщелкнуться. Остальное оборудование вообще не замечает этого.
Делайте чтоб повторное вкл. ламп было не ранее чем через 10 мин.
Четыре дня полет нормальный. Перевед на 9 вольт.
Все таки была проблема в макетной плате.
Всем спасибо за советы