1 2 3 4 5 6 7 8 9 10 10/10 9,80оценок: 15

Автоматика управления ТТ котлами своими руками

Тема в разделе "Котлы, горелки, котельное об-е своими руками", создана пользователем Senkiivan, 28.03.14.

Метки:
  1. Хитрый БолТ
    Регистрация:
    18.04.08
    Сообщения:
    953
    Благодарности:
    478

    Хитрый БолТ

    Живу здесь

    Хитрый БолТ

    Живу здесь

    Регистрация:
    18.04.08
    Сообщения:
    953
    Благодарности:
    478
    Адрес:
    Минск
    Друзья, помогите определиться со списком для закупки
     
  2. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Вопрос к сообществу. Имеется возвращенное библиотекой Даллас значение температуры помещения. Допустим 22,22. Как мне его грамотно перевести в значение угла поворота сервы от 180 (открыто) до 0 при допустим от 20 до 25 град помещения. Как бы пока П регулятор.
    Вот нашкрябал
    int pos=0; /позиция серво
    ...
    /servo
    pos=sensor2.getTemp()*10; /для масштабирования 22,22*10=222.думаю хвостик отпадёт.
    pos = map (pos, 200, 250, 180, 0);/ 200 и 250 диапазон температуры помещения. Подкорректируется другим фрагментом
    pos = constrain (pos, 0, 180);
    Serial. println (pos);
    myservo. write (pos);
    / это поворот примерно 110град в данном случае.

    Задача плавно гонять заслонку ПВ. На сегодняшний момент она переключает релейно часть ПВ. Как бы устраивает, но мы же не ищем легких путей. Заслонка уйдет на аварийную при отключении электричества и т. п.
    Уложатся значения в объявленную переменную pos?
     
    Последнее редактирование: 24.11.21
  3. Klesk982
    Регистрация:
    04.05.12
    Сообщения:
    479
    Благодарности:
    449

    Klesk982

    Живу здесь

    Klesk982

    Живу здесь

    Регистрация:
    04.05.12
    Сообщения:
    479
    Благодарности:
    449
    Адрес:
    Красноярск
    @Виктрычч, я бы десятые отбросил для упрощения, смысл в них? Может 90, а не 180 всё ж таки угол, соответствующий закрытию заслонки?
     
  4. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Номиналы это уже детали. Само собой не на 180 заслонку крутить если напрямую.
    В скетче то ошибок нет? Компилятор пропускает. Но мало ли там нолик не туда поставил. (Улицы разбитых фонарей вроде. Когда Боголепова подорвали)
    Проверю только в субботу.
    А на десятых и хочу сыграть. Пусть серва танцует у задания.
    Подкрутил
    pos=sensor2.getTemp()*10;
    pos = map (pos, TERMOSTAT*8, TERMOSTAT*10, 90, 0);
    pos = constrain (pos, 0, 90);
    Serial. print (pos);
    myservo. write (pos);
     
    Последнее редактирование: 24.11.21
  5. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633
    Адрес:
    Москва
    Код:
    float Set_T=22.0: // уставка температуры
    float Err_T; // ошибка
    float P_gain=10.: // коэффициент пропорциональности задаем крутизну больше меньше
                     // при равном 10 будет позиция 0 при 17.5 , 90 при 26.5
    int=pos:
    
    ....
    // ниже не чаще 1 раза в секунду
    Err_T=Set_T-sensor2.getTemp();
    pos=(int)(P_gain*Err_T+45.); // будет около 45 гр +-
    pos = constrain (pos, 0, 90);
    Serial. print (pos);
    myservo. write (pos);
    
     
  6. arsenty
    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081

    arsenty

    Живу здесь

    arsenty

    Живу здесь

    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081
    А короткое пояснение можно?
     
  7. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633
    Адрес:
    Москва
    Это обычная запись для Пропорционального (П) регулятора.
    Вычисляется ошибка между уставкой и фактической температурой Err_T.
    Затем умножается на коэффициент пропорциональности P_gain. Результат умножения и есть выходной сигнал (pos) для регулятора, который отрабатывает сервомеханизм. Физически есть крайние положения для исполнительного устройства, поэтому если вых. сигнал меньше 0 ограничиваем его 0 (открыто), а если сильно больше ограничиваем его 90 градусами (закрыто). 45 это вокруг чего будем ходить.
    Если P_gain задать очень большим, то П -регулятор вырождается в двухпозиционный (релейный) открыт/ закрыт. При P_gain =100. открыто будет при 22 -0.45 и меньше, закрыто при 22+0.45 и больше.
    Этот коэффициент определяет полосу пропорциональности.
    Ну а не чаще одно раза в секунду, это потому, что даллас сначала должен преобразовать температуру и записать ее в ROM, обычно на это уходит при парю питании 750 мс. Если опрашивать чаще, то или хрень будет в данных, или зависнет.
     
    Последнее редактирование: 24.11.21
  8. arsenty
    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081

    arsenty

    Живу здесь

    arsenty

    Живу здесь

    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081
    Плохо быть дураком. :mad: Несколько недель читал лабуду ...и не внял. А тут минута и ву а ля. :um:-:hndshk:.
    Осталось научиться всобачивать в нужном месте.
     
  9. arsenty
    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081

    arsenty

    Живу здесь

    arsenty

    Живу здесь

    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081
    Плохо когда ты ОДИН, а вокруг просто хорошие исполнители. (...чего изволите...:no:)
     
  10. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Понятно. Конечно так красивше и правильнее и проще. То что доктор прописал. А то у меня как то как про гланды. То же самое, но...
    А про дифференциальную так же пояснить? У меня печка дачу с минусов достаёт регулярно. Вручную заслонку кручу. И скорость не потерять и выбег ограничить. Период колебаний или как его там часа 2.
     
  11. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Вдогонку. А 45 это как бы интегральная часть? Её привязать к температуре за бортом? Так я думаю (с)
     
  12. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Arsenty
    Если что, у меня не прошла строка int=pos;
    Сейчас попробую макет собрать.
    Eccc. Всё работает, как доктор прописал. Уставка была 28. Что бы пальцем нагреть датчик. Остальные коэфициенты пока не трогал.
    Датчик температуры t2.
     

    Вложения:

    • Screenshot_2021-11-25-10-02-14-105_name.antonsmirnov.android.arduinodroid2.jpg
  13. arsenty
    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081

    arsenty

    Живу здесь

    arsenty

    Живу здесь

    Регистрация:
    15.01.15
    Сообщения:
    3.097
    Благодарности:
    1.081
    Виктрычч поясни почему не прошла, а на макете всё поехало? :ogo:
     
  14. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Да я в синтаксисе и пунктуации СИ двоешник. Вставил, int необычно красным высветилось. Компилл тоже споткнулся. Вручную набрал, то же самое. Ну и грохнул эту строку. Какое то необычное начертание. И всё проскочило. Яж в этом деле третий месяц. Подготовительная группа. Но вот уже и с ПИДом прояснение пошло.
    Вот нашёл. Похоже то что надо. Уже проверил.
    voidsetup(){
    }
    voidloop(){
    / (вход, установка, п, и, д, период в секундах, мин. выход, макс. выход)
    /analogWrite (pin, computePID (sensorRead, 30, 1.0, 2.0, 3.0, 0.02, 0, 255);
    /delay (20);
    }
    / функция пид
    intcomputePID (float input, float setpoint, float kp, float ki, float kd, float dt, int minOut, int maxOut){
    float err = setpoint - input;
    staticfloat integral = 0, prevErr = 0;
    integral = constrain (integral + (float) err * dt * ki, minOut, maxOut);
    float D = (err - prevErr) / dt;
    prevErr = err;
    returnconstrain (err * kp + integral + D * kd, minOut, maxOut);
    }
     
  15. Виктрычч
    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327

    Виктрычч

    Живу здесь

    Виктрычч

    Живу здесь

    Регистрация:
    05.06.17
    Сообщения:
    2.387
    Благодарности:
    1.327
    Что нам скажут старшие товарищи?