#1 2017-03-12 20:07:26

Strelok2004
Участник
Зарегистрирован: 2015-06-15
Сообщений: 7

SMART бойлер

Здравствуйте, меня зовут Кирилл и мне 12 лет.
Представляю Вашему вниманию полностью работоспособный проект «SMART бойлер + сайт + Android приложение» для анализа и визуализации собираемых данных работы водонагревателя и управления режимами нагрева через интернет, т.е. мне удалось создать умный бойлер или Internet of Things, IoT. Такой водонагреватель может входить в систему умный дом.

  Хотел бы узнать Ваше мнение о проекте, прочесть Ваши замечания и советы, которые наверняка будут, учитывая, что я только учусь и выяснить:
есть ли вообще спрос на такие устройства и возможности  сайта у владельцев водонагревателей?

  В видеоролике будет показан краткий обзор проекта, а на возникающие вопросы отвечу более подробно на форуме.

Ссылка на ролик https://www.youtube.com/watch?v=WDK5JIUUzfU

Ссылка на сайт http://economics.zzz.com.ua

#2 2017-03-12 22:53:16

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 507

Re: SMART бойлер

молодец!!!!
это твой уже не первый проект
радует что у тебя в твоём возрасте что то получается, да ещё и не плохо)))

#3 2017-06-03 21:55:48

agrostandartukraine
Участник
Зарегистрирован: 2017-02-20
Сообщений: 12

Re: SMART бойлер

Молодец, перспективно и интересно, так держать cool

#4 2017-06-04 10:39:56

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 441

Re: SMART бойлер

Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ... 
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).

Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...

#5 2017-06-04 13:51:17

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,407

Re: SMART бойлер

Вячеслав Азаров, Лев Ландау,  врядли вы были знакомы, он умер в 68.

#6 2017-06-04 13:57:09

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 441

Re: SMART бойлер

Вячеслав Азаров пишет:
renoshnik пишет:

Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ... 
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).

Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...

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

Так я и не спорю о работе и возрасте автора...
Я дал ДЕЛЬНЫЙ совет автору, а так это просто большой объем работы без конкретного результата...
Почему без результата ?
Потому, что автор позиционирует свое устройство как способ экономии (даже название сайта мониторинга).
А реальных результатов подтверждающих экономию - НЕТ...

#7 2017-06-04 14:27:17

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 130

Re: SMART бойлер

Так даже проблема не в экономии. А в детском подходе к проекту. Это ух ты я какую штуку забабахал, не каждый взрослый сможет. А вот точно не каждый взрослый может подойти по взрослому к такому проекту. Одно дело сделать, а другое расчитать экономическую целесообразность, заинтересовать людей этим проектом и прочее прочее.  А то будет как у Ростика с картоными танками для ВСУ.

#8 2017-06-04 14:37:26

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 441

Re: SMART бойлер

Вячеслав Азаров пишет:

Будьте снисходительны. Парнишке всего 12 лет. У него еще все впереди. А без труда не выловишь и рыбку из пруда.

!?!?!?!  по моему в видео он сам просил критики и совета ...

сейчас для молодежи не такая проблема освоить программирование, гораздо бОльшая проблема это грамотная постановка задачи и адекватное её решение...
проекты ради проектов - этого полным полно на выставках, форумах и в сети...

#9 2017-06-04 14:37:51

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 130

Re: SMART бойлер

У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".

#10 2017-06-04 15:54:09

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 441

Re: SMART бойлер

qwone пишет:

У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".

Вячеслав Азаров пишет:
qwone пишет:

У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".

Пусть болеет, когда выздоровеет - будет толк.   wink

Когда болеет и НЕ лечат, то НЕ выздоравливает !!!

#11 2017-06-04 16:40:56

vvadim
Гость

Re: SMART бойлер

renoshnik пишет:

Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ... 
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).

Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...

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

он молодец, башка работает, аглицким шпарит.
не удивлюсь что в этом году ещё что нибудь интересное и более сложное представит smile

#12 2017-06-04 16:45:24

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 507

Re: SMART бойлер

qwone пишет:

У парнишки "звездная болезнь", его лечить надо, а не быть снисходительным. Он же вырастет, и "болезнь вырастет".

а в чём его звездизм?
чел поделился своим законченным проектом, и это гуд smile

#13 2017-06-04 19:32:41

renoshnik
Участник
Зарегистрирован: 2017-04-03
Сообщений: 441

Re: SMART бойлер

vvadim пишет:
renoshnik пишет:

Strelok2004, для вашего возраста вы проделали довольно серьезную работу.
НО, если вы заявляете о экономии, то нужно предоставлять для сравнения другие данные.
То есть нужен второй бойлер с альтернативным способом нагревания ... 
Советую добавить на сайт данные с другого бойлера (установите систему на бойлер у родственников или приятеля) ...
Отведите на сайте страницу или окно для сравнительных результатов объем слитой воды и затраченная энергия на нагрев и средняя температура нагрева (или что-то аналогичное).

Без этого ваше устройство любой оппонент (недоброжелатели) легко "затюкает" вашу идею...

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

он молодец, башка работает, аглицким шпарит.
не удивлюсь что в этом году ещё что нибудь интересное и более сложное представит smile


В таком случае пацан НЕ должен рассказывать про энергоЭКОНОМИЮ...
В видео пацан жонглирует терминами "экономия", "окупаемость" без всякого на то основания...
А это откровенное словоблудие которое полностью нивелирует его труд по написанию программ и сборке устройства...
Соответственно на выходе получили некое устройство подключенное к бойлеру просто ради подключения ...

А так это изделие ради изделия и причем даааааааалеко не оптимальной конфигурации...

Редактировался renoshnik (2017-06-04 19:43:22)

#14 2017-06-04 20:06:17

NoName
Customer
Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,407

Re: SMART бойлер

renoshnik,  мы ведь не на научном соевете )
такой холовар развели что просто не оставили мне выбора, просмотрел ролик )

парниша молодец.
укажите на недостатки проекта, данных  и этого хватит. пусть сам даелает выводы  )

fix сайт не работает  долго грузится
разраб акцентирует  внимание на возрасте,  в его  устах это минус. мы не в штатах и это не егго эссе   и так видно что  школьник
его менеджер имеет право  такое говорить - разраб нет. 


а вы видели как он провода в коробке уложил? - это ведь ужастный ужас )

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

Редактировался NoName (2017-06-04 20:10:55)

#15 2017-06-04 20:58:17

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 130

Re: SMART бойлер

Ладно. С пацаном и его проектом все ясно. Я вот скеч нарисовал. Зацените.  smile

/*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();
}

#16 2017-06-05 17:46:51

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 130

Re: SMART бойлер

Сорри на не по теме. Вот код недо графический интерфейс. 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();
}

#17 2018-01-20 08:58:31

Lic Control
Участник
Зарегистрирован: 2016-01-23
Сообщений: 89

Re: SMART бойлер

Кирилл, очень похвально ваше желание сделать своими руками что-то полезное, но как известно дьявол кроется в деталях...
1. Физика процесса.
- Основной потерей, которая возникает в процессе работы бойлера является остывание уже нагретой горячей воды. Это остывание происходит в двух направлениях - через стенки бойлера и через трубы, по которым эта вода поступает к потребителю. Остальные потери несущественные и ими можно пренебречь.
- Следует оценить величину потерь на остывание воды, учитывая, что часть потерянной энергии останется внутри жилища и зимой будет отапливать его. Зависеть эта величина будет от качества теплоизоляции корпуса бойлера и изоляции подводящих труб. Можно предположить, что качественный и правильно смонтированный бойлер будет терять очень мало тепла. Количество потерь в хорошем бойлере может быть на уровне точности доступных вам методов измерения потерь тепла.
1.Экономика.
- Экономический эффект может быть достигнут только за счет снижения потерь бойлера. Определите эту величину, и тогда без утомительного наблюдения за графиками расходов энергии, сможете спрогнозировать возможный эффект. Для определения потерь бойлера просто нагрейте в нем воду. Отключите нагрев и проток воды.  Дождитесь когда вода равномерно прогреется по объему бойлера. Измеряйте температуру воды и посчитайте время, которое потребуется для остывания воды например на 10*С. Зная объем воды, время и разницу температур, сможете посчитать потери.
- Совет. Существенная экономия может быть достигнута простым и не научным методом - снижением расхода воды wink.
3.Безопасность.
- Судя по внешнему виду собранной вами схемы вы нарушили все существующие нормы безопасности! Настоятельно рекомендую вашему наставнику помочь вам собрать новую схему, в которой бы цепи высокого напряжения были бы надежно отделены от низковольтной части и надежно закрыты. Обязательно используйте УЗО (дифреле) для питания всех цепей экспериментальной установки.

Ну и полезная информация по теме. Радикальным способом экономии электроэнергии, расходуемой на подогрев воды в быту является использование проточных электро нагревателей. Например вот такой:
проточный нагреватель
Но у них есть недостаток. Температура воды может сильно изменяться. Вот здесь вы бы и смогли приложить свои знания. Разработайте быстродействующую схему, которая бы обеспечила качественный (равномерный) нагрев воды.
Я бы посоветовал делать это не на реальном нагревателе а на лабораторной установке, работающей, например через трансформатор 220/12В.
Под лабораторной установкой я подразумеваю пару емкостей по 3-5л, 12В насосик
насос
ТЭН на 12 В
ТЭН
и несколько гибких трубочек(шлангов), которые бы обеспечили циркуляцию воды в системе.

ЖДЕМ НОВЫХ ПРОЕКТОВ.
УДАЧИ!

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела