Ардуино контролер пеллетной горелки.

Тема в разделе "Arduino & Shields", создана пользователем b707, 17 окт 2021.

  1. mednagolov

    mednagolov Гик

    KiCad вроде понятная, надо пробовать...
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Easyeda аднака
     
  3. SergeiL

    SergeiL Оракул Модератор

    Пока я частично почистил, но флуд от ТС за сегодня - мне очень не понравился, будет продолжать в таком духе - первое, это перенос темы во флудилку, потом - посмотрим.
    Все удалять не стал, критика - есть критика.
    Если ТС хочет только по теме - давайте, только по теме.
    Я тоже не приветствую автоматизацию процессов горения начинающими, и не профессионалами, но дадим шанс.
    Хотя и не хочется давать надежду на успех у начинающим ардуинщиков, читающим форум и посты о приручение печей, котлов и т.п из за соображения безопасности, как их самих, так и окружающих.
     
    Airbus, Feofan, b707 и 2 другим нравится это.
  4. Airbus

    Airbus Радиохулиган Модератор

    Сам Кот
    Код (Text):

    //******** подкл.библиотеки для DS18B20 *********************************************

    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS A1 //обьявляем ONE_WIRE_BUS к пину (A1)
    // Настройте oneWire для связи с любыми устройствами OneWire
    //  (а не только с микросхемами температуры Maxim / Dallas)
    OneWire oneWire(A1); // вход датчиков 18b20
    DallasTemperature ds(&oneWire);
    DeviceAddress sensor1 = {0x28, 0xFF, 0x46, 0x9C, 0x30, 0x17, 0x3, 0x70};// адрес моего датчика
    #include <LiquidCrystal_I2C.h> // библиотека для LCD 1602
    LiquidCrystal_I2C lcd(0x27,16,2);  // присваиваем имя дисплею
    const int pin_fire = A3;      // pin датчик огня
    const int but_plus = 2;      // кнопка +
    const int but_minus = 3;    // кнопка -
    const int but_meny = 4;    // кнопка меню
    const int bip = 5 ;       // зумер бипер подключен к D5
    const int pin_on = A2;     // pin реле

    //boolean on = false;       // флаг реле
    boolean flag = false;      // флаг кнопки плюс
    boolean flag1 = false;    // флаг кнопки минус
    boolean flag2 = false;   //флаг меню
    boolean Tflag1 = true;
    boolean Tflag2 = false ;  

    int meny=0 ;    //меню

    int sek=0;
    int mint=0;
    int h=0;
    int deu=0;
    int mint_r =0;  // время для таймера тревоги
    int h_r =0;
    int deu_r =0;
    //mint   h  deu

    int F=1;   // переменная датчика огня
    int P=1;   // переменная для digitalWrite(pin_on ,P ) подачи
    int s=1;   // секунда для таймеров
    int  taim =0;  // время таймера подачи
    int  taim1 =0; // время таймера паузы
    int Po=3;   //время подачи по умолчанию
    int Pa=8;  //время паузы по умолчанию
    int d=5;    // дельта паузы/подачи

    uint32_t myTimer1; // время таймера на millis()

    float T=0;     //переменная для температуры сейчас
    int Tmax=28;   // условная максимальная температура
    int Tmin=26;  // условная минимальная температура

    int Sp = 1; // показывает подачу на дисплее
    //int podacha ;   // переменная длительности подачи в сек.
    //int pause ;    // переменная длительности паузы подачи в сек.
    int Po_r ;      // переменная для подачи
    int Pa_r ;     // переменная для паузы
    //int D;

    void setup() {
    Serial.begin(9600);      // запускаем монитор порта
      ds.begin();            // инициализация термодатчика  DS18B20
      lcd.init();           // инициализация дисплея
      lcd.backlight();     // включение подсветки дисплея
      // устанавливаем разрешение датчика 11 бит (может быть 9, 10, 11, 12)
        // на точность измерения температуры показатель не влияет.
    ds.setResolution(sensor1, 11);
      pinMode(pin_fire,INPUT);    // пин датчика огня
      pinMode(but_meny,INPUT);   // пин кнопки meny
      pinMode(but_plus,INPUT);   // пин кнопки плюс
      pinMode(but_minus,INPUT); // пин кнопки минус
      pinMode(pin_on,OUTPUT);    // пин на реле
      pinMode(bip,OUTPUT);      //пин на бипер
      pinMode(pin_on, OUTPUT); // пин реле подачи пелет
     
    Po_r=Po;    //// сохраняем
    Pa_r =Pa;   //// сохраняем
    }

    void loop() {  

    if(digitalRead ( pin_fire)== 0 ) { F=1;} // проверка огня
    else {F=0;}

    digitalWrite(pin_on ,P );  // управление реле подачи

    if (millis() - myTimer1 >= 1000  )
      {  myTimer1 = millis(); s++; sek++; }  // таймер на millis()

    if(sek>59){sek=0;mint++;}
    if (mint>59){mint=0;h++;}
    if (h>23){h=0;deu++ ;}

    if (s>3600){ s=1; taim=0; taim1=0;}  // сброс рабочих таймеров каждый час

    if(P==1){
    if (s - taim >= Pa  )    // таймер паузы
      {  taim1=s; P=0;}}

    if(P==0){
    if (s - taim1 >= Po  )    //таймер подачи
      {  taim=s;  P=1;}}

    // if(digitalRead ( pin_fire)== 0 ) { P=1; F=1;}
    // else {F=0;P=0;}

     if (digitalRead(but_plus) ==0 && flag == false){ ;flag=true;delay(20);tone(bip,1300,100); }
    if (digitalRead(but_plus) ==1) { flag=false;delay(20);}

    if (digitalRead(but_minus) ==0 && flag1 == false){ ;flag1=true; tone(bip,1500,100); }
    if (digitalRead(but_minus) ==1) { flag1=false; }

      if (digitalRead(but_meny) ==0 && flag2 == false){meny++ ;
      if(meny >5){meny=0;  }; // устанавливает количество "видимых" меню
      flag2=true;delay(20); lcd.clear();tone(bip,1000,100);    
      }
      if (digitalRead(but_meny) ==1) { flag2=false;delay(20); }

       ds.requestTemperatures(); // считываем температуру с датчиков
       T=ds.getTempC(sensor1); // присваиваем показания датчика температуры переменной Т
    //********* *******************************************************************************
    delay(100); // для считывания температуры

    if(meny ==0){
    lcd.setCursor(11, 0);
    if(mint<10){lcd.print("0");}// всегда 2 цифры
    lcd.print( mint );
            if(s%2){     lcd.print(":");}
            else {lcd.print(" ");}
      if(h<10){lcd.print("0");}// всегда 2 цифры
    lcd.print(h);

    if (F==1){lcd.setCursor(0, 0);lcd.print( "F+ " );}
      else { lcd.setCursor(0, 0);lcd.print( "F- " );} // показываем наличии огня

    lcd.setCursor(3, 0); lcd.print( "Sp=" ); lcd.print( Sp );  // показываем подачу
    //lcd.print( " - " ); lcd.print( Po );lcd.print( "  " );
    lcd.setCursor(0, 1);lcd.print( "T=" );lcd.print( T,1 );   // выврдим температуру
    //lcd.print( "  - " ); lcd.print( Pa );lcd.print( "  " );
    }

    if(meny ==1){
    lcd.setCursor(0, 0); lcd.print( "INPUT TO T max " );
    lcd.setCursor(0,1);
    lcd.print("Tmax=" );lcd.print(Tmax);
    if(flag==true){Tmax++; }
    if(flag1==true){Tmax--;}
    if (Tmax > 82  ){ tone(bip,500,1000); Tmax = 82 ; lcd.clear(); lcd.print( " T max EROR ! " );delay(500);}
    if (Tmax > Tmin+5 ){ Tmax++; tone(bip,500,1000);}
    }

    if(meny ==2){
      lcd.setCursor(0,0);lcd.print("INPUT TO T min " );
    lcd.setCursor(0,1); lcd.print("Tmin=" );lcd.print(Tmin);
    if(flag==true){Tmin++;delay(500);}
    if(flag1==true){Tmin--;delay(500);}
    if (Tmin<30){Tmin++;tone(bip,500,1000);  }     // нельзя меньше 30
    if (Tmin>Tmax-5){Tmin--;tone(bip,500,1000);  } // нельзя больше Тмах-5

    }

    if(meny == 3){
    lcd.setCursor(0,0); lcd.print("INPUT TO D" );
    lcd.setCursor(0,1); lcd.print("D=" );lcd.print(d);
    if(flag==true){d++;delay(500);}
    if(flag1==true){d--;delay(500);}
    if (d > Pa-3){ d=Pa-3;tone(bip,500,1000); }
    }

    if(meny ==4){
      lcd.setCursor(0,0);lcd.print("INPUT TO Pause " );
    lcd.setCursor(0,1); lcd.print("Pause=" );lcd.print(Pa);
    if(flag==true){Pa_r++;delay(500);}
    if(flag1==true){Pa_r--;delay(500);}
    }

    if(meny ==5){
      lcd.setCursor(0,0);lcd.print("INPUT TO Podah " );
    lcd.setCursor(0,1); lcd.print("Podah=" );lcd.print(Pa);
    if(flag==true){Po_r++;delay(500);}
    if(flag1==true){Po_r--;delay(500);}
    }

    if(meny == 7){
    lcd.clear();
    lcd.setCursor(0,0); lcd.print("ALARM! PEREGREV!" );
    lcd.setCursor(0,1); lcd.print( "T=" ); lcd.print(T );
    //lcd.print( " Sp=" );lcd.print( Po );
             P=1;    // стоп подача топлива

    if (T>Tmax+5){ tone(bip,1300,1000); tone(bip,1700,1001);  }//серена
    mint_r = mint; h_r = h; deu_r = deu;    // сохраняем время аварии
    lcd.setCursor(7,1); lcd.print( mint_r  );lcd.print( ";" );lcd.print( h_r  );lcd.print( ";" );lcd.print( deu_r  );
    //mint   h  deu
    }

    Po=Po_r;  //возвращаем значение Ро (подачи)
    Pa=Pa_r;  //возвращаем значение Ра (паузы)
    if (T < Tmin ){  Sp=3;Pa-=d; }       // скорость подачи - если холоднее то подача = *3
    if ((Tmax > T) && (Tmin < T ) ) {  Sp=2;  } // расчёт подача при норме
    if (T > Tmax  ){  Sp=1;Pa+=d; }       // скорость подачи - если теплее то подача = 1
    if (T > Tmax + 5 ){  P = 1 ; Sp=0; }       // скорость подачи - если теплее Tmax + 5 то подача СТОП!
    if (T> Tmax + 10){ meny =7; P=1 ; Sp=0;  }    // ПЕРЕГРЕВ! аварийное МЕНЮ-7, подача СТОП! + СИРЕНА !

    Serial.print(" T=");Serial.println( Po  );
    Serial.print(" T1=");Serial.println( Pa  );
    Serial.print(" P=");Serial.println( P );
    Serial.print(s);

    }//END
     
    mednagolov нравится это.
  5. mednagolov

    mednagolov Гик

    А я не мог кодом выложить, сайт eror_ил типа ограничение кол-ва символов.
     
  6. mednagolov

    mednagolov Гик

    Итак, кручу машину - показываю следующую картину....)))
    Стопорки прописал, сейчас менюшки в минус не уходят, баг с даласом решил путём опроса его раз в 2 сек, расставил биперы но проверить их нечем( мой модуль активной пьезопищалки чёт издох похоже) . четкость отработки кнопок выставил....
    Проверял на Ардуино УНО - она трудится в контролере, и на Ардуино НАНО - она у меня в самодельной "гонялке". На обоих устройствах всё работает четко, сбоев не было.
    Сейчас главное контролер готов управлять горелкой , погоняю контролер+горелка и посмотрю чего не хватает а чего лишку..)))
    Ну и как обещал - показываю картину....
    Это контролер
    2021-10-19 22.30.30.jpg
    главное меню и менюшки..
    . 2021-10-19 22.34.31.jpg 2021-10-19 22.34.47.jpg 2021-10-19 22.35.03.jpg 2021-10-19 22.35.27.jpg 2021-10-19 22.34.08.jpg 2021-10-19 22.33.46.jpg
    на "гонялке" тоже всё работает ...
    2021-10-19 22.42.29.jpg
     
  7. mednagolov

    mednagolov Гик

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

    Вложения:

  8. mednagolov

    mednagolov Гик

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

    2021-08-05 15.51.41.jpg 2021-08-09 08.49.47.jpg

    Примерно-расчетная максимальная мощность моей горелки 10-15 Квт. Горелку специально не стал делать мощную, думаю мне её должно хватить.
    В ту зиму отапливал свой дом (пеноблок) самодельным Эл.котлом - 2 тены по 2Квт. Когда" за бортом " давило - 20...27 включал в помощь эл.котлу тёплый пол.
     
    Последнее редактирование модератором: 20 окт 2021
  9. Airbus

    Airbus Радиохулиган Модератор

    Так смотреть никто не будет. Ваш первый код причесал—убрал лишние символы пробелы и красивые рамки-вензеля а ля ассемблер. Сам код оставил. Завтра сутра перед работой выложу—пусть народ посмотрит. Да и ваще учитесь провильно и красиво оформлять свои посты. Вам же самому будет приятно
     
    DetSimen и SergeiL нравится это.
  10. mednagolov

    mednagolov Гик

    Код (C++):
    //**************************** Контролер пиллетной горелки **********************************************
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS A1 //обьявляем ONE_WIRE_BUS к пину (A1)
    // Настройте oneWire для связи с любыми устройствами OneWire
    //  (а не только с микросхемами температуры Maxim / Dallas)
    OneWire oneWire(A1); // вход датчиков 18b20
    DallasTemperature ds(&oneWire);
    DeviceAddress sensor1 = {0x28, 0xFF, 0x46, 0x9C, 0x30, 0x17, 0x3, 0x70};// адрес моего датчика
    #include <LiquidCrystal_I2C.h> // библиотека для LCD 1602
    LiquidCrystal_I2C lcd(0x27,16,2);  // присваиваем имя дисплею
    const int pin_fire = A3;      // pin датчик огня
    const int but_plus = 2;      // кнопка +
    const int but_minus = 3;    // кнопка -
    const int but_meny = 4;    // кнопка меню
    const int bip = 5 ;       // зумер бипер подключен к D5
    const int pin_on = A2;     // pin реле
    //boolean on = false;       // флаг реле
    boolean flag = false;      // флаг кнопки плюс
    boolean flag1 = false;    // флаг кнопки минус
    boolean flag2 = false;   //флаг меню
    boolean Tflag1 = true;
    boolean Tflag2 = false ;  
    int meny=0 ;    //меню
    int sek=0;
    int mint=0;
    int h=0;
    int deu=0;
    int mint_r =0;  // время для таймера тревоги
    int h_r =0;
    int deu_r =0;
    int F=1;   // переменная датчика огня
    int P=1;   // переменная для digitalWrite(pin_on ,P ) подачи
    int s=1;   // секунда для таймеров
    int  taim =0;  // время таймера подачи
    int  taim1 =0; // время таймера паузы
    int Po=3;   //время подачи по умолчанию
    int Pa=8;  //время паузы по умолчанию
    int d=5;    // дельта паузы/подачи

    uint32_t myTimer1 ; // время таймера на millis()
    uint32_t  myTimer2 ;
    float T=0;     //переменная для температуры сейчас
    int Tmax=35;   // условная максимальная температура
    int Tmin=20;  // условная минимальная температура
    int Sp = 1; // показывает подачу на дисплее
    //int podacha ;   // переменная длительности подачи в сек.
    //int pause ;    // переменная длительности паузы подачи в сек.
    int Po_r ;      // переменная для подачи
    int Pa_r ;     // переменная для паузы
    //int D=3;      // дельта по температуре
    void setup() {
    Serial.begin(9600);      // запускаем монитор порта
      ds.begin();            // инициализация термодатчика  DS18B20
      lcd.init();           // инициализация дисплея
      lcd.backlight();     // включение подсветки дисплея
      // устанавливаем разрешение датчика 11 бит (может быть 9, 10, 11, 12)
        // на точность измерения температуры показатель не влияет.
    ds.setResolution(sensor1, 11);
      pinMode(pin_fire,INPUT);    // пин датчика огня
      pinMode(but_meny,INPUT);   // пин кнопки meny
      pinMode(but_plus,INPUT);   // пин кнопки плюс
      pinMode(but_minus,INPUT); // пин кнопки минус
      pinMode(pin_on,OUTPUT);    // пин на реле
      pinMode(bip,OUTPUT);      //пин на бипер
      pinMode(pin_on, OUTPUT); // пин реле подачи пелет
       Po_r=Po;    //// сохраняем
    Pa_r =Pa;   //// сохраняем
    }
    void loop() {   /////////////////////////////////////////////////////////////////////////////////////////////////////////
    if(digitalRead ( pin_fire)== 0 ) { F=1;} // проверка огня
    else {F=0;}
    digitalWrite(pin_on ,P );  // управление реле подачи
    if (millis() - myTimer1 >= 1000  )
      {  myTimer1 = millis(); s++;  sek++;}   // таймер на millis()
      if (digitalRead(but_plus) ==0 && flag == false){ flag=true;tone(bip,1300,20); }
    if (digitalRead(but_plus) ==1) { flag=false; }
       if (digitalRead(but_minus) ==0 && flag1 == false){ flag1=true; tone(bip,1500,100); }
    if (digitalRead(but_minus) ==1) { flag1=false; }
      if (digitalRead(but_meny) ==0 && flag2 == false){meny++ ;
      if(meny >5){meny=0;  };    // устанавливает количество "видимых" меню
      flag2=true;delay(20); lcd.clear();tone(bip,1000,100);    
      }
      if (digitalRead(but_meny) ==1) { flag2=false;delay(20); }
    if(sek>59){sek=0;mint++;}
    if (mint>59){mint=0;h++;}
    if (h>23){h=0;deu++ ;}
    if (s>3600){ s=1; taim=0; taim1=0;}  // сброс рабочих таймеров каждый час
    if(P==1){
    if (s - taim >= Pa  )    // таймер паузы
      {  taim1=s; P=0;}}

    if(P==0){
    if (s - taim1 >= Po  )    //таймер подачи
      {  taim=s;  P=1;}}
    ///////////////////////////////////////////////////////////////////
    //****************************************************************************************************
    //*******************************************************************************************
    // if(digitalRead ( pin_fire)== 0 ) { P=1; F=1;}
    // else {F=0;P=0;}
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //********** работа с датчиком температуры ***********************************************
    if (millis() - myTimer2 >= 2000  )
      {  myTimer2 = millis();    // таймер на millis()
    ds.requestTemperatures(); // считываем температуру с датчиков
       T=ds.getTempC(sensor1); // присваиваем показания датчика температуры переменной Т
      }
    if(meny ==0){
    lcd.setCursor(11, 0);
    if(mint<10){lcd.print("0");}// всегда 2 цифры
    lcd.print( mint );
            if(s%2){     lcd.print(":");}
            else {lcd.print(" ");}
      if(h<10){lcd.print("0");}// всегда 2 цифры
    lcd.print(h);
    if (F==1){lcd.setCursor(0, 0);lcd.print( "F+ " );}
      else { lcd.setCursor(0, 0);lcd.print( "F- " );} // показываем наличии огня
    lcd.setCursor(3, 0); lcd.print( "Sp=" ); lcd.print( Sp );  // показываем подачу
    //lcd.print( " - " ); lcd.print( Po );lcd.print( "  " );
    lcd.setCursor(0, 1);lcd.print( "T=" );lcd.print( T,1 );   // выврдим температуру
    //lcd.print( "  - " ); lcd.print( Pa );lcd.print( "  " );
    }
    if(meny ==1){
    lcd.setCursor(0, 0); lcd.print( "INPUT TO T max " );
    lcd.setCursor(0,1);
    lcd.print("Tmax=" );lcd.print(Tmax);
    if(flag==true){Tmax++;delay(500); }   //автоповтор 500
    if(flag1==true){Tmax--;delay(500);}  ////автоповтор 500
    if (Tmax > 82  ){ tone(bip,500,1000); Tmax -- ; lcd.clear(); lcd.print( " T max EROR ! " );delay(500); }     //нельзя больше
    if (Tmax < Tmin+10 ){ Tmax++; tone(bip,500,1000);   lcd.clear(); lcd.print( " T max EROR ! " );delay(500);}  //нелзя меньше
    noTone;
    }
    if(meny ==2){
      lcd.setCursor(0,0);lcd.print("INPUT TO T min " );
    lcd.setCursor(0,1); lcd.print("Tmin=" );lcd.print(Tmin);
    if(flag==true){Tmin++;delay(500);}
    if(flag1==true){Tmin--;delay(500);}
    if (Tmin<20){Tmin++;tone(bip,500,1000);  lcd.clear(); lcd.print( " T min EROR ! " );delay(500);  }     // нельзя меньше 20
    if (Tmin>Tmax-10 ){Tmin--;tone(bip,500,1000); lcd.clear(); lcd.print( " T min EROR ! " );delay(500);  } // нельзя больше Tmax
    noTone;
    }
    if(meny ==3){
      lcd.setCursor(0,0);lcd.print("INPUT TO Pause " );
    lcd.setCursor(0,1); lcd.print("Pause=" );
    if(Pa_r<10){lcd.print("0");}// всегда 2 цифры
    lcd.print( Pa_r );
      if(flag==true){Pa_r++ ; delay(500);}
    if(flag1==true){Pa_r--; delay(500);}
    if (Pa_r<=2){ Pa_r++ ;tone(bip,500,1000);  lcd.clear(); lcd.print( " TO Pause EROR ! " );delay(500);  }     // нельзя меньше
    //if ( Pa_r != Pa_r ){lcd.clear();}
    noTone;
    }
    if(meny ==4){
      lcd.setCursor(0,0);lcd.print("INPUT TO Podah " );
    lcd.setCursor(0,1); lcd.print("Podah=" );
    //lcd.print(Po);
    if(Po_r<10){lcd.print("0");}// всегда 2 цифры
    lcd.print( Po_r );
       if(flag==true){Po_r++;delay(500);}
    if(flag1==true){Po_r--;delay(500);}
    if (Po_r<1){ Po_r ++ ;tone(bip,500,1000);  lcd.clear(); lcd.print( " TO Podah EROR ! " );delay(500);  }     // нельзя меньше
    noTone;
    }
    if(meny == 5){
    lcd.setCursor(0,0); lcd.print("INPUT TO D" );
    lcd.setCursor(0,1); lcd.print("D=" );lcd.print(d);
    if(flag==true){d++;delay(500);}
    if(flag1==true){d--;delay(500);}
    if (d<=3){ d++ ;tone(bip,500,1000);  lcd.clear(); lcd.print( " TO D EROR ! " );delay(500);  }     // нельзя меньше
    noTone;
    }
    if(meny == 7){
    lcd.clear();
    if ( T<=-2 ) {lcd.setCursor(0,0); lcd.print("ALARM! T < !" );}  
       if( T>=-2 ) { lcd.setCursor(0,0); lcd.print("ALARM! PEREGREV!" ); }
    lcd.setCursor(0,1); lcd.print( "T=" ); lcd.print(T,1 );
    //lcd.print( " Sp=" );lcd.print( Po );
             P=1;    // стоп подача топлива
    if (T>Tmax+10){ tone(bip,1300,1000); tone(bip,1700,1001);  }//серена
    mint_r = mint; h_r = h; deu_r = deu;    // сохраняем время аварии
    lcd.setCursor(8,1); lcd.print( mint_r  );lcd.print( ";" );lcd.print( h_r  );lcd.print( ";" );lcd.print( deu_r );   // время аварии
    //mint   h  deu
    //if ( T <= -5 ){  meny =7; P=1 ; Sp=0;   }
    noTone;
    }
    Po=Po_r;  //возвращаем значение Ро (подачи)
    Pa=Pa_r;  //возвращаем значение Ра (паузы)
    if (T < Tmin ){  Sp=3;Pa-=d; }       // скорость подачи - если холоднее то подача = *3
    if ((Tmax > T) && (Tmin < T ) ) {  Sp=2;  } // расчёт подача при норме
    if (T > Tmax  ){  Sp=1;Pa+=d; }       // скорость подачи - если теплее то подача = 1
    if (T > Tmax + 5 ){  P = 1 ; Sp=0; }       // скорость подачи - если теплее Tmax + 5 то подача СТОП!
    if (T> Tmax + 10){ meny =7; P=1 ; Sp=0;  }    // ПЕРЕГРЕВ! аварийное МЕНЮ-7, подача СТОП! + СИРЕНА !
    //if ( T <= -5 ){  meny =7; P=1 ; Sp=0;   }    // холод! аварийное меню 7 " холод"

    }//END
     
     
    Airbus нравится это.
  11. mednagolov

    mednagolov Гик

    А насчёт бесперебойника - была здравая идея.... всё работает.
    2021-10-20 17.28.09.jpg
     
  12. mednagolov

    mednagolov Гик

    Вывел на корпус бесперебойника АРС розетку для БП контролера, Вывел на клемник 12в провода, 12в комутирует автомобильная релюшка которая удобно разместилась в батарейном отсеке АРС,
    Уже два часа играюсь с режимами, температурой, устраиваю режим "конец света" - всё работает нормально, регулирует подачу в зависимости от температуры, сбоев нет.
     
  13. mednagolov

    mednagolov Гик

  14. mednagolov

    mednagolov Гик

    Оставил всё работать до утра, если всё хорошо то перейдём уже к испытаниям на котле...
     
  15. parovoZZ

    parovoZZ Гуру

    удачного полёта!
     
  16. mednagolov

    mednagolov Гик

    Спасибо....)))