Алгоритм терморегулятора

Разрешение датчика не сможет заменить гистерезис в полном объеме (тут как повезет) Пусть даже у датчика разрешение будет в 10 градусов. Что будет показывать датчик в момент смены его показаний например в районе 15 градусов. Допустим температура в короткое время прыгает 14,9 - 15,1. А датчик показывает 10 - 20 - 10 - 20… И вроде бы, да от 5 градусов до 15 есть 10 градусов зависания, а от 15 до 25 еще 10, но гистерезисом тут и не пахнет)

1 лайк

Нормально все пахнет с прямыми руками. Ds18b20 идеально работает как термостат ±0.5 градуса.

С инерционность 200-литрового бака даже гистерезис не обязателен ))

2 лайка

Я так делал. Первое значение - не измеряемое значение, а инициализация статической(глобальной ) переменной значением, которое заведомо ниже первого ожидаемого в измерении.
Да хоть -273.15ºС)))

См. ответ выше

Все равно не понятно. Вот присвоил переменной -273,15°С… А следом получил с датчика 58 (например). Порог отключения допустим 60, гистерезис 5. Что делать?
Ну или я к том, что у автора разве не так? Только там сразу считалась с датчика и дальше по условию определилось включаем реле или нет. Но у автора был вопрос когда попадаем в зону гистерезиса что делать))) А т.н. автор хотел при включении устройства, чтобы температура сразу росла до максимума… ну это я так понял)

А надо не делать , а думать…
В момент перезапуска при работе с хрена температура будет не в зоне гистерезиса ?

Нет, сначала думать, а потом делать.)
Это же как “отче наш”).

Пока я работал, Андрюня ответил выше. А чтоб гистерезис был “честным”, пример кода ниже.
Пусть setTemp=20 , Тводы ниже 19 С и тен включен. Разрешение датчика пусть = 0.5. Нагреваем воду - …19.0, 19.5, 20.0, граница 20…20.5 - тен отключается. Отключается при первом значении в 20.5С, а это соответствует реальным 20.25 С.
Начинается остывание воды. При понижении Тводы на 0.5 С до реальных 19.75 С, датчик выдаст первое значение в - 19.5С, и тен включится.
Такой алгоритм не даст щелкать реле на границе уставки.

void loop(){
    //currentTemp=readTemp(); //сам напишешь   
       if(currentTemp < setTemp)        digitalWrite(heatPin,1);        
       else  if(currentTemp > setTemp)  digitalWrite(heatPin,0);
}

Ну и если брать с далласа целые градусы, то получим честный гистерезис в 1С. А если отбрасывать от сырых значений от далласа пять младших бит, то получим разрешение в 2С. …18, 20, 22 …

Вот таким, наверное, алгоритмом у нас на радиостанциях в локомотивах сделана подсветка))) Только там не температура а датчик освещенности, но это не суть…Как начинает переход из светлого времени в темную, так начинается светомузыка)) Не, “реле” (там явно же не реле, но не суть) конечно не щелкает на границах, но наверняка гистерезис нужно было сделать поболее)))

Ардуины на вас не хватает)

Не подходит?

void loop(){
    //currentTemp=readTemp(); //сам напишешь   
       if(currentTemp < setTemp - 3)        digitalWrite(heatPin,1);        
       else  if(currentTemp > setTemp + 3)  digitalWrite(heatPin,0);
}

Вот все подробности надо писать в первом посте.
И что важнее - поддерживать Тводы точнее или экономить электричество. Нагрев воды например от газового котла раз в 5 дешевле, чем греть током.
При остывании воды без расхода и с расходом скорость падения Тводы будет сильно различаться. Тен можно включать заранее при расходе.
Также скорость нагрева только теном или совместно со вторым источником будет разной.
Нужно много больше вводных данных.

К сожалению старый свой “скетч” не нашёл. Может где и есть ошибка в алгоритме.
Помогите найти пжлст.

Я так вижу:
Допустим, есть два порога

  1. При повышении т-ры if(t > 41)OFF();

  2. При понижении if(t < 39)OFF();

  3. Стартовая т-ра t = 0;

=========================

  1. Если перезапуск при t = 42(выше верхнего порога) - всё норм, сразу OFF();

  2. Если перезапуск при t = 40(между порогами) - всё норм. Догреет , и OFF();

  3. Если перезапуск при t = 38(ниже порога) - всё норм. Догреет , и OFF();

P.S. Добавлю, выше упростил немного . Естественно, что

  if(t > 41){
   OFF();
     }
  else
  {
   ON();
   }

Код приводить не планировал, думал, что со слов всё понятно

Да, хотя бы так… Осталось в следующую поездку снять радиостанцию с локомотива, припереть домой и перепрошить))) И так с каждой поездкой…)

Ты не прав. Именно 200 литровый бак нуждается в гистерезисе. В нем разница температур по высоте может быть существенной и соответственно можно попасть на ситуацию на колеблющейся границы теплой холодной фракций.

Спойлер

А я так вижу тут вообще никогда ничего не включится… сплошной OFF везде…)

Да нет. Тут много от чего зависит, если тэн маленький на 200 литров, то какой нафик гистерезис… А про смешивание холодной и горячей там у автора что-то выше про рециркуляцию говорилось… может какой подмешиватель в баке есть)))

Ну правильно - электричество нужно экономить)) Для полного сшастья человечеству требуется 2 кВт на каждого из 8 лярдов. Гдеж стока набраться.

У нас прямо над головой уж четыре с половиной миллиарда лет болтается работающий термоядерный реактор мощностью примерно 383 иоттаватт!