автоматизация скважинного насоса

Serg1
Offline
Зарегистрирован: 04.12.2015

Коллеги, приветствую!

Прошу помочь в написании программы\ подсказать алгоритм для автоматизации скважинного насоса . Суть такова:

Имеется скважина с ограниченным дебетом. Датчики уровня воды в ней постоянно глючат. Поэтому принято решение отказаться от прямых измерений уровня воды в скважине в пользу косвенных измерений.

Зная, что заполненную скважину насос откачает за 50 секунд, а время на заполнение скважины требуется 10 минут, нужно сочинить алгоритм, не допускающий осушение скважины. Вода сливается в бочку 180 л. В бочке датчики уровня вполне работоспособны. 

Оптимально при этом, чтоб насос включался как можно реже и отрабатывал весь дебет.

Кто нибудь делал подобное?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Осталось узнать кол-во воды откачиваемой за 50 сек, тогда сложится "оптимально".

Serg1
Offline
Зарегистрирован: 04.12.2015

50 литров.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

И еще, какие значения показывают датчик(и) в бочке, абсолютные или что то другое (min/max) ?

Serg1
Offline
Зарегистрирован: 04.12.2015

В идеале абсолютные, но главное чтоб насос не сдох.

Есть похожая реализация. Тут так раз расписаны подводные камни:

http://www.avrki.ru/articles/content/voprovod/

Думал поставить УЗ датчик, но чужой опыт подсказывает, что это так же ненадёжно.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Serg1 пишет:

В идеале абсолютные, но главное чтоб насос не сдох.

Вы уж определитесь, от этого и алгоритм зависить будет.

Serg1
Offline
Зарегистрирован: 04.12.2015

Абсолютные.

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Вот я накидал тут, не проверял,просто не на чем сейчас.

Есть огрехи небольшие, код "лобовой" без милисс и прочего. Я умаю основная идея будет понятна, допиливать можно сколько угодно


#define PUMP_PER_SECOND 1       // производительность помпы 1 л/с
#define MAX_WELL_SIZE 50        // объем скважины
#define MAX_VOLUME_SIZE 180     // объем бочки
#define TIME_TO_FULL 600        // время нополнения скважины 10 мин 600 сек
#define WELL_PER_SECOND MAX_WELL_SIZE/TIME_TO_FULL  // производительность скважины 0,083 л/с


int well_size = 0; // оставшийся объем воды в скважине

int GetVolume()
{
  // тут надо считать показания датчика и вернуть в литрах
}

void PumpOnOff(byte OnOff)
{
  // вкл/выкл насоса 1-вкл 0-выкл
}

int Evaluate(int vol)
{
  if (vol < MAX_VOLUME_SIZE) { // бочка полная ?
    int i = MAX_VOLUME_SIZE - vol; // сколько литров надо закачать в бочку
    if (i > MAX_WELL_SIZE) i = MAX_WELL_SIZE; // больше обьема скважины не закачать
    i /= PUMP_PER_SECOND; // учет производительности помпы
    PumpOnOff(1); // включаем насос
    while (i > 0) {
      delay(1000); // качаем...
      i--;
      well_size -= PUMP_PER_SECOND; //оставшиеся кол-во воды в скважине
    };
    PumpOnOff(0); // выключаем насос...
    return (MAX_WELL_SIZE - well_size) / WELL_PER_SECOND * 1000; // сколько ждать до наполнения скважины
  } else {
    return 10000; // ну подождем минутку пока кран откроют/закроют
  };
};

void setup() {
  // изначально ждем наполнения, вдруг отрубалось эл-во или еще чего
  //  да и нам не известно изначальное кол-во воды в скважине
  delay(TIME_TO_FULL * 1000); // время заполнения скважины
  well_size = MAX_WELL_SIZE; // объем воды в скважине, полная!
};

void loop() {
  int v = GetVolume();// считываем показания датчика в бочке 0>= v <=MAX_VOLUME_SIZE
  v = Evaluate(v);    // функция обработки показаний датчика, наполнение бочки, 
                      //на выходе сколько надо подождать пока заполнится скважина
                      
  delay(v); // ждем заполнения скважины
  well_size = MAX_WELL_SIZE; // скважена заполнена
};




 

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

Ну можно еще проще написать Вот полный скетч https://yadi.sk/d/3qEDbTMU39rkwo

Ну и головной код

/* to_serg.ino  полный скетч находится https://yadi.sk/d/3qEDbTMU39rkwo
  // #1 насос -> 2
  // #2 датчик верхнего уровеня -> 3
  // #3 датчик нижнего уровеня -> 4
*/
// #1 насос -> 2
#include "Cl_pump.h"
const byte pump_pin = 2;
Cl_pump pump;
// #2 датчик верхнего уровеня
#include "Cl_terminal.h"
const byte terminal_up_pin = 3;
Cl_terminal terminal_up;
void func_1(void) {  // функция отключает насос если верхний датчик сработал
  pump.OFF();
}
// #3 датчик нижнего уровеня
const byte terminal_down_pin = 4;
Cl_terminal terminal_down;
void func_2(void) {  // функция включает насос если нижний датчик сработал
  pump.ON();
}
void setup() {
  // #1 насос
  // насос на 2 пине в течении 10 минут (10*60*1000) работает 50 сек (50*1000) реле вкл когда 0 на ноге
  pump.setup(pump_pin, 10*60*1000, 50*1000, 0); //(нога насоса, время цикла,длительность работы в цикле)
  // #2 датчик верхнего уровеня
  // если вода достигла вернего датчика то на нем будет 0
  terminal_up.setup(terminal_up_pin, 0); //(нога датчика, сработка если 0)
  // #3 датчик нижнего уровеня
   // если вода ушла с нижнего датчика то на нем будет 1
  terminal_down.setup(terminal_down_pin, 1); //(нога датчика, сработка если 1)
}

void loop() {
  // #1 насос
  pump.loop();
  // #2 датчик верхнего уровеня
  terminal_up.loop(& func_1);
  // #3 датчик нижнего уровеня
  terminal_down.loop(& func_2); 
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

Serg1
Offline
Зарегистрирован: 04.12.2015

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

 

В начале бочка пуста, скважина полна.

Запускается насос, забирает 50 литров, отключается на 10 мин, снова забирает 50 литров. И так за 33 мин будет 150 литров в бочке. Последние 30 литров не доберет т.к. есть условие, что насос не будем включать лишний раз ради небольшого долива.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

дык, в моем примере так и есть.

вопрос был к примеру товарища qwone

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

и  в чём цимус? поставьте датчик на полный налив, включать по циклам до полного налива

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

xDriver пишет:

дык, в моем примере так и есть.

вопрос был к примеру товарища qwone

А что там думать. . Один датчик включает насос, а другой отключает. А то что насос работает в пульсирующем режиме. Так пусть за это класс отвечает. То есть каждые 10 минут включает на 50 сек насос. А если идет перелив, то отключает и работу класса и насоса. Ну да что бы налить снова надо дождаться следующие 10 минут, а не 10 минут после отключения. Зато алгоритм работы примитивен.Легко налаживается и тестируется. Да и критичность задания позволяет не мудрствовать.

JekaS
Offline
Зарегистрирован: 09.06.2015

Если не поздно, то вмешаюсь.

Выкачиваемые литры по секундометру не считайте. Большая погрешность в производительности подъема воды из скважины от атмосферного давления и особенно от напряжения в сети 220.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

нужен счеткик воды.

купить можно бу за  2у.е. и допилить - добавить хола. будет считаль и литры  и части литров.

масса проблем отпадет.

или тупо таймер на 3 -4 мин работы насоса и 10-20о отдыха.

Но имхо там ардуина нафик не нужна, достаточно 555 таймера и двух переменных резисторов и одного реле и все....

Bcex
Offline
Зарегистрирован: 16.01.2015

Изобретал я подобный велосипед на ардуинке.Задача была простая бочка на 180 литров не должна опустошаться в дачном доме, из нее весь водопровод в доме, правда ограничений по колодцу у меня нет(столб воды 7метров).

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

Может и вам это подойдет?

Правда там слабое реле и никаких заявленных 10 амп. оно не тянет.

Уменя сгорели и ЗАЛИПЛИ !! контакты через месяц с нагрузкой 400вт,,получилась мини катастрофа) так что сейчас я этим реле включаю автомобильную стартерную релюху , а уже она включает насос.

https://ru.aliexpress.com/item/Liquid-Level-Controller-Sensor-Module-Water-Level-Detection-Sensor-9-12V-Control-High-Current-Relay-Modules/32621988958.html?spm=2114.13010608.0.0.9qIyo1

Serg1
Offline
Зарегистрирован: 04.12.2015

Я в начале темы писал, что дебет у скважины ограниченный. Я купил Ординар Д-4 -реле уровня. В скважину опустил 2 электрода на мин и на макс.

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

JekaS
Offline
Зарегистрирован: 09.06.2015

Offtop

Для раскачки своей малодебетовой скважины (33метра) использовал ОВЕНовское реле http://www.owen.ru/catalog/regulirovaniya_urovnya_zhidkostej_owen_sau_m2/opisanie  САУ-М2

Там вроде три электрода опускалось. Включала/отключала стабильно.

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

Serg1
Offline
Зарегистрирован: 04.12.2015

Так- же рассматриваю варианты бесконтактного контроля (безэлектродного). Поделитесь опытом.

JekaS
Offline
Зарегистрирован: 09.06.2015

Пока делиться нечем. Датчики атмосферного давления bmp180 приобретены. Опускать планирую в полипропиленовой трубе 20 диаметра (или ПНД, еще не решил). Датчик располагается в верхней части трубы, не в воде, верх трубы герметизирован/запаян. Снимать показания в контроллер, калибровать, затем строить логику управления насосом. Принцип/физика тут обсуждались.

Следует ли при таком решении учитывать атмосферное давление (второй датчик)?

Serg1
Offline
Зарегистрирован: 04.12.2015

Думаю не нужно. Т.к. колебания атмосферного давления будут в пределах погрешности в определении уровня воды +\- сантиметры.

Столб воды 10 м это 1 атм.