Гусь — домашний тренировочно-игровой стрелковый стенд с лазерными мишенями и интеллектуальным сопровождением для отработки меткости и техники стрельбы, а также для развлечения всех любителей пострелять!
Тренажер представляет собой несколько умных устройств, которые должны работать в связке автономно, а при online включении становиться частью глобальной облачной инфраструктуры. Системы рейтингов, редакторы и магазины сценариев игр и программ тренировок — то, над чем еще предстоит пофантазировать и во что должен эволюционировать Гусь.
Ниже вас ждет история, как идея воплощается в жизнь. Когда простые решения работают, а когда они вынужденно усложняются и требуют мучительного поиска подходящего варианта. Как появлялись схемы и корпуса, как мы шаг за шагом создаем лабораторную версию устройства.
Одной прекрасной ночью, накануне сдачи экзамена по безопасному владению оружием, мне приснился сон — я был в тире и стрелял по световым мишеням. Сначала показалось, что я очутился в Counter Strike и отрабатываю AIM (меткость), но вскоре дошло — это тренировка! Я не просто стрелял по произвольным мишеням, холостил, отрабатывал чёткость и плавность движений. Тир как будто был наделён интеллектом, контролировал каждое моё движение и корректировал программу занятий. Оказалось, нас много, все стрелки тренируются и соревнуются, каждый у себя дома.
Это было чертовски увлекательно!
Экзамен был сдан с первого раза. Я рассказал об этой идее другу, и с этого момента у нас появилось неуёмное желание сделать умный тренажёр, чтобы каждый мог похолостить перед охотой и походом в тир или скоротать время, стреляя по лазерным мишеням.
Идея была объединить игру, тренировку и современные технологии.
Гусиные пёрышки
Гусь каждому придётся по вкусу, он прост и ненавязчив. Умён и хитёр. Его лазерные мишени не так просто подстрелить, когда с ним соревнуешься. А когда тренируешься — он мягок и покладист, только держи на мушке. Благодаря своему зоркому глазу Гусь всё видит, а электронному уму ещё и точно знает, когда и куда стреляли.
У Гуся есть компаньон. На оружие или муляж устанавливается насадка-контроллер с универсальным оптическим датчиком спуска и лазерной имитацией дробового пятна. С напарником Гусь обретает чуткий слух и осязание. Гусь запомнит удачные и плавные выстрелы, обратит внимание на резкие движения и неудачный выход на цель, а стрелок получит статистику и рекомендации.
Гусиные навыки
У Гуся есть четыре амплуа или четыре характера, которые проявляются по-разному в игре и тренировках. Во время игры Гусь проявляет разнообразие и фантазию, заставляя стрелка попотеть, отстреливая все цели, но на тренировках Гусь собран и строго выполняет программу занятий, отслеживая качество выполнения заданий стрелком. Гуся легко обучить, записав новую программу занятий и сценарии игры.
В качестве мишени в первой версии Гуся выбран маломощный лазер, отражающийся на стенах в виде красной точки и установленный на вращающейся платформе. В перспективе на место лазера напрашивается лазерный проектор, проецирующий цели с анимацией и разной формы. Пока же разнообразие целей обеспечивается несколькими программами движений с разными настраиваемыми характеристиками, которые объединяются в сценарии. Предполагается, что сценарии могут быть созданы как разработчиками, так и пользователями и проигрываются с SD карты устройства.
Сценарии включают в себя траектории, характеристики движения, моменты появления и яркость цели, произвольные задержки и переходы. Для тренировки в режиме «Спортинг» устройство запускает цель по основным стандартным траекториям, например боковые или угонные мишени. Для тренировки скорости реакции и меткости — мишени появляются в произвольных местах и исчезают. А в игровых режимах задания ограничиваются только фантазией создателя, который будет реализовывать задуманный геймплей в виде набора сценариев.
Программное окружение и облачная инфраструктура в перспективе позволит объединить все устройства в локальную или глобальную сеть с библиотекой сценариев и программами тренировок. Показания с датчиков устройств сохраняются в процессе тренировки и могут быть загружены в мобильное приложение или облако для анализа результативности тренировок и разработки новых упражнений, нацеленных на отработку конкретных навыков. Наша фантазия по применению таких данных не знает границ, так как много лет занимаемся разработкой инфраструктуры для крупных систем анализа информации, на Хабре были опубликованы статьи про Социальный монитор и Cubisio.
Собирая статистику промахов и попаданий, показания с гироскопа и акселерометра, путем нехитрых вычислений и машинного обучения, можно получить множество полезных показателей. Сравнивая эти данные с результатами разных программ тренировок становится возможным выявление наиболее эффективных. Это с одной стороны. С другой — развитие в сторону коллаборации пользователей и объединение в своего рода социальную сеть с тренерами и стрелками, программами упражнений, игровыми уровнями, соревнованиями и рейтингами. Гусь в таком представлении выполняет роль терминального устройства для взаимодействия пользователей удалённо.
Arduino, STM32, ESP32 — о железяках…
Техническая глава для тех, кто любит возиться с устройствами или во всех подробностях разбирать по косточкам.
Изначально всё выглядело очень просто — нужно всего лишь управлять сервоприводами и вовремя включать лазер, а сценарии движения проигрывать напрямую из файла. Отличная задача для ардуинки. Но не тут-то было.
Будучи опытными программистами, но новичками в электронике, мы двинулись в неизвестность — как обычно, от простого к сложному, преодолевая трудности и неизбежно натыкаясь на непредвиденные неприятные сюрпризы.
Первая же попытка собрать прототип на отладочной плате и написать программу не увенчалась успехом. Скудный объем оперативной и Flash памяти контроллера Arduino не позволил даже запрограммировать движок проигрывания сценариев, не говоря уже о подключении сенсорного экрана, беспроводных датчиков и видео модуля с распознаванием.
Обсудив с коллегой, мы решили закончить войну с ардуинкой за ресурсы и попробовать микроконтроллер STM32. Взвесив все за и против, решено было для начала взять также отладочную плату, но сразу помощнее, так как наши амбиции росли, а планируемый функционал расширялся. Популярная BluePill на STM32F103 на фоне возросших амбиций уже тоже смотрелась слабовато. Поэтому пока мы остановились на плате WeAct на STM32f411 c 512Kb Flash и 128Kb оперативной памяти.
В будущих версиях напрашивается микроконтроллер с большим запасом памяти и дополнительной полезной периферией, а также некоторые технические решения будут пересмотрены и перенесены из модулей на основную плату. Но всему своё время.
Шина питания и автономность
По задумке устройство однозначно должно быть автономным с запасом питания минимум на час-два активной тренировки. При этом по схемотехнике шина питания должна включать как минимум две линии — линия стабильного напряжения 3.3В и линия ~5-6В для питания сервоприводов.
Первая идея была простой — взять за основу вариант с последовательным 2S подключением пары аккумуляторов 18650. Имея до 9В на выходе, ставим понижающий импульсный преобразователь, формирующий стабильные 5-6 В шины сервоприводов, и к ней же в свою очередь подключаем отладочные платы микроконтроллеров (у них на бору вариант стабилизатора AMS1117).
Вариант оказался абсолютно не из той оперы… Во-первых, сервоприводы при движении создают помехи, которые сгладить не просто, конденсаторы тут не помогали. Во вторых, сложности с зарядкой. Требовалось дополнительно ставить модуль балансировки заряда и подбирать подходящий блок питания. А хотелось-то сделать «как у всех» — поддержать стандартную зарядку USB Type-C.
Взвесив за и против, мы выбрали путь повышения напряжений и схему параллельного подключения аккумуляторов 2P. Тем более, что под руками оказалась замечательная плата TP4056 в варианте с USB Type-C, с ней проблема контроля заряда и разряда аккумулятора оказалась закрыта.
В качестве повышающего преобразователя был выбран MT3608. К сожалению, подключение к нему сервоприводов напрямую оказалось неработоспособным — сервоприводы выбрасывали в сеть огромные помехи, из-за которых контроллер, питающийся от своего стабилизатора, перезагружался и сбоил. Конденсаторы помогали очень слабо.
На выручку пришли старые добрые линейные стабилизаторы серии LM780x. Со стабилизатором LM7805 и парой конденсаторов линии питания наконец стали ровными, не зависимо от работы сервоприводов.
Но и это решение не обошлось без компромиссов. Оказалось, что иногда попадаются сервоприводы (мы выбрали MG995), которые не работают от 5В принципиально при нижнем пороге по даташиту в 4.8В. При этом попытка поднять напряжение и заменить линейный стабилизатор на LM7806 делало схему нестабильной (в некоторых случаях потребляемые токи превышали какой-то предел, после которого возникали скачки или падение напряжения в линии питания с уже известными последствиями).
Голова целеуказателя и видео-модуль
Видео-модуль, расположенный в голове Гуся, должен сопровождать цель и при получении сигнала о выстреле фиксировать кадры и запускать распознавание и вычисление расстояния от мишени до дробового пятна, а именно между красным и зелеными пятнами лазеров.
В качестве первого и пока устоявшегося варианта на эту роль отлично подошла плата ESP32-CAM. Одновременно на этот же модуль была возложена вся коммуникация, Bluetooth (BLE) для взаимодействия с насадкой-контроллером и датчиком спуска на оружии, а WiFi для интеграции с облаком и обновлений.
Взаимодействие основного микроконтроллера и видео-модуля внутри Гуся осуществляется по проводам через последовательный интерфейс SPI, а также для удобства из головы в основной корпус была выведена дополнительная шина для отладки и прошивки видео-модуля без разбора.
Насадка-контроллер и датчик спуска
В качестве начинки для насадки-контроллера сразу решено было использовать знакомый ESP32, но на этот раз ESP32-WROOM-32 без отладочной платы. Bluetooth (BLE) для связи насадки с базой, а сам микроконтроллер для обработки показаний с датчиков гироскопа/акселерометра и распознавания голосовых команд с микрофона.
Датчик спуска (курка) решено было реализовать в виде внешнего модуля на трех проводах с подключением через разъем наушников MiniJack. В идеале датчик спуска должен крепиться на спусковую скобу, не мешая производить выстрелы, и фиксировать пересечение спусковым крючком луча оптопары.
На практике же по странной причине вначале была сделана версия с компаратором на плате устройства и цифровым сигналом на входном пине микроконтроллера, но быстро было решено упростить в пользу прямого подключения — выводного пина для сигнала питания датчика и аналогового входного пина для получения выходного сигнала с оптопары. При считывании сигнала с АЦП гораздо проще программно подстраивать пороговые значения срабатывания для разных курков и вариантов крепления, а также в будущем открывается простор для поддержки других реализаций датчика, например, резистивных или электромагнитных.
Питание в навесном устройстве также оказалось задачей не с самым очевидным решением.
Время автономной работы должно быть сравнимо с базой, при этом достаточно иметь одну шину питания со стабильными 3.3В. С учетом наличия мощного зеленого лазера и прожорливого при беспроводной работе ESP32, стабилизатор должен выдавать ток хотя бы до 750мА.
Здесь напрашивается несколько вариантов. Первый и самый простой — использовать стабилизатор на 3.3В (тот же AMS1117) и работать с аккумулятором в верхней половине заряда. Другими словами, заведомо использовать более мощный аккумулятор, но разряжать его не ниже допустимого для стабилизатора минимального напряжения. Второй вариант — использовать buck&boost преобразователь, способный выдавать стабильные 3.3В как при большем, так и меньшем входном напряжении — классно и удобно. Но на практике этот вариант оказался дорогим в реализации, такие чипы сложно найти в наличии и они бьют по цене устройства. И третье решение в лоб — использовать дешевый повышающий преобразователь на 5В и после него понижающий стабилизатор на 3.3В.
Пока мы решили остановиться на первом варианте, хотим провести ряд экспериментов и замеров, чтобы сравнить разницу эффективности первого варианта с неиспользованием части емкости аккумулятора и третьего варианта с потерями в лишнем стабилизаторе.
Включение и выключение устройств
Следующим моментом, непосредственно влияющим на автономность устройства, оказалось управление питанием, а именно, как будет реализовано включение, выключение и спящий режим.
Наличие в схеме устройств нескольких шин питания и преобразователей напряжения ставит под вопрос использование спящего режима, так как такой подход требует отключения простаивающей нагрузки при сохранении основного питания микроконтроллера. При этом устройства в выключенном или спящем режиме не должны терять возможность зарядки аккумулятора.
В базе Гуся выключение было решено реализовать максимально просто — добавлением тумблера в разрыв проводника между самодостаточным модулем зарядки TP4056 и повышающим преобразователем на материнской плате устройства. В результате тумблер отключает от батареи всю внешнюю нагрузку вместе с основным питанием микроконтроллера, который имеет RTC модуль с подключенной часовой батарейкой на плате.
В насадке-контроллере Гуся подобный тумблер применять было бы не эстетично. Здесь напрашивается всего одна тактовая кнопка и для управления питанием, и для управления устройством во время работы. Было решено спроектировать схему на транзисторе, которая будет одновременно выполнять несколько функций:
-
удерживание кнопки при выключенном устройстве включает;
-
включенный микроконтроллер состоянием пина управляет ключевым режимом транзистора на линии питания;
-
кнопка при включенном устройстве работает как тактовая, подключенная к входному пину микроконтроллера;
-
длительное удерживание кнопки при включении устройства вводит прошивку в режим обновления;
-
нажатие на дополнительную копку принудительно отключает питание, переводя транзистор в закрытый режим.
Данная схема реализована пока только в теории, хотя и проверена на симуляторе, но планируется ее применить в следующей версии платы насадки-контроллера. Возможно, сообщество Хабра подкинет хорошие идеи или поможет обнаружить незамеченные косяки.
Пока же, реализованная в текущей версии схема не предусматривает отключение питания, а только управляет глубоким спящим режимом контроллера по тактовой кнопке, оставляя стабилизатор и нагрузку подключенными.
Калибровка лазера
Отдельной интересной задачей было сделать механику калибровки лазера у насадки-контроллера по прицельным приспособлениям оружия. Настройку изначально было решено сделать механической при помощи винтов, как это сделано у подавляющего большинства лазерных целеуказателей. Оставался вопрос — как бы всё это разместить, не раздувая корпус.
В результате пары дискуссий и нескольких визуальных умозаключений был найден, как в таких случаях чаще всего бывает, самый простой и одновременно самый подходящий вариант. Механизм включает всего одну петлю из тонкой пружинной проволоки для давления по двум осям и пару регулирующих винтов со втулками, скрыто вмонтированными в корпус. Устойчивость и стабильность конструкции достигается мягкой опорой, полученной литьём силикона в форму.
Лабораторная птица
Гусь амбициозен, но молод и скромен. Многому ещё Гусю нужно научиться и набраться опыта, сменить оперение и вырасти на потеху всем охотникам и стрелкам. На волю Гусю хочется, но пока в лаборатории ему теплее и комфортнее.
Таких Гусей будет мало, самые первые — самые ценные, уникальные. Понаблюдаем за ними, потренируем, и в тираж полетит птица вольная. А пока ограничимся главным.
Являясь новичками в схемотехнике и занимаясь проектом на пару, как говорится, в свободное от основной работы время и с финансированием из кармана, мы, тем не менее, непременно движемся по запланированному пути к заявленной цели — создать лабораторную версию устройства и вывести ее на рынок для апробации.
Мы не называем Гуся прототипом. На текущем этапе разработки мы запланировали создать полностью рабочее решение, но с ограниченной функциональностью и ограниченным тиражом, которое как прототип реализует все технические задумки, а как готовое устройство позволит пользователям играть и тренироваться, на практике испробовать новый подход к тренировкам, обрисовать улучшения для будущих версий.
На текущем этапе мы реализовали все основные технические решения, некоторые из которых еще стоит доработать. Полностью разработали дизайн корпусов, подготовили модели для 3D печати и литья. Мы подобрали комплектующие и воспроизвели почти весь цикл производства устройства своими силами в условиях «гаража», собрали первый рабочий экземпляр, вместе с которым вскоре шагнём на следующий этап — выход на рынок. Но в этом нам потребуется помощь, заинтересованность потенциальных пользователей и вовлечённость специалистов.