Скетч для холодильника
- Войдите на сайт для отправки комментариев
Вс, 13/11/2016 - 01:30
Ребят зацените
Имеем Arduino Pro mini, три релюшки, два DS18B20, LCD экран и кучу проводов.
Задача - навернулся модуль управления холодильником, нужно привести в рабочее состояние.
Скетч управления холодильником с функцией NoFrost (автоматическая оттайка)
#include <Wire.h> #include <DallasTemperature.h> #include <OneWire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2);// set the LCD address to 0x27 for a 16 chars and 2 line display #define TEMP_WIRE_BUS 2 OneWire tempWire(TEMP_WIRE_BUS); //объявили переменную датчиков DallasTemperature TempSensors(&tempWire); //объявили структуру типа Даллас термометр DeviceAddress coolThermometer = { 0x28, 0xFF, 0x23, 0xFC, 0x43, 0x16, 0x03, 0xEC }; датчик на тэне оттайки DeviceAddress tenThermometer = { 0x28, 0xFF, 0xC0, 0xC6, 0x43, 0x16, 0x04, 0xA8 }; датчик в морозилке // define variables float tempSensor[2]; // массив куда читается температура c датчиков. byte qty; // количество градусников на шине. byte gradus[8] = { 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000, 0b00000 }; // символ градуса ////////////////////////////////////////////////////////////////// //про холодильник #define ReleCompr 4 // реле компрессора #define ReleFun 5 // реле вентилятора #define ReleTen 6 // реле оттайки #define LedAlarm 13 //пин тревоги // не задействовал пока // ///////////////////////////////////////////////////////////////// void getTemp(){ // читаем температуру и заполняем массив TempSensors.requestTemperatures(); //команда сенсорам заполнить свою память новыми данными tempSensor[0] = TempSensors.getTempC(coolThermometer); tempSensor[1] = TempSensors.getTempC(tenThermometer); /* for (int i = 0; i < qty; i++) tempSensor[i] = TempSensors.getTempCByIndex(i);//в цикле заполняем массив полученными данными, уже приведенными к градусам Цельсия. */ } // ///////////////////////////////////////////////////////////////// // пороговые значения температуры float tempC; float t1 = -11.0; //порог выключения компрессора float t2 = -9.0; // порог включения компрессора float t3 = -05.0; //порог выключения оттайки float t4 = 02.0; //порог включения оттайки // ///////////////////////////////////////////////////////////////// // вкл выкл компрессора void DoCompr() { digitalWrite(ReleCompr, LOW); } void NoCompr() { digitalWrite(ReleCompr, HIGH); } void DoFun() // вкл выкл вентилятора в морозилке { digitalWrite(ReleFun, LOW); } void NoFun() { digitalWrite(ReleFun, HIGH); } void DoTen() // вкл выкл тэна оттайки { digitalWrite(ReleTen, LOW); } void NoTen() { digitalWrite(ReleTen, HIGH); } void printData(){ /////// вывод инфы на экран lcd.setCursor(0, 0); lcd.print("Temp1: "); lcd.print(tempSensor[0]); // показываем температуру с датчика lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Temp2: "); lcd.print(tempSensor[1]); lcd.print("C"); delay(2000); //2 сек пауза } // ///////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////// void setup() { pinMode(ReleCompr, OUTPUT); pinMode(ReleFun, OUTPUT); pinMode(ReleTen, OUTPUT); TempSensors.begin(); //инициализируем сенсоры lcd.init(); lcd.backlight(); Serial.begin(9600);//инициализируем серийный порт } // ////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////// void loop() { getTemp(); // читаем температуру с датчиков lcd.clear();//очистили экран от предыдущего вывода printData();//печатаем данные if(tempSensor[0] > t2) { if(ReleTen, LOW) { NoCompr(); } else { DoCompr(); DoFun(); lcd.clear(); lcd.setCursor(0, 1); lcd.print("Compr ON"); } } if(tempSensor[0] < t1) { NoCompr(); NoFun(); lcd.clear(); lcd.setCursor(0, 1); lcd.print("Compr OFF"); } if(tempSensor[1] < t3) { DoTen(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ten ON"); } if(tempSensor[1] > t4) { NoTen(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ten OFF"); } } // ///////////////////////////////////////////////
Все таки код хромает... Не могу никак при включении оттайки (DoTen) по сигналу датчика 2 не включать реле компрессора (DoCompr) по сигналу датчика 1.
Не только код, но и алгоритм. Одтайку надо производить регулярно по времени. И мерять температуру там не надо.
http://refer.lt/ustrojstvo-xolodilnikov/
От СИСТЕМА УПРАВЛЕНИЯ АВТОМАТИЧЕСКОЙ ОТТАЙКОЙ ХОЛОДИЛЬНИКОВ NO FROST и дальше
Эту статью я видел. Вы не видели другие статьи (к сожалению не смог сейчас найти для обозрения примера). Есть много разных способов запустить функцию оттайки. Разные производители используют разные алгоритмы. В моем случае второй датчик требуется для фиксации увеличения температуры достижения выключения компрессора. Т.е. в нормальном состоянии разница между двумя датчиками составляет 6 градусов. Датчик на рефрежераторе показывает -13 С, в это время датчик в морозилке должен показать - 7 С, происходить просто выключение компрессора. Если на рефрежераторе образуется шуба, то для достижения в морозилке - 7 С , рефрежератор должен "нагреться" до - 14 С, происходит включения тена для сброса шубы. Это тоже вариант запуска NoFrost в холодильниках Whirpool.
Да и влюбом случае при достижении определенного момента (достижения времени включения оттайки) должна включиться какая то функция (в нашем случае оттайка тэном) и игнорироваться другая функция, которая тоже хочет в это же время включиться (включение компрессора по времени).
А зачем усложнять алгоритм. Вам же надо просто сделать холодильник а не заниматься проверкой новых веяний.
1 измерить температуру в холодильнике
2 если температура высока, то включить компресор на 1 минуту и разморозку на 10 секунд(после когда компрессор уже отключили)
3 перейти к пункту 1.
ПС: Подобрав в ручную длительность времени работы компрессора и времени разморозки, можно легко получить простую рабочую программу, которую и отлаживать просто.
В смысле? все время включать оттайку после работы компрессора?
Ну да. Такая простая идея обычно не всегда доходит.
Вам же надо не только охладить, но и убрать воду. Точнее в воздухе всегда есть влажность. И с понимажением температуры она выпадает в виде воды или инея. А так как охладитель во время работы и есть такое самое холодное место, то на нем и выпадает все. Так что после работы компресора , на охладителе и остается шуба. Вот ее , а точнее поверхность шубы охладитель нагревают. Что бы снизить сцепление. А дальше под своим весом все падает вниз. Но по любому надо периодически холодильник размораживать. Так как облединеет и стенки самой камеры. А вот их нагревателями убирать не получится.
ПС: Подобрав в ручную длительность времени работы компрессора и времени разморозки, можно легко получить простую рабочую программу, которую и отлаживать просто.
компрессор фигачит, пока не наберёт необходимую температуру. продвинутые версии контроллеров холодильников выдадут тебе аварийный код ошибки и отключат холодильник, если необходимая температура не набирается за оптимальный период времени - что там вручную подбирать, не понятно.
частота разморозки обусловлена предполагаемым количеством намороженного на радиаторе льда, а не выключением компрессора.
частота разморозки обусловлена предполагаемым количеством намороженного на радиаторе льда, а не выключением компрессора.
Без комментариев. Верной дорогой идете туда товарищи, но мне туда не надо.
Без комментариев. Верной дорогой идете туда товарищи, но мне туда не надо.
ты нормальный чел? - я тебе пересказал принцип работы своего холодильника.
Ну да. Такая простая идея обычно не всегда доходит.
Вам же надо не только охладить, но и убрать воду. Точнее в воздухе всегда есть влажность. И с понимажением температуры она выпадает в виде воды или инея. А так как охладитель во время работы и есть такое самое холодное место, то на нем и выпадает все. Так что после работы компресора , на охладителе и остается шуба. Вот ее , а точнее поверхность шубы охладитель нагревают. Что бы снизить сцепление. А дальше под своим весом все падает вниз. Но по любому надо периодически холодильник размораживать. Так как облединеет и стенки самой камеры. А вот их нагревателями убирать не получится.
qwone, ты рассказываешь о старых моделях холодильников - в современных отсутствуют обледеневающие стенки камеры. стенки камер хранения пластмассовые, холодный воздух из охладающего блока холодильника гонится вентилляторами в плюсовую и мородильные камеры, радиатор охлаждения выглядит так и расположен в закрытом техническом отсеке
У родителей в стареньком холодильнике трудится тинька 13-я, взамен сдохнувшего мехтаймера. Тупо таймер, работает 3 или 4 года, полет нормальный. Единственно, если память не изменяет, при отключении питания сохраняется состояние таймера.
Диалоги ни о чем...
Ребят, выложил скетч, просто гляньте - нормально? Хочу предусмотреть запрет включения компрессора во время включения оттайки. Тупо не знаю как правильно это сделать.
qwone, ты рассказываешь о старых моделях холодильников - в современных отсутствуют обледеневающие стенки камеры. стенки камер хранения пластмассовые, холодный воздух из охладающего блока холодильника гонится вентилляторами в плюсовую и мородильные камеры, радиатор охлаждения выглядит так и расположен в закрытом техническом отсеке
Если отсутствуют обледеневающие стенки камеры , то и обледевания нет. Ну да пласмасса очень плохой теплопроводник, чем металл. И если поверхность хладогенератора не достигает 0, то лед не образуется. Тогда нагреватели нужны для быстрой разморозки холодитьника. То есть у холодильника 2 режима холодильник и Разморозка. Датчик температуры должен быть один, но тогда нужна кнопка-"ВКЛ РАЗМОРОЗКУ". Или нагреватели там не нужны, если холодильник не намораживает в себя лед.
Если отсутствуют обледеневающие стенки камеры , то и обледевания нет.
отсутствует камера в том понимани, как ты её представляешь, в современном холодильнике
Вариант с включением оттайки после каждого включения компрессора не подходит и не рассматривается. Тупо денег жалко на эл.энергию, да и не практично это. В выложенном тобой материале о работе холодильников указано, что оттайку включает таймер через 6-8 часов после достижения минусовой температуры в камере.
Диалоги ни о чем...
Ребят, выложил скетч, просто гляньте - нормально? Хочу предусмотреть запрет включения компрессора во время включения оттайки. Тупо не знаю как правильно это сделать.
ну, а твой скетч о чём?
каков оригинальный алгоритм работы охлаждающей систмы твоей модели холодильника?
насколько точно ты воспроизвёл сабж?
у тебя оттайка борется с компрессором? и, кто побеждает?
Dimmm , я не знаю какой у вас холодильник, и в каком режиме он работал. Так что без знания этого я ничего не скажу. А если и вы не знаете, тода точно что бы вы напишете будет или не работать, или работь не так как задумано производителем.
Диалоги ни о чем...
Ребят, выложил скетч, просто гляньте - нормально? Хочу предусмотреть запрет включения компрессора во время включения оттайки. Тупо не знаю как правильно это сделать.
ну, а твой скетч о чём?
каков оригинальный алгоритм работы охлаждающей систмы твоей модели холодильника?
насколько точно ты воспроизвёл сабж?
у тебя оттайка борется с компрессором? и, кто побеждает?
Оригинальный алгоритм работы как описано в статье http://refer.lt/ustrojstvo-xolodilnikov/, т.е. включение оттайки по таймеру: в морозилке стало -5 С, время пошло. Прошло 4 часа - включаем тэн оттайки. Температура в камере поднялась до +1, сброс таймера, включается компрессор. Температура достигла - 5 С, запуск таймера. Прошло 4 часа, включается тэн оттайки.... и т.д.
В большинстве холодильников таймер механический и серво мотор, поворачивая сердцевину, замыкает -размыкает контаткы, в более продвинутых версиях таймер программный.
У меня включение оттайки по принцыпу, который использует Самсунг - величина ледяной шапки на радиаторе. Суть от этого не меняется. То ли включаем при достижении времени, то ли при достижении температуры.
Своим постом хотел попросить проверить скетч (все-таки холодильник, который будет работать без присмотра) и попросить совета как написать скетч, чтоб при выполнении оттайки блокировалось включение компрессора. Ведь даже при достижении времени для оттайки по таймеру, возможны потуги программы включить компрессор, который включается от температуры.
Своим постом хотел попросить проверить скетч (все-таки холодильник, который будет работать без присмотра) и попросить совета как написать скетч, чтоб при выполнении оттайки блокировалось включение компрессора. Ведь даже при достижении времени для оттайки по таймеру, возможны потуги программы включить компрессор, который включается от температуры.
ок. не вдаваясь в подробности технической реализаци и оригинальных или не оригинальных алгоритмов.
рекомендации по архитектуре программы управления холодильником:
- режимы работы прописать в отдельные подпрограммы.
- подпрограммы связать между собой условиями выполнения и таймерами.
*в таком случае у тебя невозможен вариант, о котором ты говоришь, когда что-то включается в то время, когда что-то работает и выполнение этих режимов практически запрещено. как так? с какого это у тебя может включиться компрессор, если работа компрессора во время оттайки не соответсвует условию запуска компресора?
Может так
Сейчас я сделал так
не знаю сработает ли.
Сейчас я сделал так
не знаю сработает ли.
писец оптимальный код.
а почему не такая последовательность
Перед первым принтом не выставлять курсор?
я сейчас вообще по другому сделал
вывод на экран в микропрограмме поставил и далее в исполнении уже не требуется вывод
lcd.clear(); уже выставляет курсор в верхнюю позицию.
Fun ON,Fun OFF,Ten ON,Ten OFF вообще заменяют на значки , как вы градус написали и ставят в определеную позицию.
Ну в мобилках есть такой прием . заряд батареи . уровень связи. Так что даже lcd.clear(); не надо. Его новый знак закроет старый.
Обнаружилась еще одна проблема.
Не знаю аппаратная или программная.
Короче код работает. Холодильник отработал примерно часа 2,5. Очередной раз выключился компрессор, и вдруг с экрана lcd все пропало, подсветка горит, на ардуинке диод питания горит, на релюшках диоды питания горят, а на экране ничего нет. И ничего не происходит. Не включается, не выключается. после нажатия кнопки резет на ардуинке, все запускается в штатном режиме и стабильно работает. Второй раз та же ситуация через 1,5 часа. После резета опять все работает.
Что это?
lcd.clear(); уже выставляет курсор в верхнюю позицию.
Fun ON,Fun OFF,Ten ON,Ten OFF вообще заменяют на значки , как вы градус написали и ставят в определеную позицию.
Ну в мобилках есть такой прием . заряд батареи . уровень связи. Так что даже lcd.clear(); не надо. Его новый знак закроет старый.
А, понял, спасибо! Соптимизирую.
Что это?
качественный блок питания дуино с сетевым фильтром от промышленных помех, релейные модули с опторазрязкой, алгоритм программы, корректно отрабатывающий процесс обслуживания силовых модулей холодильника после внезапного отключения питания.
ну да, ну да. Хорошо, понял спасибо! Очень доходчиво. Самое главное понятно что делать.
Вот рабочий скетч холодильника. Не могу сказать, что на 100%, но пока 8 часов - полет нормальный.
Можно добавить задержку выключения вентилятора после выключения компрессора.
Блин, виснет и все. Не пойму в чем дело. Все нормально работает, семь-восемь часов, все циклы в норме, вдруг раз, на произвольном месте виснет. На дисплее либо пусто, либо надпись после последнего действия. И больше ничего не делает. После нажатия кнопки резет - нормально работает.
Используй wdt
Да, эти не требуют разморозки раз в полгода, есть такое
а что это?
Используй wdt
Все таки костыль, можно держать если сбой раз в полгода-год.
Лучше еще раз прошерстить цепи питания, добавить керамики. Собака скорее всего роется именно там.
Всем спасибо! Совет про wdt (посмотрел что это) навел на мысль об изучении "среды" работы ардуинки. Так вот это же холодильник! Рядом компрессор с высоко индуктивной обмоткой! Просто наводка и все. Ардуинка же "голая", без защиты что называется. Плюс пуск компрессора связан с кратковременным скачком напруги в сети, а розетка то одна. Вот и происходит сбой в работе. Стало понятно что делать дальше. Спасибо!
Блин, виснет и все. Не пойму в чем дело. Все нормально работает, семь-восемь часов, все циклы в норме, вдруг раз, на произвольном месте виснет. На дисплее либо пусто, либо надпись после последнего действия. И больше ничего не делает. После нажатия кнопки резет - нормально работает.
надо проверить подтяжку на линиях SDA и SCL, если нету может зависать при выводе на LCD
Всем спасибо! Совет про wdt (посмотрел что это) навел на мысль об изучении "среды" работы ардуинки. Так вот это же холодильник! Рядом компрессор с высоко индуктивной обмоткой! Просто наводка и все. Ардуинка же "голая", без защиты что называется. Плюс пуск компрессора связан с кратковременным скачком напруги в сети, а розетка то одна. Вот и происходит сбой в работе. Стало понятно что делать дальше. Спасибо!
внезапное прозрение после того, как выполнил все рекоментации... или забил на рекомендации и продолжил тупить, не взирая?..
*подключись от розетки соседней элекростанции.
Что это?
качественный блок питания дуино с сетевым фильтром от промышленных помех, релейные модули с опторазрязкой, алгоритм программы, корректно отрабатывающий процесс обслуживания силовых модулей холодильника после внезапного отключения питания.
Всем спасибо! Совет про wdt (посмотрел что это) навел на мысль об изучении "среды" работы ардуинки. Так вот это же холодильник! Рядом компрессор с высоко индуктивной обмоткой! Просто наводка и все. Ардуинка же "голая", без защиты что называется. Плюс пуск компрессора связан с кратковременным скачком напруги в сети, а розетка то одна. Вот и происходит сбой в работе. Стало понятно что делать дальше. Спасибо!
внезапное прозрение после того, как выполнил все рекоментации... или забил на рекомендации и продолжил тупить, не взирая?..
*подключись от розетки соседней элекростанции.
Что это?
качественный блок питания дуино с сетевым фильтром от промышленных помех, релейные модули с опторазрязкой, алгоритм программы, корректно отрабатывающий процесс обслуживания силовых модулей холодильника после внезапного отключения питания.
Соединил все в одно целое. Конечно воспользовался рекомендациями. Предпочитаю слушать (или читать) и пользоваться советами бывалых в этой области людей.
Спасибо!
Конечно воспользовался рекомендациями.
запости фото сетевого фильтра блока питания дуино - просто интересно, почему после установки фильтра, продолжились глюки.
Конечно воспользовался рекомендациями.
запости фото сетевого фильтра блока питания дуино - просто интересно, почему после установки фильтра, продолжились глюки.
Завтра сделаю. К слову, с момента пропайки контактов, установки упса, выведением дуины дальше от компрессора прошло уже более суток, за это времч ни одного глюка.
Завтра сделаю. К слову, с момента пропайки контактов, установки упса, выведением дуины дальше от компрессора прошло уже более суток, за это времч ни одного глюка.
какого упса? зачем тебе бесперебойник на холодильнике?
Завтра сделаю. К слову, с момента пропайки контактов, установки упса, выведением дуины дальше от компрессора прошло уже более суток, за это времч ни одного глюка.
какого упса? зачем тебе бесперебойник на холодильнике?
не совсем бесперебойник, сетевой от APS.
не совсем бесперебойник, сетевой от APS.
ок. тогда фото не нужно - там должно быть всё в порядке.
Скетч выше абсолютно рабочий, но все-таки требуется оттайка по времени. Никак не могу реализовать таймер.
Задача - через 6 часов после включения, включить тэн для оттайки на 15 секунд, при этом исключить включение компрессора и вентилятора, которые включаются при определенной температуре от термодатчика. Обнулить таймер, опять с учетом температуры включать - выключать компрессор с вентилятором, снова через 6 часов включить оттайку, игнорируя компрессор и т.д.
Что не могу завязать привязать. Гляньте, кому интересно и, если можете, помогите.
Задача - через 6 часов после включения, включить тэн для оттайки на 15 секунд, при этом исключить включение компрессора и вентилятора, которые включаются при определенной температуре от термодатчика. Обнулить таймер, опять с учетом температуры включать - выключать компрессор с вентилятором, снова через 6 часов включить оттайку, игнорируя компрессор и т.д.
таймер здесь класс титановый велосипед для delay без delay().
остальное - говорил же, как:
if (таймер) {оттайка;}
if (!оттайка) {компрессор; вентиллятор;}
Задача - через 6 часов после включения, включить тэн для оттайки на 15 секунд, при этом исключить включение компрессора и вентилятора, которые включаются при определенной температуре от термодатчика. Обнулить таймер, опять с учетом температуры включать - выключать компрессор с вентилятором, снова через 6 часов включить оттайку, игнорируя компрессор и т.д.
таймер здесь класс титановый велосипед для delay без delay().
остальное - говорил же, как:
if (таймер) {оттайка;}
if (!оттайка) {компрессор; вентиллятор;}
Спасибо! Сейчас попробую.
Скетч выше абсолютно рабочий, но все-таки требуется оттайка по времени. Никак не могу реализовать таймер.
Задача - через 6 часов после включения, включить тэн для оттайки на 15 секунд, при этом исключить включение компрессора и вентилятора, которые включаются при определенной температуре от термодатчика.
Давно читаю ваш форум и думал зарегаться чуть позже, но увидив темку практически по моей специальности (холодильщик) решил направить в нужное русло (только по логике работы, в кодах не разбираюсь), после входа в режим оттайки, вы должны контролировать температуру на испарителе, после достижения температуры плюс 5, вы должны выключить тен, и дать несколько минут для: 1 того что бы капли стекли, 2 (эта причина, почему нельзя делать оттайку 15 сек) дело в том, если вы будете включать и выключать компрессор (менее 5 мин. примерно) то он вскоре выйдет из строя. Это делать нельзя!
есть еще момент: в схеме управления ТЕНом, объязательно должен стоять предохранитель (впринципе можно организовать размыкание цепи при привышении температуры более 50С, или тупо плавкую вставку) сделано это для того что бы исключить перегрев тена, если контакты реле заклинило - это защита, и игнорировать ее нельзя! Слашал что холодильники просто сгорали в прямом смысле.
еще вам нужно выяснить каким способом потдерживается температура в среднетемпературной камере (самая большая секция), там вариантов много как пример - установка воздушной заслонки, которая перепускает воздух с морозилки.
попытался на доступном языке написать, если что спрашивайте - помогу.
Ну ничего себе! Большое спасибо! Загружаю, щас глянем работоспособность.