Общие сведения
Датчик расхода воды YF-S201 — позволяет измерять скорость потока воды.
Характеристики
- Рабочее напряжение: 5 ... 18 В.
- Потребляемый ток: до 15 мА (при Vcc = 5 В).
- Уровень лог «1» на выходе датчика: >4.5 В (при Vcc = 5 В).
- Уровень лог «0» на выходе датчика: <0.5 В (при Vcc = 5 В).
- Измеряемый диапазон расхода воды: 1 ... 30 л/мин.
- Погрешность измерений: ±10%.
- Импульсов на литр (по даташиту): 450.
- Формула расхода воды (по даташиту): F (Гц) = 7,5 * Q (л/м).
- Коэффициент заполнения выходного импульса: 40 - 60 %.
- Рабочее давление: <1,75 МПа (= 17,5 бар = 17,27 атм).
- Рабочая температура: 0 ... 80 °C
- Температура жидкости: <120 °C
- Влажность воздуха: 35 ... 90 %
- Размер патрубка: ∅20 мм (внешний), ∅10 мм (внутренний)
- Размер трубной резьбы: G1/2'' (1/2 трубного дюйма)
(внешний ∅20,955 мм / внутренний ∅18,631 мм / шаг 1,814 мм) - Габариты: 65x36x36 мм
- Вес: 43 г
Подключение
Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.
Подключение датчика зависит от выбранного Вами алгоритма подсчета его импульсов:
- Если Вы будете подсчитывать количество импульсов с датчика, используя внешнее прерывание, то информационный вывод датчика нужно подключить только к тому выводу Arduino, который используют внешние прерывание. Преимуществом данного метода является то, что все импульсы датчика будут, гарантированно, подсчитаны и для этого не требуется приостанавливать выполнение скетча. Недостаток данного метода заключается в том, что не все выводы Arduino используют внешние прерывания.
- Если Вы будете подсчитывать количество импульсов с датчика, измеряя длительность импульсов (пауз), то информационный вывод датчика можно подключить к любому выводу Arduino. Преимуществом данного метода является то, что количество подключаемых датчиков ограничено количеством свободных выводов Arduino. Еще одним преимуществом является то, что расчёт скорости происходит в режиме реального времени, после каждого импульса (паузы). Но есть и недостатки. Скважность импульсов с датчика имеет погрешность ±10%, значит длительности импульсов не совпадают с длительностями пауз и к результатам измерений добавится указанная погрешность ±10%. Чтение длительности импульсов функцией pulseIn() приостанавливает выполнение скетча на время чтения.

Питание
Входное напряжение 5 ... 18 В постоянного тока, подаётся на красный (Vcc) и чёрный (GND) провода датчика.
Подробнее о датчике
Датчик расхода воды YF-S201 состоит из пластикового корпуса, водяного ротора с магнитами и датчика Холла. Скорость вращения ротора прямо пропорциональна скорости водяного потока. Чем выше скорость, тем чаще магниты проходит рядом с датчиком Холла, тем больше импульсов на информационном выводе датчика.
Формула расхода воды: Q = F / 7,5.
- F - частота импульсов в Гц (количество импульсов с датчика за 1 секунду).
- Q - скорость потока воды в л/м, (количество литров прошедшее через датчик за 1 минуту).
Для удобства будем получать скорость Q не в л/м, а в л/с: Q = F / 450.
- F - частота импульсов в Гц (количество импульсов с датчика за 1 секунду).
- Q - скорость потока воды в л/с, (количество литров прошедшее через датчик за 1 секунду).
Формула определения объема воды: V = ∑ (Q*T).
- V - объем воды прошедшей через датчик.
- Q - скорость потока воды.
- T - время в течении которого сохранялась указанная скорость потока воды Q.
- Единцы измерений должны быть приведены друг к другу.
- Если скорость Q указана в л/с то время T нужно указать в сек., а объем V будет в литрах.
- Если скорость Q указана в см3/м то время T нужно указать в мин., а объем V будет в см3.
Примеры
Скорость потока и объем воды определяются подсчётом количества импульсов с датчика.
Определение скорости и объема воды, используя внешнее прерывание:
uint8_t pinSensor = 2; // Определяем номер вывода Arduino, к которому подключён датчик расхода воды. // uint32_t varTime; // Объявляем переменную для хранения времени последнего расчёта. float varQ; // Объявляем переменную для хранения рассчитанной скорости потока воды (л/с). float varV; // Объявляем переменную для хранения рассчитанного объема воды (л). volatile uint16_t varF; // Объявляем переменную для хранения частоты импульсов (Гц). // void funCountInt(){varF++;} // Определяем функцию, которая будет приращать частоту импульсов. // void setup(){ // Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта. pinMode(pinSensor, INPUT); // Конфигурируем вывод к которому подключён датчик, как вход. uint8_t intSensor = digitalPinToInterrupt(pinSensor); // Определяем номер прерывания который использует вывод pinSensor. attachInterrupt(intSensor, funCountInt, RISING); // Назначаем функцию funCountInt как обработчик прерываний intSensor при каждом выполнении условия RISING - переход от 0 к 1. if(intSensor<0){Serial.print("Указан вывод без EXT INT");} // Выводим сообщение о том, что датчик подключён к выводу не поддерживающему внешнее прерывание. varTime=0; varQ=0; varV=0; varF=0; // Обнуляем все переменные. } // // void loop(){ // // Если прошла 1 секунда: // if( (varTime+1000)<millis() || varTime>millis() ){ // Если c момента последнего расчёта прошла 1 секунда, или произошло переполнение millis то ... // Определяем скорость и расход воды: // varQ = (float)varF / 450.0f; // Определяем скорость потока воды л/с. varF = 0; // Сбрасываем частоту импульсов датчика, значение этой переменной приращается по прерываниям. varTime = millis(); // Сохраняем время последних вычислений. varV += varQ; // Определяем объем воды л. // Выводим рассчитанные данные: // Serial.println((String) "Объем "+varV+"л, скорость "+(varQ*60.0f)+"л/м."); } // // Тут может выполняться ваш код ... // } //
- В этом примере скорость потока воды varQ рассчитывается по формуле Q = F / 450.
- Частота импульсов датчика varF определяется как сумма прерываний за одну секунду.
- Объем воды varV определяется по формуле V = ∑ (Q*T), где T=1 (время измерений = 1 сек).
- При расчётах varQ определяется в л/с, а в монитор выводим значение в л/м.
Определение скорости и объема воды, методом подсчёта длительности импульсов
uint8_t pinSensor = 2; // Определяем номер вывода Arduino, к которому подключён датчик расхода воды. // float varQ; // Объявляем переменную для хранения рассчитанной скорости потока воды (л/с). float varV; // Объявляем переменную для хранения рассчитанного объема воды (л). // void setup(){ // Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта. pinMode(pinSensor, INPUT); // Конфигурируем вывод к которому подключён датчик, как вход. varQ=0; varV=0; // Обнуляем все переменные. } // // void loop(){ // varQ = 0; // Сбрасываем скорость потока воды. uint32_t varL = pulseIn(pinSensor, HIGH, 200000); // Считываем длительность импульса, но не дольше 0,2 сек. if( varL ){ // Если длительность импульса считана, то ... float varT = 2.0 * (float)varL / 1000000; // Определяем период следования импульсов в сек. float varF = 1/varT; // Определяем частоту следования импульсов в Гц. varQ = varF / 450.0f; // Определяем скорость потока воды л/с. varV += varQ * varT; // Определяем объем воды л. } // // Выводим рассчитанные данные: // Serial.println((String) "Объем "+varV+"л, скорость "+(varQ*60.0f)+"л/м."); } //
- В этом примере вычисления производятся после каждого импульса полученного с датчика, значит период расчётов совпадает с периодом следования импульсов.
- Длительность импульсов varL определяется функцией pulseIn().
- Так как скважность импульсов ≈ 50%, то период varT определяется по формуле: T ≈ 2L.
- Частота импульсов varF определяется по формуле F = 1/T.
- Скорость потока воды varQ рассчитывается по формуле Q = F / 450.
- Объем воды varV определяется по формуле V = ∑ (Q*T).
- При расчётах varQ определяется в л/с, а в монитор выводим значение в л/м.
Достоинства и недостатки обоих примеров описаны выше, в разделе «Подключение».
Комплектация
- 1х Датчик расхода воды YF-S201;
Ссылки
- DataSheet;
- Датчик расхода воды YF-S401, рассчитанный на меньшее значение давления и скорости водяного потока;