Измерение скорости и объема потока воды с помощью Arduino

Если вы посещали когда-нибудь промышленные предприятия, на которых используется вода в том или ином виде, вы могли заметить что ее потребление на этих предприятиях автоматизировано. К примеру, предприятия по изготовлению каких-нибудь напитков или предприятия химической промышленности непрерывно измеряют расход (объем) воды, который они потребляют. Для этой цели чаще всего используются так называемые датчики расхода воды (Flow Sensor). Используя подобный датчик и любой микроконтроллер, например, Arduino, мы можем определять скорость потока воды и, следовательно, можем рассчитать объем воды, который прошел через трубу. Также подобные датчики расхода воды широко применяются в сельском хозяйстве, приготовлении еды, горнодобывающей промышленности, системах очистки воды, кофе-машинах и т.д. Рассмотренный в этой статье датчик расхода воды будет хорошим дополнением к таким проектам на основе платы Arduino на нашем сайте как автоматический дозатор воды и автоматическая система полива растений.

Внешний вид подключения датчика расхода воды к плате Arduino Uno

В этой статье мы рассмотрим подключение датчика расходы воды (water flow sensor) к плате Arduino. Измеренный объем (расход) воды мы будем отображать на экране ЖК дисплея, подключенного к плате Arduino. Для нашего проекта мы использовали датчик расхода воды YF-S201, который использует эффект Холла для измерения скорости потока жидкости.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Датчик расхода воды (water flow sensor) YF-S201 (купить на AliExpress).
  3. ЖК дисплей 16х2 (купить на AliExpress).
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. Соединительные провода.
  6. Водопроводная труба.

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

Как показано на рисунке, датчик YF-S201 имеет три провода: красный, желтый и черный. Красный провод используется для подачи питающего напряжения, которое может составлять от 5V до 18V, а черный провод подключается к земле (GND). Через желтый провод осуществляется передача выходных импульсов датчика, которые могут быть считаны микроконтроллером. Измеряющим элементом датчика является вихревое колесо (pinwheel), которое измеряет количество жидкости, прошедшее через него.

Внешний вид датчика YF-S201 с подсоединенными коннекторами

Принцип работы датчика расхода воды YF-S201 основан на эффекте Холла, который заключается в появлении разности потенциалов в электрическом проводнике под действием магнитного поля, приложенного перпендикулярно протекающему через проводник току. Датчик расхода воды YF-S201 включает датчик Холла, который генерирует электрический импульс с каждым вращением (оборотом) колеса, измеряющего поток воды. При этом датчик Холла надежно запаян и непосредственно не контактирует с водой, что позволяет ему всегда оставаться сухим и готовым к работе. Внешний вид датчика расхода воды YF-S201 показан на следующем рисунке.

Внешний вид датчика расхода воды YF-S201

Для соединения датчика YF-S201 с водопроводной трубой мы использовали два коннектора с внутренней резьбой, показанные на следующем рисунке.

Коннекторы, которые мы использовали для соединения датчика YF-S201 с водопроводной трубой

В соответствии со спецификацией на датчик YFS201 максимальный потребляемый ток при питающем напряжении 5V составляет 15mA. При этом измеряемая им скорость потока воды составляет от 1 до 30 литров в минуту. Когда через датчик протекает поток воды, он контактирует с лопатками турбины (колеса), расположенного на пути потока воды. Ось турбины соединена с датчиком Холла, поэтому всегда, когда через датчик протекает поток воды, датчик Холла генерирует электрические импульсы. Все что нам нужно сделать для измерения скорости потока воды – это измерять время между этими импульсами или подсчитывать количество этих импульсов за 1 секунду. С помощью этих данных затем мы можем рассчитать скорость потока воды в литрах в минуту (L/Hr - liter per hour) и далее с помощью простой формулы найти объем воды, который прошел (протек) через трубу. Для подсчета количества импульсов от датчика расходы воды мы будем использовать плату Arduino Uno.

Схема проекта

Схема подключения датчика расхода воды к плате Arduino Uno представлена на следующем рисунке.

Схема подключения датчика расхода воды к плате Arduino Uno

Соединения между платой Arduino, ЖК дисплеем 16x2 и датчиком расхода воды представлены в следующих таблицах ниже. Потенциометр подключен к контактам 5V и GND, а его средний контакт подключен к контакту V0 ЖК дисплея.

Датчик расхода воды Плата Arduino
красный провод 5V
черный провод GND
желтый провод 2
ЖК дисплей Плата Arduino
Vss GND (ground rail of breadboard)
VDD 5V (Positive rail of the breadboard)
V0 к потенциометру
RS 12
RW GND
E 11
D7 9
D6 to D3 3 to 5

После сборки проекта на макетной плате у нас получилась конструкция следующего вида:

Внешний вид конструкции проекта

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В начале программы необходимо подключить библиотеку для работы с ЖК дисплеем, а также указать плате Arduino, к каким ее контактам подключен ЖК дисплей, в нашем случае это контакты 12, 11, 5, 4, 3, 9. Выходной контакт датчика расходы воды подключен к контакту 2 платы Arduino UNO.

Также мы запрограммируем функцию void flow(), которая будет являться обработчиком прерывания с контакта 2 платы Arduino. При каждом поступающем сигнале прерывания на этот контакт значение переменной flow_frequency будет увеличиваться на 1. Если вы ранее не сталкивались с прерываниями, то рекомендуем вам прочитать статью на нашем сайте о прерываниях в Arduino.

В функции void setup мы зададим режим работы контакта 2 платы Arduino на ввод данных и с помощью функции attachInterrupt сконфигурируем его как контакт, на котором будет происходить обнаружение прерываний. Прерывание на этом контакте будет обнаруживаться при увеличении уровня напряжения на нем. При каждом таком случае будет вызываться функция обработки прерывания flow, в которой будет происходить инкрементирование переменной flow_frequency. Переменные current time и cloopTime используются для измерения временного промежутка длительностью 1 секунда.

Далее в функции void loop () условие if(currentTime >= (cloopTime + 1000)) гарантирует что код внутри него будет выполняться каждую секунду. Благодаря этому мы можем рассчитать количество импульсов, поступающих с датчика расхода воды за секунду. Из даташита на датчик расходы воды можно узнать, что частота импульсов в нем умножается на 7.5, поэтому чтобы найти скорость потока воды в литрах в минуту, нам в программе необходимо измеренную частоту импульсов (flow_frequency) разделить на 7.5. После нахождения скорости потока воды в литрах в минуту мы делим полученную величину на 60 чтобы определить скорость потока воды в литрах в секунду. Для расчета объема прошедшей через датчик воды значение переменной l_minute прибавляется к значению переменной vol каждую секунду.

Далее после оператора else работает код, если за прошедшую секунду не поступало никаких импульсов от датчика расхода воды.

Тестирование работы проекта

В нашем проекте мы подключили датчик расхода воды к водопроводной трубе. Если по трубе не течет воды, то на выход датчика расхода воды не поступает никаких импульсов, следовательно, не регистрируется прерываний на контакте 2 платы Arduino и значение переменной flow_frequency будет равно нулю. В этом случае выполняется код основной программы, идущий после оператора else.

Тестирование работы проекта

Если по трубе протекает вода, то турбина (колесо, крыльчатка) внутри датчика расхода воды начинает вращаться, поэтому на выходе датчика расхода воды появляются электрические импульсы, генерируемые датчиком Холла. Каждый из этих импульсов вызывает срабатывание прерывания на контакте 2 платы Arduino. С каждым поступившим сигналом прерывания (rising edge – передний фронт импульса) значение переменной flow_frequency увеличивается на 1. Затем переменные current time и cloopTIme гарантируют, что значение переменной flow_frequency будет учитываться в расчетах каждую секунду. После проведения вычислений значение переменной flow_frequency устанавливается равным 0 и процесс начинается сначала.

Более подробно работу проекта вы можете посмотреть в видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
2 680 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *