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

Ракетный котел - 2

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

Статус темы:
Закрыта.
  1. _Reba_
    Регистрация:
    13.10.15
    Сообщения:
    1.984
    Благодарности:
    1.764

    _Reba_

    Живу здесь

    _Reba_

    Живу здесь

    Регистрация:
    13.10.15
    Сообщения:
    1.984
    Благодарности:
    1.764
    Адрес:
    Приазовье
    @ra4cih,
    И на сухих дровах бывают чудные моменты. У меня часть дров, дуб, но какой-то больной, сердцевина в мелких порах или дырочках, и эти поленца значительно легче. Так вот если в горячий бункер заложить таких,-котел уходит в разнос, и ни как не управляется. В райзере, горит где-то вверху и со злым рокотом, в горизонтальном канале становится темно и холодно. Вернуть нормальное горение, только -ждать.Лучистой эти дрова дают тоже очень много и как результат перегрев бункера, т. е. опять ждать или искать что то сырое и тяжелое. А горизонтальный участок успел остыть и он массивный. И новая порция в бункере - газит, а в райзере не горит.
    Я так понимаю за счет пористости в таких дровах много воздуха, ну и попробуй, по управляй. Спасает ТА. Ну и терпение, ждать пока выгорит.
    Почему отрывает пламя от ГО и оно "убегает" вверх по райзеру в теплообменник?
     
  2. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Вот пока такой код котлового "мозга".
    Добавил описания, чтобы легче читалось.
    #include "max6675.h"
    #include <OneWire.h>
    #include <DHT.h>
    #include <Adafruit_SSD1306.h>
    #include <RCSwitch.h>
    #include <PID_v1.h>

    #define POWER_MODE 0
    #define DHTTYPE DHT11 / DHT 11

    #define OLED_RESET 4
    Adafruit_SSD1306 display (OLED_RESET);

    RCSwitch mySwitch = RCSwitch(); /обзываем радиопередатчик

    OneWire sensDs (7); /куда подключен ds18b20
    const byte dht_pin = 4; /куда подключен датчик влажности

    DHT dht (dht_pin, DHTTYPE);
    int thermoDO1 = 2; /он же SO
    int thermoDO2 = 3; /он же SO
    int thermoCS = 5;
    int thermoCLK = 6; /он же SCK
    byte bufData[9]; / буфер данных
    float temperature; / измеренная температура ds18b20
    float therm1; /райзер
    float therm2; /бункер
    int s1 = 0; /угол для сервы вторички
    int s2 = 0; /угол поворота сервы первички * 100
    int t1; /ограниченная температура датчика в райзере
    unsigned int pot; / данные с потенциометра
    unsigned int prepot = 0; /предыдущие данные с потенциометра
    unsigned int devpot; /разница предыдущих и текущих данных потенциометра
    int potdeg; /градусы с потенциометра
    unsigned long currentTime; / таймер
    unsigned long loopTime; / таймер
    unsigned long currentTimeSend; / таймер
    unsigned long loopTimeSend; / таймер
    unsigned long radiotime; / таймер радио
    unsigned long radiotimesend; / таймер радио
    unsigned long radio; / разница по таймерам радио
    long time;
    int radioperiod = 1200; /время на отправку каждой из переменных по радиоканалу
    boolean transflag = false; / флаг целевого сервопривода для передачи данных
    double Setpoint, Input, Output; / PID переменные, дублируют уже существующие, но мне лень менять
    int spid; / готовый угол поворота сервы с ПИД регуляятора

    PID myPID(&Input, &Output, &Setpoint,0.25,0.5,0, DIRECT);/создаем ПИД-регулятор
    / крайние 3 значения ПИД-регулятора содержат всю "магию" процесса -
    / их нужно настроить под себя, насколько быстро заслонка будет реагировать
    / на изменение температуры

    MAX6675 thermocouplea (thermoCLK, thermoCS, thermoDO1);/ это организовываем подключение термопар
    MAX6675 thermocoupleb (thermoCLK, thermoCS, thermoDO2);

    void setup() {
    Serial. begin (9600); / это для связи с контроллером сервоприводов
    currentTime = millis();
    loopTime = currentTime;
    pinMode (13, INPUT); / пин потенциометра
    display. begin (SSD1306_SWITCHCAPVCC, 0x3C);

    dht. begin();
    display. clearDisplay();

    mySwitch. enableTransmit (12); /включаем радио

    myPID. SetMode (AUTOMATIC);/включаем ПИД-регулятор
    delay (100);
    }

    void loop() {

    radiotime = millis();
    if (digitalRead (13) = HIGH) /кнопка запуска таймера новой закладки топлива
    {
    currentTime = millis();
    loopTime = currentTime;
    display. setTextSize (5);
    display. setTextColor (WHITE);
    display. setCursor (0, 0);
    display. println("START");
    display. display();
    display. clearDisplay();
    }

    /работа с потенциометром
    pot = analogRead (A0); / потенциометр у нас на пине А0
    devpot = pot - prepot;

    if (devpot >= 30) / в смысле, если пользователь крутнул ручку настройки
    {
    prepot = 0; / чтобы если крутнул обратно, не выйти из режима настройки
    potdeg = map (pot, 0, 1023, 25, 95); / определяем границы устанавливаемой температуры
    display. setTextSize (5);
    display. setTextColor (WHITE);
    display. setCursor (40, 0);
    display. println (potdeg);
    display. display();
    display. clearDisplay();

    if (radiotime - radiotimesend >= 5000)/ даем 5 секунд ожидания действий пользователя
    {
    prepot = pot;
    radiotimesend = radiotime;
    }
    }

    else / весь этот остальной цикл программы запускается
    / только когда не меняются данные с потенциометра
    {

    float h = dht. readHumidity();
    float t = dht. readTemperature();
    sensDs. reset(); / сброс шины
    sensDs. write (0xCC, POWER_MODE); / пропуск ROM
    sensDs. write (0x44, POWER_MODE); / инициализация измерения

    potdeg = map (pot, 0, 1023, 25, 95); / повторяем перевод в градусы для этой части кода

    / управление приводом заслонки вторичного воздуха

    if (t1 <= 450) {
    s1 = 0;
    }
    if (t1 > 450 && t1 <= 600) {
    s1 = 90;
    }
    if (t1 > 600 && t1 <= 800) {
    s1 = 120;
    }
    if (t1 > 800) {
    s1 = 180;
    }

    / управление приводом заслонки первичного воздуха

    Setpoint = potdeg; / заданная температура
    Input = temperature; /температура с датчика на выходе из теплообменника

    myPID. Compute();/считаем выходной сигнал ПИД-регулятора

    spid = constrain (Output, 0, 180); / устаканиваем результат работы ПИД в наши рамки
    / доступных углов сервопривода и готовим к передаче на контроллер сервоприводов

    if (time < 300){ / открываем заслонку на максимум на 5 минут после загрузки
    s2 = 180;
    }
    else {
    s2 = spid;
    }

    / отправка данных на контроллер сервоприводов
    currentTimeSend = millis();

    if (currentTimeSend - loopTimeSend >= 5000){ / управляем каждым из сервоприводов раз в 5 секунд
    transflag = !transflag;
    loopTimeSend = currentTimeSend;
    }

    if (transflag = false)
    {
    Serial. print (String (s1, DEC); /данные для сервопривода вторички
    }

    if (transflag = true)
    {
    Serial. print (String (constrain (s2, 2, 180)*100, DEC); /данные для сервопривода первички
    }

    time = (millis() - currentTime) / 1000; / таймер времени горения закладки топлива

    sensDs. reset(); / сброс шины
    sensDs. write (0xCC, POWER_MODE); / пропуск ROM
    sensDs. write (0xBE, POWER_MODE); / команда чтения памяти датчика
    sensDs. read_bytes (bufData, 9); / чтение памяти датчика, 9 байтов

    if (OneWire: crc8 (bufData, 8) = bufData[8])

    temperature = (float)(int) bufData[0] | (int) bufData[1]) < 8) * 0.0625 + 0.03125;

    therm1 = thermocouplea. readCelsius();
    therm2 = thermocoupleb. readCelsius();

    t1 = constrain (therm1, 300, 1000);

    / вывод данных на дисплей

    display. setTextSize (1);
    display. setTextColor (WHITE);
    display. setCursor (0, 0);
    display. println (therm1);

    display. setCursor (70, 0);
    display. println (time / 60 / 60);
    display. setCursor (85, 0);
    display. println (":");
    display. setCursor (90, 0);
    display. println (time / 60) % 60);
    display. setCursor (110, 0);
    display. println (":");
    display. setCursor (115, 0);
    display. println (time % 60);

    display. setCursor (110, 24);
    display. println (s1);

    display. setCursor (0, 12);
    display. println (therm2);
    display. setCursor (90, 12);
    display. println (temperature);
    display. setCursor (0, 24);
    display. println (t);
    display. setTextSize (2);
    display. setCursor (50, 12);
    display. println (potdeg);
    display. display();
    display. clearDisplay();

    / отправка данных по радиоканалу

    radio = radiotime - radiotimesend;

    if (radio < radioperiod){
    mySwitch. send (time, 19);
    /Serial.println (19);
    }
    if (radio >= radioperiod && radio < radioperiod * 2){
    mySwitch. send (s1, 13);
    /Serial.println (13);
    }
    if (radio >= radioperiod * 2 && radio < radioperiod * 3){
    mySwitch. send (h * 100, 14);
    /Serial.println (14);
    }
    if (radio >= radioperiod * 3 && radio < radioperiod * 4){
    mySwitch. send (t * 100, 15);
    /Serial.println (15);
    }
    if (radio >= radioperiod * 4 && radio < radioperiod * 5){
    mySwitch. send (temperature * 100, 16);
    /Serial.println (16);
    }
    if (radio >= radioperiod * 5 && radio < radioperiod * 6){
    mySwitch. send (therm2 * 100, 17);
    /Serial.println (17);
    }
    if (radio >= radioperiod * 6 && radio < radioperiod * 7){
    mySwitch. send (therm1 * 100, 18);
    /Serial.println (18);
    }
    if (radio >= radioperiod * 7 && radio < radioperiod * 8){
    mySwitch. send (time, 19);
    /Serial.println (191);
    }
    if (radio >= radioperiod * 8){
    mySwitch. send (potdeg, 20);
    /Serial.println (20);
    }
    if (radio >= radioperiod * 9){
    radiotimesend = radiotime;
    }
    }

    }

    Не знаю, что такого сверхъестественного в использовании ПИД-регулятора для контроллера котла, что производители выставляют это как нечто... ну, нечто настолько крутое, что нужно за это платить чуть ли не вдвое дороже.
    По сути, это всего 4-5 строчек в программе (не считая прикрепленной библиотеки), которые просто облегчают жизнь программисту (заставить программу делать то же самое без ПИД-алгоритма гораздо сложнее и дольше, я лично уже пытался).
    Да, там нужно настроить 3 параметра, определяющие скорость и точность изменения выходного значения, но это зачастую успешно делается "методом научного тыка". Задача - согласовать скорость изменения этого значения с инерционностью всей системы.
    Я пока выставил их так, как делал в одном из своих предыдущих проектов, где ПИД управлял оборотами мотор-редуктора, для котла, понятно, подберу соответствующие... но даже на таких "чужих" параметрах все равно будет работать.

    Возможно, придется ограничить угол сервопривода, доступный для ПИД-регулятора (поставить не 180, а, например, 120 градусов), а максимальный угол использовать только для запуска.
    Это завтра серву прикручу и буду пробовать.

    Супруга быстро освоила работу с котлом "с мозгами", вроде понравилось. Стало легче обслуживать агрегат: замигал приемник у нас в комнате - иди грузи дрова. Загрузил - нажми кнопочку. Ну... ну и всё.

    В принципе, могу написать код так, чтобы контроллер сам угадывал, что произошла новая загрузка (там очень четко прослеживается характерная для новой загрузки динамика температур, когда температура бункера резко идет вниз, а в райзере - динамично вверх), но хоть какая-то кнопочка должна быть на котле:)
     
    Последнее редактирование: 10.12.17
  3. ra4cih
    Регистрация:
    27.11.13
    Сообщения:
    150
    Благодарности:
    119

    ra4cih

    Живу здесь

    ra4cih

    Живу здесь

    Регистрация:
    27.11.13
    Сообщения:
    150
    Благодарности:
    119
    Адрес:
    Саратов
    Если по аналогии с газовой горелкой, пламя отрывается при избытке воздуха. Думаю, надо убавить вторичку.
     
  4. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.683
    Благодарности:
    633
    Адрес:
    Москва
    Это справедливо только для детерминированных воздействий и откликов. Например, когда котел вышел на режим, то да. А вот скажем при розжиге система ведет себя несколько иначе. При смене топлива тоже могут быть сюрпризы. Также есть проблема интегрального насыщения.
     
  5. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    @V757V, это не проблема, так как планируется создать несколько режимов управления первичкой в зависимости от стадии горения и особенностей топлива. Подразумевается как введение программно изменяемых переменных ПИД, так и периоды работы без ПИД - регулятора.
    Было бы слишком нерационально городить весь этот огород с микроконтроллерами, если не ставить целью максимально проработать все алгоритмы управления котлом. Пока что есть железо и интерфейс - это только оболочка, инструментарий. Теперь нужно научить инструмент работать.
    Понятно, что алгоритм управления будет гораздо больше тех нескольких строк, которые есть на данный момент.
     
    Последнее редактирование: 10.12.17
  6. _Reba_
    Регистрация:
    13.10.15
    Сообщения:
    1.984
    Благодарности:
    1.764

    _Reba_

    Живу здесь

    _Reba_

    Живу здесь

    Регистрация:
    13.10.15
    Сообщения:
    1.984
    Благодарности:
    1.764
    Адрес:
    Приазовье
    Давно думал как сфотать,-оказалось на телефон (фотоапарат крутой, но не шпионский, через замочную скважину не умеет:)],а тел,-нормально).
    Цвета искажены, но не сильно, можно догадаться. А цвет факела мне не помощник (так как почти не меняется)."Индикатор"-спиралька,свернутая из нержи 1,2 (304 или 308-не помню точно).Снимал в течении дня при разных режимах и состояниях горения.
    Кстати, мощность я ограничил просто,-положил два куска шамотной плитки на колосник (уменьшив его площадь). Выгорает в принципе также, а насос на ТА стал включаться значительно реже.
    ra4cih Если сравнивать с розжигом газового резака,-то сильно не хватает кислорода. И так и есть, если уменьшать ВВ может вообще потухнуть, и в небо начинает бить фонтан густого белого дыма. Если сразу вернуть ВВ, с хлопком (по сути взрыв) горение можно вернуть, но горит в верху райзера и вниз не опускается долго. Вторичек,-две,по 36 см2 ,и все равно-мало,или почему-то не участвуют.(возможно холодные,-подогрев никак не доделаю)
    Сейчас просто методом сортировки дров приспосабливаюсь. Бытовой мусор (химию,-пакеты,бутылки,упаковку) показалось легче сжигать, хотя тогда бункер был не очень горяч.
     

    Вложения:

    • 2017-12-10 19.28.38.jpg
    • 2017-12-10 19.32.44.jpg
    • 2017-12-10 19.32.55.jpg
    • 2017-12-10 19.34.16.jpg
    • 2017-12-10 19.46.30.jpg
    • 2017-12-10 19.49.13.jpg
    Последнее редактирование: 10.12.17
  7. ra4cih
    Регистрация:
    27.11.13
    Сообщения:
    150
    Благодарности:
    119

    ra4cih

    Живу здесь

    ra4cih

    Живу здесь

    Регистрация:
    27.11.13
    Сообщения:
    150
    Благодарности:
    119
    Адрес:
    Саратов
    Когда-то ремонтировал газовую плиту (разболтался кран), и разобрав, обнаружил на горелке подвижный сектор, который регулировал подачу воздуха, подмешиваемого к газу. Естественно мне стало интересно, и я начал его крутить. Если уменьшить подачу - пламя становиться красным, в среднем положении - обычное голубое, если прибавить больше - пламя начинает шуметь и отрывается от горелки. Вот оттуда и запомнилось. Еще могу предположить, что идет слишком большой напор дымогазов. Тогда нужно уменьшить сечение газового окна.
     
  8. Lifestiler
    Регистрация:
    25.01.14
    Сообщения:
    126
    Благодарности:
    23

    Lifestiler

    Живу здесь

    Lifestiler

    Живу здесь

    Регистрация:
    25.01.14
    Сообщения:
    126
    Благодарности:
    23
    Адрес:
    Георгиевск
    Мощность (количество выделяемой при горении энергии) не уменьшает, но уменьшает КПД просто прогоняя (выдувая в атмосферу) больше нагретого воздуха вместе с ДГ. Я наверное выше написал недостаточно подробно по поводу минималки ну да фиг с ним. Алгоритм работы регулятора ВВ (как-бы я себе делал) начнём с розжига ВВ закрыто Т в райзере маленькая, но котёл разгорается, прогревается, как только Т достигает некого минимального значения контроллер открывает ВВ на 10% потом ждёт к примеру минуту опять меряет температуру - 1 если увеличилась то открывает ВВ ещё на 10% и т. д. до 100%, но до 100% он ВВ на практике не откроет так как дрова не успеют так быстро разгорется и нагреть бункер. Дальше к примеру заслонка 50% и измеренная Т меньше прошлого измерения, то контроллер прикрывает ВВ на 10%. В общем если Т2 больше Т1 добавляем ВВ если меньше убавляем и держим в райзере максимум без недожёгов и разбавления.
    Уплотнять дверки вам зачем? вы же сами говорили что если заткнуть тряпкой ПВ и ВВ канал то котёл тухнет, а вот уплотнить клапан ПВ надо (да блин хотя-бы по краю тонко намазать дерьметиком, даже если зацепится за стенку в каком то положении серва справится или слой тонкой резины наклеить, ну я хз нифига сложного помойму)
    Райзер не может в принципе сосать как пылесос как не старайся, да объём прокачивает большой, но разрежение создаёт просто ничтожно маленькое по сравнению с пылесосом.
     
  9. Сергей247
    Регистрация:
    30.04.12
    Сообщения:
    6.161
    Благодарности:
    1.867

    Сергей247

    Живу здесь

    Сергей247

    Живу здесь

    Регистрация:
    30.04.12
    Сообщения:
    6.161
    Благодарности:
    1.867
    Адрес:
    Минск
    Нужно до определённой степени понимать образное сравнение. :) Однако Руслан демонстрировал лист бумаги засасываемый в канал подачи ВВ.
     
  10. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    Насколько я помню, у них теплоаккумуляторы из черного металла...
     
  11. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    может плохая теплоизоляция райзера?
     
  12. Чернигов
    Регистрация:
    20.11.11
    Сообщения:
    1.287
    Благодарности:
    258

    Чернигов

    Живу здесь

    Чернигов

    Живу здесь

    Регистрация:
    20.11.11
    Сообщения:
    1.287
    Благодарности:
    258
    Адрес:
    Чернигов
    и что из этого следует-?
     
  13. Perelesnik
    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614

    Perelesnik

    Живу здесь

    Perelesnik

    Живу здесь

    Регистрация:
    01.02.13
    Сообщения:
    991
    Благодарности:
    4.614
    Адрес:
    Черкассы
    Ответ на Ваш вопрос находится здесь: https://chem21.info/info/1467200/

    @Lifestiler, пока что прописал на запуске закрытую вторичку до достижения температуры 450 градусов в райзере и полностью открытую первичку, тупо на 5 минут (позже при необходимости привяжу к совокупности параметров).
    Ну там еще много нужно наблюдать, делать выводы и вносить в алгоритм.
    Первичку по регулятору ограничил до 2/3 от максимально открытого положения. Это от 0 до 120 градусов. ПИД-регулятор сейчас дает приращение примерно 1 угловой градус в полторы секунды, если резко увеличить требуемую температуру. То есть, от закрытого до максимально открытого (ну не вообще максимального, а 2/3 от полного максимума) заслонка будет двигаться примерно 2-3 минуты. Быстро это или медленно - посмотрим.
    Если что - подрегулирую динамику.

    Остановился на том, что не оказалось сервопривода достаточной мощности на первичку. Перебрал все свои коробки - нашел пару сервоприводов постоянного вращения с усилием более 15 кг/см. Но работать смогут только если организовать обратную связь, чтобы давало информацию о реальном угле поворота (в самом приводе потенциометр отсутствует).
    Поэтому решил сделать редуктор на 2 шестерни - одна маленькая на моторчике, вторая большая - на оси потенциометра. Усилие получится с большим запасом - можно гвозди гнуть.
    Но вот угробил большую часть дня на расчет шестерен и на создание модели для печати. Сейчас только поставил печатать.
    Так что подключение регулятора первички откладывается на суки - двое (еще код энкодера нужно писать и согласовывать).
     
  14. StarykovMih
    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176

    StarykovMih

    Живу здесь

    StarykovMih

    Живу здесь

    Регистрация:
    13.11.12
    Сообщения:
    522
    Благодарности:
    176
    Адрес:
    Киев
    Только то, что себе я заказал из 304 нержавейки - не стал брать из чернухи.
    Руслан уже рассказывал почему он варил детали своего котла (в том числе теплообменник) из нержавейки, думаю повторяться не стоит.
    Но, еще раз - каждый решает для себя сам.
     
    Последнее редактирование: 11.12.17
  15. Чернигов
    Регистрация:
    20.11.11
    Сообщения:
    1.287
    Благодарности:
    258

    Чернигов

    Живу здесь

    Чернигов

    Живу здесь

    Регистрация:
    20.11.11
    Сообщения:
    1.287
    Благодарности:
    258
    Адрес:
    Чернигов
    если есть такая возможность то только приветствуется-но для ТА это не так актуально как для ТО котла.
     
Статус темы:
Закрыта.