Рабочий холодильник с NoFrost
- Войдите на сайт для отправки комментариев
Выкладываю проверенный скетч холодильника с функцией NoFrost (оттайка по времени).
Имеем:
1. двухкамерный холодильник Whirlpool arc 4020 (полетел модуль управления) с рабочим компрессором.
2. Arduino Pro Mini 5V ATMega328P
3. Один датчик температуры DS18B20 в герметичном корпусе.
4. Три реле DS 5V AC 250B 10A
5. LCD 1602A
6. Пучок проводов.
Собираем все в схему (нет нужды объяснять как что, если не понимаете как собрать, лучше не лезть), загружаем скетч через программатор и имеем опять рабочий холодильник.
Термореле (pin 2) устанавливаем на штатное место в морозильной камере (вместо "родного", сделал дырочку в стенке, протянул провод и замазал потом пеной), одно реле (pin 4) подключаем к компрессору, одно реле (pin 5) к вентилятору в морозильной камере, одно реле (pin 6) к тэну оттайки. Для подключения релюшек я разобрал штатный разъем холодильника и нарастил провода. Для уверенной работы релюшек и термодатчика питание для них организовано от блока питания 5V, туда же подключена дуинка (это важно). LCD питание от дуинки и A4, A5 (стандартно).
#include <Wire.h> #include <DallasTemperature.h> #include <OneWire.h> // дисплей 1602 #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2);// set the LCD address to 0x27 for a 16 chars and 2 line display // два датчика температуры DS18B20 на пин 2 #define TEMP_WIRE_BUS 2 OneWire tempWire(TEMP_WIRE_BUS); //объявили переменную датчиков DallasTemperature TempSensors(&tempWire); //объявили структуру типа Даллас термометр DeviceAddress coolThermometer = { 0x28, 0xFF, 0xC0, 0xC6, 0x43, 0x16, 0x04, 0xA8 }; DeviceAddress tenThermometer = { 0x28, 0xFF, 0x23, 0xFC, 0x43, 0x16, 0x03, 0xEC }; // define variables float tempSensor[2]; // массив куда читается температура c датчиков. byte qty; // количество градусников на шине. // счетчик unsigned long prevMillis = 0; // последний момент времени, когда вкл оттайка // таймер long OnTimeTen = 60000; // длительность работы тэна (в миллисекундах) long OffTimeTen = 21600000; // длительность не работы тэна (в миллисекундах) ////////////////////////////////////////////////////////////////// //про холодильник int ReleCompr = 4; // реле компрессора int ReleComprState = HIGH; int ReleFun = 5; // реле вентилятора // int ReleFunState = HIGH; int ReleTen = 6; // реле оттайки int ReleTenState = HIGH; int LedTen = 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 = -10; //порог выключения компрессора float t2 = -8; // порог включения компрессора float t3 = -14; //порог включения оттайки float t4 = -5.0; //порог выключения оттайки // ///////////////////////////////////////////////////////////////// // работа компрессора void ComprFun() { if ((ReleTenState==HIGH) && (tempSensor[0] > t2)) { ReleComprState = LOW; digitalWrite(ReleCompr, ReleComprState); digitalWrite(ReleFun, ReleComprState); lcd.setCursor(8, 1); lcd.print("FREEZING"); } if ((ReleComprState==LOW) && (tempSensor[0] < t1)) { ReleComprState=HIGH; digitalWrite(ReleCompr, ReleComprState); digitalWrite(ReleFun, ReleComprState); lcd.setCursor(8, 1); lcd.print("WAITING "); } } void printData(){ /////// вывод инфы на экран lcd.setCursor(0, 0); lcd.print("1:"); lcd.print(tempSensor[0]); // показываем температуру с датчика lcd.setCursor(8, 0); lcd.print("2:"); // число датчиков lcd.print(tempSensor[1]); } // ///////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////// void setup() { pinMode(ReleCompr, OUTPUT); digitalWrite(ReleCompr, ReleComprState); pinMode(ReleFun, OUTPUT); digitalWrite(ReleFun, ReleComprState); pinMode(ReleTen, OUTPUT); digitalWrite(ReleTen, ReleTenState); pinMode(LedTen, OUTPUT); TempSensors.begin(); //инициализируем сенсоры lcd.init(); lcd.backlight(); Serial.begin(9600);//инициализируем серийный порт } // ////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////// void loop() { getTemp(); // читаем температуру с датчиков printData(); unsigned long currentMillis = millis(); // текущее время в миллисекундах lcd.setCursor(0, 1); lcd.print(currentMillis/60000 - prevMillis/60000); if((ReleComprState==HIGH) && (currentMillis - prevMillis >= OffTimeTen)) { ReleTenState=LOW; digitalWrite(ReleTen, ReleTenState); digitalWrite(LedTen, HIGH); prevMillis = currentMillis; lcd.clear(); lcd.setCursor(7, 1); lcd.print("DEFROST"); } if ((ReleTenState==LOW) && (currentMillis - prevMillis >= OnTimeTen)) { ReleTenState=HIGH; digitalWrite(ReleTen, ReleTenState); digitalWrite(LedTen, LOW); prevMillis = currentMillis; lcd.clear(); } else ComprFun(); } // //////////////////////////////////////////
Рабочая температура в морозильной камере -10С (можете понизить или повысить), оттайка включается через каждые 6 часов на 60 секунд (можете уменьшить время или увеличить, регулируется опытным путем).
Подправил чуть, так лучше работает.
вот еще шлифанул
Доброго времени суток. У меня на моем холодильнтке Indesit c NoFrost была похожая проблемма.
За основу был взят пример от сюда http://arduino.ru/forum/proekty/termorele-dlya-kholodilnika-na-arduino-pro-mini-i-ds18b20 с добавлением режима разморозки и управлением вентилятором обдува испарителя морозильной камеры.
Ардуинка, релейный модуль и датчик (2 шт.) 18В20 подключены кучей от отдельного блока питания на 5 вольт.
Разморозка происходит через 8 часов по 30 минут. Если испаритель одтаил быстрее и температура на нем стала больше чем +3 градуса – режим разморозки отключается.
Все этой в куче может работать день, и иногда и больше но о один прекрасный момент виснет. Причем виснет при разных режимах работы (работа компрессора, отдых компрессора, разморозка)
Как побороть данную проблему на данный момент не знаю. Мучаюсь с этим уже 3 недели.
Как побороть данную проблему на данный момент не знаю. Мучаюсь с этим уже 3 недели.
блок питания не из гавна и палок.
Доброго времени суток. У меня на моем холодильнтке Indesit c NoFrost была похожая проблемма.
За основу был взят пример от сюда http://arduino.ru/forum/proekty/termorele-dlya-kholodilnika-na-arduino-pro-mini-i-ds18b20 с добавлением режима разморозки и управлением вентилятором обдува испарителя морозильной камеры.
Ардуинка, релейный модуль и датчик (2 шт.) 18В20 подключены кучей от отдельного блока питания на 5 вольт.
Разморозка происходит через 8 часов по 30 минут. Если испаритель одтаил быстрее и температура на нем стала больше чем +3 градуса – режим разморозки отключается.
Все этой в куче может работать день, и иногда и больше но о один прекрасный момент виснет. Причем виснет при разных режимах работы (работа компрессора, отдых компрессора, разморозка)
Как побороть данную проблему на данный момент не знаю. Мучаюсь с этим уже 3 недели.
Да, тоже сначала помучался, много часов убил за экспериментами, то так напишешь код - слетает, то по другому... В итоге выяснил, что глюки происходят по двум причинам (в моем случае):
1. Дребезги розетки (плохой контакт в самой розетке, плохая устойчивость сети (перепады напряжения), ненадежное соединение проводочками между релюшками и платой). Устранил путем установки новой розетки, пропайкой соединений и установкой хорошего севого фильтра.
2. Скетч глчит из за библитеки LiquidCrystal_I2C.h. Не знаю, то ли это у меня глючная версия, то ли на самом деле не коннектится (искал другие варианты библиотеки, все равно глючит). Я не много упростил свой скетч, убрал индикацию режимов работы и проблема отвалилась. На данный момент холодильник работает стабильно без единного сбоя практически два месяца. Думать уже забыл на эту тему)))
Вот то, что сейчас загружено в мою Arduino Pro mini
Все этой в куче может работать день, и иногда и больше но о один прекрасный момент виснет. Причем виснет при разных режимах работы (работа компрессора, отдых компрессора, разморозка)
Как побороть данную проблему на данный момент не знаю. Мучаюсь с этим уже 3 недели.
нужно прошить загузчик optiboot, и подключить вачдог, пусть сам как завис перегужается.
Все этой в куче может работать день, и иногда и больше но о один прекрасный момент виснет. Причем виснет при разных режимах работы (работа компрессора, отдых компрессора, разморозка)
Как побороть данную проблему на данный момент не знаю. Мучаюсь с этим уже 3 недели.
нужно прошить загузчик optiboot, и подключить вачдог, пусть сам как завис перегужается.
Можно, в качестве второй линии обороны, а начать все таки с рецепта Клапауция.
А я что то побоялся wdt использовать. У меня Pro Mini, почитал, она на очень с собакой дружит. Поэтому использовал более доступные на тот момент способы, описанные выше. Все работает, ничего не виснет.
Самое главное жена не пилит насчет холодильника.
Круто!
Можно, в качестве второй линии обороны, а начать все таки с рецепта Клапауция.
хорошо хоть он "вторую линию обороны" не запретил. :)
Можно, в качестве второй линии обороны, а начать все таки с рецепта Клапауция.
хорошо хоть он "вторую линию обороны" не запретил. :)
Согласитесь, если собака будет постоянно клацать, это не есть гуд. А там явные проблемы с питанием.
А я что то побоялся wdt использовать. У меня Pro Mini, почитал, она на очень с собакой дружит. Поэтому использовал более доступные на тот момент способы, описанные выше. Все работает, ничего не виснет.
я от сюда брал прошивку http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
на основе optiboot занимает всего 512 байт, и с wdt дружит,и как что сделать - там доходчиво написано.
Согласитесь, если собака будет постоянно клацать, это не есть гуд. А там явные проблемы с питанием.
когда в моем самодельном инкубаторе со 150 перепелиными яйцами на 15 день температура поднялась до 52 градусов, я решил - пусть лучше щелкает, хотя в данном конкретном случае - я не спорю.
Блок питания взял от старой зарядки Samsung. Сегодня попробую еще раз все пропаять.
когда в моем самодельном инкубаторе со 150 перепелиными яйцами на 15 день температура поднялась до 52 градусов, я решил - пусть лучше щелкает, хотя в данном конкретном случае - я не спорю.
Сам wdt всегда использую, но не для таких откровенных сбоев (их надо лечить на корню).
А бульонные шарики Вы решили приготовить прямо в скорлупе?))))
я от сюда брал прошивку http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
на основе optiboot занимает всего 512 байт, и с wdt дружит,и как что сделать - там доходчиво написано.
надо почитать, но на досуге, вроде все стабильно работает. Все-таки питание и качество контактов много на себя берет....
надо почитать, но на досуге, вроде все стабильно работает. Все-таки питание и качество контактов много на себя берет....
До поры, до времени. Собаку не на пустом месте придумали и пренебрегать ею не стоит.
А бульонные шарики Вы решили приготовить прямо в скорлупе?))))
ну с учетом того, что каждое яичко брал по 10р и через день они уже вылупиться должны были.... с перышками уже были... собакам конечно понравились :(
ну с учетом того, что каждое яичко брал по 10р и через день они уже вылупиться должны были.... с перышками уже были... собакам конечно понравились :(
Это где Вас на такую цену развели? Максимум 5р, а так по 3,5-4р. Выводились ничуть не хуже и четвертый год на этих двух линиях живу, пока не деградируют.
Для самоделки наверно поставил бы еще какой нибудь аналоговый компаратор градусов на 40, чтобы вырубал силовую цепь, если что не так. Ведь от пробитого симистора wdt не спасет.
Доброго дня.
По поводу использования «собаки» немного сомневаюсь – холодильнику необходимо через каждые 8-12 часов размораживаться, а «собака» будет сбрасывать счетчик отработанного времени.
Относительно питания – вся схема работает от старой зарядки телефона Samsung.
Все между ардуинкой и комплектующими (датчиками, дисплеем, релейным модулем) спаяно проводами.
Вчера заметил что зависание происходит в момент включения/отключения реле на модуле. При этом зависание происходит только в том случае, если к реле подключен потребитель (компрессор, ТЭН).
"вся схема работает от старой зарядки телефона Samsung."
Вот причина засора. Посмотрите здесь по форуму, темы по питанию, их здесь мульен.
"а «собака» будет сбрасывать счетчик отработанного времени"
Запись "моточасов" в EEPROM, Клапауций пока не запретил. При записи каждые полчаса ресурса одной ячейки хватит лет на 60.))
Сеголня попробую решить проблему с питанием при помощи замена ЗУ на БП с использованием DC-DC преобразователя. Завтра отпишусь о результатах.
Относительно "собаки" и EEPROM - я еще очень "зеленый" в програмировании, но буду пробовать.
Запитав всю схему от блока питания на 12 v и DC-DC преобразователя на 5 v, на данный момент, все работает.
Dimmm, vi.markevych,ребята не могли бы вы скинуть свою почту? спасибо.
Markevich1509@gmail.com
Привет,гляньте пожалуйста почту,спасибо.
Dimmm, vi.markevych,ребята не могли бы вы скинуть свою почту? спасибо.
ух ты! а я и не вижу, тут что то интересное мутится!
el-kzn@yandex.ru
ко всему выше написаному:
с моментра запуска моего холодильника на плате Pro Mini прошло уже практически полгода. После устранения дрязгов в контактах и через APC не было НИ ОДНОГО зависания. В первое время эксперементировал со временем оттайки, интервалом включения тэна, температурой морозилки. Сейчас стоит 18 млн. мл.сек. интервал между оттайками, тэн включается на 60 сек., температура камеры -14 (расстояние от испарителя до датчика 15 см.). Во второй камере холодильника датчик показывает 1-2 градуса (очень оптимально). Замерил потребление холодильником тока в сутки - 1,2 кВт (тупо по счетчику засек))). Короче полгода полет нормальный!
А! Самое главное то не сказал! Зависания прекратились не только после устранения плохого контакта, а после того как убрал индикацию режима работы. В коде была индикация на дисплей режима - если включился компрессор - COOL, в режиме ожидания - WHEITING. Так вот, убрал и все, зависания окончательно прекратились. Искал разные варианты библиотек для LCD, все равно висло. Как убрал, так проблема решилась. В #5 топике скетч.
Датчик (18В20) у меня стоит 3 шт.
1. В холодильной камере - управление заслонкой подачи холодного воздуха в холодильную камеру,для индикации температуры в холодильной камере.
2. В морозильной камере - управление работы компрессора, индикация температуры в камере.
3. Установлен в испарителе морозильной камеры - для управлением процеса разморозки.
Относительно процеса разморозки - алгоритм работы следующий:
1. при достижении указаного времени (420 минут) отключаем компрессор.
2. при прошествиии 10 минут включаем ТЭН и мониторим температуру на испарителе.
3. при достижении температуры на испарителе в +3 градуса (или пшествии 30 минут процеса разморозки) - отключаем ТЭН.
4. Ждем 5 минут для остывание ТЭНа.
5. Перезагружаем ардуинку.
Далие холодильник работает в "нормальном режиме" и считест 420 минут.
Для моего холодильника такие времменные промежуткия являются оптимальными.
ну супер! )))
Dimmm гляньте почту.
Dimmm вы бы не могли сказать для чего нужный эти адреса.Как я понял это адреса датчиков для каждого он свой? как мне узнать какой адреса мойх датчиков? спасибо.
Запускаете примеры из OneWire, там есть определение адресов (в котором точно не помню). Для DS18B20 все должны начинаться с 0х28. Ручками переносите в скетч.
Dimmm гляньте почту.
почту глянул.
если честно, лень все расписывать...
к выходным соберусь с духом и напишу как сделать.
Напиши мне марку своего LG.
Запускаете примеры из OneWire, там есть определение адресов (в котором точно не помню). Для DS18B20 все должны начинаться с 0х28. Ручками переносите в скетч.
Спасибо,с адресами разобрался.
Dimmm гляньте почту.
почту глянул.
если честно, лень все расписывать...
к выходным соберусь с духом и напишу как сделать.
Напиши мне марку своего LG.
а что в нем сломалось? Компрессор точно живой? какие симптомы?
Компрессор живой,все навесное тоже живое,сам блок управление умер сгорел МК. Таких модулей нету в продаже,а если есть то цена не реально завышена у нас.
На холдильнике (с обратной стороны) есть электросхема
Можно ее фото???
.
Ага есть такое дело.
Что из комплектующих у Вас есть? Ардуино? Реле? Датчики?
Я така понимаю что это у Вас первый опыт работы с ардуинко?
Всю дальнейшую переписку лучше вести по почте.
Есть все что нужно для этих целей,есть Реле,есть датчики,есть Ардуино,можно сказать что и первый.
Нет предела совершенству!
Выкладываю самую последнюю версию. Работает лучше, чем задумал производитель. Теперь температура в холодильной камере тоже под контролем. С самого начала было ощущение, что что то не совсем доделано. Теперь это ощущение исчезло потому, что работает даже лучше, чем ожидал. Самое главное - экономия электроэнергии и контролируемая температура холодильной камеры. В заводском исполнении контролировалась только температура морозильной камеры. Без каких либо существенных изменений (добавил датчик температуры в холодильную камеру) и посредством програмного кода (задействовал штатный вентилятор для изменения температуры в холодильной камере) удалось выжать из холодильника дополнительные возможности.
Пользуйтесь!
Доброго дня/вечера/ночи.
Добавлю и свой вариант скетча.
Этот на дисплее 16*2
Интересно! Почитаю. Это на два вентилятора?
Да. Один в морозильной камере.
Второй перегоняет холодный воздух с морозьльной камеры в холодильную.
Ребята привет,взял за основу код vi.markevych,чуть подогнал для себя,собрал всю схему,все подключил,питание в норме без пульсации,можно сказать все работает,но в какой то момент зависает ардуинка,посмотрите пожалуйста код возможно где то есть проблема по этому и зависает,спасибо.