Регулятор давления для скважены

Тема в разделе "Arduino & Shields", создана пользователем Дмитрий76, 5 апр 2017.

  1. qwone

    qwone Гик

    Пакет 4 версии https://yadi.sk/d/aNSDrPxJ3Gn5iN
    Код (C++):
    /* pressure_swith_v4.ino
      светодиод работа насоса  -> 13  1  вкл / 1 откл
      реле насоса              -> 12  1  вкл / 1 откл
      датчик давления          -> A1  0 нажата / 1 нет
      кнопка "SELECT"          -> 2   0 нажата / 1 нет
      кнопка "DOWN"          " -> 3   0 нажата / 1 нет
      кнопка "UP"              -> 4   0 нажата / 1 нет
      кнопка "Manual OFF_PUMP" -> 5   0 нажата / 1 нет
      кнопка "Manual ON_PUMP"  -> 6   0 нажата / 1 нет

      0 экран - величина давления / режим индик реж авто-ручной / вкл-откл насос
      1 экран уст реж авто-ручной / величина вкл насоса/ величина откл насоса
    */

    //# menu
    #include "Cl_menu_A.h"
    // шины выхода
    #include "Cl_digitalOut.h"
    Cl_digitalOut Out[] = {
      Cl_digitalOut(12) , // 0- выход 10  реле насоса
      Cl_digitalOut(13)   // 1- выход 11  работа насоса
    };
    // шины входа аналоговые
    #include "Cl_analogIn.h"
    Cl_analogIn aIn = Cl_analogIn(A1); // аналог.вход датчика давления
    // шины входа цифровые
    #include "Cl_digitalIn.h"
    Cl_digitalIn In[] = {
      Cl_digitalIn(2), //  0- вход 2  кнопка "SET"
      Cl_digitalIn(3), //  1- вход 3  кнопка "DOWN"
      Cl_digitalIn(4), //  2- вход 4  кнопка "UP"
      Cl_digitalIn(5), //  3- вход 5  кнопка "Manual OFF_PUMP"
      Cl_digitalIn(6)  //  4- вход 6  кнопка "Manual ON_PUMP"
    };
    // насос
    #include "Cl_led.h"
    Cl_led * Pump = new Cl_led(&Out[0], 0); //0- реле насоса
    // светодиод
    Cl_led * Led  = new Cl_led(&Out[1], 1); //0- работа насоса
    // кнопки
    void Do_SELECT() {
      Menu_select();
    }
    void Do_DOWN() {
      Menu[line]->down();
    }
    void Do_UP() {
      Menu[line]->up();
    }
    void Do_MANUAL_OFF_PUMP() {
      if (!mode_Auto) {
        Pump->OFF();
        Pump_On = 0;
        Led->OFF();
      }
    }
    void Do_MANUAL_ON_PUMP() {
      if (! mode_Auto) {
        Pump->ON();
        Pump_On = 1;
        Led->blink(200); // мигать 0.2 сек вкл 0.2 сек выкл
      }
    }
    #include "Cl_do_btn.h"
    Cl_do_btn * Btn[] =  {
      new Cl_do_btn(&In[0] , 0, &Do_SELECT         ) , //кнопка "SELECT"          0 нажата / 1 нет
      new Cl_do_btn(&In[1] , 0, &Do_DOWN           ) , //кнопка "DOWN"            0 нажата / 1 нет
      new Cl_do_btn(&In[2] , 0, &Do_UP             ) , //кнопка  "ON_PUMP"        0 нажата / 1 нет
      new Cl_do_btn(&In[3] , 0, &Do_MANUAL_OFF_PUMP) , //кнопка "Manual OFF_PUMP" 0 нажата / 1 нет
      new Cl_do_btn(&In[4] , 0, &Do_MANUAL_ON_PUMP )   //кнопка "Manual ON_PUMP"  0 нажата / 1 нет
    };
    // датчик давления
    void Do_change();
    #include "Cl_do_analog_sens.h"
    Cl_do_analog_sens * Sens = new Cl_do_analog_sens(&aIn, &Do_change);
    void Do_change() {
      pressure = Sens->value;
      if (mode_Auto) {
        if (pressure <= pressure_ON ) {
          Pump->ON();
          Pump_On = 1;
          Led->blink(); // мигать 0.5 сек вкл 0.5 сек выкл
        }
        if (pressure >= pressure_OFF ) {
          Pump->OFF();
          Pump_On = 0;
          Led->OFF();
        }
      }
    }
    void setup() {
      Menu_setup();// инициализация дисплея
      Sens->setup();
      Pump->setup();
      Led->setup();
      for (byte i = 0; i < 5; ++i)Btn[i]->setup();
      Pump_On = 0;
      Led->OFF();
      Do_change();
    }
    void loop() {
      Do_change();
      Menu_viev();// вывод текущей информации
      Sens->loop();
      Pump->loop();
      Led->loop();
      for (byte i = 0; i < 5; ++i)Btn[i]->loop();
    }
     
  2. Дмитрий76

    Дмитрий76 Нерд

    Огромное спасибо! :) Ну вы мозг!!!
     
  3. qwone

    qwone Гик

    Вот тоже самое с записью в память ручной-автоматический, верхний и нижний пределы. Разумеется записывает если вы перешли на следующую строку. Вот пакет https://yadi.sk/d/N-meAs8z3GnFBH
    Код (C++):
    /* pressure_swith_v5.ino https://yadi.sk/d/N-meAs8z3GnFBH
      светодиод работа насоса  -> 13  1  вкл / 1 откл
      реле насоса              -> 12  1  вкл / 1 откл
      датчик давления          -> A1  0 нажата / 1 нет
      кнопка "SELECT"          -> 2   0 нажата / 1 нет
      кнопка "DOWN"          " -> 3   0 нажата / 1 нет
      кнопка "UP"              -> 4   0 нажата / 1 нет
      кнопка "Manual OFF_PUMP" -> 5   0 нажата / 1 нет
      кнопка "Manual ON_PUMP"  -> 6   0 нажата / 1 нет

      0 экран - величина давления / режим индик реж авто-ручной / вкл-откл насос
      1 экран уст реж авто-ручной / величина вкл насоса/ величина откл насоса
    */

    //# menu
    #include "Cl_menu_A.h"
    // шины выхода
    #include "Cl_digitalOut.h"
    Cl_digitalOut Out[] = {
      Cl_digitalOut(12) , // 0- выход 10  реле насоса
      Cl_digitalOut(13)   // 1- выход 11  работа насоса
    };
    // шины входа аналоговые
    #include "Cl_analogIn.h"
    Cl_analogIn aIn = Cl_analogIn(A1); // аналог.вход датчика давления
    // шины входа цифровые
    #include "Cl_digitalIn.h"
    Cl_digitalIn In[] = {
      Cl_digitalIn(2), //  0- вход 2  кнопка "SET"
      Cl_digitalIn(3), //  1- вход 3  кнопка "DOWN"
      Cl_digitalIn(4), //  2- вход 4  кнопка "UP"
      Cl_digitalIn(5), //  3- вход 5  кнопка "Manual OFF_PUMP"
      Cl_digitalIn(6)  //  4- вход 6  кнопка "Manual ON_PUMP"
    };
    // насос
    #include "Cl_led.h"
    Cl_led * Pump = new Cl_led(&Out[0], 0); //0- реле насоса
    // светодиод
    Cl_led * Led  = new Cl_led(&Out[1], 1); //0- работа насоса
    // кнопки
    void Do_SELECT() {
      Menu_select();
    }
    void Do_DOWN() {
      Menu[line]->down();
    }
    void Do_UP() {
      Menu[line]->up();
    }
    void Do_MANUAL_OFF_PUMP() {
      if (!mode_Auto) {
        Pump->OFF();
        Pump_On = 0;
        Led->OFF();
      }
    }
    void Do_MANUAL_ON_PUMP() {
      if (! mode_Auto) {
        Pump->ON();
        Pump_On = 1;
        Led->blink(200); // мигать 0.2 сек вкл 0.2 сек выкл
      }
    }
    #include "Cl_do_btn.h"
    Cl_do_btn * Btn[] =  {
      new Cl_do_btn(&In[0] , 0, &Do_SELECT         ) , //кнопка "SELECT"          0 нажата / 1 нет
      new Cl_do_btn(&In[1] , 0, &Do_DOWN           ) , //кнопка "DOWN"            0 нажата / 1 нет
      new Cl_do_btn(&In[2] , 0, &Do_UP             ) , //кнопка  "ON_PUMP"        0 нажата / 1 нет
      new Cl_do_btn(&In[3] , 0, &Do_MANUAL_OFF_PUMP) , //кнопка "Manual OFF_PUMP" 0 нажата / 1 нет
      new Cl_do_btn(&In[4] , 0, &Do_MANUAL_ON_PUMP )   //кнопка "Manual ON_PUMP"  0 нажата / 1 нет
    };
    // датчик давления
    void Do_change();
    #include "Cl_do_analog_sens.h"
    Cl_do_analog_sens * Sens = new Cl_do_analog_sens(&aIn, &Do_change);
    void Do_change() {
      pressure = Sens->value;
      if (mode_Auto) {
        if (pressure <= pressure_ON ) {
          Pump->ON();
          Pump_On = 1;
          Led->blink(); // мигать 0.5 сек вкл 0.5 сек выкл
        }
        if (pressure >= pressure_OFF ) {
          Pump->OFF();
          Pump_On = 0;
          Led->OFF();
        }
      }
    }
    void setup() {
      Menu_setup();// инициализация дисплея
      Sens->setup();
      Pump->setup();
      Led->setup();
      for (byte i = 0; i < 5; ++i)Btn[i]->setup();
      Pump_On = 0;
      Led->OFF();
    }
    void loop() {
      Do_change();
      Menu_viev();// вывод текущей информации
      Sens->loop();
      Pump->loop();
      Led->loop();
      for (byte i = 0; i < 5; ++i)Btn[i]->loop();
    }
     
  4. Дмитрий76

    Дмитрий76 Нерд

    огромное спасибо!
     
  5. Дмитрий76

    Дмитрий76 Нерд

    qwone добрый день. Подскажи пожалуйста. Как можно реализовать защиту от сухого хода насоса. Я думал "если давление не поднимается в течении ~ 1 мин то выкл насоса на 1 мин. Затем вкл и так далее до 10 попыток. И при выключению если не набирает давления включить светодиод авария. После можно включить только по нажатию на кнопку." Может я неправ. Или что то другое?
     
  6. qwone

    qwone Гик

    Я же говорю. У меня нет насоса для скважины.Да и скважины нет. Так что вы должны сказать мне как определить что насос качает не воду а воздух. Опять же я не знаю (значений цифр) как определить успешно ли качает воду или нет.
    Возьмем пример. Есть скважина есть насос есть бак. (1) качать надо до тех пор пока бак не будет полон - а это датчики уровня в баке. (2) есть сважина. Но вода туда прибывает медленно. Так что качать надо пока там есть вода. Нужен датчик воды. И перед тем как писать программу надо правильно составить ТЗ (техническое задание). Но у меня нет опыта по накачиваю воды из бака. Так что удачное решение я точно не подскажу.
     
  7. Дмитрий76

    Дмитрий76 Нерд

    Есть скважина. Но вода туда прибывает медленно. Так что качать надо пока там есть вода. Нужен датчик воды. Я думаю может этот датчик. "https://yadi.sk/i/YsfLjuvv3GncnE" Нет потока в течении ~ 1 мин то выкл насоса на 1 мин. Затем вкл и так далее до 10 попыток. И при выключению если нет потока включить светодиод авария.
    Думаю как то так.
     
  8. qwone

    qwone Гик

    Воду вы куда качаете? или вы хотите сделать полуавтомат. Две кнопки "качать" , "не качать", два светодиода " Вкл насос" и "Авария насос"
    ПС: Если насос не погружен в воду, то он может качать не воду, а воздух. И этот воздух может определять датчик. Ведь ему безразлично что считать. Вода или воздух. Расход он и в Африке расход.
     
    Последнее редактирование: 9 апр 2017
  9. Дмитрий76

    Дмитрий76 Нерд

    Качает воду из скважины в основную магистраль. Кран открыл вода пошла и насос включился. В системе стоит гидро аккумулятор. Я хотел дописать в скейч защиту от сухого хода.
     

    Вложения:

  10. qwone

    qwone Гик

    А по середке у вас что обратный клапан? Тогда надо вешать еще один датчик давления , до обратного клапана. Когда насос вкл и давления с насоса нет, то нет и воды в скважине.
     
  11. Дмитрий76

    Дмитрий76 Нерд

    По середине просто гребенка. Обратный клапан стоит сразу на насосе.
     
  12. qwone

    qwone Гик

    А насос в сважине. Зашибись. А если в сважине нет воды то насос снабжает датчик давления - давлением воды. Так что вам надо еще и обратный клапан и датчик давления.
     
    Последнее редактирование: 9 апр 2017
  13. Дмитрий76

    Дмитрий76 Нерд

    У меня не мембранный насос. У мня погружной с турбинами. Скеч регулятор давления вы написали СПАСИБО. Надо будет только перевести значение с датчика в давление. Датчик такой. https://ru.aliexpress.com/item/High...ressure-transmitter-Water-Gas/1841964307.html Вот думаю как еще реализовать защиту от сухого хода!
     

    Вложения:

  14. qwone

    qwone Гик

    Я же вам сказал . Это реализуется на датчике давления и обратном клапане. Поставьте на выходе насоса(скорее на входе в гребенку) обратный клапан. И до обратного клапана датчик давления. Включите насос. Давление до обратного клапана подскочит. Если сухой ход, то давление не изменится . А обратный клапан нужен, только для того что бы давление с мембраного бака не попало в датчик до обратного клапана и спутало показания-"нормальная подача" или "сухой ход"
    Опять же теперешний датчик давления показавает не давление, а уровень заполнения мембраного бака. Это как в аквалангах. Там тоже меряют сколько воздуха осталось по давлению в баллоне.
     
  15. Дмитрий76

    Дмитрий76 Нерд

    А если мереть по этому же датчику. Например установленное нижний порог срабатывания давление 2.5 атмосферы и если давление от 0 до нижнего придела 2.5 не поднимается в течении 1 мин. насос остановить и включить диод авария. И так далее до 10 попыток. Насос без воды давление не поднимет.
     
  16. qwone

    qwone Гик

    Можно! Но сначало надо отработать с обратным клапаном и датчиком давления. А без них много гемороя и нервов. Это как ездить на крыше автомобиля. Можно, Но удобнее все же в салоне.
     
  17. Дмитрий76

    Дмитрий76 Нерд

    :)

    Обратный клапан служит для того чтобы вода которая в системе не стекала обратно и держала давление.
     
  18. qwone

    qwone Гик

    Я в курсе зачем в турбином насосе обратный клапан. Но у вас еще есть и мембраный бак. Он ведь тоже создает давление. Вот и надо их разделить еще одним обратным клапаном.
     
  19. Дмитрий76

    Дмитрий76 Нерд

    Их разделять нельзя. Клапан пропускает в 1 сторону. Бак набирает воду и поддерживает давление и запас воды на тот момент пока не включится насос. nasos_dkya_kolodtsa_02.jpg
     
  20. qwone

    qwone Гик

    Ну и как у вас устроен датчик сухого хода? Если сделать как вы хотите, то вы откроете воду на максимум и у вас насос улетит в аварию.