Arducam OV9281 (USB, Global Shutter)¶
Superseded by the Waveshare OV9281
This was the first board I tested. The Waveshare OV9281 uses the same OV9281 sensor but in a much smaller form factor and with a USB-C connector directly on the board (detachable cable, no PH connectors to source). That's what I'm using going forward. The sensor notes, lens tests, and detection reasoning on this page still apply to both boards.
| Field | Value |
|---|---|
| Manufacturer | Arducam |
| Model | B0332 (1MP OV9281 Global Shutter, no microphones) |
| Sensor / resolution | OV9281, 1280 x 800, monochrome, global shutter |
| Connection | USB 2.0 (UVC, plug-and-play) |
| Frame rate | Up to 120 fps @ 1280x800 MJPEG |
| Lens mount | M12 (interchangeable) |
| Approximate price | ~£30-40 + lenses |
| Tested by | @dsgnr |
What it looks like¶
The board is small and bare, without an enclosure. Below are front, back, and a shot taken with digital calipers so you can gauge the size.
Why this camera¶
I picked this camera for two reasons. It has a global shutter and it supports interchangeable lenses.
Rolling shutter on a normal camera exposes each row of pixels at a slightly different time. When the rifle is moving (shouldering, transitioning onto target, recoil) the image shears and the circle the detector finds isn't quite the right shape. Global shutter exposes the whole sensor at once, so the geometry is always correct regardless of how fast the rifle is moving. The hope is that the detector will hold lock through movements that would occasionally cause a dropout on a rolling shutter camera.
The sensor is monochrome. There's no Bayer filter (the colour mosaic that sits over a normal camera sensor and blocks most of the light hitting each pixel so it only sees red, green, or blue). Every pixel on this sensor sees all the light that hits it, which means better sensitivity and sharper edges in greyscale. ShotTrainer converts to greyscale before detection anyway, so nothing useful is lost. The circle edge should read slightly cleaner in the threshold step compared to a colour sensor at the same resolution.
120 fps at full resolution (1280x800). 1MP sounds low on paper but ShotTrainer only needs enough pixels across the tracking circle for a stable centroid, not a sharp photograph. The low resolution is what allows the high frame rate over USB 2.0, and 4x more frames per second than a typical 30 fps camera should mean smoother traces and tighter shot timing. Whether that actually matters for coaching or just looks nicer is something to evaluate.
Lenses tried¶
| Lens | FoV (approx) | Holder needed | Notes |
|---|---|---|---|
| Stock (wide-angle) | ~70 deg horizontal | 9 mm (stock) | Useless past ~2 m |
| 16 mm M12 | 27 deg horizontal | 9 mm (stock) | Not usable for 25 yard NSRA targets |
| 50 mm M12 | ~8 deg | 16 mm | Needs taller holder |
Tests below are at a 25 yards indoor range. LED lighting, standard NSRA 25 yard card (NSRA 2510 BM/89-18) on firing point 8 (rightmost).
Specifications below are from manufacturer specs. FOV is converted to the OV9281 sensor.
16mm M12 lens¶
Useless at 25 yards.
Spec:
| Specification | Value |
|---|---|
| Focal Length | 16mm |
| Aperture | F2.0 |
| FOV (DxHxV) | 16.4° × 13.9° × 8.8° (5.6m x 3.5m x 6.6m at 25y) |

50mm M12 lens¶
Each black target is 51.5mm, and this works out to ~33px for the tracker. This is probably usable with a single target on the card, but unlikely to get "millimetre accuracy". Needs to be tested properly on the rifle.
Spec:
| Specification | Value |
|---|---|
| Focal Length | 50mm |
| Aperture | f/2.8 |
| FOV (DxHxV) | 5.3° × 4.5° × 2.8° (1.77m x 1.12m x 2.10m at 25y) |

3D-printed case¶
The bare PCB doesn't make for a great mounting platform on its own. I'm using Arducam OV9281 case by 3rdwall on Printables, a two-part enclosure where the PCB sits in a tray and the top is fixed down with self-tapping screws. The lens stays exposed and there is a channel for the cable to exit cleanly, so once the cable is plugged into the PH connector and the lid is on you have a tidy assembly.
Looking for something better
This is what I have for now, not a final answer. The case protects the PCB but has no proper mounting interface, so it currently has to be strapped or zip-tied to the rifle. Ideally it would clamp to a Picatinny rail or an Anschutz-style accessory dovetail.
Still to do¶
- Screenshot the stock wide-angle lens at 25 yards.
- Test with a 90mm focal length lens.
- Mount the PCB on the rifle and capture some initial test footage.
- Test at 50 m and 100 yards using NSRA targets. Since the aiming mark scales with distance, the same lens should theoretically keep the circle at a similar size in the image.
- Measure the noise floor with the rifle clamped to separate system noise from shooter-induced movement.
- Compare 120 fps and 60 fps to determine whether the higher frame rate provides any meaningful benefit to the trace.