Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Софт:обсуждение программного обеспечения для умного дома
  • Страница:
  • 1
  • 2

ТЕМА: Вопрос по логике терморегуляции.

Вопрос по логике терморегуляции. 14 Окт 2016 13:06 #15297

  • shag12
  • shag12 аватар
  • Не в сети
  • Давно я тут
  • Сообщений: 96
  • Спасибо получено: 1
  • Репутация: 0
Naevus пишет:
stels3737 пишет:

На этот алгоритм навешиваем:
Гистерезис - сравниваем не две температуры, а разницу между ними - если абсолютная разница меньше требуемой погрешности - ничего не делаем.
Поправку на инерцию. Чем больше разница, тем дольше можно крутить, и, делать паузу между замерами - также пропорционально разнице.

Спасибо. Где-то так и написал. Проблема в том, что алгоритм не всегда сходится к паузе по гистерезису, и продолжает размахивать сервой с амплитудой 20-30 секунд :-( Соответственно температура скачет +-10 градусов, что недопустимо :-(

Вот как сюда воткнуть изменяемую паузу? Или еще что, чтобы движение дошло до гисерезиса в 1 градус и больше не мучало серву постоянно?

void ICACHE_FLASH_ATTR
startfunc(){
digitalWrite(13,0); //Крутить серву на закрытие
digitalWrite(15,0); //Крутить серву на открытие
digitalWrite(12,1); //Насос
valdes[0]=0; //Крутить серву
valdes[1]=0; //Открывать 1 закрывать 0
valdes[2]=2; //На сколько секунд крутить

// выполняется один раз при старте модуля.
}

void ICACHE_FLASH_ATTR
timerfunc(uint32_t timersrc) {
// выполнение кода каждую 1 секунду


if(timersrc%valdes[2]==0){
// выполнение кода каждые per секунд

if(valdes[0]==1 && digitalRead(12)==1) {
if(valdes[1]==1) {
digitalWrite(13,0);
digitalWrite(15,1);
valdes[0]=0;
}
else{
digitalWrite(13,1);
digitalWrite(15,0);
valdes[0]=0;
}
}
else {
digitalWrite(13,0);
digitalWrite(15,0);
}
}
if(timersrc%30==0){

valdes[2]= abs(data1wire[0]/10-sensors_param.cfgdes[0]);
if (valdes[2]<1){ valdes[2]=1;}

if(data1wire[0] < ((sensors_param.cfgdes[0])*10)){
valdes[0]=1;
valdes[1]=1;
}
if(data1wire[0] > ((sensors_param.cfgdes[0]+sensors_param.cfgdes[1])*10)){
valdes[0]=1;
valdes[1]=0;
}

}
}

void webfunc(char *pbuf) {
os_sprintf(HTTPBUFF,"<br>Per: %d Krutit: %d Kuda: %d",valdes[2],valdes[0],valdes[1]); // вывод данных на главной модуля
}
Администратор запретил публиковать записи гостям.
  • Страница:
  • 1
  • 2
Модераторы: FlyRouter, Dolfik
Время создания страницы: 0.074 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.