Датчик расхода воды и Arduino

В этой статье мы расскажем вам все, что нужно знать о датчике расхода воды и его использовании с платами Arduino. Будут затронуты следующие темы:

  • Краткое описание датчика расхода воды.
  • Принцип работы датчика расхода воды холла.
  • Как использовать датчик расхода воды (оборудование и код).
  • Подробная информация о формуле расчета.

Что такое датчик уровня расхода воды?

Мы используем датчик расхода воды для измерения расхода воды. Расход воды - это объем жидкости, который проходит в единицу времени. Люди часто используют датчик расхода воды для автоматического управления водонагревателем, самодельных кофемашин, торговых автоматов и т.д. Существует множество датчиков потока с разными принципами действия, но для производителей, использующих Arduino или Raspberry Pi, наиболее распространенный датчик потока основан на устройстве Холла. Например, самые классические датчики расхода воды YF-S402 и YF-S201 полагаются на датчики Холла.

Итак, как работает датчик расхода воды Холла?

Принцип работы датчика расхода воды

Чтобы объяснить, как работает поток воды, давайте откроем крышку и посмотрим.

Разобранный датчик расхода воды

Все компоненты YF-402

Компоненты датчика расхода воды

Принцип работы датчика расхода воды довольно простой. Основными компонентами являются датчик Холла, колесо турбины и магнит. Вода поступает через входное отверстие и выходит через выходное отверстие. Водяной поток заставлял колесо вращаться, и магнит на колесе вращался вместе с ним. Вращение магнитного поля запускает датчик Холла, который выдает прямоугольные волны высокого и низкого уровня (импульс).

Принцип работы датчика расхода воды

На каждый оборот колеса объем протекающей воды составляет определенное количество, как и количество выходных прямоугольных волн. Следовательно, мы можем рассчитать расход воды, посчитав количество прямоугольных волн (импульсов).

Как использовать датчик расхода воды с Arduino

Необходимые материалы

Подключение электроники

Для подключения используются 3 провода:

  • Красный для Vcc
  • Черный для GND
  • Желтый для импульсного выхода.

Для плат на базе Atmega 328, таких как Arduino UNO и Seeeduino V4.2 есть два цифровых контакта, которые можно использовать как прерывание. Цифровой вывод 2 для прерывания 0 и цифровой вывод 3 для прерывания 1. Мы используем вывод D2 для обнаружения импульсного выхода датчика расхода воды. Если вы используете базовый экран Seeeduino + Grove, просто подключите датчик расхода воды к разъему D2. Если вы используете другую плату Arduino, используйте перемычки для подключения к правильному контакту.

Подключение датчика расхода воды к Arduino

Программа для Arduino

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

Уровень сигнала

Затем откройте свою IDE Arduino и скопируйте код, который приведен ниже. Загрузите код в Arduino.

/*

YF‐ S201 Water Flow Sensor

Water Flow Sensor output processed to read in litres/hour

Adaptation Courtesy: www.hobbytronics.co.uk

*/

volatile int flow_frequency; // измеряет частоту

int l_hour; // рассчитанные литр/час

unsigned char flowsensor = 2; // Вход сенсора

unsigned long currentTime;

unsigned long cloopTime;

void flow () // функция прерывания

{

flow_frequency++;

}

void setup()

{

pinMode(flowsensor, INPUT);

digitalWrite(flowsensor, HIGH);

Serial.begin(9600);

attachInterrupt(0, flow, RISING); // настраиваем прерывания

sei(); // активируем прерывания

currentTime = millis();

cloopTime = currentTime;

}

void loop ()

{

currentTime = millis();

// Каждую секунду рассчитываем и выводим на экран литры в час

if(currentTime >= (cloopTime + 1000))

{

cloopTime = currentTime; // Обновление cloopTime

// Частота импульсов (Гц) = 7.5Q, Q - это расход в л/мин.

l_hour = (flow_frequency * 60 / 7.5); // (Частота x 60 мин) / 7.5Q = расход в л/час

flow_frequency = 0; // Сбрасываем счетчик

Serial.print(l_hour, DEC); // Отображаем л/час

Serial.println(" L/hour");

}

}

Установите скорость передачи данных на 9600 в серийном мониторе. По мере прохождения воды значение потока будет отображаться в соответствующем окне.

Формула для расчета расхода воды с ипользованием датчика и Arduino

В разделе кода мы использовали определенную формулу, так как же появилась эта формула?

l_hour = (flow_frequency * 60 / 7.5)

Ранее мы упоминали, что при каждом обороте колеса определен объем протекающей жидкости. В то же время количество импульсов, генерируемых за один оборот колеса, также составляет определенную величину. Таким образом, мы можем установить уравнение между количеством импульсов и расходом воды.

Например для YF-S201 на каждый литр протекающей воды датчик Холла выдает 450 импульсов. Давайте займемся математикой. 450 импульсов на 1 литр, поэтому каждый импульс означает протекание 1/450 литра воды. За V_total (литр) возьмем общий объем жидкости, протекающей через датчик расхода воды в определенный момент времени t (секунда), а за N общее количество обнаруженных импульсов. Тогда мы получим:

V_total(L) = N* 1/450(L)

Кроме того, общий объем жидкости, протекающей через датчик расхода воды, равен расходу воды (Q - литр/секунда), умноженному на время t (секунда).

V_total(L) = Q(L/s)*t(s)

В результате получаем

N*1/450 = Q(L/s)*t(s)

N/t = 450 * Q(L/s)

N/t является частотой f, так что:

f = 450*Q(L/s);

Q(L/s) = f/450;

Q(L/min) = f*60/450 = f/7.5

Q(L/hour) = f*60*60/450 = f*60/7.5

Для YF - S402 на каждый литр протекающей воды датчик Холла выдает 4380 импульсов. Итак, формула должна быть:

f = 4380*Q(L/s);

Q(L/s) = f/4380;

Q(L/min) = f*60/4380 = f/73

Q(L/hour) = f*60*60/4380 = f*60 /73

Вот и все. Надеемся, статья была вам полезна и интересна.