Динамический термостат (по графику)
- Войдите на сайт для отправки комментариев
Добрый день.
Задача: ========
построить печь.
температура: от 30 С до 300 С
изменение температуры идет по графику
графики будут разные
пример графика:
нагрев от 30 с до 85 С за 2 часа
далее на 85 С печь стоит еще 1 час,
далее подъем температуры от 85 С до 170 С за 3 часа
и на 170 печь стоит еще 2 часа,
далее подъем от 170 С до 220 С за час,
на 220 С печь стоит 1 час и
далее медленно и контролируемо остывает до 30 С за 3 часа
В наличии: ========
1) Arduino Uno
2) термистор NTC3950 100K
3) твердотельное реле 25А
4) lcd keypad shield 1602
5) печь с тенами
что уже сделал: ========
нашел как на LCD вывести комнатную температуру с большими погрешностями
// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); byte gradus[8] = { 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000, 0b00000 }; void setup(){ pinMode(A1, INPUT); Serial.begin(9600); Serial.println("Start"); lcd.createChar(1, gradus); // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.setCursor(0,0); lcd.print("LCD Key Shield"); } void loop(){ float v = analogRead(A1); Serial.print(v); Serial.print("t"); Serial.print(analog2tempBed(v)); Serial.println(); delay(1000); v/=20; lcd.setCursor(0,1); lcd.print(v); lcd.write(1); //выводим символ градуса lcd.print("C"); } const short temptable_11[][2] PROGMEM = { {1, 841}, {54, 255}, {107, 209}, {160, 184}, {213, 166}, {266, 153}, {319, 142}, {372, 132}, {425, 124}, {478, 116}, {531, 108}, {584, 101}, {637, 93}, {690, 86}, {743, 78}, {796, 70}, {849, 61}, {902, 50}, {955, 34}, {1008, 3} }; # define BEDTEMPTABLE_LEN (sizeof(temptable_11)/sizeof(*temptable_11)) #define PGM_RD_W(x) (short)pgm_read_word(&x) static float analog2tempBed(int raw) { float celsius = 0; byte i; for (i = 1; i < BEDTEMPTABLE_LEN; i++) { if (PGM_RD_W(temptable_11[i][0]) > raw) { celsius = PGM_RD_W(temptable_11[i - 1][1]) + (raw - PGM_RD_W(temptable_11[i - 1][0])) * (float)(PGM_RD_W(temptable_11[i][1]) - PGM_RD_W(temptable_11[i - 1][1])) / (float)(PGM_RD_W(temptable_11[i][0]) - PGM_RD_W(temptable_11[i - 1][0])); break; } } // Overflow: Set to last value in the table if (i == BEDTEMPTABLE_LEN) celsius = PGM_RD_W(temptable_11[i - 1][1]); return celsius; }
Но в этом коде понимаю частично, так как програмированием не владею - художники мы.
Собрал код интуитивно из сторонних примеров.
Подскажите как более грамотно реализовать поставленную задачу?
Подскажите как более грамотно реализовать поставленную задачу?
Заказать специалисту!
Так, как Вы пытаетесь делать, она в принципе не будет работать. У нагревателя есть инерция, его будет раскачивать градусов на десять туда-сюда (т.е. Вы своё реле выключили, а печь продолжает нагреваться некоторое время). Если нужна тонкая и точная регулировка, это делается не с реле (которое может нагреватель только включить и выключить), а с плавным регулирование мощности нагревателся.
Если не лень, погуглите, конечно, вот пот таким словам, но, если нужен реальный результат, то лучше обратитесь не к художнику, а к инженеру.
оно конечно пральна, ...
тогда еще можно задать верхнюю планку цены, глядя на цену готового девайса
http://www.varta-spb.ru/catalogue/37/103.html
зы. бум считать, что исключительно из любви к прекрасному выдал эту ссылку =)
тогда еще можно задать верхнюю планку цены, глядя на цену готового девайса
http://www.varta-spb.ru/catalogue/37/103.html
зы. бум считать, что исключительно из любви к прекрасному выдал эту ссылку =)
Ну, будем считать, у художников с любовью к прекрасному всек в порядке.
Только Вы сравниваете... как бы Вам попонятнее объяснить... типографскую репродукцию Шишкина с авторской работой пусть даже менее известного художника.
Заказать специалисту!
Специалитами не рождаются.
И Если я решил сам как-то выкручиваться и обратился на форуме за помощью - значит в априоре вопрос о заказать идет мимо.
Так, как Вы пытаетесь делать, она в принципе не будет работать. У нагревателя есть инерция, его будет раскачивать градусов на десять туда-сюда (т.е. Вы своё реле выключили, а печь продолжает нагреваться некоторое время). Если нужна тонкая и точная регулировка, это делается не с реле (которое может нагреватель только включить и выключить), а с плавным регулирование мощности нагревателся.
Во т принцим я и хочу уловить, может уже делали подобное?
Тэны можно заменить на лампы,
и еще может чего, вобщем я сюда за советами пришел.
Если не лень, погуглите, конечно, вот пот таким словам, но, если нужен реальный результат, то лучше обратитесь не к художнику, а к инженеру.
В сторону ПИД регулятора тоже смотрю, но думаю потянет ли?
Ведь в среднем нужен подъем температуры 2 градуса в минуту, то есть инерции нагревателя должно хватить с лихвой и очень многое зависит от точности термометра и полосы допустимых отклонений - это я как инженер говорю.
оно конечно пральна, ...
тогда еще можно задать верхнюю планку цены, глядя на цену готового девайса
http://www.varta-spb.ru/catalogue/37/103.html
зы. бум считать, что исключительно из любви к прекрасному выдал эту ссылку =)
и ни чего не правильно.
ибо считаю правилом хорошего тона разбираться в устройствах с которыми буду работать.
Выша ссылка немного не в тему.
точ то мне примерно надо - это вот http://www.termodat.ru/catalog/16e/termodat-16e5/
и цена там не демократичная, даи покупать желания нет.
Есть желание сделать.
может уже делали подобное?
Да, нет, что Вы! Температуру никто и никогда не регулировал, Вы первопроходец :))))
В сторону ПИД регулятора тоже смотрю, но думаю потянет ли?
Если нужно точная регулировка, то только сюда и надо смотреть. Насчёт "потянет" - не понял вопроса. Кто потянет, чего потянет? Если вопрос "потянет ли данный микроконтроллер управление ПИД-ругулятором темепературы", то ответ - потянет штук двадцать одновременно.
полосы допустимых отклонений
А вот с этого надо было начинать. В постановке задачи уж больно точно всё было. Мне, например, для травления плат нужна температура раствора 50 плюс/минус 10 градусов. Используется киловатная печка. Так там я вообще не парьюсь Тупо от отключаю реле на 48, а на 47 включаю снова. Она и гуляет у меня между 45 и 57, что меня вполне устраивает. А вот если типа "2 градуса в час", то про реле забудьте.
А вот если типа "2 градуса в час", то про реле забудьте.
2 градуса в минуту
потянет ли данный микроконтроллер управление ПИД-ругулятором темепературы", то ответ - потянет.....
Спасибо что посоветовали PID
Похоже это действительно то, что мне нужно.
думаю что-то типа такого
https://jowood4.wordpress.com/2015/01/04/arduino-pid-temperature-control...
Это у меня что-то не открывается.
В природе есть готовая библиотека для ПИД регулирования (может она есть и по той ссылке, но, повторяю, она у меня не открывается). Сам я её (библиотеку) не проверял, т.к. обчычно пишу сам что мне нужно - быстрее получается. Но принцип-то простой, не думаю, чтобы там что-то напортачили. Ссылка на библиотеку мелькала на этом форуме. Поищите.
Это у меня что-то не открывается.
В природе есть готовая библиотека для ПИД регулирования (может она есть и по той ссылке, но, повторяю, она у меня не открывается). Сам я её (библиотеку) не проверял, т.к. обчычно пишу сам что мне нужно - быстрее получается. Но принцип-то простой, не думаю, чтобы там что-то напортачили. Ссылка на библиотеку мелькала на этом форуме. Поищите.
ссылка кодом
там полная статья по изготовлению термостата -- с библиотеками
Подскажите.
код
Почему в такой схеме подключения
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А0
результаты такие
в такой схеме подключения
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А0 + LCD Keypad Shield
результаты такие
в такой схеме подключения
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А1
В коде А0 на А1 заменил
результаты такие
в такой схеме подключения
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А1 + LCD Keypad Shield
В коде А0 на А1 заменил
результаты такие
Почему такая разница?
http://aterlux.ru/index.php?page=article&art=ntcresistor
http://aterlux.ru/index.php?page=article&art=ntcresistor
К чему эта ссылка?
я знаю о ней и она у меня в закладках, как только будет написана программа воспользуюсь инфой для корректной настройки.
Статья НЕ ОТВЕЧАЕТ на вопрос - почему
разница в показаниях зависит от Номера аналогово входа
или Пjдключенного LCD
еще как отвечает:
Дополнительно, для подавления шумов возникающих на линиях, можно установить конденсатор C3 в диапазоне 1-100нФ.
Следует учесть, что помимо модуля АЦП, вход AVCC запитывает также некоторые из портов ввода/вывода (как правило, на тех же выводах, что используются для АЦП). Использование этих портов на вывод и подключение к ним нагрузки может создать дополнительные шумы в работе АЦП.
Чтобы нивелировать шумы, возникающие на АЦП, рекомендую провести замеры несколько раз подряд и просуммировать полученные значения. В микроконтроллерах ATmega АЦП – 10-разрядный. Просуммировав результаты 64 подряд идущих измерений, результат остаётся в пределах 16-битного беззнакового целого, что не потребует дополнительной памяти для сохранения таблицы значений. При большем числе измерений также можно оставаться в пределах 16 бит, соответствующим образом сдвигая или деля результат.
еще как отвечает:
Может я не так читаю, но там про шумы, наводки, точность и прочее прочее.
но вот при подключении LCD показания изменились 700% - это нельзя объяснить шумами
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А0
результаты такие
01
28.20
02
27.36
03
28.34
04
28.06
05
27.36
06
27.08
07
27.08
08
27.08
09
28.06
10
27.36
11
28.06
12
27.92
13
27.22
14
28.06
15
27.36
16
28.06
17
28.20
18
26.66
в такой схеме подключения
Arduino UNO + термостат NTC 3950 (100k/(t)100K) на А0 + LCD Keypad Shield
результаты такие
01
165.45
02
160.81
03
163.89
04
163.89
05
163.89
06
163.89
07
163.89
08
163.89
09
162.39
10
162.39
11
163.89
12
163.89
13
162.39
14
162.39
15
163.89
16
163.89
LCD Keypad Shield использует А0 как вход кнопок в аналоговом режиме
LCD Keypad Shield использует А0 как вход кнопок в аналоговом режи
Спасибо за грамотный ответ.
Я уже думал, что подпалил что-то, когда паял контакты.
Я вот под терморезистор библиотеку делал, но он на 10кОм, можете в нё свою таблицу забить - http://arduino.ru/forum/programmirovanie/biblioteka-dlya-termorezistora
Делал ПИ регулятор для электроконвектора с медленным шим http://arduino.ru/forum/proekty/pi-regulyator-otopleniya
Тут вот тоже товарищ строит ёмкости с подогревом http://arduino.ru/forum/programmirovanie/upravlenie-tenami-propuskom-per...
А для того чтобы плавно поднимать температуру нужно перепад температуры от текущей до целевой разделить на время требуемого перехода (в минутах допустим) и каждую минуту изменять уставку на получившийся шаг до достижения целевой температуры.
Внимательно читал Ваши посты и темы.
в принципе при разработке своего девайса на них и опираюсь, только объясните, почему Вы отказываетесь от PID библиотеки?
http://arduino.ru/forum/programmirovanie/pid-regulyator-nuzhna-kritika-i-konstruktivnye-predlozheniya-po-algoritmu-bib
и вообще. сколько я не перебирал инфы - люди пишут свой ПИД
ведь есть готовая библиотека, свой зачем?
Для себя решил что ПИ меня вполне устраивает. Ну и академический интерес. Когда вникниш в теорию и создаш свой велосипед, тогда будеш в нем разбиратся.
.....
В наличии: ========
1) Arduino Uno
2) термистор NTC3950 100K
3) твердотельное реле 25А
4) lcd keypad shield 1602
5) печь с тенами
.....
Привет.
Исходя из опыта решения подобных задач и из того что у вас есть, советую докупить еще 2 термистора.
Чтоб каждый из трех термисторов отвечал за свой участок температуры.
В систему стоит добавить еще небольшой лючок чтоб система могла гасить инерцию тенов и не допускать задиров в графике нагрева.
И с учетом всего вышеперечисленного и грамотного кода в результате точность получится не лучше чем +/-5градусов.
Исходя из опыта решения подобных задач и из того что у вас есть, советую докупить еще 2 термистора.
Чтоб каждый из трех термисторов отвечал за свой участок температуры.
В систему стоит добавить еще небольшой лючок чтоб система могла гасить инерцию тенов и не допускать задиров в графике нагрева.
И с учетом всего вышеперечисленного и грамотного кода в результате точность получится не лучше чем +/-5градусов.
Добрый день.
это я для пробы и тестов использую термисторы NTC3950 100K .
Сейчас заказал с али MAX31855
датчик к нему
и еще датчик со щупом...
вот с ними и думаю работать
и рабочий диапазон будет от 20 С до 350 С
Добрый день.
это я для пробы и тестов использую термисторы NTC3950 100K .
Сейчас заказал с али MAX31855
....
С датчиком ясно.
Тены и сама печь имеют огромную инерцию по нагреву и остыванию. Нужно или на подходе к церевой температуре замедлять скорость нагрева и плавно к ней подходить или иметь люк чтоб сбрасывать тепло.
Тены и сама печь имеют огромную инерцию по нагреву и остыванию. Нужно или на подходе к церевой температуре замедлять скорость нагрева и плавно к ней подходить или иметь люк чтоб сбрасывать тепло.
вот для решения этой проблемы и изучаю ПИД - регулятор
Вам скорее всего ПИД тоже не нужен, у Вас же нет резких возмущений, температура в Вашем случае должна изменяться медленно на протяжении длительного времени.
В ПИД регуляторе
П составляющая тем больше влияет на объект регулирования, чем больше рассогласование.
И составляющаяя накапливаясь с течением времени (сумма рассогласований) и устраняет статическую ошибку регулирования.
Д составляющая это как тормоз и ускоритель одновременно чем больше разница текущей ошибки регулирования и прошлой, тем сильнее её влияние.
Вот вчера с ПИД эксперементировал.
Функцию расчета ПИД вызываю раз в секунду.
Но меня и ПИ устраевает, а ПИД для какихнибудь коптеров и ещё каких устройств требующих быструю и точную реакцию.
Вообщем нужно сначала стенд собрать и посмотреть что лучше, потому что все эти регуляторы требуют подбора коэффициенов усиления (процесс не очень простой) и чем их меньше тем проще.
Вам скорее всего ПИД тоже не нужен, у Вас же нет резких возмущений, температура в Вашем случае должна изменяться медленно на протяжении длительного времени.
................
Вообщем нужно сначала стенд собрать и посмотреть что лучше, потому что все эти регуляторы требуют подбора коэффициенов усиления (процесс не очень простой) и чем их меньше тем проще.
Да.
у меня будут очень медленные процессы.
Но вот начальный процесс достаточно сложен.
Так как нагревательный элемент будет работать на (металлический, керамический, кромпозитный брус (300мм*500мм*100мм)) и задача нагреть этот брус, и температура будет измеряться в нем.
само собой будет камера, в которой будет данный брус, то есть будет греться внутренний объем камеры.
Ну и камера будет терять температуру.
Так что в самом начале процесса ожидаю сильную болтанку температуры.
И болтанка будет, пока процесс не стабилизируется.
ПИ удовлетворяет такому запросу?
Удовлетворяет, только коэффициенты подобрать нужно.
Вот мои графики выхода на уставку, съём показаний около 7 минут, за это время устаканилось. Коэффициенты тчательно не подбирал, если повозится то можно лучше графики получить. И П составляющая влияет только при сильных отклонениях, а после выхода на уставку в основном И составляющая работает, так что при медленном изменении температуры только она и будет оказывать воздействие.