Автоподогрев приточного воздуха в системе вентиляции. PID регулятор на Arduino.

Всем привет. Сдохла тут у меня по осени моя вентиляционная установка NAveka Node1. Была поражена молнией в самое «Сердце» =). Разобравшись в логике работы приточно-вытяжной вентиляционной установки (ПВВУ), решил собрать систему управление на базе Arduino. Проект достаточно объемный, если учесть что ничем подобным ранее я не занимался. И вот один из моментов, с которым было интересно разобраться — это система автоматического регулирования и поддержания температуры приточного воздуха.

Из того что было установлено в ПВВУ Naveka Node1 и, соответственно, то с чем будем работать:

  • Твердотельное реле Maxwell MS-3DA3825;
  • Керамический саморегулируемый ТЭН (PTC) мощностью 1.5 КВт;

И дополнительно:

Твердотельное реле Maxwell MS-3DA3825
Керамический саморегулируемый ТЭН (PTC)

К контактам A1, B1 и С1 твердотельного реле подключаются рабочие проводники (фазы) сети переменного тока. Реле это трехфазное. Но так как наш нагревательный элемент не очень большой мощности — 1500 Вт, мы будем задействовать лишь одну фазу. Соединим A1, B1, C1 перемычкой. Выходы реле A2, B2, C2 также соединим перемычкой и подключим к ним керамический саморегулируемый ТЭН (PTC нагреватель). Контакты управления реле подключим к Arduino: «-» к пину GND, а «+», например, к ШИМ выходу № 11. Вентилятор подключим к сети напрямую. Он будет работать безусловно постоянно.

К нагревательному элементу закрепим вентилятор. В нашем случае вентилятор термостойкий. В противном случае вентилятор нужно расположить на некотором удалении от нагревателя. Датчик температуры DS18B20 подключим к плате Arduino используя резистор на 4.7 КОм и расположим его после вентилятора так, чтобы его обдувал подогретый воздух. Для подключения кнопки к Arduino понадобится резистор на 10 КОм. В целом схема подключения следующая:

Схема подогревателя приточного воздуха

Кстати, о подключении датчиков температуры DS18B20 я уже рассказывал…Соединяем все проводники, изолируем контакты «220В» чтобы не попасть под опасное воздействие высокого напряжения! Все внимательно проверяем и подаем питание. Заработать должен лишь вентилятор. Зальем в плату Arduino простой скетч и оживим систему подогрева приточного воздуха =)) И не просто подогрева, а поддержания заданной температуры!!!

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <GyverPID.h>

#define ONE_WIRE_BUS 2 //пин шины датчиков температуры
#define PIN_HEATER_BUTTON 13 // пин кнопки включения нагревателя


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int temp;
uint8_t sensor1[8] = { 0x28, 0x14, 0xEA, 0x11, 0x5E, 0x14, 0x01, 0x4F }; //адрес датчика температуры приточного воздуха

int pin_heater = 11; // пин к которому подключен "+" управления реле
bool heater_button_state = false;

GyverPID regulator(25.8, 0.79, 75.4, 10);  // коэф. П, коэф. И, коэф. Д, период дискретизации dt (мс)

void setup() {
  
  
  Serial.begin(115200);
  delay(1000);
 
  sensors.begin();
    
  pinMode(PIN_HEATER_BUTTON, INPUT);
  pinMode(pin_heater, OUTPUT);
  
  regulator.setDirection(NORMAL); // направление регулирования (NORMAL/REVERSE). ПО УМОЛЧАНИЮ СТОИТ NORMAL
  regulator.setLimits(0, 255);    // пределы (ставим для 8 битного ШИМ). ПО УМОЛЧАНИЮ СТОЯТ 0 И 255
  regulator.setpoint = 35;        // сообщаем регулятору температуру, которую он должен поддерживать

  // в процессе работы можно менять коэффициенты
  regulator.Kp = 5.2;
  regulator.Ki += 0.5;
  regulator.Kd = 0; 
  
}

void loop() {
  

  sensors.requestTemperatures();
  temp = sensors.getTempC(sensor1);
  regulator.input = temp;
  

//включаем или выключаем нагреватель с кнопки
if( digitalRead(PIN_HEATER_BUTTON) == HIGH && !heater_button_state) {
heater_button_state = true;
regulator.integral = 0;
Serial.println("НАГРЕВАТЕЛЬ ВКЛЮЧЕН!!!");

   
} else if ( digitalRead(PIN_HEATER_BUTTON) == HIGH && heater_button_state) {
heater_button_state = false;
Serial.println("НАГРЕВАТЕЛЬ ВЫКЛЮЧЕН");
analogWrite(pin_heater, 0);

 }


  if ( heater_button_state ){
    analogWrite(pin_heater, regulator.getResultTimer());
    Serial.print("заполнение ШИМ = ");
    Serial.println(regulator.getResultTimer());
  }


Serial.print("Температура = ");
Serial.println(temp);

}

В этой системе за поддержание заданной температуры отвечает PID регулятор (он реализован в библиотеке GyverPID, спасибо её создателю). Задача PID регулятора в этом конкретном примере — достижение температуры уставки приточного воздуха и ее поддержание. В зависимости от входного параметра (температура) PID регулятор формирует сигнал ШИМ на выходе Arduino с определенным заполнением. Говоря простыми словами, то он управляет мощностью нагревателя для достижения и поддержания заданной температуры (setpoint).

Для настройки PID регулятора необходимо опытным путем, (эмпирическим, методом научного тыка=)) подобрать коэффициенты P I D, в скетче это —

GyverPID regulator(25.8, 0.79, 75.4, 10); // коэф. П, коэф. И, коэф. Д, период дискретизации dt (мс)

Для каждой конкретной системы эти коэффициенты будут свои. Для их подбора и расчета я воспользовался первым методом Циглера-Никольса (Зиглера-Никольса), предложенного им в 1943 году. Суть метода: выставляем все коэффициенты в 0 и начинаем плавно увеличивать коэффициент Kp до тех пор, пока на выходе системы не установятся колебания с постоянной амплитудой колебаний, то есть система не окажется на границе устойчивости. Подобрали этот коэффициент, записали его в блокнотике как Kp*, замерили период колебаний — T. В мониторе COM порта Arduino IDE это очень просто — необходимо включить отображение временных отметок.

Подогреватель воздуха в работе

В нашем случае устойчивые колебания установились с Kp*=43. Колебания шли в переделах 37-42 градусов (уставку задал в 40 градусов). Замерил период колебания и он составил 39 секунд (с 37 до 37 градусов), т.е. Т=39 секунд. Для PID регулятора считаем коэффициенты по формулам:

Kp = 0.60*Kp* | Ki = 1.2*Kp*/T | Kd = 0,075*Kp*Т

Получаем: Kp = 25.8 | Ki = 0.79 | Kd = 75.4

Заливаем финальный скетч в Arduino. Результат работы автоматического подогревателя приточного воздуха в системе приточно-вытяжной вентиляционной установки можно увидеть в видео:

Работа по созданию управления для ПВВУ Naveka Node1 ведется, осталось дождаться нужной платы Arduino и других комплектующих. Отчет будет в блокноте =)). До новых встреч.

21.01.2020, запустил вентиляционную установку Управление вентиляционной установкой на Arduino.

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *