Явно заданная кривая отопления

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

Как это работает. Мы явным образом задаем значения температурной кривой через массив. Например, мы знаем, что при температуре на улице в -10°C котел в контуре отопления должен выдавать 61°C. Составляем табличку от -30 до +30 с шагом в градус:

30 ... 10 9 ... -10 -11 ... -30
1 ... 38 40 ... 61 62 ... 70

А затем, нижнюю строку этой таблицы представляем в виде массива:


    int iv_curve[] = {1, 3, 5, 7, 10, 12, 14, 16, 18, 20, 21, 23, 25, 27, 29, 30,
        32, 34, 35, 37, 38, 40, 41, 43, 44, 45, 47, 48, 49, 50, 52, 53, 54, 55,
        56, 57, 58, 59, 60, 60, 61, 62, 63, 63, 64, 65, 65, 66, 66, 67, 67, 68,
        68, 69, 69, 69, 69, 69, 70, 70, 70};

В функцию calc_temp() после строки temp_n = (a * x * x) + (b * x) + c; вставляем следующий код:


// явно заданная кривая отопления
if (iv_k > 1.50) {
    // Кривая задается с шагом 1 градус от +30 до -30
    int i = round(30 - temp_1);
    if (i < 0) i = 0;
    if (i > 60) i = 60;

    // Матрица с кривой: iv_curve[0] - температура контура отопления при +30, iv_curve[60] - при -30
    int iv_curve[] = {1, 3, 5, 7, 10, 12, 14, 16, 18, 20, 21, 23, 25, 27, 29, 30,
        32, 34, 35, 37, 38, 40, 41, 43, 44, 45, 47, 48, 49, 50, 52, 53, 54, 55,
        56, 57, 58, 59, 60, 60, 61, 62, 63, 63, 64, 65, 65, 66, 66, 67, 67, 68,
        68, 69, 69, 69, 69, 69, 70, 70, 70};
    temp_n = iv_curve[i];
} 

Теперь, если мы в настройках зададим кривую отопления больше 1.5, например 1.6, то котел будет управляется через явно заданную кривую. Как нарисовали, так и будет работать.

Краткие итоги после зимы. Все отработало на отлично, к котлу теперь подхожу только проверить давление в системе. Глюков не было, температуру держит железно.

В Леруа Мерлен приобрел пластиковый инструментальный ящик, в который все оборудование прекрасно влезло (на фото). Дополнил систему модулем nRF24L01, теперь через вторую Ардуину прибор мне шлет СМС о состоянии системы отопления, температуре в доме и на улице. Но это уже другая история, возможно, напишу потом.

22.04.2017