Drivent и PID регулирование - не наш метод. Собственная логика регулировки CO2 в спальне с помощью оконного привода

27 апреля 2020, 17:03

О влиянии высокой концентрации углекислого газа (CO2) в помещении, я писал в цикле статей про климат. А так как у меня умный дом, то и за микроклиматом у себя в квартире я следил довольно пристально. И мне надоело постоянно проветривать спальню перед сном, или держать окно открытым в режиме микропроветривания (особенно зимой).

Причем я даже пытался обойтись "малой кровью" и проводил эксперименты с клапаном для проветривания, но это не особо помогало. Поэтому я решил вопрос кардинально, благо у меня в руках оказался привод для открытия окна Drivent.

Итак, исходное состояние:

Датчики работают под управлением ESPEasy на nodeMCU v.3. Место замера - недалеко от изголовья кровати, дабы замерять фактическое состояние именно там, где необходимо.

Привод установлен на окне в спальне и регулировка осуществляется по показаниям уровня CO2. На начальном этапе, контроля температуры не было, так как было не до того.

Первоначально была попытка использовать алгоритм ПИД регулирования. Она привела к состояниям постоянного перерегулирования системы, которая не достигала состояния покоя ни по показателям CO2, ни по состоянию привода (он постоянно туда-сюда двигался). Поверьте мне, я даже математическую модель считал... Но при пропорциональном коэффициенте равном единице, без использования других параметров (а так советуют все статьи по первоначальной настройке регулятора) - система не достигала покоя никогда. Смена временных интервалов с увеличением до нескольких часов и т.д. и т.п. - не помогала.

1600x_image.png?1587994743
1600x_image.png?1587994743

Я занимался мучением привода почти месяц (хороший такой краш тест устроил), так же, как и настройкой ПИД компонента в Node Red. Кроме того, что система постоянно подвергалась регулировке, меня не устраивало много других факторов.

Во-первых,  система не приходила в покой вообще никогда, по причине постоянно меняющейся внешней среды. CO2 оставался в желаемом коридоре - это факт, но достигалось это постоянной работой привода на открытие и закрытие окна.

К тому же у ПИД регулятора не было нужных мне настроек, например, с добавлением пороговых показателей и коридора значений.

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

Еще одной предпосылкой к разработке собственного решения меня привел тот факт, что во время вынужденного простоя привода (я его отключил по определенным причинам), окно было открыто где-то на 15% постоянно. И это привело к довольно ожидаемому результату, который, в общем-то, и был целевым. Постоянное нормальное состояние уровня CO2 в комнате.

1600x_image.png?1587994742

Это, по-сути и стало последней каплей в этой битве с ПИД регулировкой и сподвигло меня "запилить" свою логику.

Так как я далеко не программист, то мне помог наш прекрасный чатик по Node Red, а благодаря абсолютно неоценимой помощи Андрея Ошева, все это превратилось в рабочую модель, которая сейчас проходит обкатку и мне нравится результат.

Логика работы

Так как инертность системы небольшая, то есть реакция наступает практически сразу после оказанного воздействия, опрос датчика CO2 производится с периодичностью раз в 10 секунд. Это избыточно, но мне хотелось наблюдать над раскачкой системы, если она произойдет.

Опять же, так как система реагирует быстро, то показания могут гулять вверх и вниз довольно оперативно, и основная проблема регулирования заключается в том, что если мы берем просто определенный период времени, то мы можем случайным образом попасть на снижение, повышение или горизонталь значений CO2. Соответственно, принятие решения о том, открывать окно, дабы снизить CO2 или прикрыть, так как все ок - будет делаться каждый раз, когда будут поступать показания и привод будет дергаться туда-сюда постоянно. Правда через заданные промежутки времени, но все равно часто. Это и есть основная проблема PID регулирования. На каждый входящий параметр осуществляется действие. Меня это не устраивало. Поэтому я решил, что надо отслеживать тенденцию показаний уровня углекислого газа, и в зависимости от нее принимать решение. Поэтому мы будем действовать в несколько этапов.

Первое действие, которое производится с показаниями - сборка массива из 20 последовательных данных. Это требуется для того, чтобы понять, что происходит с уровнем CO2 и что нам нужно сделать в дальнейшем.

Эти 20 параметров анализируются следующим образом:

  • каждый элемент массива сравнивается с предыдущим, путем вычитания (из значения под номером 2 вычитается значение 1, из 3 вычитается 2 и так далее);
  • подсчитывается количество отрицательных, положительных и нулевых значений;
  • сравнивается их количество, и в зависимости от того, каких больше, выдается результат;
  • дополнительно из всех 20 значений вычисляется среднее, чтобы использовать его как текущее показание CO2 в дальнейшем.

Это позволяет понять, повышается или понижается уровень CO2. Также есть еще и стабильные показания, когда в течение долгого времени уровень не меняется или меняется незначительно. Поэтому на выходе мы получаем понимание того, что происходит: повышение, понижение или покой.

Следующим этапом мы настраиваем параметры комфортной среды и пограничных условий работы системы.

В качестве исходных данных берутся следующие значения:

  • текущее положение окна;
  • скорость ветра;
  • минимально допустимая температура в помещении;
  • текущая температура в помещении;
  • состояние регулирования окна (включено оно или нет);
  • состояние показаний CO2 из предыдущего шага (повышение, снижение или покой);
  • следующий уровень открытия окна;
  • шаг регулирования окна;
  • верхний и нижний пределы для окна (обычно от 0 до 100%);
  • собственно, само показание CO2 усредненное в прошлом шаге.

А теперь немного пояснений на тему того, зачем все это. Положения окна - понятно: текущее, предыдущее и следующее, нужны для управления приводом.

От скорости ветра зависит шаг регулировки, так как в моих условиях - чем выше ветер, тем быстрее снижается уровень углекислого газа, а значит, тем меньше надо открывать окно за один проход.

Состояние регулировки проверяется для того, чтобы я имел возможность просто открыть окно на нужный мне процент вручную и система не занималась регулировкой, пока я не позволю.

Что касается температуры в помещении, то на личном опыте я понял, что мне комфортно спать при температуре не ниже определенного порога. Соответственно, я не хочу, чтобы она опускалась ниже. Поэтому если уровень CO2 позволяет мне подержать окно закрытым, чтобы воздух нагрелся, то окно закрывается и ждет либо достижения максимума содержания газа в воздухе, либо его нагрева до приемлемых значений, чтобы продолжать работать системе для проветривания.

Состояние показаний CO2 из предыдущего шага используется для того, чтобы понять, в какую сторону воздействовать на привод: открывать, закрывать или ничего не делать.

Соответственно, со всеми этими пороговыми значениями мы работаем следующим образом (блок схему я начал рисовать, но как-то ниасилил):

  • если CO2 больше 800, но состояние "покой", то меняем состояние на "повышение" (открывает окно на следующий шаг), чтобы не зависало на повышенных показаниях;
  • если CO2 находится между 600 и 700, то в любом случае объявляется состояние покоя (это целевой коридор показаний);
  • если CO2 меньше 600 и состояние "покой", то меняем состояние на "понижение" (прикрывает окно на следующий шаг);
  • если CO2 больше 800 или меньше 500, то шаг изменения открытия окна устанавливается в 5%;
  • если CO2 находится в промежутке от 500 до 800, то шаг изменения открытия окна устанавливается в 2%;
  • если скорость ветра больше 7 м/с, то шаг изменения открытия окна делится на 2, с округлением до целого значения;
  • если состояние открытия окна - "повышение", то к текущему состоянию прибавляется шаг. Если состояние - "понижение", то от текущего состояния отнимается шаг. Если система в покое, то ничего не происходит;
  • если температура в комнате ниже лимита или равна ему, а CO2 меньше 1000ppm, то окно закрывается полностью и дальше начинает по предыдущим условиям открываться понемногу, опять же при условии, что температура выше допустимой.

Вот в общем-то и вся логика.

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

В итоге, все это меня радует уже скоро неделю, и меня устраивает почти все.

Выглядит ситуация сейчас примерно таким образом:

1600x_image.png?1588007019

Регулировка осуществляется плавно, пограничные параметры не нарушаются, хотя замеры немного нетипичны и уровень СО2 довольно высокий, в сравнении с обычным состоянием, но я грешу на тепло и то, что в моем вентиляционном стояке все дружно решили проветрить квартиры, поэтому тяги почти нет и сквозняк практически не ощущается. Но даже в таких, довольно тяжелых условиях, система работает стабильно и без особых раскачек.

Ну и напоследок - флоу для Node Red, в котором это все расписано (перед импортом флоу в свой нодеред, его надо прогнать через HTML декодер, чтобы заменить HTML вставки). Там, в принципе, все довольно понятно, правда для использования потребуется много телодвижений по формированию глобальных переменных, которые у меня собираются в разных местах (потому в общем-то и глобальные).

Ну а вся боль и страдания от моих мучений, освещалась в официальном чате Drivent, где коллективно обсуждались варианты решения тех или иных проблем.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Никита Герасимов  (Rapidshe)
    Drivent год назад

    Можно попробовать подогревать воздух кондиционером при допустимой температуре работы внешнего блока

    • Виталий Никольский (bigmanekb)

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

      • (annenkov)
        (annenkov) год назад
        То есть отопление зимой и открытое окно совместимы, а охлаждение летом и открытое окно несовместимы... Где логика?

        • Виталий Никольский (bigmanekb)

          отопление чаще всего центральное и очень часто нерегулируемое. В этом случае бессмысленно. К тому же отключать отопление и открывать окно с минусовым воздухом - чревато разморозкой системы. Я как то раз устроил по молодости такое.

          А вот открывать окно при работающем кондиционере - свихнет ему мозги и смысла никакого кроме бесполезной траты ресурсов :)

  2. Бендер Задунайский (Nathareth)
    Бендер Задунайский (Nathareth) отредактировано год назад

    Сам привод не совсем конечно для спальни. Посмотрел видео, привод изрядно жужжит. В ночи все слышнее.
    Было бы здорово на каких-нибудь бесшумных движках. У меня терморегуляторы на 220В, даже припав ухом не слышно как шток толкают.

    • Виталий Никольский (bigmanekb)

      с определенными настройками он практически бесшумен. Жужжит он при стандартных параметрах напряжения, но если выставить 24В питания и 6В самому мотору, то он очень тихий

    • Виталий Никольский (bigmanekb)

      терморегуляторы только открытие и закрытие без промежуточных ?

      • Бендер Задунайский (Nathareth)

        Да, там или открыто или закрыто. В зависимости от выставленного температурного коридора sonoff basic открывает или закрывает. Все просто и совсем бесшумно.

        • Виталий Никольский (bigmanekb)

          сонофф бесшумный ? да лаааадно :)))) хотя я полагаю он не в спальне стоит конечно. Но два положения это два положения... можно конечно гистерезис замутить, но инертность системы большая да... в общем окном получается точнее рулить показаниями. Но это не про отопление. Бесшумных оконных приводов я не встречал, но вот бризеры вполне себе бесшумные. И мы сегодня описанную в статье логику прикрутили к 150й модели бризера Xiaomi. Так что посмотрим на результат.

          • Бендер Задунайский (Nathareth)
            Бендер Задунайский (Nathareth) отредактировано год назад

            Бесшумный! Чтоб мне провалиться ) Просто он стоит под подоконником в метрах 4-х от кровати. У меня чуткий сон, но я его за зиму не слышал ни разу. А всякое жужжанье услышу мгновенно.

            Гистерезисы мутить бессмысленно. Я изучал графики, после этого принял решение так и оставить. Оговорюсь - вариант не для экономии, потому что даже в лютую зиму у меня окно в откидном положении всю ночь. Привычка. Зато сплю как танк )
            Температурный коридор: включение  меньше 18 градусов, выключение - больше 19. В среднем за ночь цикла 3-4. Остывают очень медленно, нагреваются мгновенно, а потом идет набор 1-2 градусов за час-полтора. Так как зима была теплая, большей частью система находилась в покое. 

            Но если рулить еще и окном, тут уж сразу, ясное дело, появляется существенная экономия средств.

  3. Сергей Сафронов (deda)
    Сергей Сафронов (deda) отредактировано год назад
    Комментарий удален
  4. (vadimvspb)
    (vadimvspb) год назад

    Вроде оставлял комментарий, пропал куда-то. А не слишком ли жарко в спальне? По западным исследованиям лучшая температура для крепкого сна 16-20 градусов Цельсия.

    • Виталий Никольский (bigmanekb)

      с учетом обдувающего ветерка - норм :)))) комфортная 18, это если спишь под одеялом... а я не люблю кутаться :))) так что мне комфортно 22.2, хотя я экспериментировал и с более низкими температурами, но на фоне легкого прохладного бриза - 22.2 мой уровень комфорта

К списку статей

Устройства в материале

Оконный привод Drivent

Производитель: Drivent

ESP8266 NodeMcu v3

Производитель: Espressif Systems
Заказать на:
JD

Датчик co2 Senseair s8-53

Производитель: noname
Заказать на:

Датчик давления/температуры BMP280

Производитель: noname
Заказать на:

Скидки для сообщества

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Тематические чаты

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
25 сентября 2020, 11:49
Сенсорный монитор для управления умным домом. Настройка и использование.
02 июля 2020, 07:24
Я хочу поделиться своей разработкой: "умным открывателем пластикового окна". В статье вы найдете все необходимое, чтобы повторить проект и изготовить собственный привод для открывания окна с использованием штатной фурнитуры окна.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
02 октября 2018, 18:41
Установка SDK для компиляции прошивок под HomeKit