# measuring speed of projectile

I am trying to measure the speed of a 6mm spherical projectile moving slower than 700 FPS. I was going to use photo resistors but discovered they are too slow. is there any other options?

This is an interesting project. I once saw a setup where someone had a box, about the size of a case of wine, with a whole a little larger than you fist on each end. There was a bright light inside with some sensors. The owner then fired 45 caliber bullets through the box and had a digital read out of their speed. I never found out how the speed was measured.

I was just thinking of using IR led and IR detector. Does anyone know the response time for one of those?

700FPS: 700 Feet/Sec x 12in/feet * 1sec/16,000,000 clock = 0.000525 in/clock cycle Flipping that over, thats 1904.7 clock cycles/inch. Thus in 12 inch there would be 22,857 clock cycles.

That would be plenty of time create 2 interrupts and measure the uS between interrupts.

I imagine one way would be to have two layers of aluminun foil at each end of a box. 1 layer connected to ground, the other to arduino interrupt pin with internal pullup. When the bullet hits the foil layers, the pin is grounded & creates a Low interrupt. Code for a low interrupt, set a flag to capture the micros(), clear the flag and stop the capture on the 2nd interrupt.

(700 Feet/sec * 1 mile/5280 feet * 60 sec/min * 60 min/hr = 477 miles/hours, moving right along!)

Id say use a phototransistor and a led(or laser even better) and have that trigger both ends, a little more resuable and should be fast enough

im sure the commercially available CHRONY uses IR sensors, I would imagine that is the way to go, I am interested to see how this works out for you, i wouldnt mind making one

An LED and a phototransistor works fine for this purpose (depending upon the distance between transmitter and sensor), but the issue is a little more complicated by the need to work in ambient light which changes. You want a detector that will only notice fast changes. Attached is a scan from my lab notebook of just such a circuit I used to detect projectiles many years ago. This should work as a good starting point for you. I believe all of the components are both readily available and fairly cheap.

For the following I used a laser, mostly because it was available and the distance between the transmitter/sensor I was using was several feet, the same circuit also works with a matching led for smaller distances.

OK, I could not resist trying this. I taped a strip of aluminum foil across two windows on either side of a box. The projectile breaks the two strips and the sketch measures the interval in microseconds. With an airsoft gun, the measured velocity was 152.00, 170.09, and 159.32 on three trials. Code below if anyone is interested.

// measures velocity of projectiles
// projectile breaks foil strips 218 mm apart

#include <LiquidCrystal.h>

LiquidCrystal lcd(3,5,9,10,11,12);
unsigned long start=0, finish=0;
int startPin=4, finishPin=8, done=0;
float distance=218.0, interval, velocity;

void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Muzzle Velocity");
pinMode(startPin, INPUT_PULLUP);
pinMode(finishPin, INPUT_PULLUP);
}

void loop() {
while(!start) {
start = micros();
}
while(!finish) {
finish = micros();
}
while(!done) {
interval = float(finish-start);
velocity = distance*1000*3.28/interval;
lcd.setCursor(0, 1);
lcd.print(velocity);
lcd.print(" ft/sec");
done = 1;
}
}

Is that the range you were expecting?

Is that the range you were expecting?

I didn't really know what to expect, but the values do seem reasonable to me. When I shoot it outside, the projectile is visible, and it flies across the yard (around 50 ft) in less than 1/2 second.

JavaMan: With an airsoft gun, the measured velocity was 152.00, 170.09, and 159.32 on three trials. Code below if anyone is interested.

What are the units on this velocity?

wanderson:

JavaMan: With an airsoft gun, the measured velocity was 152.00, 170.09, and 159.32 on three trials. Code below if anyone is interested.

What are the units on this velocity?

Airsoft is almost always in FPS (feet per second).

Also, If I use 2 IR led emitter and detector at 1 foot could I analogRead() in that time frame? If not what is an interrupt?

arduinopi:

wanderson:

JavaMan: With an airsoft gun, the measured velocity was 152.00, 170.09, and 159.32 on three trials. Code below if anyone is interested.

What are the units on this velocity?

Airsoft is almost always in FPS (feet per second).

Also, If I use 2 IR led emitter and detector at 1 foot could I analogRead() in that time frame? If not what is an interrupt?

These values could be either feet per second (a little slow for airsoft) or meters per second (a little fast for airsoft). All of the numbers (which haven't been many) I have seen for airsoft speeds have been in the 300 ft/sec range

arduinopi: Also, If I use 2 IR led emitter and detector at 1 foot could I analogRead() in that time frame? If not what is an interrupt?

No you cannot use analogRead for this. It really needs to be a digital read. The a2d conversion in the arduino takes tens to hundreds of milliseconds much, much to slow. The circuit I provided above will provide digital output which can be used digitalRead for slow speeds, but would need to be interrupt read for higher speeds.

Look on the arduino playground for information on interupts

The a2d conversion in the arduino takes tens to hundreds of milliseconds much, much to slow.

The a2d conversion in the arduino takes just over a hundred microseconds, but still too slow.

AWOL:

The a2d conversion in the arduino takes tens to hundreds of milliseconds much, much to slow.

The a2d conversion in the arduino takes just over a hundred microseconds, but still too slow.

Pish, millis, micros... I was only off by three orders of magnitude...

I was only off by three orders of magnitude...

You're not a banker by any chance?

What are the units on this velocity?

The units are feet per second. For the 152.00 value, the projectile went 218 mm in 4704 microseconds.

lcd.print(velocity);
lcd.print(" ft/sec");

The digital pin on each strip of foil has internal pullup resistors activated, but forced to ground. When the strip breaks, the input jumps to HIGH. Don't know how long this takes, but it should be the same for both strips, so it will cancel out.

JavaMan:

What are the units on this velocity?

The units are feet per second. For the 152.00 value, the projectile went 218 mm in 4704 microseconds.

lcd.print(velocity);
lcd.print(" ft/sec");

The digital pin on each strip of foil has internal pullup resistors activated, but forced to ground. When the strip breaks, the input jumps to HIGH. Don't know how long this takes, but it should be the same for both strips, so it will cancel out.

Interesting, that is a little slower than I would have expected for velocity, but seems to be a reasonable speed. Interesting approach to measuring projectile velocity. I have seen something similar for triggering the flash to take a high speed photo, but instead of using the breaking of the connection, it used two sheets of foil separated by a very narrow gap and when pierced they make contact, thus completing the circuit.