DIY 3D Printed Ballistic Chronograph

Ballistic Chronograph MK2 #DIY

A 3D Printed Ballistic Chronograph for $70 – $100 USD!

This ballistic chronograph is based on my original design, the MK1 (which can be viewed at I’ve used the MK1 to take many high-speed photos, including a shot of a mach-2 bullet hitting a nice wine glass!  The new MK2 has the same performance as the original, but is much easier to construct.  It can be used for measuring high-powered rifles, paintball guns, and everything between!

3D Printed Ballistic Chronograph

What’s New Since MK1?

My original ballistic chronograph has been very reliable in my high-speed photography hobby.  The biggest problem with the original was that it was hand-built and couldn’t be easily reproduced.  The MK2 uses the same working principals as the MK1, but has been redesigned for easy construction:

  • All components are off-the-shelf or 3D printed
  • The Light Gate sensors are (soon!) available on
  • Multiple sensor configurations are available (single/double  sensor height, 3 mm / 2 mm slit width)
  • Only simple tools are required for assembly

How To Build It?

Collect all the materials in the Bill Of Materials. Download and follow the assembly manual instructions.  The total cost at the time of this writing was $95 CAD ($70 USD) for a single-height sensor or $140 CAD ($100 USD) for a double-height sensor. You will need the following tools:

  • 3D printer (200 mm x 200 mm bed)
  • Soldering iron
  • Hacksaw
  • Side cutters
  • Allen wrenches

If you have any questions, feel free to leave a comment!

Light Gate Boards

2020-07-14 – You can purchase the light gate sensors from, or feel free to build your own using the documentation in the repository!  They are open-source after all!

On the original ballistic chronograph, I soldered the entire photodiode circuitry onto perfboard.  It was a big job and isn’t really ideal as the boards were large and ugly.  Soldering a circuit on perfboard requires just a bit of skill as well, so it increases the difficulty to manufacture a ballistic chronograph.  Finally, there was also the issue of the bias power supply, which I had purchased from eBay and had to mount separately from the sensors.

Ballistic Chronograph Sensors

The new Light Gate boards I designed are smaller and much better looking.  They include an onboard boost converter which supply the bias voltage and use a meager 25 mA @ 5 V.  The Gerber files are available on Github and I have started manufacturing them for sale on

Mounting the boards in parellel result in an 85 mm sensing height.  The maximum width of the sensing area (distance from sensor to emitter) is 125 mm.


I fired several different projectiles through the MK2 alongside the original ballistic chronograph.  The projectile speeds ranged from 100 m/s (330 fps) to 875 m/s (2,800 fps, or mach 2.5).  The raw test data is available on Github.

Both chronographs reported speeds quite consistently, although the MK2 measured about 1.5% slower than the MK1.  This is probably due to a calibration issue which I need to investigate.  I will update this post when I have more information. Edit 2020-05-06: I finally found the cause of the reporting error in the firmware.  It was caused by a firmware issue which affected the calibration factor (actually doubling the error…  The calibration factor was inverted).  The original MK1 was reading 1.8% fast (0.9% * 0.9%).  Correcting for this error brings the readings into fairly close agreement.

The chronographs also failed to detect a small number of projectiles.  Since the number of missed shots wasn’t correlated with the projectile speed, I believe this was due to marksmanship issues (I had difficulty aiming for the sensor area).  The firearms were equipped with scopes and I couldn’t use the iron sights.  I also forgot to bring a rest and had to rely on my own skill (or lack thereof).

Now I’m not out to challenge commercially available chronographs.  Cheap ballistic chronographs can claim an accuracy of 0.25%.  If this is true (and I’ve heard a few people say that it isn’t, but lets not go there without actual test data!) then that’s better performance than this chronograph.  This is a hackable, open-source design which has its own benefits.

~RABBIT TRAIL AHEAD~ While I was making the pellet rifle portion of this video, something very unusual happened.  You’ll note that I fired 11 rounds into the cardboard box, which contained a small piece of plywood to stop the projectiles.  I wasn’t aiming at a particular area of the box, but instead focused on the sensing areas of the ballistic chronographs.  Here’s what I found inside the box: several (maybe 6?) Robin-Hooded pellets! Never tell me the odds…


Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.


30 thoughts on “Ballistic Chronograph MK2 #DIY”

  1. This thing is great and i am really looking forward building this! And fortunately it’s also reeaaally up2date (like yesterday ^^)
    Just curious about your sensor boards and Tindie (never used before). How much will shipping be.. as i am located in germany.

  2. Really interesting project, thanks. I have built a chrono also, and I’m interested in the sensor arrays that you use. The main drawback with mine is that you need to make a barrel adaptor to fit the gun, the advantage is that it doesn’t miss a shot. It would be great to combine the two ideas.
    regards, john

    • Thanks John! I like your kit. The barrel adapter is a good idea for air-powered guns, it would be cool if it used a universal clamp that could fit various barrel sizes.

      • As aif-rifles don’t have flashhiders/muzzle brakes and also different barrel diameters i think its difficult to do a universal clamp.

      • Thanks, did you experiment with fewer sensors (further apart) to cover the area? I use OP254A emitters and OPL550 sensors that incorporate a schmitt trigger, to drive the Arduino directly. I have not tried making an array with them yet.

        • I calculated the greatest distance between the sensors / emitters for a given projectile size (0.177 caliber), and was happy with the coverage and performance. I should update the drawing and add it to the repository… Someone could actually test larger sensor-sensor distances, but I doubt that the loss of reliability would be worthwhile.

  3. Thank you for making and publishing the design! Since I’ll be designing my own PCBs, I have a question: are the 10 uH filtering inductors necessary? Also, I want to use LM3410YMF current drivers for the LEDs to be more frugal with energy, as I’d like to run this from 3xAAA or 1×18650 (haven’t decided yet). From your experience, how crucial is it to have super smooth supply to avoid noise in measurements? I.e. do you think some additional filtering would be required, like the 10 uH inductors you use at the receiver?

    • Hey Adrzej! Hopefully I can help.
      The 10uH inductor (L2) does a good job of smoothing the ripples, allowing higher sensitivity. The earlier versions (Rev0 and Rev1) didn’t have the inductor, so it’s not necessary but is helpful! Here’s an oscilloscope trace I just measured. Channel 1 (yellow) is AFTER the inductor and channel 2 (violet) is BEFORE the filter.
      LG0 L2 Effect
      Driving the LED’s – I haven’t had good luck yet with the buck converters I tested. But I haven’t tried the LM3410YMF. Are you planning to put the LED’s in parallel or series?
      In my experience, designing a Switching Mode Power Supply (SMPS) requires lots of experience OR lots of trial-and-error (I don’t have lots of experience, so I do lots of experiments instead). An inductor may be a helpful part of the circuit, but there are other ways to smooth the voltage – Google is your friend!

      • Thank you very much! So the inductor seems really important. I plan to put LEDs in series . I also don’t have much experience with SMPS design, so I’ll see what comes out 😉 I’ll let you know the results 😉 PS: We may own the same scope model. Gotta love Siglent 😉

        • I really love the Siglent! Nice!
          If you do use the LM3410 (I would probably select the 3410X as it’s a higher frequency), let me know how it works! I’ve been intending to put together some recommendations for boost converters to run the LED’s and your experience would help! Not enough time in a day…

          • Sure! 🙂 I expected the comment about using the X version 😉 The thing is that Y is what I’m able to buy at reasonable price and with reasonable conveniency, without ordering from your side of the pond with substantial minimum order value etc etc. Yet another parameter to deal with while designing something 😉

          • It’s too bad parts aren’t so easily available outside North America. I’ve had an idea for using a boost converter – the voltage might be regulated very will with something called a capacitance multiplier. A quick google search will bring up lots of info on it!

  4. Hey, got a question: my LCD is showing “Ready!” only. (or 4000000m/s if i push button “right”) nothing else happens.
    Any clue? wanted to calibrate but stuck here not getting the 100 / 100 gate signal stuff.

  5. Hi, i am not able to setup the software correctly. using the ChronoBasic Version i only get displayed “Ready!” and 4000000m/s if i press some button.
    (i am using Arduino LCD display and A0/A1 for signal inputs)
    Tried using the ChronoLCD Version, but get some issue with compiling the code. (also not quite sure which files are needed and how from that folder)

    • Hey Icerise, send me an email ( with your SETUP section. Also, did you try turning all of the sensor potentiometers to the left? That would lower sensitivity to minimum and then you shouldn’t get false signals.

      If you want to use the LCD firmware then you need all the files in the folder.

      • Hey, i managed to get the software working. Calibrated the sensors and the clk. Only things i don’t get are:
        1. how to actually USE it now? which mode to choose or key to press to actually measure speeds? does it always start in calib mode?
        2. what are the different settings used for? it shows some B tst or -G A F F with numbers below and stuff. (is there some sort of manual for the software. the assembly guide was so good 😀 )

  6. Hi Tyler, thank you for such a great project. I am curious about the accuracy. I would like to explore the factors in the design that affect accuracy or that could increase accuracy. I see that you’re using a UNO which is running at 16 Mhz. Would an alternative board running at say 80 Mhz enable greater accuracy. I assume the speed of the detectors is not an issue but that is on the assumption that the UNO is using falling edge to falling edge or rising to rising and as long as the reaction time of each sensor is the same, then reaction time doesn’t matter?? How accurate does the distance between start and finish gates need to be? Would a 1mm error in gate distance be a huge error in measured velocity or minor? I am shooting 6mm Creedmore with velocities of 3000fps – what is the formulay for calculating the number of micros to cover the sensor distance? Finally, could an accurate clock/pulse generator be used on the input to the Arduino to simulate the gate signals for calibration purposes – a very accurate pulse width should equate to a known reading, right? I know I’m asking a lot, but I would really value your input.



Leave a Reply

%d bloggers like this: