Стрелковый таймер

Проект стрелкового таймера на wemos

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#1

Сообщение AresSk » 14.01.2022{, 12:30}

Здравствуйте.
Это мой первый проект, поэтому возможны всякие глупые ошибки.
Это проект стрелкового таймера. Данное устройство используется в спорте "практическая стрельба"
Принцип его работы в следующем. При одинарном нажатии на кнопку через определенный период времени звучит зуммер. Одновременно с началом звона зуммера запускается счетчик времени в секундах с сотыми долями. когда таймер улавливает звук выстрела это время фиксируется и выводится на дисплей(в продвинутых устройствах еще и запоминается но я пока решил ограничится простейшим функционалом). Т.к. фиксируется каждый выстрел получается,что последний выстрел также фиксируется. Это и будет время выполнения всего упражнения.
по длительному нажатию все показания сбрасываются.

также я реализовал еще две функции.
1)По двойному нажатию время до начала зуммера и отсчета рандомизируется. Чтобы сигнал подавался неожиданно
2)вывод последнего сплита(время между выстрелами) на экран

Для улавливания звука используется "датчик хлопка". Если я правильно понял он цифровой и уровень чувствительности регулируется потенциометром на самой плате. Правильное ли это решение или лучше использовать другой датчик. Как его можно програмно загрубить,чтобы не ловил эхо?
13b78626bec38960b6b5dab57ca9a926.jpg
еще один вопрос вызывает подсчет времени. Я использовал генератор и счетчик импульсов. Генератор дает импульс 5мс а затем паузу 15мс. Получается 1 импульс в 20мс. Затем количество импульсов делю на 50 и получаею время в секундах. Правильный ли это способ?
Strelkovy_taymer3.flp
(4.19 МБ) 39 скачиваний

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Стрелковый таймер

#2

Сообщение Ingwar » 14.01.2022{, 13:20}

AresSk писал(а):
14.01.2022{, 12:30}
Как его можно програмно загрубить,чтобы не ловил эхо?
Если выстрелы не очень частые, то можно одновибратором или таймером OFF и Rтриггером.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#3

Сообщение AresSk » 14.01.2022{, 13:22}

Ingwar писал(а):
14.01.2022{, 13:20}
Если выстрелы не очень частые
частые. до 0.1 сек

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Стрелковый таймер

#4

Сообщение Ingwar » 14.01.2022{, 13:27}

AresSk писал(а):
14.01.2022{, 13:22}
частые. до 0.1 сек
Ну тогда на этом модуле делать конструкцию для превращения его в узконаправленный... Или использовать классический микрофон и раскладывать спектры выстрела и эха, короче совсем не уровень Flprog ))). ИМХО.

Отправлено спустя 3 минуты 32 секунды:
AresSk писал(а):
14.01.2022{, 12:30}
Я использовал генератор и счетчик импульсов
А почему ESP8266 ? Там с точностью/повторяемостью может быть не очень.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#5

Сообщение AresSk » 14.01.2022{, 13:33}

Ingwar писал(а):
14.01.2022{, 13:27}
Ну тогда на этом модуле делать конструкцию для превращения его в узконаправленный... Или использовать классический микрофон и раскладывать спектры выстрела и эха, короче совсем не уровень Flprog ))). ИМХО.
понял, спасибо
Ingwar писал(а):
14.01.2022{, 13:31}
А почему ESP8266 ? Там с точностью/повторяемостью может быть не очень.
что было в наличии, ну и чтобы в дальнейшем с интернетом подружить.

На ардуинке,в принципе, тоже можно если она в этом плане получше

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Стрелковый таймер

#6

Сообщение Ingwar » 14.01.2022{, 13:42}

AresSk писал(а):
14.01.2022{, 13:33}
что было в наличии, ну и чтобы в дальнейшем с интернетом подружить.
Если Вам нужна хоть какая то приемлемая точность, то потрудитесь составить программу так, чтобы в период замера не выполнялся код вывода/ввода (дисплей/интернет и т.д.)
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#7

Сообщение Dryundel » 14.01.2022{, 14:54}

AresSk писал(а):
14.01.2022{, 12:30}
Я использовал генератор и счетчик импульсов. Генератор дает импульс 5мс а затем паузу 15мс. Получается 1 импульс в 20мс. Затем количество импульсов делю на 50 и получаею время в секундах. Правильный ли это способ?
Способ в корне не верный. Никакой точности не получите. Используйте скоростной счетчик.

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#8

Сообщение AresSk » 14.01.2022{, 18:54}

Dryundel писал(а):
14.01.2022{, 14:54}
Способ в корне не верный. Никакой точности не получите. Используйте скоростной счетчик.
Спасибо за совет.
Начал разбираться со скоростным счетчиком и что-то затупил. Правильно ли я понимаю, что ему необходимо получать импульсы с пина поддерживающего аппаратные прерывания? В таком случае, что будет импульсы задавать? Или мы оставляем генератор 5\15, но он теперь должен выдавать импульсы на этот пин. И с пина уже считываем скоростным счетчиком?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#9

Сообщение Dryundel » 14.01.2022{, 21:01}

AresSk писал(а):
14.01.2022{, 18:54}
Правильно ли я понимаю, что ему необходимо получать импульсы с пина поддерживающего аппаратные прерывания?
Правильно понимаете.
AresSk писал(а):
14.01.2022{, 18:54}
В таком случае, что будет импульсы задавать?
Ну конечный импульс придет с вашего датчика звука. А вот на счет стартового, надо подумать. Возможно использовать выходной пин связав его с входным на прерываниях.

Отправлено спустя 49 секунд:
AresSk писал(а):
14.01.2022{, 18:54}
И с пина уже считываем скоростным счетчиком?
Не дочитал. Решение уже есть. :)

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#10

Сообщение AresSk » 14.01.2022{, 22:13}

Dryundel писал(а):
14.01.2022{, 21:02}
Не дочитал. Решение уже есть.
Тогда так и поступлю. Спасибо.
Осталось с эхом разобраться

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#11

Сообщение Dryundel » 24.01.2022{, 12:23}

AresSk, как продвигается проект?
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука.
Датчик звука.jpg
В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.

Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.

Вывод:
Надо думать. :)

Вообще задача интересная. Вопрос на сколько она для Вас актуальна.

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#12

Сообщение AresSk » 08.02.2022{, 19:50}

Dryundel писал(а):
24.01.2022{, 12:23}
AresSk, как продвигается проект?
Предположу, что Вы зашли в тупик.
Дошли руки потестировал я подобный датчик звука.
Датчик звука.jpg
В отличии от вашего, на этом присутствует еще и цифровой выход D0
Так вот, пришел я к выводу, что с помощью штатных средств FLProg, создать качественный стрелковый таймер практически нереально. Во всяком случае, мне не удалось придумать как это сделать. Но это не означает что с помощью Arduino (Wemos) и данного звукового датчика нельзя организовать решение побной задачи. Как вариант - надо делать специфические пользовательские блоки или писать скетч на C++.

Вот некоторые результаты исследования датчика.
1. Аналоговый выход датчика в принципе может выдать внятный сигнал хлопка. Однако в FLProg нет штатных средств, с помощью которых возможно гарантировано зафиксировать данный сигнал, т.к. он очень короткий.
2. Попытка использовать цифровой выход штатными средствами, так же не особо удалась по причине того, что в момент хлопка, на этом выходе пролетает довольно внушительная пачка очень коротких импульсов, гарантированная фиксация которых возможна только через пины поддерживающие прерывания.

Вывод:
Надо думать. :)

Вообще задача интересная. Вопрос на сколько она для Вас актуальна.
Частично в тупике,да.

На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#13

Сообщение Dryundel » 08.02.2022{, 21:08}

AresSk писал(а):
08.02.2022{, 19:50}
На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат
А проект можно глянуть?

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#14

Сообщение AresSk » 09.02.2022{, 13:46}

Dryundel писал(а):
08.02.2022{, 21:08}
AresSk писал(а):
08.02.2022{, 19:50}
На воздухе, где нет эха удалось настроить нормально. В помещении - крайне нестабильный результат
А проект можно глянуть?
можно конечно. Но для настройки крутил потенциометр на датчике хлопка
Вложения
Strelkovy_taymer3.flp
(4.39 МБ) 37 скачиваний

Brand2
Лейтенант
Сообщения: 413
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 41
Откуда: Haifa
Имя: Alex

Стрелковый таймер

#15

Сообщение Brand2 » 09.02.2022{, 14:02}

AresSk,
AresSk писал(а):
14.01.2022{, 13:22}
частые. до 0.1 сек
Там что,из АК стреляют?

AresSk
Рядовой
Сообщения: 22
Зарегистрирован: 06.01.2022{, 16:23}
Репутация: 0
Имя: Ефим

Стрелковый таймер

#16

Сообщение AresSk » 09.02.2022{, 14:41}

Brand2 писал(а):
09.02.2022{, 14:02}
AresSk,
AresSk писал(а):
14.01.2022{, 13:22}
частые. до 0.1 сек
Там что,из АК стреляют?
в том числе... Даже если не брать в расчет автоогонь то на нормальном УСМ выжать сплит 0.15-0.17 не является уж очень большой проблемой

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#17

Сообщение Dryundel » 09.02.2022{, 15:26}

AresSk писал(а):
09.02.2022{, 13:46}
можно конечно. Но для настройки крутил потенциометр на датчике хлопка
Нет, это не может работать правильно. Причин много.
Самые явные:
1. Вы генерируете импульсы с периодом 20 мс в основном цикле. Этой несущей частотой пользуется скоростной счетчик. Принимаете эту несущую частоту за константу, типа 50Гц. А Вы уверены, что в основном цикле реально генерировать стабильную частоту? Вы ее измерить пробовали в состоянии покоя и в момент выстрела? Думаю Вы сильно удивитесь если измерите. Лучше бы уж тогда использовали в качестве генератора буззер.
2. Тот датчик, фото которого в начале темы, по моему выдает аналоговый сигнал. Я не уверен что в момент выстрела, вход на котором этот датчик, срабатывает один раз. Хотя бы защиту от дребезга поставили. И вообще, Вы его подтянули к земле? Как то я сомневаюсь в эффективности аналогового датчика на цифровом пине.

Есть и еще нюансы, но с это самые большие проблемы и их надо исключать.

Brand2
Лейтенант
Сообщения: 413
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 41
Откуда: Haifa
Имя: Alex

Стрелковый таймер

#18

Сообщение Brand2 » 09.02.2022{, 20:06}

AresSk, Для начала разделите задачу на несколько этапов,первый,это подсчет числа выстрелов,я набросал пример,попробуйте,поиграйтесь чувствительностью потенциометра и длительностью одновибратора,может поможет
отстроится от эха.
Можете загрублять чувствительность датчика пока не будет один пульс на выстрел.
Для индикации я поставил светодиод дополнительно.
Данные счетчика можете вывести на дисплей или просто смотреть в мониторе порта.
Подсчет выстрелов.flp
(115.93 КБ) 37 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#19

Сообщение Dryundel » 10.02.2022{, 09:14}

Brand2, AresSk, таймер и одновибратор немного разные вещи, но не суть.
Таймер наверное лучше настроить на задержку отключения, это отфильтрует возможные ложные срабатывания, в том числе и эхо.
А 100 мс это много. Там промежуток в сплите примерно такой, по словам AresSk. Я бы поставил задержку на отключение 30-50 мс для начала.
Однако, еще раз повторюсь, штатные блоки для этого плохо подходят. Хлопок выстрела (без эха) очень короткий, он сопоставим по времени с длительностью цикла программы (если в ней будет еще и дисплей и алгоритмы подсчета). Поэтому гарантировано поймать сигнал на цифровом пине будет затруднительно. Надо использовать пины с прерыванием, а для данной задачи штатных блоков нет.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Стрелковый таймер

#20

Сообщение Dryundel » 10.02.2022{, 13:14}

AresSk

Итак начнем.

Первое что надо сделать это правильно настроить датчик.
Для этого подключаем его на аналоговый пин.
Для надежности подтяните его к земле 10 - 47 кОм. Именно с этим сопротивлением, в дальнейшем будем использовать датчик, но уже на пине с прерываниями. Хотя может быть это лишнее. Я не смотрел схему датчика.

Берем вот этот тестовый проект.
Настройка датчика.flp
(234.09 КБ) 30 скачиваний
Две кнопки: "Сброс показаний" и "отображение показаний на дисплее".
Кнопки замыкаются на землю.

Важно! Во время теста дисплей должен быть отключен (кнопка "отображение показаний на дисплее" разомкнута). Это для того, что бы не мешать тестированию. Включать дисплей надо только для просмотра показаний.

Данный тестер показывает максимальное напряжение выдаваемое датчиком во время выстрела.
Заданные константы в блоке SCALE актуальны для контроллера с питанием 5V.

Порядок действий:
1. Включаем тестер (Здесь можно посмотреть показания и предварительно настроить датчик так, что бы при тишине (нормальном шумовом фоне) напряжение не превышало 1 v)
2. Производим выстрел
3. Смотрим показания (кнопка"отображение показаний на дисплее")
4. Сбрасываем показания (кнопка"Сброс показаний")
5. Крутим настройку датчика
6. Повторяем все начиная с п.1.

Суть в том, чтобы настроить скачок напряжения при выстреле на 3,6 - 3,7 V. (Актуально для контроллера с питанием 5V)

Пока всё. :)
Вечером постараюсь написать блок регистрации выстрелов для пина с прерываниями.

Ответить

Вернуться в «ESP8266»