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

- Dryundel
- Полковник
- Сообщения: 2406
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Поблагодарили: 15 раз
Стрелковый таймер
[ref]AresSk[/ref], как продвигается проект?
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука. В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.
Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.
Вывод:
Надо думать.
Вообще задача интересная. Вопрос на сколько она для Вас актуальна.
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука. В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.
Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.
Вывод:
Надо думать.

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

Вечером постараюсь написать блок регистрации выстрелов для пина с прерываниями.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей