контроллер для горелки

andrixxx
Offline
Зарегистрирован: 15.12.2015

Здравствуйте, сделал горелку на отработке, решил прилепить автоматизацию, нашел инфу про ардуино купил мегу, два датчика ds18b20, ик датчик пламени и блок на 4 реле, полистав инет, решил попробовать написать прогу, с этим дело имею впервые... написал скетч, но ничего не работает, при включении питания все лампы на реле загораются и ни на датчик пламени, ни на нагрев датчиков темп не реагирует... может толкнете в нужное русло, что упустил, где почитать...

вот т.н. "скетч"

 
#include <OneWire.h>
 
#include <DallasTemperature.h>
//DS18b20
#define ONE_WIRE_BUS  10  // датчики температуры на 10 пине
 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = {0x28, 0xFF, 0xE0, 0x9F, 0x83, 0x15, 0x02, 0xC0}; // адреса датчиков
DeviceAddress sensor2 = {0x28, 0xFF, 0x46, 0x9D, 0x83, 0x15, 0x02, 0x68};
 
// Температура
float temp1 = 0; // текущая температура первого датчика
float temp2 = 0; // второй датчик
 
//
 
// настраиваем выводы
#define RELAY_PIN1    22  // выходы на реле
#define RELAY_PIN2    23
#define RELAY_PIN3    24
#define RELAY_PIN4    25
#define IR_PIN        26   // вход датчика ИК пламени
 
 
 
 
 
 
void setup()
{
 
  
  sensors.begin();
   sensors.setResolution(sensor1, 10);
  sensors.setResolution(sensor2, 10);
  pinMode(IR_PIN, INPUT);                       // пин ик датчика выход
  pinMode(RELAY_PIN1, OUTPUT);                   // пины реле выходы 
  pinMode(RELAY_PIN2, OUTPUT);
  pinMode(RELAY_PIN3, OUTPUT);
  pinMode(RELAY_PIN4, OUTPUT);
 
  
}
 
void loop()
{
   
 
 
 
  sensors.requestTemperatures();
  // Температура
  
 temp1 = sensors.getTempC(sensor1); // получаем температуру
  
 
  temp2 = sensors.getTempC(sensor2);
  
  
  digitalRead (IR_PIN);      // проверка пламени
  delay (1000);
 
  
  if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 0) {
   digitalWrite(RELAY_PIN1, HIGH);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
  } else   if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 1){
  digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, HIGH);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
   }else   if (temp1 >= 34 && temp2 > 34 && IR_PIN == 0){
    digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, HIGH);
  digitalWrite(RELAY_PIN4, LOW);
   } else    if (temp1 >= 34 && temp2 > 34 && IR_PIN == 1){
    digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, HIGH);
   }
   else 
   { digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
   }
}
andrixxx
Offline
Зарегистрирован: 15.12.2015

#include <OneWire.h>

#include <DallasTemperature.h>
//DS18b20
#define ONE_WIRE_BUS  10  // датчики температуры на 10 пине

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = {0x28, 0xFF, 0xE0, 0x9F, 0x83, 0x15, 0x02, 0xC0}; // адреса датчиков
DeviceAddress sensor2 = {0x28, 0xFF, 0x46, 0x9D, 0x83, 0x15, 0x02, 0x68};

// Температура
float temp1 = 0; // текущая температура первого датчика
float temp2 = 0; // второй датчик

//
int oilMin  = 30;     // температура масла, для включения
int waterMax = 31 ;   // t теплоносителя максимальная

// настраиваем выводы
#define RELAY_PIN1    22  // выходы на реле
#define RELAY_PIN2    23
#define RELAY_PIN3    24
#define RELAY_PIN4    25
#define IR_PIN        26   // вход датчика ИК пламени

// создаем переменные
bool relayStat1 = 0; //переменные состояния реле
bool relayStat2 = 0;
bool relayStat3 = 0;
bool relayStat4 = 0;
bool flame = 0;       // переменная состояния пламени 




void setup()
{

  
  sensors.begin();
   sensors.setResolution(sensor1, 10);
  sensors.setResolution(sensor2, 10);
  pinMode(IR_PIN, INPUT);                       // пин ик датчика выход
  pinMode(RELAY_PIN1, OUTPUT);                   // пины реле выходы 
  pinMode(RELAY_PIN2, OUTPUT);
  pinMode(RELAY_PIN3, OUTPUT);
  pinMode(RELAY_PIN4, OUTPUT);
 
  
}

void loop()
{
   
 


  sensors.requestTemperatures();
  // Температура
  
 temp1 = sensors.getTempC(sensor1); // получаем температуру
  

  temp2 = sensors.getTempC(sensor2);
  
  
  digitalRead (IR_PIN);      // проверка пламени
  delay (1000);

  
  if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 0) {
   digitalWrite(RELAY_PIN1, HIGH);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
  } else   if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 1){
  digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, HIGH);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
   }else   if (temp1 >= 34 && temp2 > 34 && IR_PIN == 0){
    digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, HIGH);
  digitalWrite(RELAY_PIN4, LOW);
   } else    if (temp1 >= 34 && temp2 > 34 && IR_PIN == 1){
    digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, HIGH);
   }
   else 
   { digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
   }
}

заранее благодарен за помощь

uragan
Offline
Зарегистрирован: 23.02.2015

Начните с простеньких задач и поэтапно: включить диод, реле, замер пламени. Весь скетч из 5 операторов.

andrixxx
Offline
Зарегистрирован: 15.12.2015

замер пламени делал, там совсем просто, зажигалку зажигал, реле включалось, а вот с температурой засада

#define SENS 26  // пин для сенсора
#define RELAYA 22
#define RELAYB 23
#define RELAYC 24
#define RELAYD 25
bool flame = 0;

void setup () {
  
  pinMode (SENS, INPUT); //сенсор вход
  pinMode (RELAYA, OUTPUT); // Реле выход
   pinMode (RELAYB, OUTPUT);
    pinMode (RELAYC, OUTPUT);
     pinMode (RELAYD, OUTPUT);
}
     
     void loop (){
      flame = digitalRead (SENS);
       if (flame == 1){
         digitalWrite (RELAYB, 1); flame = 1;
       } else {
         digitalWrite (RELAYB, 0);
     } 
     }

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

По поводу "замера" пламени:

1. Смотрим что пламени нет
2. Поджигаем
3. Смотрим что пламя есть через время зажигания
4. Если пропало- отключаем подачу топлива
 

andrixxx
Offline
Зарегистрирован: 15.12.2015

в принципе что-то подобное и хотел изобразить

if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 0) {
73
   digitalWrite(RELAY_PIN1, HIGH);
74
  digitalWrite(RELAY_PIN2, LOW);
75
  digitalWrite(RELAY_PIN3, LOW);
76
  digitalWrite(RELAY_PIN4, LOW);
77
  } else   if (temp1 >= 34 && temp2 <= 34 && IR_PIN == 1){
78
  digitalWrite(RELAY_PIN1, LOW);
79
  digitalWrite(RELAY_PIN2, HIGH);
80
  digitalWrite(RELAY_PIN3, LOW);
81
  digitalWrite(RELAY_PIN4, LOW);

 

andrixxx
Offline
Зарегистрирован: 15.12.2015

а в моем скетче вообще все неправильно? мож ткнете в чем ошибка и что прочесть по этой теме.. так то я впервые столкнулся с программированием.. стало интересно свои силы испытать..

bwn
Offline
Зарегистрирован: 25.08.2014

Попробуйте 34.0
А при отладке используйте Serial.println(***), для вывода контрольных значений из нужных мест программы. Будете понимать, попадаете куда хотелось или нет + плюс информация к размышлению, "почему".

andrixxx
Offline
Зарегистрирован: 15.12.2015

вставил Serial.println(***), температура отображается с обоих датчиков... Вот еще в чем дело, в одном условии включения реле заменял && на  & по идее должно было сработать от ИК датчика, тк одно из условий выполняется, но этого не произошло... Чую какая то заковырка есть, а не понимаю где...

andrixxx
Offline
Зарегистрирован: 15.12.2015

заработало... ввел bool flame = digital read IR_PIN.. и понял где я тупанул, надо в скобках условие было писать не IR_PIN==0, а digital read IR_PIN==0

 

но это только начало, надо усложнять код под реальные условия, надеюсь с вашей помощью разобраться

bwn
Offline
Зарегистрирован: 25.08.2014

digital read IR_PIN==0 , прямо так и написали или все таки digitalRead ( IR_PIN ) == 0 ? Старайтесь даже в сообщениях сохранять синтаксис, автоматизм вырабатывает.

andrixxx
Offline
Зарегистрирован: 15.12.2015

со скобками

AvtoRemGarage
Offline
Зарегистрирован: 26.02.2016

Как успехи со скетчем?

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

Сейчас взял пару контроллеров и датчики с релюшками. Осваиваю программирование, очень интересен Ваш проект, буду следить.

David74
Offline
Зарегистрирован: 13.04.2016

здравствуйте! подскажите пожалуйсто есть ли уроки по программированию ардуино? совсем нет времени после работы(( а очень нужен скетч на горелку с монитором и энкодером и реле! для чайников как я)))

 

free_men
Offline
Зарегистрирован: 13.09.2016

да тема к сожедению стухла....... сам сейчас этой темой интересуюсь...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Free_men. начни с создания алгоритма и схемы.

vvadim
Offline
Зарегистрирован: 23.05.2012

есть незаконченный проект (заказчик слился и не заплатил )))))

если интересно можно поковыряться и завершить

7808543@gmail.com

free_men
Offline
Зарегистрирован: 13.09.2016

написал...

free_men
Offline
Зарегистрирован: 13.09.2016

есть следущие компоненты  :

датчик пламени - Wavelength 760nm-1100nm LM393 IR 

5 обычных кнопок

2(3) ds18b20

дисплей  IIC/I2C 2004 blue screen LCD 

само паенные платы управления нагрузкой на базе :

  1. оптопара MOC3063 — 38 руб. х2 шт.
  2. симистор BT138-600 

цена всего 1200р.. а вот с програмным кодом косяк...

ЭТА ТЕМА ЕЩЁ ИНТЕРЕСНА ?

 

 

free_men
Offline
Зарегистрирован: 13.09.2016

Спасибо за ответ! а как фото схемы вставить ? в течении недели выложу алгоритм!!! если успею... пытаюсь дом под крышу поставить до холодов... пока работает все в ручном режиме когда я там... когда нет ставою капельницу т.к собраная схема на реле и простеше автоматики сбоит(

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Конечно интересна. 

Serg1975
Offline
Зарегистрирован: 29.09.2016

Добрый день собрал горелку на форсунке делаван с блоком управления ардуино уно 3 нужна помощь!

maxvalin
Offline
Зарегистрирован: 22.02.2016

У меня тоже есть недобитый код для масляного котла, сейчас с воздушной помпой занимаюсь (безщеточный 12v/ двиг идет с китая)

на данный момент запоминает и выводит на экран 1602 положение масляной заслонки (вентиль к которому прикручен шаговик)

управляет воздушной турбиной pwm 0-255 (на безщеточный двиг)

сигналка если температура в котле выше  ...

два датчика температуры (на выходе котла и улица)

в плане

управление водяным насосом в доме: Включает если температура вкотле выше 28

выключает когда потух котел (20гр)

включает импульсно если на улице ниже ноля и в котле ниже 20 (3 мин. крутим 20 минут стоит ) чтоб неразморозить ночью котел когда закончится топить но и чтоб не мутузил холодную воду в дом.

передача данных температур, положения вентиля и турбины на андроид и обратное управление заслонкой и турбиной.

тоисть ручник, никакого управления по температуре! (как показала практика) только привода подачи масла и воздуха.

млть....можно сказать начал с него осваивать арду)))

free_men
Offline
Зарегистрирован: 13.09.2016

http://radikal.ru][img]http://s018.radikal.ru/i519/1610/f0/fa40d1c05dd5.jpgсобрал макет.... но случилась печаль +5 на gnd... печаль даже не в том а что я вставил 2 контроллер... отошол.. пришол.... и...... короче нет у меня больше контроллера.... заказал новый.... http://s018.radikal.ru/i519/1610/f0/fa40d1c05dd5.jpg

free_men
Offline
Зарегистрирован: 13.09.2016

к стате может кто подскажет что сгореть могло...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Контролер сгорел. Ну кто сырую непровереную программу включает и уходит. Программист наверно удаленно писал, значит некие нюансы не сказал или упустил. Так что сначало макетно программу надо проверять.

free_men
Offline
Зарегистрирован: 13.09.2016

Да нет сам накосячил…. Т.к в программировании полный ноль… а денег нет…..то  решил программу написать в flprog.. далее взял за пример программы с сайта.. там везде были кнопки подключены к цифровым входам….  Но не получалось не как записать значение в память… дальнейшие поиски привели вот к этой теме …   http://flprog.ru/publ/stati/userprojects/kontrol_temperatury_v_servernykh_shkafakh_i_upravlenie_rabotoj_ventiljatorov_so_starogo_sajta/1-1-0-66?la9Pi6 …. там более просто написано программный код и его изменить оказалось проще под мои цели… но при попытки подключения аналоговой кнопки провод GND  упал на +5…. Контроллер вырубился…. По матерившись вспомнил что есть запасной…. Поставил его.. залил прошивку…  порадовался…. Пошол чай пить…. Пришол и О****БОГИ….  Провода то я не отключил от +5.. ну и по закону везения провод упал ровненько лег опять на гнд…… так что я спалил за час 2 платы нано……. 

free_men
Offline
Зарегистрирован: 13.09.2016

пока жду новые платы займусь алгоритмом и корпусом... а у кого какие успехи ?

James
Offline
Зарегистрирован: 26.02.2016

там есть диод защитный, попробуйте перепаять

AvtoRemGarage
Offline
Зарегистрирован: 26.02.2016

У меня практически закончен проект, горелка Бабингтон + контроллер на Ардуино. Всё работает уже с прошлой зимы, дорабатываю помаленьку.

Плата Ардуино УНО китай.

4 реле - подогрев масла, маслонасос, подача воздуха, искровое зажигание.

Датчик пламени.

Два температурных датчика Даллас - один на температуру масла, второй на температуру помещения.

Реостат 10кОм, для выбора переменной температуры помещения, от 0 до 30 градусов.

ЖК дисплей 20*4. Отображает текущюю температуру масла и помещения,  значение желаемой температуры в помещении, сосотояние 4-х реле, и если произошла то ошибку поджига.

Алгоритм, включается маслонасос \ через паузу включатся подогрев масла если требуется\  через паузу включается воздух и искра\ если произошол поджиг, то отключаем искру\ если поджиг не произошол за 40 секунд, то отключаем всё и пишем на экране об ошибке поджига. Все процессы зависимы от температур.

Скетч позже выложу, нету сейчас под рукой.

 

free_men
Offline
Зарегистрирован: 13.09.2016

да на обоих платах сгорели диоды... СПаСБО!!! замкнул и все ок ) надо искать новые теперь...

James
Offline
Зарегистрирован: 26.02.2016

лучше впаяйте туда новые, можете спалить порт

free_men
Offline
Зарегистрирован: 13.09.2016

не могу найти откуда выпаять ((( на материнке старой нету.. а вблоке петания есть такие ?

James
Offline
Зарегистрирован: 26.02.2016

можно и обычные, только падение напряжения будет больше, и вместо 5в будет  4,6-4,7

free_men
Offline
Зарегистрирован: 13.09.2016

ну я думаю это не особо кретичное подение...  нашел на  материнской плате старой... но там только буква s стоит .. не т цифр.... вечером попробую..

David74
Offline
Зарегистрирован: 13.04.2016

Здравствуйте! пытался я научиться в среде скетч писать но не получилось(( вернее нет времени пока! если не трудно скинте скетч?)) я скачивал много скетчей но ни один не работает) у меня ардуино уно и мега и нано есть) 4 РЕЛЛЕ энкодер и.т.д 

free_men
Offline
Зарегистрирован: 13.09.2016

посмотри в сторону программы flprog... это визуальная среда... а у тебя форсунка или шар ?

free_men
Offline
Зарегистрирован: 13.09.2016
#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
byte _d18x2x1Addr[8]={0x28, 0xFF, 0xC9, 0x13, 0x4D, 0x4, 0x0, 0x33};

LiquidCrystal_I2C _lcd1(0x27, 20, 4);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

byte _d18x2x2Addr[8]={0x28, 0xFF, 0x23, 0x2F, 0x4C, 0x4, 0x0, 0xA5};

struct UB_94000232
{
bool ubo_231651231 = 0;
int ubo_247529162 = 0;
bool _FreeLog1_Q1 = 0;
int _swi1 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
int _swi2 = 0;
int _swi3 = 0;
};
UB_94000232 UB_94000232_Instance5;
UB_94000232 UB_94000232_Instance6;
UB_94000232 UB_94000232_Instance7;
UB_94000232 UB_94000232_Instance8;
UB_94000232 UB_94000232_Instance9;
UB_94000232 UB_94000232_Instance2;
UB_94000232 UB_94000232_Instance1;
UB_94000232 UB_94000232_Instance3;
int UB_94000232_ubi_230256467 = 0;
bool UB_94000232_ubi_208697949 = 0;
bool UB_94000232_ubi_43699656 = 0;
bool UB_94000232_ubi_223774358 = 0;
int UB_94000232_ubi_30210132 = 0;
int UB_94000232_ubi_22283946 = 0;
int UB_94000232_ubi_53228606 = 0;
OneWire  _ow10(10);
int _gtv1 = 80;
bool _gtv2 = 0;
bool _gtv3 = 0;
bool _gtv4 = 0;
bool _gtv5 = 0;
int _gtv6;
bool _gtv7 = 0;
int _gtv8;
bool _gtv9 = 0;
int _gtv10 = 110;
int _gtv11 = 80;
int _gtv12 = 90;
int _gtv13 = 50;
int _gtv14 = 30;
int _gtv15 = 30;
int _gtv16 = 5;
int _gtv17 = 3;
int _gtv18 = 10;
int _disp4oldLength = 0;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
int _disp1oldLength = 0;
bool _SEEPR9OSN = 0;
int _disp5oldLength = 0;
int _disp6oldLength = 0;
bool _SEEPR5OSN = 0;
int _disp3oldLength = 0;
int _disp17oldLength = 0;
int _disp12oldLength = 0;
int _disp10oldLength = 0;
int _disp2oldLength = 0;
bool _bounseInputD7S = 0;
bool _bounseInputD7O = 0;
unsigned long _bounseInputD7P = 0UL;
int _disp18oldLength = 0;
int _disp16oldLength = 0;
bool _trgr1 = 0;
bool _trgs1 = 0;
bool _SEEPR3OSN = 0;
bool _bounseInputD8S = 0;
bool _bounseInputD8O = 0;
unsigned long _bounseInputD8P = 0UL;
bool _SEEPR1OSN = 0;
int _disp15oldLength = 0;
bool _count1I = 0;
int _count1P = 0;
bool _trgr2 = 0;
int _disp14oldLength = 0;
bool _bounseInputD9S = 0;
bool _bounseInputD9O = 0;
unsigned long _bounseInputD9P = 0UL;
bool _SEEPR7OSN = 0;
int _disp9oldLength = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _SEEPR8OSN = 0;
bool _SEEPR6OSN = 0;
int _disp7oldLength = 0;
bool _SEEPR2OSN = 0;
unsigned long _d18x2x2Tti = 0UL;
float _d18x2x2O = 0.00;
int _disp11oldLength = 0;
int _disp13oldLength = 0;
void setup()
{
Wire.begin();
pinMode(9, INPUT);
digitalWrite(9, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
pinMode(4, OUTPUT);

_lcd1.init();
_lcd1.backlight();
_bounseInputD9O =  digitalRead(9);
_bounseInputD8O =  digitalRead(8);
_bounseInputD7O =  digitalRead(7);
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}

bool  _bounceInputTmpD8 =  (digitalRead (8));

if (_bounseInputD8S) 
    {
     if (millis() >= (_bounseInputD8P + 40)) 
         {_bounseInputD8O= _bounceInputTmpD8; _bounseInputD8S=0;}
     }
else
    {
     if (_bounceInputTmpD8 != _bounseInputD8O )
         {_bounseInputD8S=1; _bounseInputD8P = millis();} 
      } 
bool  _bounceInputTmpD9 =  (digitalRead (9));

if (_bounseInputD9S) 
    {
     if (millis() >= (_bounseInputD9P + 40)) 
         {_bounseInputD9O= _bounceInputTmpD9; _bounseInputD9S=0;}
     }
else
    {
     if (_bounceInputTmpD9 != _bounseInputD9O )
         {_bounseInputD9S=1; _bounseInputD9P = millis();} 
      } 
bool  _bounceInputTmpD7 =  (digitalRead (7));

if (_bounseInputD7S) 
    {
     if (millis() >= (_bounseInputD7P + 40)) 
         {_bounseInputD7O= _bounceInputTmpD7; _bounseInputD7S=0;}
     }
else
    {
     if (_bounceInputTmpD7 != _bounseInputD7O )
         {_bounseInputD7S=1; _bounseInputD7P = millis();} 
      } 



if(_isTimer(_d18x2x1Tti, 1000)) {
_d18x2x1Tti = millis(); 
_d18x2x1O=  _readDS18_ow10(_d18x2x1Addr, 0);}
if(_isTimer(_d18x2x2Tti, 1000)) {
_d18x2x2Tti = millis(); 
_d18x2x2O=  _readDS18_ow10(_d18x2x2Addr, 0);}
_gtv6 = (_d18x2x1O);
_gtv1 = (_d18x2x2O);
_gtv2 = !(_bounseInputD9O);
_gtv3 = !(_bounseInputD7O);
_gtv5 = ( (analogRead (0))) < (700);
_gtv4 = !(_bounseInputD8O);
if(_gtv4) _trgs1 = 1;
if(_gtv9) _trgs1 = 0;
if (( (_trgs1) ^ (( (_gtv2) || (_gtv3) || (_gtv4) )) ))
{ if (_tim1I) { if (_isTimer(_tim1P, 5000)) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;}

if (_gtv4) 
   { 
   if (! _count1I)  
      {
       _count1P = _count1P+1;
       _count1I = 1;
      }
   }
else
   {
   _count1I=0;
   }
if (( (_gtv7) || (_gtv9) )) _count1P = 0;
_gtv9 = _tim1O;
_gtv8 = _count1P;
_gtv7 =  _count1P  >=  10;
UB_94000232_ubi_230256467 = _gtv10;
UB_94000232_ubi_208697949 = (_gtv8) == (1);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 80;
UB_94000232_ubi_22283946 = 120;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance5 = _func_UB_94000232(UB_94000232_Instance5, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance5.ubo_231651231){ if(!_SEEPR5OSN){ EEPROMWriteInt(0, UB_94000232_Instance5.ubo_247529162); _SEEPR5OSN=1;} }else{ if(_SEEPR5OSN){_SEEPR5OSN=0;}}
_gtv10 = (EEPROMReadInt(0));
UB_94000232_ubi_230256467 = _gtv11;
UB_94000232_ubi_208697949 = (_gtv8) == (2);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 50;
UB_94000232_ubi_22283946 = 120;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance6 = _func_UB_94000232(UB_94000232_Instance6, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance6.ubo_231651231){ if(!_SEEPR6OSN){ EEPROMWriteInt(2, UB_94000232_Instance6.ubo_247529162); _SEEPR6OSN=1;} }else{ if(_SEEPR6OSN){_SEEPR6OSN=0;}}
_gtv11 = (EEPROMReadInt(2));
UB_94000232_ubi_230256467 = _gtv12;
UB_94000232_ubi_208697949 = (_gtv8) == (3);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 50;
UB_94000232_ubi_22283946 = 92;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance7 = _func_UB_94000232(UB_94000232_Instance7, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance7.ubo_231651231){ if(!_SEEPR7OSN){ EEPROMWriteInt(4, UB_94000232_Instance7.ubo_247529162); _SEEPR7OSN=1;} }else{ if(_SEEPR7OSN){_SEEPR7OSN=0;}}
_gtv12 = (EEPROMReadInt(4));
UB_94000232_ubi_230256467 = _gtv13;
UB_94000232_ubi_208697949 = (_gtv8) == (4);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 50;
UB_94000232_ubi_22283946 = 90;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance8 = _func_UB_94000232(UB_94000232_Instance8, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance8.ubo_231651231){ if(!_SEEPR8OSN){ EEPROMWriteInt(6, UB_94000232_Instance8.ubo_247529162); _SEEPR8OSN=1;} }else{ if(_SEEPR8OSN){_SEEPR8OSN=0;}}
_gtv13 = (EEPROMReadInt(6));
UB_94000232_ubi_230256467 = _gtv14;
UB_94000232_ubi_208697949 = (_gtv8) == (5);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 0;
UB_94000232_ubi_22283946 = 360;
UB_94000232_ubi_53228606 = 5;
UB_94000232_Instance9 = _func_UB_94000232(UB_94000232_Instance9, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance9.ubo_231651231){ if(!_SEEPR9OSN){ EEPROMWriteInt(8, UB_94000232_Instance9.ubo_247529162); _SEEPR9OSN=1;} }else{ if(_SEEPR9OSN){_SEEPR9OSN=0;}}
_gtv14 = (EEPROMReadInt(8));
UB_94000232_ubi_230256467 = _gtv15;
UB_94000232_ubi_208697949 = (_gtv8) == (6);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 0;
UB_94000232_ubi_22283946 = 360;
UB_94000232_ubi_53228606 = 5;
UB_94000232_Instance2 = _func_UB_94000232(UB_94000232_Instance2, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance2.ubo_231651231){ if(!_SEEPR2OSN){ EEPROMWriteInt(10, UB_94000232_Instance2.ubo_247529162); _SEEPR2OSN=1;} }else{ if(_SEEPR2OSN){_SEEPR2OSN=0;}}
_gtv15 = (EEPROMReadInt(10));
UB_94000232_ubi_230256467 = _gtv16;
UB_94000232_ubi_208697949 = (_gtv8) == (7);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 0;
UB_94000232_ubi_22283946 = 30;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance1 = _func_UB_94000232(UB_94000232_Instance1, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance1.ubo_231651231){ if(!_SEEPR1OSN){ EEPROMWriteInt(12, UB_94000232_Instance1.ubo_247529162); _SEEPR1OSN=1;} }else{ if(_SEEPR1OSN){_SEEPR1OSN=0;}}
_gtv16 = (EEPROMReadInt(12));
UB_94000232_ubi_230256467 = _gtv17;
UB_94000232_ubi_208697949 = (_gtv8) == (8);
UB_94000232_ubi_43699656 = _gtv2;
UB_94000232_ubi_223774358 = _gtv3;
UB_94000232_ubi_30210132 = 0;
UB_94000232_ubi_22283946 = 9;
UB_94000232_ubi_53228606 = 1;
UB_94000232_Instance3 = _func_UB_94000232(UB_94000232_Instance3, UB_94000232_ubi_230256467, UB_94000232_ubi_208697949, UB_94000232_ubi_43699656, UB_94000232_ubi_223774358, UB_94000232_ubi_30210132, UB_94000232_ubi_22283946, UB_94000232_ubi_53228606);
if(UB_94000232_Instance3.ubo_231651231){ if(!_SEEPR3OSN){ EEPROMWriteInt(14, UB_94000232_Instance3.ubo_247529162); _SEEPR3OSN=1;} }else{ if(_SEEPR3OSN){_SEEPR3OSN=0;}}
_gtv17 = (EEPROMReadInt(14));
if ((_gtv8) == (0)) {
_dispTempLength1 = ((((String("t.m")) + ((String(_gtv6, DEC))) + (String("c ")) + (String("t.k")) + ((String(_gtv1, DEC))) + (String("c"))))).length();
if (_disp9oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp9oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print((((String("t.m")) + ((String(_gtv6, DEC))) + (String("c ")) + (String("t.k")) + ((String(_gtv1, DEC))) + (String("c")))));
} else {
if (_disp9oldLength > 0) {_isNeedClearDisp1 = 1; _disp9oldLength = 0;} 
}
if ((_gtv8) == (1)) {
_dispTempLength1 = (String("max.t.masla")).length();
if (_disp10oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp10oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("max.t.masla"));
} else {
if (_disp10oldLength > 0) {_isNeedClearDisp1 = 1; _disp10oldLength = 0;} 
}
if ((_gtv8) == (1)) {
_dispTempLength1 = (((((String(_gtv10, DEC))) + (String(" t."))))).length();
if (_disp11oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp11oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv10, DEC))) + (String(" t.")))));
} else {
if (_disp11oldLength > 0) {_isNeedClearDisp1 = 1; _disp11oldLength = 0;} 
}
if ((_gtv8) == (2)) {
_dispTempLength1 = (String("min. t. masla")).length();
if (_disp12oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp12oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("min. t. masla"));
} else {
if (_disp12oldLength > 0) {_isNeedClearDisp1 = 1; _disp12oldLength = 0;} 
}
if ((_gtv8) == (2)) {
_dispTempLength1 = (((((String(_gtv11, DEC))) + (String(" t."))))).length();
if (_disp13oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp13oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv11, DEC))) + (String(" t.")))));
} else {
if (_disp13oldLength > 0) {_isNeedClearDisp1 = 1; _disp13oldLength = 0;} 
}
if ((_gtv8) == (3)) {
_dispTempLength1 = (String("max. t.kotla")).length();
if (_disp14oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp14oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("max. t.kotla"));
} else {
if (_disp14oldLength > 0) {_isNeedClearDisp1 = 1; _disp14oldLength = 0;} 
}
if ((_gtv8) == (3)) {
_dispTempLength1 = (((((String(_gtv12, DEC))) + (String(" t."))))).length();
if (_disp15oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp15oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv12, DEC))) + (String(" t.")))));
} else {
if (_disp15oldLength > 0) {_isNeedClearDisp1 = 1; _disp15oldLength = 0;} 
}
if ((_gtv8) == (4)) {
_dispTempLength1 = (String("min. t.kotla")).length();
if (_disp16oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp16oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("min. t.kotla"));
} else {
if (_disp16oldLength > 0) {_isNeedClearDisp1 = 1; _disp16oldLength = 0;} 
}
if ((_gtv8) == (4)) {
_dispTempLength1 = (((((String(_gtv13, DEC))) + (String(" t."))))).length();
if (_disp17oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp17oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv13, DEC))) + (String(" t.")))));
} else {
if (_disp17oldLength > 0) {_isNeedClearDisp1 = 1; _disp17oldLength = 0;} 
}
if ((_gtv8) == (5)) {
_dispTempLength1 = (String("start produvki")).length();
if (_disp18oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp18oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("start produvki"));
} else {
if (_disp18oldLength > 0) {_isNeedClearDisp1 = 1; _disp18oldLength = 0;} 
}
if ((_gtv8) == (5)) {
_dispTempLength1 = (((((String(_gtv14, DEC))) + (String(" sek."))))).length();
if (_disp4oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp4oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv14, DEC))) + (String(" sek.")))));
} else {
if (_disp4oldLength > 0) {_isNeedClearDisp1 = 1; _disp4oldLength = 0;} 
}
if ((_gtv8) == (6)) {
_dispTempLength1 = (String("stop produvki")).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("stop produvki"));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;} 
}
if ((_gtv8) == (6)) {
_dispTempLength1 = (((((String(_gtv15, DEC))) + (String(" sek."))))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv15, DEC))) + (String(" sek.")))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}
if ((_gtv8) == (7)) {
_dispTempLength1 = (String("vrem9 podhiga")).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("vrem9 podhiga"));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;} 
}
if ((_gtv8) == (7)) {
_dispTempLength1 = (((((String(_gtv16, DEC))) + (String(" sek."))))).length();
if (_disp5oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp5oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv16, DEC))) + (String(" sek.")))));
} else {
if (_disp5oldLength > 0) {_isNeedClearDisp1 = 1; _disp5oldLength = 0;} 
}
if ((_gtv8) == (8)) {
_dispTempLength1 = (String("kol. popitok")).length();
if (_disp6oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp6oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 0);
_lcd1.print(String("kol. popitok"));
} else {
if (_disp6oldLength > 0) {_isNeedClearDisp1 = 1; _disp6oldLength = 0;} 
}
if ((_gtv8) == (8)) {
_dispTempLength1 = (((((String(_gtv17, DEC))) + (String("."))))).length();
if (_disp7oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp7oldLength = _dispTempLength1;
_lcd1.setCursor(int((20 - _dispTempLength1)/2), 1);
_lcd1.print(((((String(_gtv17, DEC))) + (String(".")))));
} else {
if (_disp7oldLength > 0) {_isNeedClearDisp1 = 1; _disp7oldLength = 0;} 
}
if(((_gtv6)*(_gtv18)) < (((EEPROMReadInt(4)))*(_gtv18))) _trgr1 = 0;
if(((_gtv6)*(_gtv18)) > (((EEPROMReadInt(2)))*(_gtv18))) _trgr1 = 1;
if(((_gtv1)*(_gtv18)) < (((EEPROMReadInt(4)))*(_gtv18))) _trgr2 = 0;
if(((_gtv1)*(_gtv18)) > (((EEPROMReadInt(6)))*(_gtv18))) _trgr2 = 1;
digitalWrite(4, !(_trgr1));




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
float _convertDS18x2xData(byte type_s, byte data[12])
{
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) 
  {
  raw = raw << 3; 
  if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
  }
else 
  {
   byte cfg = (data[4] & 0x60);
   if (cfg == 0x00) raw = raw & ~7;   else if (cfg == 0x20) raw = raw & ~3;  else if (cfg == 0x40) raw = raw & ~1;
  }
return  (float)raw / 16.0;
}
float _readDS18_ow10(byte addr[8], byte type_s)
{  byte data[12];
byte i;
_ow10.reset();
_ow10.select(addr);
_ow10.write(0xBE);
for ( i = 0; i < 9; i++) {
 data[i] = _ow10.read();}
_ow10.reset();
_ow10.select(addr);
_ow10.write(0x44, 1);
return _convertDS18x2xData(type_s, data);}int EEPROMReadInt(int p_address)
        {
        byte lowByte = EEPROM.read(p_address);
        byte highByte = EEPROM.read(p_address + 1);

        return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
        }
void EEPROMWriteInt(int p_address, int p_value)
       {
        byte lowByte = ((p_value >> 0) & 0xFF);
        byte highByte = ((p_value >> 8) & 0xFF);

        EEPROM.write(p_address, lowByte);
        EEPROM.write(p_address + 1, highByte);
        }
bool _checkFreeLogicBlockOutput(bool inArray[], int inArraySize, bool stArray[], int stArraySize)
{ int inIndex = 0;
  bool result = 1;
  for (int i = 0; i < stArraySize; i = i + 1)
  {
   if (!(inArray[inIndex] == stArray[i])) { result = 0;}
   inIndex ++;
   if (inIndex == inArraySize)
     {
     if (result) { return 1;} else {result = 1;}
     inIndex = 0;
     }
  }
  return 0;
}
struct UB_94000232 _func_UB_94000232(struct UB_94000232 _ubInstans, int ubi_230256467, bool ubi_208697949, bool ubi_43699656, bool ubi_223774358, int ubi_30210132, int ubi_22283946, int ubi_53228606)
{
bool ubo_231651231 = _ubInstans.ubo_231651231;
int ubo_247529162 = _ubInstans.ubo_247529162;
bool _FreeLog1_Q1 = _ubInstans._FreeLog1_Q1;
int _swi1 = _ubInstans._swi1;
bool _gen1I = _ubInstans._gen1I;
bool _gen1O = _ubInstans._gen1O;
unsigned long _gen1P = _ubInstans._gen1P;
bool _tim1I = _ubInstans._tim1I;
bool _tim1O = _ubInstans._tim1O;
unsigned long _tim1P = _ubInstans._tim1P;
bool _trgrt1 = _ubInstans._trgrt1;
bool _trgrt1I = _ubInstans._trgrt1I;
int _swi2 = _ubInstans._swi2;
int _swi3 = _ubInstans._swi3;
bool _FreeLog1_IArr[2];
bool _FreeLog1_Q1_StArr[] = {0, 1};
if(((ubi_230256467)+(ubi_53228606)) > (ubi_22283946))
{_swi1=ubi_30210132;}
else
{_swi1=(ubi_230256467)+(ubi_53228606);}
if (( (ubi_208697949) && (( (ubi_43699656) || (ubi_223774358) )) )) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 150 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O)
{ if (_tim1I) { if (_isTimer(_tim1P, 30)) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;}
if (_tim1O) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; 
 if(_FreeLog1_Q1)
{_swi2=_swi3;}
else
{_swi2=_swi1;}
if(((ubi_230256467)-(ubi_53228606)) < (ubi_30210132))
{_swi3=ubi_22283946;}
else
{_swi3=(ubi_230256467)-(ubi_53228606);}
_FreeLog1_IArr[0] = ubi_43699656;
_FreeLog1_IArr[1] = ubi_223774358;
_FreeLog1_Q1 = _checkFreeLogicBlockOutput(_FreeLog1_IArr, 2, _FreeLog1_Q1_StArr, 2); 
ubo_247529162 = _swi2;
ubo_231651231 = _trgrt1;
_ubInstans.ubo_231651231 = ubo_231651231;
_ubInstans.ubo_247529162 = ubo_247529162;
_ubInstans._FreeLog1_Q1 = _FreeLog1_Q1;
_ubInstans._swi1 = _swi1;
_ubInstans._gen1I = _gen1I;
_ubInstans._gen1O = _gen1O;
_ubInstans._gen1P = _gen1P;
_ubInstans._tim1I = _tim1I;
_ubInstans._tim1O = _tim1O;
_ubInstans._tim1P = _tim1P;
_ubInstans._trgrt1 = _trgrt1;
_ubInstans._trgrt1I = _trgrt1I;
_ubInstans._swi2 = _swi2;
_ubInstans._swi3 = _swi3;
return _ubInstans;
}

ну пока что вот это... 3 кнопки  все записываеться в энерго независимую память.... меню работает на отлично.... пока что работает толко нагрев масла!!! на больше пока мозна не хватает залейте пробуйте )

 
auris
Offline
Зарегистрирован: 21.12.2017

AvtoRemGarage пишет:

У меня практически закончен проект, горелка Бабингтон + контроллер на Ардуино. Всё работает уже с прошлой зимы, дорабатываю помаленьку.

Плата Ардуино УНО китай.

4 реле - подогрев масла, маслонасос, подача воздуха, искровое зажигание.

Датчик пламени.

Два температурных датчика Даллас - один на температуру масла, второй на температуру помещения.

Реостат 10кОм, для выбора переменной температуры помещения, от 0 до 30 градусов.

ЖК дисплей 20*4. Отображает текущюю температуру масла и помещения,  значение желаемой температуры в помещении, сосотояние 4-х реле, и если произошла то ошибку поджига.

Алгоритм, включается маслонасос \ через паузу включатся подогрев масла если требуется\  через паузу включается воздух и искра\ если произошол поджиг, то отключаем искру\ если поджиг не произошол за 40 секунд, то отключаем всё и пишем на экране об ошибке поджига. Все процессы зависимы от температур.

Скетч позже выложу, нету сейчас под рукой.

 

выложите, если может свою программу?

Ski85
Offline
Зарегистрирован: 01.10.2019

Дождались ?

andrixxx
Offline
Зарегистрирован: 15.12.2015

Всем привет, кто сталкивался, датчики Даллас, пока идёт нагрев масла температура отображается корректно. При переходе в режим горения температура масла и воды становятся -127, (периодически проскакивает верная температура). Отключал и двигатель и воздух, все те же -127. Причем если отключаю оба реле и имитирую присутствие пламени температура нормально видна. Только подключаю реле, сразу -127 даже с отключенными потребителями. Реле использую твердотельные. Пробовал подкидывать другие релюшки не помогло.

sadman41
Offline
Зарегистрирован: 19.10.2016

И какова реальная температура кипящего масла?

andrixxx
Offline
Зарегистрирован: 15.12.2015

Оно не закипает градусов до 90 нагревалось только, подачу масла обрывает термопредохранитель на трубе подачи, в паузе все температуры нормально показывают

vvadim
Offline
Зарегистрирован: 23.05.2012

вы вероятно используете паганую библиотеку DallasTemperature.

в ней написано -

#define DEVICE_DISCONNECTED_C -127

думаю разберётесь что это означает.

а причина - или корявая схема или корявая сборка или то и другое....

andrixxx
Offline
Зарегистрирован: 15.12.2015

допустим, корявая сборка, но тогда почему не выдает ошибки на других режимах, только в режиме работы?

в режиме нагрева масла или в режиме паузы температуры показывает корректно, все контакты вроде в норме.

andrixxx
Offline
Зарегистрирован: 15.12.2015

А есть ли альтернатива этой поганой библиотеке?

b707
Offline
Зарегистрирован: 26.05.2017

andrixxx пишет:

А есть ли альтернатива этой поганой библиотеке?

конечно. Альтернатива - написать самому, примеров в инете полно. Вот, прямо из вчерашнего, в разделе для чайников...

http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/miganiya-led-bez-delay#comment-501833

Только обязательно проверять CRC при чтении

vvadim
Offline
Зарегистрирован: 23.05.2012

andrixxx пишет:

допустим, корявая сборка, но тогда почему не выдает ошибки на других режимах, только в режиме работы?

в режиме нагрева масла или в режиме паузы температуры показывает корректно, все контакты вроде в норме.

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

andrixxx
Offline
Зарегистрирован: 15.12.2015

Я думал, что реле дают помехи, но вроде твердотельные, без катушек, может ли это быть из-за того,что все питается от компьютерного БП, в том числе исполнительные механизмы