n obstacle course racing and modern pentathalon, one of the challenges is to use a gun "simulator" to shoot some targets. Of course, this happens after running, so your hands are shaking! Buying a proper simulator is pretty pricey, and there seems to be a lack of open source alternatives. So I designed a 3D printable laser simulator that mostly complies with the UIPM's regulations. It's a bit undersize for pentathalon, and the laser module is uncertified, but other than that it's pretty close.


Something that looks like a gun, but when the trigger is pulled the simulator emits a short laser pulse. A camera then looks at the target and evaluates where the laser hit. Or you can evaluate yourself if you hit or not. There are several cellphone apps that do this scoring for you.
Main features:
- Gun Features:
- Adjustable two-stage trigger pull
- Rear sights adjustable for elevation and windage
- Loading lever required to be opened between pulls
- Easily available parts:
- 18650 battery
- Standard 12mm laser module. I used a 5mw red laser.
- KW-12 switches for trigger and loading lever
- Lolin32-lite as a microcontroller/charge controller
- m3x10, m3x20, m3 nylock and m2x10 are the only required hardware
- Highly modular, to allow incremental design:
- Front/rear sights bolt on
- Trigger/loading lever mechanism is removable
- Electronics bay is large and available in non-microcontroller specific variant.
- Easily printable
- No tight tolerances aside from the trigger/loading lever pivots, which can be drilled out/sanded as needed.
- Fits on a 256x256 bed (just)
- All printable without supports (though there is one rather long bridge)
The source files are available on github: https://github.com/sdfgeoff/LaserRunPistol
The Making Of
This was all done in FreeCAD, and it was not a very smooth experience. FreeCAD 1.0.0 is way better than previous verisons and has better drawing tools, but I still had many many crashes. I'm super glad I use git for version control and save everything to separate files because I would have lost the project a couple of times without it. I reckon my next CAD project may be back in Blender - sure it's harder to do precise things (but still possible with modifiers/geometry nodes), but at least it doesn't crash, have weird viewport bugs etc. etc.
One of the main issues I have currently with FreeCAD 1.0.0 (crashes aside) is that my assemblies do weird things if I update a nested assembly. Eg if I have a "trigger plate" assembly, and this is inside the "frame upper" assembly, then when I add an object to the trigger plate, it may or may not appear in the "frame upper" assembly. Fortunately I have been using FreeCAD longer than it's had an assembly workbench, so I just used linked parts instead. Although this means I can't use joints, it is at least more stable - most of the time. For some reason it still has dud references when opening Pistol.FCStd, but open the files that contain them and the dud references magically go away. I don't get it.
I can't wait for AI to mean that I can just magically code myself a new CAD package and do away with all the legacy problems of freecad.
Frustrations aside, it was a fun project - learning about two-stage triggers, trying to figure out how adjustable sites work, and having a good set of specifications made this all quite enjoyable!