Страница 1 из 2
Стрелковый таймер
Добавлено: 14 янв 2022, 12:30
AresSk
Здравствуйте.
Это мой первый проект, поэтому возможны всякие глупые ошибки.
Это проект стрелкового таймера. Данное устройство используется в спорте "практическая стрельба"
Принцип его работы в следующем. При одинарном нажатии на кнопку через определенный период времени звучит зуммер. Одновременно с началом звона зуммера запускается счетчик времени в секундах с сотыми долями. когда таймер улавливает звук выстрела это время фиксируется и выводится на дисплей(в продвинутых устройствах еще и запоминается но я пока решил ограничится простейшим функционалом). Т.к. фиксируется каждый выстрел получается,что последний выстрел также фиксируется. Это и будет время выполнения всего упражнения.
по длительному нажатию все показания сбрасываются.
также я реализовал еще две функции.
1)По двойному нажатию время до начала зуммера и отсчета рандомизируется. Чтобы сигнал подавался неожиданно
2)вывод последнего сплита(время между выстрелами) на экран
Для улавливания звука используется "датчик хлопка". Если я правильно понял он цифровой и уровень чувствительности регулируется потенциометром на самой плате. Правильное ли это решение или лучше использовать другой датчик. Как его можно програмно загрубить,чтобы не ловил эхо?
13b78626bec38960b6b5dab57ca9a926.jpg
еще один вопрос вызывает подсчет времени. Я использовал генератор и счетчик импульсов. Генератор дает импульс 5мс а затем паузу 15мс. Получается 1 импульс в 20мс. Затем количество импульсов делю на 50 и получаею время в секундах. Правильный ли это способ?
Strelkovy_taymer3.flp
Стрелковый таймер
Добавлено: 14 янв 2022, 13:20
Ingwar
AresSk писал(а): 14 янв 2022, 12:30
Как его можно програмно загрубить,чтобы не ловил эхо?
Если выстрелы не очень частые, то можно одновибратором или таймером OFF и Rтриггером.
Стрелковый таймер
Добавлено: 14 янв 2022, 13:22
AresSk
Ingwar писал(а): 14 янв 2022, 13:20
Если выстрелы не очень частые
частые. до 0.1 сек
Стрелковый таймер
Добавлено: 14 янв 2022, 13:31
Ingwar
AresSk писал(а): 14 янв 2022, 13:22
частые. до 0.1 сек
Ну тогда на этом модуле делать конструкцию для превращения его в узконаправленный... Или использовать классический микрофон и раскладывать спектры выстрела и эха, короче совсем не уровень Flprog ))). ИМХО.
Отправлено спустя 3 минуты 32 секунды:
AresSk писал(а): 14 янв 2022, 12:30
Я использовал генератор и счетчик импульсов
А почему ESP8266 ? Там с точностью/повторяемостью может быть не очень.
Стрелковый таймер
Добавлено: 14 янв 2022, 13:33
AresSk
Ingwar писал(а): 14 янв 2022, 13:27
Ну тогда на этом модуле делать конструкцию для превращения его в узконаправленный... Или использовать классический микрофон и раскладывать спектры выстрела и эха, короче совсем не уровень Flprog ))). ИМХО.
понял, спасибо
Ingwar писал(а): 14 янв 2022, 13:31
А почему ESP8266 ? Там с точностью/повторяемостью может быть не очень.
что было в наличии, ну и чтобы в дальнейшем с интернетом подружить.
На ардуинке,в принципе, тоже можно если она в этом плане получше
Стрелковый таймер
Добавлено: 14 янв 2022, 13:42
Ingwar
AresSk писал(а): 14 янв 2022, 13:33
что было в наличии, ну и чтобы в дальнейшем с интернетом подружить.
Если Вам нужна хоть какая то приемлемая точность, то потрудитесь составить программу так, чтобы в период замера не выполнялся код вывода/ввода (дисплей/интернет и т.д.)
Стрелковый таймер
Добавлено: 14 янв 2022, 14:54
Dryundel
AresSk писал(а): 14 янв 2022, 12:30
Я использовал генератор и счетчик импульсов. Генератор дает импульс 5мс а затем паузу 15мс. Получается 1 импульс в 20мс. Затем количество импульсов делю на 50 и получаею время в секундах. Правильный ли это способ?
Способ в корне не верный. Никакой точности не получите. Используйте скоростной счетчик.
Стрелковый таймер
Добавлено: 14 янв 2022, 18:54
AresSk
Dryundel писал(а): 14 янв 2022, 14:54
Способ в корне не верный. Никакой точности не получите. Используйте скоростной счетчик.
Спасибо за совет.
Начал разбираться со скоростным счетчиком и что-то затупил. Правильно ли я понимаю, что ему необходимо получать импульсы с пина поддерживающего аппаратные прерывания? В таком случае, что будет импульсы задавать? Или мы оставляем генератор 5\15, но он теперь должен выдавать импульсы на этот пин. И с пина уже считываем скоростным счетчиком?
Стрелковый таймер
Добавлено: 14 янв 2022, 21:02
Dryundel
AresSk писал(а): 14 янв 2022, 18:54
Правильно ли я понимаю, что ему необходимо получать импульсы с пина поддерживающего аппаратные прерывания?
Правильно понимаете.
AresSk писал(а): 14 янв 2022, 18:54
В таком случае, что будет импульсы задавать?
Ну конечный импульс придет с вашего датчика звука. А вот на счет стартового, надо подумать. Возможно использовать выходной пин связав его с входным на прерываниях.
Отправлено спустя 49 секунд:
AresSk писал(а): 14 янв 2022, 18:54
И с пина уже считываем скоростным счетчиком?
Не дочитал. Решение уже есть.

Стрелковый таймер
Добавлено: 14 янв 2022, 22:13
AresSk
Dryundel писал(а): 14 янв 2022, 21:02
Не дочитал. Решение уже есть.
Тогда так и поступлю. Спасибо.
Осталось с эхом разобраться
Стрелковый таймер
Добавлено: 24 янв 2022, 12:23
Dryundel
[ref]AresSk[/ref], как продвигается проект?
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука.
Датчик звука.jpg
В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.
Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.
Вывод:
Надо думать.
Вообще задача интересная. Вопрос на сколько она для Вас актуальна.
Стрелковый таймер
Добавлено: 08 фев 2022, 19:50
AresSk
Dryundel писал(а): 24 янв 2022, 12:23
[ref]AresSk[/ref], как продвигается проект?
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука.
Датчик звука.jpg
В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.
Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.
Вывод:
Надо думать.
Вообще задача интересная. Вопрос на сколько она для Вас актуальна.
Частично в тупике,да.
На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат
Стрелковый таймер
Добавлено: 08 фев 2022, 21:08
Dryundel
AresSk писал(а): 08 фев 2022, 19:50
На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат
А проект можно глянуть?
Стрелковый таймер
Добавлено: 09 фев 2022, 13:46
AresSk
Dryundel писал(а): 08 фев 2022, 21:08
AresSk писал(а): 08 фев 2022, 19:50
На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат
А проект можно глянуть?
можно конечно. Но для настройки крутил потенциометр на датчике хлопка
Стрелковый таймер
Добавлено: 09 фев 2022, 14:02
Brand2
[ref]AresSk[/ref],
AresSk писал(а): 14 янв 2022, 13:22
частые. до 0.1 сек
Там что,из АК стреляют?
Стрелковый таймер
Добавлено: 09 фев 2022, 14:41
AresSk
Brand2 писал(а): 09 фев 2022, 14:02
[ref]AresSk[/ref],
AresSk писал(а): 14 янв 2022, 13:22
частые. до 0.1 сек
Там что,из АК стреляют?
в том числе... Даже если не брать в расчет автоогонь то на нормальном УСМ выжать сплит 0.15-0.17 не является уж очень большой проблемой
Стрелковый таймер
Добавлено: 09 фев 2022, 15:26
Dryundel
AresSk писал(а): 09 фев 2022, 13:46
можно конечно. Но для настройки крутил потенциометр на датчике хлопка
Нет, это не может работать правильно. Причин много.
Самые явные:
1. Вы генерируете импульсы с периодом 20 мс в основном цикле. Этой несущей частотой пользуется скоростной счетчик. Принимаете эту несущую частоту за константу, типа 50Гц. А Вы уверены, что в основном цикле реально генерировать стабильную частоту? Вы ее измерить пробовали в состоянии покоя и в момент выстрела? Думаю Вы сильно удивитесь если измерите. Лучше бы уж тогда использовали в качестве генератора буззер.
2. Тот датчик, фото которого в начале темы, по моему выдает аналоговый сигнал. Я не уверен что в момент выстрела, вход на котором этот датчик, срабатывает один раз. Хотя бы защиту от дребезга поставили. И вообще, Вы его подтянули к земле? Как то я сомневаюсь в эффективности аналогового датчика на цифровом пине.
Есть и еще нюансы, но с это самые большие проблемы и их надо исключать.
Стрелковый таймер
Добавлено: 09 фев 2022, 20:06
Brand2
[ref]AresSk[/ref], Для начала разделите задачу на несколько этапов,первый,это подсчет числа выстрелов,я набросал пример,попробуйте,поиграйтесь чувствительностью потенциометра и длительностью одновибратора,может поможет
отстроится от эха.
Можете загрублять чувствительность датчика пока не будет один пульс на выстрел.
Для индикации я поставил светодиод дополнительно.
Данные счетчика можете вывести на дисплей или просто смотреть в мониторе порта.
Подсчет выстрелов.flp
Стрелковый таймер
Добавлено: 10 фев 2022, 09:14
Dryundel
[ref]Brand2[/ref], [ref]AresSk[/ref], таймер и одновибратор немного разные вещи, но не суть.
Таймер наверное лучше настроить на задержку отключения, это отфильтрует возможные ложные срабатывания, в том числе и эхо.
А 100 мс это много. Там промежуток в сплите примерно такой, по словам [ref]AresSk[/ref]. Я бы поставил задержку на отключение 30-50 мс для начала.
Однако, еще раз повторюсь, штатные блоки для этого плохо подходят. Хлопок выстрела (без эха) очень короткий, он сопоставим по времени с длительностью цикла программы (если в ней будет еще и дисплей и алгоритмы подсчета). Поэтому гарантировано поймать сигнал на цифровом пине будет затруднительно. Надо использовать пины с прерыванием, а для данной задачи штатных блоков нет.
Стрелковый таймер
Добавлено: 10 фев 2022, 13:14
Dryundel
[ref]AresSk[/ref]
Итак начнем.
Первое что надо сделать это правильно настроить датчик.
Для этого подключаем его на аналоговый пин.
Для надежности подтяните его к земле 10 - 47 кОм. Именно с этим сопротивлением, в дальнейшем будем использовать датчик, но уже на пине с прерываниями. Хотя может быть это лишнее. Я не смотрел схему датчика.
Берем вот этот тестовый проект.
Настройка датчика.flp
Две кнопки: "Сброс показаний" и "отображение показаний на дисплее".
Кнопки замыкаются на землю.
Важно! Во время теста дисплей должен быть отключен (кнопка "отображение показаний на дисплее" разомкнута). Это для того, что бы не мешать тестированию. Включать дисплей надо только для просмотра показаний.
Данный тестер показывает максимальное напряжение выдаваемое датчиком во время выстрела.
Заданные константы в блоке SCALE актуальны для контроллера с питанием 5V.
Порядок действий:
1. Включаем тестер (Здесь можно посмотреть показания и предварительно настроить датчик так, что бы при тишине (нормальном шумовом фоне) напряжение не превышало 1 v)
2. Производим выстрел
3. Смотрим показания (кнопка"отображение показаний на дисплее")
4. Сбрасываем показания (кнопка"Сброс показаний")
5. Крутим настройку датчика
6. Повторяем все начиная с п.1.
Суть в том, чтобы настроить скачок напряжения при выстреле на 3,6 - 3,7 V. (Актуально для контроллера с питанием 5V)
Пока всё.
Вечером постараюсь написать блок регистрации выстрелов для пина с прерываниями.