Управление водонапорной башней с ультразвуковым герметичным датчиком

Тема в разделе "Arduino & Shields", создана пользователем Евгений DFZ, 27 июн 2022.

  1. Код (C++):
    //Программа управления водонапорной башней
    // Бак 3200 литров на высоте 4 метра требуется заполнять водой из скважины.
    // На входе бака установлен электромагнитный клапан (нормально закрытый).
    // Данный скетч посвящается модулю управления на ардуино
    #include <iarduino_HC_SR04.h>
    #include <Wire.h>
    #include <TroykaRTC.h>
    iarduino_HC_SR04 hcsr(12, 9);
    // Время долить до полного в час ночи
    #define FEED_HOUR_1 01
    #define FEED_MINUTE_1 00
    #define FEED_SECOND_1 00
    const int SPEAKER = 10;
    const int LED = 11; //Зеленый светодиод,он же реле вкл насоса
    const int LOWER_LEVEL = 145; //Нижний уровень.Бак пустой
    const int NIGHT_LEVEL = 40; //Условный ниж предел для долива ночью
    const int UPPER_LEVEL = 25; //Верхний уровень.Бак полный
    boolean flag = true;// Флаг "Уже долили"
    boolean one_time = false; // Флаг звука динамика
    RTC clock;

    void setup() {

      Serial.begin (9600);
      clock.begin();// Инициализируем часы
      clock.set(__TIMESTAMP__);// Устанавливаем время
      pinMode(LED, OUTPUT); //Сконфигурировать контакт светодиода (реле),как выход
    }
    void loop() {

      clock.read();
      if (((clock.getHour() == FEED_HOUR_1) && (clock.getMinute() == FEED_MINUTE_1) && (clock.getSecond() == FEED_SECOND_1) && (NIGHT_LEVEL < hcsr.distance()))) // Узнать,пришло ли, ночное время долить до полного
      {
        flag == false;
        digitalWrite(LED, HIGH); // Открываем клапан,заполняем бак
      }
      else if (LOWER_LEVEL < hcsr.distance())
      { if (!one_time)
        {
          tone(SPEAKER, 900, 500); //Прозвучать,что бак заполняется (холодной водой)
          one_time = true;
        }
        else
        {
          noTone(SPEAKER);
        }
        digitalWrite(LED, HIGH);
      }
      else if (UPPER_LEVEL > hcsr.distance())
      {
        noTone(SPEAKER);
        one_time = false;
        digitalWrite(LED, LOW);
      }
      Serial.println(hcsr.distance());
      delay(500);
    }
     
    Последнее редактирование модератором: 28 июн 2022
  2. Устройство работает,но некорректно. Не точно измеряет расстояние до поверхности воды.
    Помогите пож поправить скетч.
     
  3. Кстати при испытаниях датчика с использованием только одной библиотеки, всё работает точно и надёжно в тех же самых условиях.
     
  4. Andy16

    Andy16 Гик

    А вот у меня с таким датчиком сильно лучше работает вот такая либа https://github.com/enjoyneering/HCSR04.
    Функция getMedianFilterDistance()
     
    Евгений DFZ нравится это.
  5. Спасибо за содействие.Опробовал пример на базе,предложенной Вами библиотеки,-работает мах точно,но в свой скетч внедрить пока,не могу
     
  6. SergeiL

    SergeiL Оракул Модератор

    Я бы порекомендовал использовать кондукторные датчики уровня для подобного плана решений.
    у Овен есть такой прибор: САУ-М2, к нему подключается кондукторный датчик уровня типа такого:
    [​IMG]
    Один электрод общий, второй включение подачи воды, третий отключение подачи.
    У меня два таких устройства с датчиками работают уже много лет, без единого сбоя.
    Один на откачке грязной, жирной воды, из емкости (раковины, посудомойка и т.п.)
     
  7. До недавнего времени работал именно такой контроллер САУ-М2 с самодельнім датчиком из нержавеющей проволоки 4мм, кстати при длине двух длинных электродов 125см перемычки-изоляторы,не применялись. За заполнение бака ночью,отвечал бытовой таймер (300рублей),который отключал на одну минуту(меньше невозможно) промежуточным реле один из длинных электродов,тем самым имитируя нижний критический уровень воды. Была и осталась цель иметь на утро болный бак воды для полива.
    Хочеться выполнить систему на более совершенном техническом уровне. В любой момент знать сколько воды в баке,её температура и т.д.
     
  8. SergeiL

    SergeiL Оракул Модератор

    У меня бочка 1500 литров, колодец, в котором уровень воды к концу жаркого лета падает до небольшой лужицы.
    Вода родниковая, чистая очень холодная. Дальше выкопать нельзя, там каменная плита.
    Но вода, вне зависимости от уровня, заполняет колодец за 5-7минут, до того уровня, что на текущий момент есть. До июня вода выше уровня земли, выливается через трубу на уровне земли.
    В колодце насос Gardena со встроенной автоматикой включения / выключения, и бочка в 1500 литров, с Овеном и датчиком кондукторного типа.
    Из бочки 1500л качает насосная станция, дом, душ, полив. САУ контролирует уровень в бочке и включает насос в колодце.
    Насос в колодце включается / выключается в зависимости от уровня в колодце, пока не заполнит бочку.
    Бочка всегда полная, разница включения выключения сантиметров 10, пока есть вода в колодце.
    Уровень в бочке смотрю только в конце лета, чтобы знать, на что рассчитывать. Все остальное время она полная.
    САУ надежен, я бы его оставил, нужен уровнеметр - добавьте его отдельно, не нагружая автоматикой заполнения.