Building An Electronic Pistol Target

TL;DR - On and off over the last couple years I built an electronic pistol target. You can grab the code and board layouts on Github if you want to build your own.


Several years ago I watched a video on a new computerized steel target system that was scheduled to come out. This system was created by a company called Jedburgh Systems. They seem like a cool company, and you should check them out. They designed a reactive steel target system that used pneumatics to pop up individual steel targets that would stay up for a random number of hits before dropping back down. The system came with six targets, and a Pelican case full of pneumatic drivers, computer components, and a wifi router. The goal of the target system was to present targets in a way that required active thought to engage them.

Simple and Unsophisticated

This idea really resonated with me. I decided to see if I could come up with something on my own that would serve the same purpose. A serious case of “I can make that!” I had recently got into hobby electronics and was learning on an Arduino Uno. As a software developer, the hardware world was wholly new and exciting. The idea that I initial started with was to combine lights, a buzzer, and an Arduino.

Part of the Jedburgh system had the computer chose a number of hits that each target required to knock it over and then detected hits on each of those targets. This was super cool from a technology standpoint, but requires some expensive hardware to drive the targets up and down, and required the use of dedicated target units. It is also not entirely necessary following my line of thinking. If a computer is choosing the number of required hits randomly, and not telling you what number it chose, then what would be the difference if it simply fell down (or turned off) after a random amount of time?

Version Two in action

First Version

The first target I created was an Arduino Uno and breadboard. I had jumper wires going everywhere. The lights were LEDs glued to slivers of a milk jug and wired up with solid core hookup wire. I stuffed everything in a cardboard Sparkfun box and headed out to the range.

The milk jug light backing was so I could staple the light to the plywood backer above my paper target. It actually worked reasonably well, but was a little difficult to get situated correctly because they weren’t perfectly flat.

It was clear that the original software program I had written for it ran too long on each light. The first version had a pause with no target lit in between switching to a new target. I was not a huge fan of the pause because it seemed slow. I also didn’t want to have shooters assume that they should try to reholster during the pause (bad idea). Initially, I had no “deduping” in the software to prevent the target from just randomly choosing the exact same target for ten loops in a row.

I even took my Macbook to the range on this trip and reprogrammed the Arduino on my tailgate.

Version One milk jug light holders

Second Version

For the second version I found a Really Useful Box at Office Depot that would fit most of the components nicely. I bought an eight port spring clip speaker hookup plate and mounted this to the box. The hookup wire got replaced with solid core speaker wire. This was much better because you only had to deal with one strand per target light and it plugged right into the spring clip connection. I made some small wood LED holders that really didn’t work out all that well. The big breadboard was swapped for a smaller breadboard. I wired in a switch for the buzzer (not the power for some unknown reason) since the target just sat there buzzing while you loaded mags and could be pretty annoying.

I also tried several different colors of LED: red, yellow, blue, and a double sized diffused blue. For a single LED outside in the sun only the super bright blue (~4000 mcd) really worked well. Basically, if you are indoors at arms length if you can look directly into the LED, it probably isn’t bright enough to see several yards away in sunlight. I found that it was also important to make sure the LED was pointed directly at the shooter. Otherwise, it could be hard to pick up as it changed.

In the software, I removed the pause between targets, and adjusted the loop time. I also added some deduping that allowed the target to repeat the last target only once (twice in a row). Side note: it is cool to see how the target repeating can throw you off if you are anticipating it to switch.

When I ran the target the first couple times I had stapled the lights next to the target. This didn’t work that well. If the target switches fast, your shots start making their way to closer and closer to the light. Above the paper target is the way to go.


Third Version

Now we’re cooking. I bought some protoboard and soldered up a more permanent replacement for the breadboard circuit. I used a 3D printer at the Bozeman Makerspace to create some small LED holders that held the LED at a 90 degree angle. I laminated the posterboard so it would stand up to more staple gun action. After another trip to Office Depot I found a smaller Really Useful Box that was the exact size of the Arduino. I of course did not take into account the space for the 9V battery, but I made it work. I changed the switch to kill the power instead of the just the buzzer.

Using protoboard and mini jack plugs

The biggest update was that I bought a bunch of male-male 3.5mm mini jack cables (think headphone jack) from Monoprice and found some plugs on Sparkfun that I soldered into the protoboard. This made for much easier connections of the target lights and a more robust connection. The spring clips and speaker wire seemed to pop out frequently and I had to remember which one was positive and negative.

The only changes in the software for this version were small tweaks to the timing. I did toy around with some hardware buttons to cycle through different game types, but I didn’t end up with anything that worked well.

Learning button debouncing

Fourth Version

In the fourth version, I picked up an Arduino Pro Micro to replace the Uno. It was about a third of the size of the Uno, and had enough outputs for the targets, and the buzzer. I bought several sheets (too many) of thin black plastic that I cut some small squares for the light backer. This turned out to be perfect. Thin enough to staple through, but thick enough to hold up to lots of staples.

I took a crack at making a simple printed circuit board (PCB) to replace the 3D printed light holders. I also designed a slight more complicated PCB to replace the protoboard that I had soldered up before. I got these printed at OSH Park which was great. They were cheap, low volume friendly, and it was easy to order new ones when I realized that I designed them wrong.

The software stayed more or less the same. I pulled some stuff out into functions and added a little startup tune.


Fifth Version

This version is more or less what I have today. I bought a keyfob transmitter and receiver from Adafruit that allows me to only run the target game when I hit the keyfob button. It also allows me to have four different games to run without having to reprogram the Pro Micro.

I designed my biggest PCB to date and ordered it from OSH Park again. This one allowed me to solder the Pro Micro and the RF receiver directly into the board. This cleaned up the enclosure’s interior quite a bit.

Since I now had four buttons on the keyfob I came up with three programs to go with the three open slots. I named (in code) the original game, Follow the Dot mode. I added Anticipation mode, which is very similar to the original program with shorter pauses. Next was Sundance mode, which quickly lights up one of the targets and shuts off. Lastly, I added Progressive mode, which lights the targets up in order, but starts switching slowly and ramps up the speed until it is next to impossible.


What Now

For a time I thought about making these into a commercial product. I looked into getting an enclosure made to house the PCB and battery. The cost would’ve taken this project out of the Hobby Realm into the Land of Serious Bizness. Software is really my main gig, and the idea of spending my evenings soldering boards together for other people didn’t appeal to me. Instead I posted everything needed to make your own on Github.

This was such a fun project, I would encourage others to try to put one together themselves (or come up with their own version). It really is an approachable project. There are no super complicated circuits, and the components are off-the-shelf. If you want to get the boards printed at OSH Park, they are included. You can also just wire it up with a breadboard.

With this project I learned so much about electronics, Arduino, and PCBs. I also became a better shooter along the way.