Всем привет!
Делаю терморегулятор. Нужен алгоритм нагрева с гистерезисом, те при нагреве при достижении какой-то температуры нагрев отключается и включается повторно, когда температура падает ниже установленной температуры - гистерезис.
Набросал два кода, просто скажите, какой правильнее с логической точки зрения (унизьте один или оба) ?
Здесь TEN_Temp_FLAG - признак работы нагрева
id05 - установленное значение нагрева (до какой температуры греть)
Water_T - текущее значение температуры.
5 - значение гистерезиса
if (Water_T >= id05){TEN_Temp_FLAG = 0;}else{
if (Water_T <= (id05-5)){TEN_Temp_FLAG = 1;};
};
Этот код рабочий, за исключением того, что если включить прибор и текущие значение температуры будет в зоне неопределенности, те между id05-5 и id05 нагрев не включится, пока температура не упадет до id05-5.
Здесь присутствует признак начала охлаждения (ohl), объявляемый в начале программы.
при включении программы, при любой температуре ниже установленной начинается нагрев, дальше при достижении температуры все работает как и в первом варианте.
Это наверное, должен быть типовой алгоритм. как лучше (стандартнее)?
Ответить, что и как лучше с такими куцыми входными данными невозможно. Многое зависит от инерционности нагревателя, от конфигурации нагревательных элементов (точечный нагрев, многозонный и т.п.). А так - это просто болтовня “в пользу бедных”.
Попробуйте почитать статью (она там начинается внизу первой страницы файла - найдёте). Вот там и написано
-Тааак, а где же гистерезис?
-Он есть! Равен разрешению датчика температуры! Для например ds18b20 его можно устанавливать от 1/16 до 0.5 С. И даже больше - 1, 2, 4 С.
digitalWrite(heatPin, Water_T < id05 && digitalRead(heatPin)|| Water_T <= (id05 - 5));
и гистерезис на месте… но самое главное “в начале программы” сделать digitalWrite(heatPin, HIGH); Но лучше использовать переменную, чтобы лишний раз не щелкать реле (Тэном)
Хотя как уже замечено, что особо смысла в этом нет, но это просто ответ на вопрос тс.
Я как то пытался составить алгоритм для отопления в теплице. Собрал макет. Картонная коробка 50х40х40 см, у нее открывается дверца, верх прозрачный, сверху лампа накаливания 100 Вт типа солнце. Тен от микроволновки запитан от бп 36 В. Около 40 Вт. Это все близко к реальным условиям. Регулятор должен поддерживать Т и обеспечивать плавный рост или падение Т с установленной скоростью. Причем, Т воздуха начинала рости через минуту после вкл. Тена и стабилизировалась через 40 сек после откл. Во где раздолье)))