Датчик расхода воды YF-S401

           В автоматизированных системах, где необходима дозированная подача или контроль потребления воды, используются специализированные устройства — крыльчатые счётчики с датчиками Холла. Например, в кофемашинах, автоматах газированных напитков, промышленных линиях разлива жидкой продукции. В рамках этой статьи рассмотрим пример такого прибора учёта — датчик расхода воды YF-S401.

датчик расхода воды YF-S401

Конструкция и принцип работы

           Устройство изготовлено из герметичного пластикового корпуса с двумя патрубками, на которые рекомендуется устанавливать мягкие силиконовые трубки с внутренним диаметром примерно 6 мм (внешний диаметр патрубка равен 7,2 мм). Сам прибор учёта необходимо подключать в разрыв системы водоснабжения, аналогично подключению амперметра в разрыв электрической цепи.            

           Внутри расходомера на валу расположена крыльчатка, которая вращается под напором жидкости. Также на валу установлено кольцо с постоянным магнитом. Под верхней крышкой прибора, которая прикрепляется к основному корпусу посредством четырёх саморезов, расположена печатная плата с сенсором Холла. Именно от него выходит трёхпроводный шлейф.

датчик расхода воды YF-S401
Рисунок 1 — Внутреннее строение YF-S401

           При прохождении потока через счётчик крыльчатка вращается. Соответственно, на валу магнит тоже вращается, и каждый оборот он проходит мимо датчика Холла, в следствие чего на его выходе генерируется импульс. Чем выше скорость вращения крыльчатки, тем выше частота импульсов. На этой прямой зависимости и строится принцип измерения расхода (объём прошедшей жидкости за промежуток времени).


Основные параметры

           Важно уточнить, что в datasheet’ах (варианты первый, второй, третий и четвёртый) от различных производителей некоторые параметры могут существенно различаться, особенно напряжение питания. Поэтому рекомендуется запитывать устройство тем же питанием, что и микроконтроллер (3,3…5 В).

датчик расхода воды YF-S401

Схема подключения

           Прибор учёта подключается в разрыв контура водоснабжения через патрубки. Причём необходимо соблюдать направление потока, о чём указывает стрелочка на поверхности корпуса:

датчик расхода воды YF-S401
Рисунок 2 — Подключение трубок водоснабжения к счётчику в соответствии с направлением потока

           Шлейф у прибора состоит из трёх проводов со следующей маркировкой:

           Несмотря на то, что расходомер может работать при напряжении питания от 5 до 12 В (в некоторых источниках указывается и до 24 В, всё зависит от встроенной в прибор модели сенсора Холла), рекомендуется работать от 5 В. Так как уровень выходного сигнала зависит от величины питания, то при работе с Arduino или другими микроконтроллерами необходимо соблюдать согласованность уровней напряжения, иначе есть риск повредить контроллер.

           На рисунке ниже представлена схема подключения счётчика к отладочной плате:

Рисунок 3 — Схема подключения расходомера YF-S401 к отладочной плате Arduino UNO

           Сигнальный контакт SIG подключается к выводу №2 отладочной платы, поскольку именно через него производится подключение к одному из двух выводов микроконтроллера ATmega328P (а именно пин №4 — INT0), которые работают с прерываниями по внешнему сигналу.


Скетч для Arduino

           Прежде чем писать скетч, необходимо уточнить методику пересчёта частоты импульсов (с выхода сенсора Холла) в объём пропускаемой воды. В документации к расходомеру приводится соотношение: при прохождении 1 литра генерируется 5880 импульсов. Также указывается формула:

где F [Гц] — частота импульсов;

Q [литры в минуту (л/м)] — расход жидкости.

           В основе работы программы для измерения расхода воды лежит подсчитывание количества импульсов в течение 1 секунды. Это осуществляется при помощи подпрограммы прерываний. Сигнальный выход прибора учёта подключается к пину №2 отладочной платы, поскольку микроконтроллер может отслеживать состояние логического уровня именно на этом пине. Перепад уровня инициирует аппаратное прерывание, которое вызывает отдельную подпрограмму.

           В основном цикле программы производится расчёт через каждые 1000 миллисекунд (реализовано в виде паузы). За это время подсчитывается число импульсов внутри подпрограммы прерывания. Так как прерывание аппаратное, то оно не зависит от паузы внутри основного цикла. А уже после паузы производятся расчёты скорости водяного потока и подсчёт общего объёма прокаченной жидкости за всё время с момента старта программы.

           В процессе экспериментов было замечено, что результат подсчёта общего объёма по формуле из datasheet’а сильно отличается от фактического. Например, в мерный стакан было налито 250 мл, а счётчик показал 200 мл. Или было перекачено 1 литр, а в результате измерено датчиком примерно 800 мл. То есть расходомер занижает показания относительно фактического объёма примерно в 1,25 раза. Если ввести в формулу этот поправочный коэффициент, то результаты измерений будут более достоверными:

           В Интернете также можно встретить улучшенную, эмпирически выведенную конкретно для прибора YF-S401 формулу, которая учитывает влияние скорости:

где 5,9 — коэффициент, учитывающий влияние скорости;

4570 — коэффициент линейной зависимости количества импульсов от объёма жидкости.

           В нашем натурном эксперименте коэффициент 1,25 был определён эмпирически,  поскольку нужно было проверить на практике работу насоса с той фактической скоростью, которая определяется напряжением питания помпы.

           Ниже представлен подробно описанный скетч:

volatile int pulseCount = 0; // число импульсов (имп.)
float flowRate; // скорость потока
float totalLiters = 0; // общий объём прокаченной влаги
float max_v = 0; // промежуточная переменная для расчёта общего объёма

const float pulse_per_litre = 98; // число имп. при протекании 1 литра за 1 секунду


void setup() {
    Serial.begin(9600);
    pinMode(2, INPUT); // настройка пина №2 отладочной платы на вход



    // настройка прерываний состоит из трёх аргументов
    // digitalPinToInterrupt(2) - назначаем пин №2 на обработку внешних прерываний
    // pulseCounter - функция, которая выполняет подпрограмму прерываний
    // RISING - тип сигнала, при котором срабатывает прерывание
    // в данном случае при росте сигнал с низкого логического уровня на высокий уровень

    attachInterrupt(digitalPinToInterrupt(2), pulseCounter, RISING);
}

void loop() {

    // Вычисление "литр-в-минуту" по формуле из документации: Q = F / 98
    // где F - это значение pulseCount (число имп.)
    // pulse_per_litre = 98 - это нормированное производителем количество 
    // имп. в секунду при прокачке 1 литр в минуту

    flowRate = (pulseCount / pulse_per_litre); // прокачка "литр-в-минуту"
   



    // вычисление общего объёма прокаченной влаги, суммируя каждую секунду показания 

    // уровень "литр-в-минуту" в данную секунду прибавляется к суммарной величине 
    // (величина "max_v" в литрах) за всё время работы программы

    // 1.25 - это поправочный коэффициент

    max_v = max_v + (pulseCount / pulse_per_litre)*1.25; 
    totalLiters = max_v * 1000.0; // переводим литры в миллилитры для большей наглядности
    




    // вывод значений в монитор порта
    Serial.print("Скорость водяного потока: ");
    Serial.print(flowRate);
    Serial.print(" л/м");
    Serial.print(" | Общий расход воды: ");
    Serial.print(totalLiters);
    Serial.println(" мл");
    
    pulseCount = 0; // Сброс

    delay(1000); // подсчёт осуществлять через каждые 1000 миллисекунд
}



// подпрограмма прерываний
void pulseCounter() {

    pulseCount++; // инкрементирование переменной

    // в течение 1 секунды подпрограмма прерываний срабатывает столько раз,
    // сколько было имп.
}

Эксперимент

           Для проверки работы прибора учёта соберём макет дозатора, используя воздушно-водяной мембранный насос модели R385:

воздушно-водяной мембранный насос R385
Рисунок 4 — Мембранный насос R385

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

воздушно-водяной мембранный насос R385

           Для плавной перекачки снизим уровень питания насоса до 8 В. Ниже представлена фотография собранного макета для дозированной подачи из бутылки в мерный стакан.

Рисунок 5 — Макет в сборе

           Для большей точности измерения объёма жидкости предварительно заполним водяной контур. За счёт этого в момент старта испытания (подача питания на насос) наливаемая в стакан жидкость уже начнёт достоверно учитываться.

           На скриншоте ниже представлен монитор порта Arduino IDE, в котором отображаются результаты измерений.

           По показаниям скорости видно, когда стартовала и завершилась прокачка (нулевые значения). В процессе эксперимента фактически достигнута скорость приблизительно 1 литр в минуту: за 12 секунд перекачено 250 миллилитров (на скриншоте указано 0,8 л/м без учёта поправочного коэффициента). Помпа была отключена в тот момент, когда мерный стакан заполнился до указанной отметки:

           Эксперимент показывает, что разница между измеренной величиной и фактической составляет примерно ±2%. Но такой результат достигнут лишь только благодаря дополнительной калибровке системы (подбор поправочного коэффициента).


Выводы

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

           Точность измерения сильно зависит от принципа и методики математической обработки импульсов, которые выдаёт сенсор Холла в составе устройства. При корректном подходе и небольшой калибровке можно достичь точности измерений приблизительно ±2%.

           Таким образом, рассмотренная модель счётчика вполне подойдёт для дозатора питьевой воды в кулерах или автоматизированных схем полива в теплицах.