Определение мгновенной скорости счетчика жидкости типа YF-S

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
Аватара пользователя
ivanpost
Сержант
Сообщения: 136
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Определение мгновенной скорости счетчика жидкости типа YF-S

#1

Сообщение ivanpost » 10.10.2017{, 19:57}

Уважаемые знатоки! У меня в системе несколько счетчиков, поэтому аппаратный счетчик не подходит, но и счет всех импульсов не нужен, именно МГНОВЕННАЯ СКОРОСТЬ, которую буду оценивать 1-2 раза в секунду.
Поэтому подходит способ определения длительности между импульсами с приостановкой выполнения скетча.

Диапазон частоты входных импульсов - от 8 до 600 ГЦ.

Помогите сделать блок, вероятно на CODE, который бы ждал, ловил этот импульс, и мерил длительность до следующего выдавая интервал между ними в мкс.

Вот здесь парни сделали, но добавили делитель, который не нужен:

const uint8_t  pinSensor = 2;                     // Определяем № вывода Arduino, к которому подключён датчик расхода воды
      uint32_t varPulse;                               // Объявляем переменную для хранения длительности импульсов с датчика
      uint8_t  varResult;                              // Объявляем переменную для хранения рассчитанной скорости потока воды
                                                               //
void setup(){                                            //
     pinMode(pinSensor, INPUT);                  // Конфигурируем вывод к которому подключён датчик, как вход
}                                                              //
                                                               //
void loop(){                                              //
    varPulse=pulseIn(pinSensor, HIGH, 200000);                       // Считываем длительность импульса, но не дольше 0,2 сек
    if(varPulse){varResult=uint8_t(1000000/(15*varPulse));}    // Если длительность импульса считана, то рассчитываем скорость потока воды: Q = 1000000/(15L) л/мин
    else        {varResult=0;}                                                    // Если длительность импульса не считана, то считаем что скорость потока воды = 0 л/мин
}
 

И такой вопрос: можно ли делать такой блок на FBD  сделав "выполнение по условию" и "выполнять в цикле пока" ?  Успеет ли он померить такой импульс?

Добавлено (10.10.2017, 19:57)
---------------------------------------------
Уточнение!    Вход в процедуру может прийтись на время, когда датчик уже "включен" и "ждать включения" - слишком долго.  Для экономии процессорного времени имеет смысл считать смены состояния датчика и определять время между первой и третьей сменой состояния!

Аватара пользователя
ivanpost
Сержант
Сообщения: 136
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Определение мгновенной скорости счетчика жидкости типа YF-S

#2

Сообщение ivanpost » 12.10.2017{, 21:42}

Ура!
Проще оказалось разобраться в стандартной C-команде и функции чем написать свой блок!
Немножко улучшил код из начального примера   теперь ловит не только HIGH но и LOW и не допустит частичного чтения полупериода датчика.
Также уменьшено максимальное время считывания - ни у одного из датчиков линейки оно не больше 140 милисекунд.
Учтено и то, что датчик холла делает полный оборот в котором 50% -LOW и 50% -HIGH.

Так что если кому нужен CODE  блок - он в аттаче.    Не знаю, общей библиотеки он заслуживает или нет.    Но меряет точно и быстро.
возможно стоит сразу добавить делитель, и выводить в литрах, но он у разных датчиков сильно разный и китайцы толи его безбожно врут, то ли не понятно как считается
Вложения
____YF-CODE-.ubi
(16.34 КБ) 102 скачивания
Последний раз редактировалось ivanpost 12.10.2017{, 21:44}, всего редактировалось 1 раз.

Аватара пользователя
ivanpost
Сержант
Сообщения: 136
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Определение мгновенной скорости счетчика жидкости типа YF-S

#3

Сообщение ivanpost » 12.10.2017{, 22:46}

Таблица с ардуиновскими датчиками потока
Вложения
2718296.jpg

Аватара пользователя
ivanpost
Сержант
Сообщения: 136
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Определение мгновенной скорости счетчика жидкости типа YF-S

#4

Сообщение ivanpost » 15.10.2017{, 19:14}

Все таки целесообразнее оказалось сделать собственно мгновенную скорость.
Обращаю внимание - у меня в милилитрах в секунду.  Кому необходимо - можно изменить множители.
Коэффициенты для основных датчиков с Али - в описании блока.
Вложения
8928070.ubi
(25.46 КБ) 99 скачиваний

thrash
Рядовой
Сообщения: 12
Зарегистрирован: 18.11.2017{, 02:46}
Репутация: 0
Откуда: Lebedyan

Определение мгновенной скорости счетчика жидкости типа YF-S

#5

Сообщение thrash » 19.01.2018{, 19:45}

ivanpost, дружище, а не мог бы ты прикрутить к счётчику 8928070.ubi ещё один выход? На котором будет вестись отсчёт количества литров (миллилитров) во Float. Буду очень признателен.

Аватара пользователя
AlexCrane
Капитан
Сообщения: 823
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 261
Откуда: Ульяновск
Имя: Александр

Определение мгновенной скорости счетчика жидкости типа YF-S

#6

Сообщение AlexCrane » 19.01.2018{, 20:23}

thrash, Для чего float?

Попробуй
Вложения
Мгновенная_скорость_потока_датчика_YF_(CODE).ubi
(32.58 КБ) 93 скачивания
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

thrash
Рядовой
Сообщения: 12
Зарегистрирован: 18.11.2017{, 02:46}
Репутация: 0
Откуда: Lebedyan

Определение мгновенной скорости счетчика жидкости типа YF-S

#7

Сообщение thrash » 20.01.2018{, 00:20}

Float для того, чтобы на экране отобразилось дробное число.
У меня датчик даёт 450 импульсов на литр или 1000 мл. Счётчик считает в импульсах , масштабирует в мл к выдаёт float значение, которое я разделю на 100 и получу 1,0 литров.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Определение мгновенной скорости счетчика жидкости типа YF-S

#8

Сообщение pan » 20.01.2018{, 13:44}

блоком деления раздели целое цисло на флоат и получишь нужный масштаб уже во флоат

thrash
Рядовой
Сообщения: 12
Зарегистрирован: 18.11.2017{, 02:46}
Репутация: 0
Откуда: Lebedyan

Определение мгновенной скорости счетчика жидкости типа YF-S

#9

Сообщение thrash » 20.01.2018{, 23:56}

Не работает блок

if (digitalRead(pinSensor) == HIGH)
{varPls=pulseIn(pinSensor, LOW, 100000)/5;} // Считываем длительность следующего LOW, но не дольше 0,14 сек
else
{varPls=pulseIn(pinSensor, HIGH, 100000)/5;} // Считываем длительность следующего HIGH, но не дольше 0,14 сек

if(varPls)
{
SpdSensorF=100000000/(varPls*PulseRatio);
SpdSensor= SpdSensorF;
} // Если длительность импульса считана, то рассчитываем скорость потока воды: Q = 1000000/(15L) л/мин
else {SpdSensor=0;} // Если длительность импульса не считана, то считаем что скорость потока воды = 0 л/мин

чёт тут напутано с переменными. Я, к сожалению не силён в с++, но вижу что переменная SpdSensorF что то не то считает.

Аватара пользователя
ivanpost
Сержант
Сообщения: 136
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Определение мгновенной скорости счетчика жидкости типа YF-S

#10

Сообщение ivanpost » 04.02.2018{, 00:24}

А это мой блок? Что то не совсем похож... Может первая версия вгрузилась... Мой нормально считает на всех датчиках YF... Такие блоки использую.
Вложения
Перевод_милилитров_в_литры_для_текущей_скорости_(CODE).ubi
(9.96 КБ) 103 скачивания
Перевод_милилитров_в_литры_для_объема_(CODE).ubi
(9.89 КБ) 111 скачиваний
Мгновенная_скорость_потока_датчика_YF_(CODE).ubi
(42.64 КБ) 110 скачиваний
Длительность_импульса_датчика_потока_YF_(CODE).ubi
(16.34 КБ) 106 скачиваний

JonyBest
Сержант
Сообщения: 139
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 9
Откуда: Близко к Ставрополю
Имя: Евгений

Определение мгновенной скорости счетчика жидкости типа YF-S

#11

Сообщение JonyBest » 23.07.2020{, 22:28}

Доброго дня! Что то не могу разобраться. Можно пример как пользоваться блоками Мгновенная_скорость_потока_датчика_YF и Длительность_импульса_датчика_потока_YF

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Определение мгновенной скорости счетчика жидкости типа YF-S

#12

Сообщение dizzyy » 26.07.2020{, 12:43}

нужно больше описания в блоки по выходам
и наверное нужен будет блок для чтения импульсов , для YF-S201 получилось вообще 370 импульсов..

Ответить

Вернуться в «Разработка пользовательских блоков»