Due to the increase of cost for ammunition, I've turned to dry-fire practicing to improve my firearm handling skills. Commercial dry-fire trainers (MantisX & similar) provide information like muzzle trace and shot timer, but a lot of the customization and data analysis is either blocked off by a payment or not available at all. I wanted to build a device that offers the same measurements from scratch so I can see the raw data and choose my own metrics, and maybe throw in some ideas of my own. Some of the target metrics:
- Reaction time: beep till first movement
- Time to first shot: beep till trigger break
- Muzzle trace: where muzzle was pointing in last 500 ms before trigger break
- Trigger break movement: muzzle trace as trigger breaks (for anticipation/flinch indicator)
Seeed Studio XIAO-nRF52840 Sense BLE Board (Bluetooth Low Energy), 6-Axis IMU & Microphone
Amazon - $27.61
USB-C Cable
Tape
Firearm
The Xiao's LSM6DS3 samples acceleration and rotation at 400 Hz. At the moment, the board streams every sample over USB serial to my PC as CSV and tags three events with microsecond timestamps:
- GO: the PC command terminal sends and emits a "Beep" after a random 1-4 second delay; the board timestamps it
- MOVE: first time the total rotation rate exceeds 40 °/s after GO, the time stamp is marked as the start of the draw
- SHOT: the striker fall is detected as described below
The python script capture.py runs the training session, logs it to a CSV