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.


50 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.


  7. I require assistance in turning the solidworks files for the double gate into 2 parts to be able to print on a smaller 3d printer.

  8. If you use a different distance between gates, what setting in the firmware do you adjust to the actual gate distance? Is it GATE_SEPARATION, in mm? Is that the only setting that needs to be changed?

    Also, do you think it is OK to power the entire device with 4 LC 16340 1000mh 3.6v lipos in series?

    Thanks much!

    • Hi Todd, sorry for the delay. Very busy times here… YES, you’re correct. Change the GATE_SEPARATION to the distance in mm between gates. BATTERIES – the lipo could power the LED’s but the LG0 sensor is only rated for 2.5 – 6 volts. One battery will power the sensor.

      • Should be possible to power the arduino V_in with the 4S lipo (14.8V) and supply the the sensor through the arduinos 5v regulated output
        Mine is running like that 😉

        • I am planning on using 4 UltraFire LC 16340 1000mah 3.6v batteries in series for a total of 14.4v max to power everything. Your opinion? I have already designed the battery holder such that it will mount to the opposite side of the rail that the Arduino mounts to. I can add a 5th if the total mA is not sufficient for everything. Thanks.

          • Let me know what LED’s you’re using and I can help you out. IF you’re using the LED’s I spec’d (TSHF5410), then put all the LED’s in series and add a 32-ohm, 0.5-watt resistor in the circuit (most people don’t have this resistor, so I would recommend taking 3x 100-ohm resistors and solder them together in parallel). BATTERY -> 32-ohm RESISTOR -> LED -> LED -> LED… -> BATTERY.

  9. I am looking at building this just had a few questions.

    What is the limiting factor in the max velocity the device can detect? I assume the max is what the max of the MK1 was (1,000 m/s). I am trying to figure out if I can modify it to have a higher max velocity.

    • Hey, thanks for asking. I’m not sure what the max measurable speed is. I’ve successfully measured bullets travelling >1,100 m/s (.243 rifle rounds) with verifiable accuracy. The Arduino I use loses precision at higher speeds, so a faster microcontroller might be recommended if you want to get better measurements at these speeds.

  10. Using an Arduino Nano The max. speed that could be measured is 24606 fps. (that’s theoretical, taking the 2nd sensor low and triggering the first).
    After changing code to direct port addressing, it is now reading 49212 f.p.s…… I don’t actually have a rifle that can test it in practice 🙂

    • I would like to see the rifle that can do it… Maybe that new railgun the US Navy is testing??? Actually that’s about the speed of the International Space Station. Haha!

      The max speed the Arduino would report depends on the distance between the gates. Make the the distance twice as great, the speed reported becomes twice as great. I don’t know that the sensors would actually detect an object flying that fast (a 1-inch long projectile would interrupt the beam for about 1.7 microseconds), then the Arduino would report either 24,606 fps or 49,212 fps, nothing between – the resolution becomes useless at these speeds!

  11. I believe I have an issue with one of your boards I received. I have outlined the issue in an email but can send again if you wish. How would I go about trouble-shooting it or getting a replacement? Thanks.

    • I believe I received a bad board (one out of four) and so I am a board short. Does anyone that visits this blog have a spare they are willing to part with? Apparently the current stock has expired as there are no more available from the online store and emails to Tyler are going un-answered. I would really like to complete this project and the one board is the only remaining item I need. If someone does have a spare, please send me an email (with details) to “home printer [at]” (remove spaces and replace [at] with character) and we can work out details. Thank you!

      • I want to amend this, Tyler was able to get in touch with me and is addressing my issues. Sorry if my above comments alarmed anyone. All is good!

  12. This is cool. I would like to use similar setup on air ventilation pipe. Is it possible to calculate the size of any particle passing through the ventilation channel?

  13. Is there a way to use a lower voltage than 28V for the Lm339 comparator?
    Maybe we can use 12v instead of 28v on the Lm339 comparator.

    • Hi Alfredo, great question! The LM339 doesn’t really care as long as the voltage is less than 32V (I think, please check the datasheet). HOWEVER, the photodiode becomes more responsive with higher voltages. You could try build a sensor at 12V and it might work!

  14. How can I calibrate each sensor using a multimeter?
    I don’t know at which potentiometer position should I set the value for each sensor.
    Should all sensors have the same potentiometer value?
    I have a multimeter and an oscilloscope to take those meuarements but I don’t know what values to expect.


  15. Can I increase the distance between the Led and the photodiode to 20 cms?



Leave a Comment