Ви не увійшли.
Кирилл, очень похвально ваше желание сделать своими руками что-то полезное, но как известно дьявол кроется в деталях...
1. Физика процесса.
- Основной потерей, которая возникает в процессе работы бойлера является остывание уже нагретой горячей воды. Это остывание происходит в двух направлениях - через стенки бойлера и через трубы, по которым эта вода поступает к потребителю. Остальные потери несущественные и ими можно пренебречь.
- Следует оценить величину потерь на остывание воды, учитывая, что часть потерянной энергии останется внутри жилища и зимой будет отапливать его. Зависеть эта величина будет от качества теплоизоляции корпуса бойлера и изоляции подводящих труб. Можно предположить, что качественный и правильно смонтированный бойлер будет терять очень мало тепла. Количество потерь в хорошем бойлере может быть на уровне точности доступных вам методов измерения потерь тепла.
1.Экономика.
- Экономический эффект может быть достигнут только за счет снижения потерь бойлера. Определите эту величину, и тогда без утомительного наблюдения за графиками расходов энергии, сможете спрогнозировать возможный эффект. Для определения потерь бойлера просто нагрейте в нем воду. Отключите нагрев и проток воды. Дождитесь когда вода равномерно прогреется по объему бойлера. Измеряйте температуру воды и посчитайте время, которое потребуется для остывания воды например на 10*С. Зная объем воды, время и разницу температур, сможете посчитать потери.
- Совет. Существенная экономия может быть достигнута простым и не научным методом - снижением расхода воды .
3.Безопасность.
- Судя по внешнему виду собранной вами схемы вы нарушили все существующие нормы безопасности! Настоятельно рекомендую вашему наставнику помочь вам собрать новую схему, в которой бы цепи высокого напряжения были бы надежно отделены от низковольтной части и надежно закрыты. Обязательно используйте УЗО (дифреле) для питания всех цепей экспериментальной установки.
Ну и полезная информация по теме. Радикальным способом экономии электроэнергии, расходуемой на подогрев воды в быту является использование проточных электро нагревателей. Например вот такой:
Но у них есть недостаток. Температура воды может сильно изменяться. Вот здесь вы бы и смогли приложить свои знания. Разработайте быстродействующую схему, которая бы обеспечила качественный (равномерный) нагрев воды.
Я бы посоветовал делать это не на реальном нагревателе а на лабораторной установке, работающей, например через трансформатор 220/12В.
Под лабораторной установкой я подразумеваю пару емкостей по 3-5л, 12В насосик
ТЭН на 12 В
и несколько гибких трубочек(шлангов), которые бы обеспечили циркуляцию воды в системе.
ЖДЕМ НОВЫХ ПРОЕКТОВ.
УДАЧИ!
Сорри на не по теме. Вот код недо графический интерфейс. 3 графические кнопки на экране и окошко для сообщение. кликаешь по кнопкам сообщение меняется. Вроде программа не о чем Экран Нокия 5110 и аналоговый джойстик вместо мышки.
/*Cl_aJoystick_v3.ino
синий экран
Serial clock out 5(SCLK) -->3
Serial data out 4(DIN) -->4
Data/Command select 3(D/C) -->5
LCD chip select 2(CS) -->6
LCD reset 1(RST) -->7
6(Vcc) -->3.3V
7(BL) -->3.3V
8(GND) -->GND
Джойстик (GND) --> GND
(+5V) --> +5V
(VRx) --> A0
(VRy) --> A1
(SW) --> A2
*/
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(/*SCLK*/3,/*DIN*/4,/*D/C*/5,/*CS*/6,/*RST*/7);
class Cl_Sys;// предварительно объявить о создании класса Sys для послед подключения к нему
//-----Cl_aJoystick-------------------------------------------------------
const int delta = 5; // колебание значения на аналоговых выходах, которые можно игнорировать
class Cl_aJoystick {
byte VRx_pin ; // номер ноги на выводе VRx
byte VRy_pin ; // номер ноги на выводе VRy
byte SW_pin ; // номер ноги на выводе SW
void (* Do_SW)(byte, byte); //указатель на обработчик кнопки SW
int VRx_old; // старые значение на канале X
int VRy_old; // старые значение на канале Y
bool SW, SW_old;
bool bounce_VRx = 0, bounce_VRy = 0, bounce_SW = 0; // антидребезговый флаг
uint32_t past_VRx = 0, past_VRy = 0 , past_SW = 0 ;
public:
byte x, y ; // положение надписи
char * txt = NULL ; // указатель на надпись
// указатель на следующий элемент
Cl_aJoystick *pnt;
// конструктора
Cl_aJoystick(Cl_Sys *Sys, byte _1pin, byte _2pin, byte _3pin, void (* _Do_SW)(byte, byte));
void setup() {
pinMode(VRx_pin, INPUT) ;// подключить вывод VRx
pinMode(VRy_pin, INPUT) ;// подключить вывод VRy
pinMode(SW_pin , INPUT_PULLUP);// подключить вывод SW с подтяжкой
VRx = analogRead (VRx_pin);
x = map( VRx, 0, 1023, 0, 83);
VRy = analogRead (VRy_pin);
y = map( VRy, 0, 1023, 0, 47);
SW = digitalRead(SW_pin) ;
}
// setup()
void loop() {
// проверяем аналог канал х
int analog = analogRead (VRx_pin);
if (! bounce_VRx && (VRx < analog - delta || VRx > analog + delta)) { // если прошел фронт изм на выводн
bounce_VRx = 1; // выставить флаг
past_VRx = millis(); // сделать временую засветку
} else if ( bounce_VRx && millis() - past_VRx >= 5 ) { // если прошло антидребезговое время
bounce_VRx = 0; // то снять флаг
VRx_old = VRx ;
VRx = analog ; // прочитать реальное значение на выводе
x = map( VRx, 0, 1023, 0, 83);
}
// проверяем аналог канал y
analog = analogRead (VRy_pin);
if (! bounce_VRy && (VRy < analog - delta || VRy > analog + delta)) { // если прошел фронт изм на выводн
bounce_VRy = 1; // выставить флаг
past_VRy = millis(); // сделать временую засветку
} else if ( bounce_VRy && millis() - past_VRy >= 5 ) { // если прошло антидребезговое время
bounce_VRy = 0; // то снять флаг
VRy_old = VRy ;
VRy = analog ; // прочитать реальное значение на выводе
y = map( VRy, 0, 1023, 0, 47);
}
// проверяем кнопку SW
if (! bounce_SW && SW != digitalRead(SW_pin)) { // если прошел фронт изм на выводн
bounce_SW = 1; // выставить флаг
past_SW = millis(); // сделать временую засветку
} else if ( bounce_SW && millis() - past_SW >= 5 ) { // если прошло антидребезговое время
bounce_SW = 0; // то снять флаг
SW_old = SW ;
SW = digitalRead(SW_pin) ; // прочитать реальное значение на выводе
if (! SW_old && SW) Do_SW(x, y);
}
}
int VRx ; // значение на канале X
int VRy ; // значение на канале Y
};
//-----Cl_Label-------------------------------------------------------------
class Cl_Label {
public:
byte x, y, w, h; // геомет размеры поз x,y w-ширина h-высота
char *txt = NULL;
// указатель на следующий элемент
Cl_Label *pnt;
// конструктора
Cl_Label(Cl_Sys *Sys, byte _x, byte _y, byte _w, byte _h, char *_txt);
void setup() {
}
// setup()
void loop() {
}
};
//-----Cl_Btn-------------------------------------------------------------
class Cl_Btn {
public:
void (* Do)(); // указатель на обработчик клик
byte x, y, w, h; // геомет размеры поз x,y w-ширина h-высота
char *txt = NULL;
// указатель на следующий элемент
Cl_Btn *pnt;
// конструктора
Cl_Btn(Cl_Sys *Sys, byte _x, byte _y, byte _w, byte _h, char *_txt, void (* _Do)());
void setup() {
}
// setup()
void loop() {
}
};
//-----Cl_Sys----------------------------------------------------------------
class Cl_Sys {
uint32_t past = 0;
public:
Cl_aJoystick *Start_aJoystick = NULL;
Cl_Label *Start_Label = NULL;
Cl_Btn *Start_Btn = NULL;
Cl_Sys() {}
// setup()
void setup() {
display.begin(); // Инициализация дисплея
display.setContrast(60); // Устанавливаем контраст
display.setTextColor(BLACK); // Устанавливаем цвет текста
display.setTextSize(1); // Устанавливаем размер текста
display.clearDisplay(); // Очищаем дисплей
display.display();
for (Cl_aJoystick *i = Start_aJoystick; i != NULL; i = i->pnt) i->setup();
for (Cl_Label *i = Start_Label ; i != NULL; i = i->pnt) i->setup();
for (Cl_Btn *i = Start_Btn ; i != NULL; i = i->pnt) i->setup();
}
// loop()
void loop() {
for (Cl_aJoystick *i = Start_aJoystick; i != NULL; i = i->pnt) i->loop();
for (Cl_Label *i = Start_Label ; i != NULL; i = i->pnt) i->loop();
for (Cl_Btn *i = Start_Btn ; i != NULL; i = i->pnt) i->loop();
// вывод обновленой информации раз в 0.5 сек
if (millis() - past >= 100) {
past = millis();
display.clearDisplay(); // Очищаем дисплей
// вывод Label
for (Cl_Label *i = Start_Label; i != NULL; i = i->pnt) {
display.setCursor(i->x + 2, i-> y + 2);
display.print(i->txt);
display.drawRect(i->x, i->y, i->w, i->h, BLACK);
}
// вывод Btn
for (Cl_Btn *i = Start_Btn; i != NULL; i = i->pnt) {
display.setCursor(i->x + 2, i-> y + 2);
display.print(i->txt);
display.drawRect(i->x, i->y, i->w, i->h, BLACK);
}
// вывод джойстика
for (Cl_aJoystick *i = Start_aJoystick; i != NULL; i = i->pnt) {
display.setCursor(i->x, i-> y);
display.print(i->txt);
display.display();
}
}
}
void onClick(byte onClickX, byte onClickY) {
for (Cl_Btn *i = Start_Btn; i != NULL; i = i->pnt)
if (i->x <= onClickX && onClickX < (i->x + i->w) && i->y <= onClickY && onClickY < (i->y + i->h))i->Do();
}
} Sys;
//---------описание классов------------
Cl_aJoystick::Cl_aJoystick(Cl_Sys *Sys, byte _1pin, byte _2pin, byte _3pin, void (* _Do_SW)(byte, byte))
: VRx_pin(_1pin), VRy_pin(_2pin), SW_pin(_3pin), Do_SW(_Do_SW) {
x = 0; y = 0; txt = "^";
pnt = Sys->Start_aJoystick;
Sys->Start_aJoystick = this;
}
Cl_Label::Cl_Label(Cl_Sys *Sys, byte _x, byte _y, byte _w, byte _h, char *_txt)
: x(_x), y(_y), w(_w), h(_h), txt(_txt) {
pnt = Sys->Start_Label;
Sys->Start_Label = this;
}
Cl_Btn::Cl_Btn(Cl_Sys *Sys, byte _x, byte _y, byte _w, byte _h, char *_txt, void (* _Do)())
: x(_x), y(_y), w(_w), h(_h), txt(_txt) , Do(_Do) {
pnt = Sys->Start_Btn;
Sys->Start_Btn = this;
}
//----------Компоновка---------------------
void Do_SW(byte onClickX, byte onClickY) {
Sys.onClick(onClickX, onClickY);
}
Cl_aJoystick *aJoystick = new Cl_aJoystick(&Sys,/*VRx*/A0,/*VRy*/A1,/*SW*/A2,/*обработчик наж SW*/Do_SW); // создать aJoystick_1
Cl_Label *Label = new Cl_Label (&Sys,/*x*/0 ,/*y*/0 ,/*w*/48,/*h*/11,/*текст*/"Label 1"); // создать Label_1
void Do_Btn1() {
Label->txt = "Do_Btn1";
}
void Do_Btn2() {
Label->txt = "Do_Btn2";
}
void Do_Btn3() {
Label->txt = "Do_Btn3";
}
Cl_Btn *Btnl = new Cl_Btn(&Sys,/*x*/0 ,/*y*/36,/*w*/27,/*h*/11,/*текст*/"Btn1",/*обработчик^\_*/Do_Btn1);// создать кнопку 1
Cl_Btn *Btn2 = new Cl_Btn(&Sys,/*x*/28,/*y*/36,/*w*/27,/*h*/11,/*текст*/"Btn2",/*обработчик^\_*/Do_Btn2);// создать кнопку 2
Cl_Btn *Btn3 = new Cl_Btn(&Sys,/*x*/56,/*y*/36,/*w*/27,/*h*/11,/*текст*/"Btn3",/*обработчик^\_*/Do_Btn3);// создать кнопку 3
//-----------Main()-----------------------
void setup() {
Sys.setup();
}
void loop() {
Sys.loop();
}
Ладно. С пацаном и его проектом все ясно. Я вот скеч нарисовал. Зацените.
/*Cl_LcdBtn_in_Nokia5110.ino
* синий экран
Serial clock out 5(SCLK) -->3
Serial data out 4(DIN) -->4
Data/Command select 3(D/C) -->5
LCD chip select 2(CS) -->6
LCD reset 1(RST) -->7
6(Vcc) -->3.3V
7(BL) -->3.3V
8(GND) -->GND
кнопка 1 (Btn_1) -->8
кнопка 2 (Btn_2) -->9
кнопка 3 (Btn_3) -->10
*/
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(/*SCLK*/3,/*DIN*/4,/*D/C*/5,/*CS*/6,/*RST*/7);
class Cl_Sys;// предварительно объявить о создании класса Sys для послед подключения к нему
//-----Cl_Label-----------------
class Cl_Label {
public:
byte x, y ; // положение надписи
char * txt = NULL ; // указатель на надпись
// указатель на следующий элемент
Cl_Label *pnt;
// конструктор
Cl_Label(Cl_Sys *Sys, char *_txt , byte _x , byte _y );
void setup() {
}
// setup()
void loop() {
}
// сделать надпись
void Caption(char *_txt) {
txt = _txt;
}
};
//-----Cl_LcdBtn-----------------
class Cl_LcdBtn {
byte pin; // номер ноги на кнопке
bool btn, btn_old;
bool bounce = 0; // антидребезговый флаг
uint32_t past = 0 ;
public:
void (* Do1)(), (* Do2)(); // указатель на обработчики нажатия,отжатия
byte x, y ; // положение надписи
char * txt = NULL ; // указатель на надпись
// указатель на следующий элемент
Cl_LcdBtn *pnt = NULL;
// конструктор
Cl_LcdBtn(Cl_Sys *Sys, byte _pin, void (* _Do1)(), void (* _Do2)(), char *_txt , byte _x , byte _y );
void setup() {
pinMode(pin, INPUT_PULLUP);// подключить кнопку 1 с подтяжкой
btn = digitalRead(pin); // прочитать реальное значение на выводе};
}
// setup()
void loop() {
if (! bounce && btn != digitalRead(pin)) { // если прошел фронт изм на выводн
bounce = 1; // выставить флаг
past = millis(); // сделать временую засветку
}
else if ( bounce && millis() - past >= 5 ) { // если прошло антидребезговое время
bounce = 0; // то снять флаг
btn_old = btn ;
btn = digitalRead(pin) ; // прочитать реальное значение на выводе
if (btn_old && !btn) Do1(); // если произошло нажатие
if (!btn_old && btn) Do2(); // если произошло отжатие
}
}
// сделать надпись
void Caption(char *_txt) {
txt = _txt;
}
};
//-----Cl_Sys-----------------
class Cl_Sys {
uint32_t past = 0;
public:
Cl_Label *Startl_Label = NULL;
Cl_LcdBtn *Start_Btn = NULL;
Cl_Sys() {}
// setup()
void setup() {
display.begin(); // Инициализация дисплея
display.setContrast(60); // Устанавливаем контраст
display.setTextColor(BLACK); // Устанавливаем цвет текста
display.setTextSize(1); // Устанавливаем размер текста
display.clearDisplay(); // Очищаем дисплей
display.display();
for (Cl_Label *i = Startl_Label; i != NULL; i = i->pnt) i->setup();
for (Cl_LcdBtn *i = Start_Btn; i != NULL; i = i->pnt) i->setup();
}
void loop() {
for (Cl_LcdBtn *i = Start_Btn; i != NULL; i = i->pnt) i->loop();
// вывод обновленой информации раз в 0.5 сек
if (millis() - past >= 500) {
past = millis();
display.clearDisplay(); // Очищаем дисплей
for (Cl_LcdBtn *i = Start_Btn; i != NULL; i = i->pnt) {
display.setCursor(i->x, i-> y);
display.print(i->txt);
}
for (Cl_Label *i = Startl_Label; i != NULL; i = i->pnt) {
display.setCursor(i->x, i-> y);
display.print(i->txt);
}
display.display();
}
}
} Sys;
//---------описание классов------------
Cl_Label::Cl_Label(Cl_Sys *Sys, char *_txt , byte _x = 0 , byte _y = 0): x(_x), y(_y) {
txt = _txt,
pnt = Sys->Startl_Label;
Sys->Startl_Label = this;
}
Cl_LcdBtn::Cl_LcdBtn(Cl_Sys *Sys, byte _pin, void (* _Do1)(), void (* _Do2)(), char *_txt , byte _x = 0 , byte _y = 0)
: pin(_pin), Do1(_Do1), Do2(_Do2), txt(_txt), x(_x), y(_y) {
pnt = Sys->Start_Btn;
Sys->Start_Btn = this;
}
//----------Компоновка---------------------
Cl_Label *Label = new Cl_Label(&Sys,/*текст*/"Label",/*поз х*/0,/*поз y*/0); // создать объект Лабел
void Do1_Btn1();// объявим что есть такие обработчики
void Do2_Btn1();
void Do1_Btn2();
void Do2_Btn2();
void Do1_Btn3();
void Do2_Btn3();
Cl_LcdBtn *Btn_1 = new Cl_LcdBtn(&Sys,/*пин*/8 ,/*обработчик*/Do1_Btn1,/*обработчик*/Do2_Btn1,/*текст*/"1of",/*поз х*/0*8 ,/*поз y*/5*8); // создать кнопку Btn_1
Cl_LcdBtn *Btn_2 = new Cl_LcdBtn(&Sys,/*пин*/9 ,/*обработчик*/Do1_Btn2,/*обработчик*/Do2_Btn2,/*текст*/"2of",/*поз х*/4*8 ,/*поз y*/5*8); // создать кнопку Btn_2
Cl_LcdBtn *Btn_3 = new Cl_LcdBtn(&Sys,/*пин*/10,/*обработчик*/Do1_Btn3,/*обработчик*/Do2_Btn3,/*текст*/"3of",/*поз х*/8*8 ,/*поз y*/5*8); // создать кнопку Btn_3
void Do1_Btn1() {
Label->Caption("Btn 1");
Btn_1->Caption("1on");
}
void Do2_Btn1() {
Btn_1->Caption("1of");
}
void Do1_Btn2() {
Label->Caption("Btn 2");
Btn_2->Caption("2on");
}
void Do2_Btn2() {
Btn_2->Caption("2of");
}
void Do1_Btn3() {
Label->Caption("Btn 3");
Btn_3->Caption("3on");
}
void Do2_Btn3() {
Btn_3->Caption("3of");
}
//-----------Main()-----------------------
void setup() {
Sys.setup();
}
void loop() {
Sys.loop();
}
renoshnik, мы ведь не на научном соевете )
такой холовар развели что просто не оставили мне выбора, просмотрел ролик )
парниша молодец.
укажите на недостатки проекта, данных и этого хватит. пусть сам даелает выводы )
fix сайт не работает долго грузится
разраб акцентирует внимание на возрасте, в его устах это минус. мы не в штатах и это не егго эссе и так видно что школьник
его менеджер имеет право такое говорить - разраб нет.
а вы видели как он провода в коробке уложил? - это ведь ужастный ужас )
лечить от неверно представляемой экономической составляющей -
это просто писец пушистый. это и без нас жизнь сделает, она такая )
renoshnik пише:Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ...
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...
не морочьте пацану голову.
он сделал вполне законченный проект, который можно использовать.
а оппоненты пускай делают свои и доказывают свою , в принципе нафиг не особо то и нужную в данном случае , экономическую эффективность.он молодец, башка работает, аглицким шпарит.
не удивлюсь что в этом году ещё что нибудь интересное и более сложное представит
В таком случае пацан НЕ должен рассказывать про энергоЭКОНОМИЮ...
В видео пацан жонглирует терминами "экономия", "окупаемость" без всякого на то основания...
А это откровенное словоблудие которое полностью нивелирует его труд по написанию программ и сборке устройства...
Соответственно на выходе получили некое устройство подключенное к бойлеру просто ради подключения ...
А так это изделие ради изделия и причем даааааааалеко не оптимальной конфигурации...
У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".
а в чём его звездизм?
чел поделился своим законченным проектом, и это гуд
Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ...
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...
не морочьте пацану голову.
он сделал вполне законченный проект, который можно использовать.
а оппоненты пускай делают свои и доказывают свою , в принципе нафиг не особо то и нужную в данном случае , экономическую эффективность.
он молодец, башка работает, аглицким шпарит.
не удивлюсь что в этом году ещё что нибудь интересное и более сложное представит
У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".
qwone пише:У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".
Пусть болеет, когда выздоровеет - будет толк.
Когда болеет и НЕ лечат, то НЕ выздоравливает !!!
У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".
Будьте снисходительны. Парнишке всего 12 лет. У него еще все впереди. А без труда не выловишь и рыбку из пруда.
!?!?!?! по моему в видео он сам просил критики и совета ...
сейчас для молодежи не такая проблема освоить программирование, гораздо бОльшая проблема это грамотная постановка задачи и адекватное её решение...
проекты ради проектов - этого полным полно на выставках, форумах и в сети...
Так даже проблема не в экономии. А в детском подходе к проекту. Это ух ты я какую штуку забабахал, не каждый взрослый сможет. А вот точно не каждый взрослый может подойти по взрослому к такому проекту. Одно дело сделать, а другое расчитать экономическую целесообразность, заинтересовать людей этим проектом и прочее прочее. А то будет как у Ростика с картоными танками для ВСУ.
renoshnik пише:Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ...
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...
Конечно, с технико-экономической стороны это просто дорогая игрушка. Но то, что это сделал 12-летний подросток впечатляет. Я помню, был один мальчик который, даже в более юном возрасте, закончил университет с отличием. Я не помню как его звали и какова его судьба сейчас, мне неизвестно.
Так я и не спорю о работе и возрасте автора...
Я дал ДЕЛЬНЫЙ совет автору, а так это просто большой объем работы без конкретного результата...
Почему без результата ?
Потому, что автор позиционирует свое устройство как способ экономии (даже название сайта мониторинга).
А реальных результатов подтверждающих экономию - НЕТ...
Вячеслав Азаров, Лев Ландау, врядли вы были знакомы, он умер в 68.
Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ...
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).
Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...
Молодец, перспективно и интересно, так держать