Определение мгновенной скорости счетчика жидкости типа YF-S
- ivanpost
- Сержант
- Сообщения: 142
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Контактная информация:
Определение мгновенной скорости счетчика жидкости типа YF-S
Уважаемые знатоки! У меня в системе несколько счетчиков, поэтому аппаратный счетчик не подходит, но и счет всех импульсов не нужен, именно МГНОВЕННАЯ СКОРОСТЬ, которую буду оценивать 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)
---------------------------------------------
Уточнение! Вход в процедуру может прийтись на время, когда датчик уже "включен" и "ждать включения" - слишком долго. Для экономии процессорного времени имеет смысл считать смены состояния датчика и определять время между первой и третьей сменой состояния!
Поэтому подходит способ определения длительности между импульсами с приостановкой выполнения скетча.
Диапазон частоты входных импульсов - от 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
- Сержант
- Сообщения: 142
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Контактная информация:
Определение мгновенной скорости счетчика жидкости типа YF-S
Ура!
Проще оказалось разобраться в стандартной C-команде и функции чем написать свой блок!
Немножко улучшил код из начального примера теперь ловит не только HIGH но и LOW и не допустит частичного чтения полупериода датчика.
Также уменьшено максимальное время считывания - ни у одного из датчиков линейки оно не больше 140 милисекунд.
Учтено и то, что датчик холла делает полный оборот в котором 50% -LOW и 50% -HIGH.
Так что если кому нужен CODE блок - он в аттаче. Не знаю, общей библиотеки он заслуживает или нет. Но меряет точно и быстро.
возможно стоит сразу добавить делитель, и выводить в литрах, но он у разных датчиков сильно разный и китайцы толи его безбожно врут, то ли не понятно как считается
Проще оказалось разобраться в стандартной C-команде и функции чем написать свой блок!
Немножко улучшил код из начального примера теперь ловит не только HIGH но и LOW и не допустит частичного чтения полупериода датчика.
Также уменьшено максимальное время считывания - ни у одного из датчиков линейки оно не больше 140 милисекунд.
Учтено и то, что датчик холла делает полный оборот в котором 50% -LOW и 50% -HIGH.
Так что если кому нужен CODE блок - он в аттаче. Не знаю, общей библиотеки он заслуживает или нет. Но меряет точно и быстро.
возможно стоит сразу добавить делитель, и выводить в литрах, но он у разных датчиков сильно разный и китайцы толи его безбожно врут, то ли не понятно как считается
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ivanpost 12 окт 2017, 21:44, всего редактировалось 1 раз.
- ivanpost
- Сержант
- Сообщения: 142
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Контактная информация:
Определение мгновенной скорости счетчика жидкости типа YF-S
Таблица с ардуиновскими датчиками потока
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- ivanpost
- Сержант
- Сообщения: 142
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Контактная информация:
Определение мгновенной скорости счетчика жидкости типа YF-S
Все таки целесообразнее оказалось сделать собственно мгновенную скорость.
Обращаю внимание - у меня в милилитрах в секунду. Кому необходимо - можно изменить множители.
Коэффициенты для основных датчиков с Али - в описании блока.
Обращаю внимание - у меня в милилитрах в секунду. Кому необходимо - можно изменить множители.
Коэффициенты для основных датчиков с Али - в описании блока.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Определение мгновенной скорости счетчика жидкости типа YF-S
ivanpost, дружище, а не мог бы ты прикрутить к счётчику 8928070.ubi ещё один выход? На котором будет вестись отсчёт количества литров (миллилитров) во Float. Буду очень признателен.
- AlexCrane
- Капитан
- Сообщения: 895
- Зарегистрирован: 20 окт 2017, 13:22
- Откуда: Ульяновск
- Имя: Александр
Определение мгновенной скорости счетчика жидкости типа YF-S
thrash, Для чего float?
Попробуй
Попробуй
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Определение мгновенной скорости счетчика жидкости типа YF-S
Float для того, чтобы на экране отобразилось дробное число.
У меня датчик даёт 450 импульсов на литр или 1000 мл. Счётчик считает в импульсах , масштабирует в мл к выдаёт float значение, которое я разделю на 100 и получу 1,0 литров.
У меня датчик даёт 450 импульсов на литр или 1000 мл. Счётчик считает в импульсах , масштабирует в мл к выдаёт float значение, которое я разделю на 100 и получу 1,0 литров.
Определение мгновенной скорости счетчика жидкости типа YF-S
блоком деления раздели целое цисло на флоат и получишь нужный масштаб уже во флоат
Определение мгновенной скорости счетчика жидкости типа YF-S
Не работает блок
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 что то не то считает.
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
- Сержант
- Сообщения: 142
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Контактная информация:
Определение мгновенной скорости счетчика жидкости типа YF-S
А это мой блок? Что то не совсем похож... Может первая версия вгрузилась... Мой нормально считает на всех датчиках YF... Такие блоки использую.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
Определение мгновенной скорости счетчика жидкости типа YF-S
Доброго дня! Что то не могу разобраться. Можно пример как пользоваться блоками Мгновенная_скорость_потока_датчика_YF и Длительность_импульса_датчика_потока_YF
Определение мгновенной скорости счетчика жидкости типа YF-S
нужно больше описания в блоки по выходам
и наверное нужен будет блок для чтения импульсов , для YF-S201 получилось вообще 370 импульсов..
и наверное нужен будет блок для чтения импульсов , для YF-S201 получилось вообще 370 импульсов..
Определение мгновенной скорости счетчика жидкости типа YF-S
кто может пояснить по блокам? Кто использовал?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость