Код (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); }
Устройство работает,но некорректно. Не точно измеряет расстояние до поверхности воды. Помогите пож поправить скетч.
Кстати при испытаниях датчика с использованием только одной библиотеки, всё работает точно и надёжно в тех же самых условиях.
А вот у меня с таким датчиком сильно лучше работает вот такая либа https://github.com/enjoyneering/HCSR04. Функция getMedianFilterDistance()
Спасибо за содействие.Опробовал пример на базе,предложенной Вами библиотеки,-работает мах точно,но в свой скетч внедрить пока,не могу
Я бы порекомендовал использовать кондукторные датчики уровня для подобного плана решений. у Овен есть такой прибор: САУ-М2, к нему подключается кондукторный датчик уровня типа такого: Один электрод общий, второй включение подачи воды, третий отключение подачи. У меня два таких устройства с датчиками работают уже много лет, без единого сбоя. Один на откачке грязной, жирной воды, из емкости (раковины, посудомойка и т.п.)
До недавнего времени работал именно такой контроллер САУ-М2 с самодельнім датчиком из нержавеющей проволоки 4мм, кстати при длине двух длинных электродов 125см перемычки-изоляторы,не применялись. За заполнение бака ночью,отвечал бытовой таймер (300рублей),который отключал на одну минуту(меньше невозможно) промежуточным реле один из длинных электродов,тем самым имитируя нижний критический уровень воды. Была и осталась цель иметь на утро болный бак воды для полива. Хочеться выполнить систему на более совершенном техническом уровне. В любой момент знать сколько воды в баке,её температура и т.д.
У меня бочка 1500 литров, колодец, в котором уровень воды к концу жаркого лета падает до небольшой лужицы. Вода родниковая, чистая очень холодная. Дальше выкопать нельзя, там каменная плита. Но вода, вне зависимости от уровня, заполняет колодец за 5-7минут, до того уровня, что на текущий момент есть. До июня вода выше уровня земли, выливается через трубу на уровне земли. В колодце насос Gardena со встроенной автоматикой включения / выключения, и бочка в 1500 литров, с Овеном и датчиком кондукторного типа. Из бочки 1500л качает насосная станция, дом, душ, полив. САУ контролирует уровень в бочке и включает насос в колодце. Насос в колодце включается / выключается в зависимости от уровня в колодце, пока не заполнит бочку. Бочка всегда полная, разница включения выключения сантиметров 10, пока есть вода в колодце. Уровень в бочке смотрю только в конце лета, чтобы знать, на что рассчитывать. Все остальное время она полная. САУ надежен, я бы его оставил, нужен уровнеметр - добавьте его отдельно, не нагружая автоматикой заполнения.