Global Shutter Camera Module#
The Global Shutter Camera Module is a monochrome sensor that captures fast motion without rolling-shutter artifacts. Suited to high-speed tracking, drones, and machine-vision snapshots. The module ships with either the MT9V024 or MT9V034 sensor.
For full datasheet, photos, and ordering see the Global Shutter Camera Module product page.
Highlights#
752x480 global-shutter monochrome sensor
80 FPS at QVGA, 200 FPS at QQVGA, 400 FPS at QQQVGA
55 dB dynamic range
Compatible with all modular OpenMV Cam base boards
Usage#
Stream grayscale video at 320x240 (QVGA):
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QVGA)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
print(clock.fps())
The sensor automatically activates pixel binning at lower resolutions — 2x at QVGA (320x240) or smaller, 4x at QQVGA (160x120) or smaller — which cuts readout time proportionally and pushes the frame rate up. The camera still has to integrate light for the requested exposure window though, so pair the framesize drop with a shorter exposure cap via csi.CSI.auto_exposure to actually hit the higher rates (the image will be darker — plan on extra lighting):
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.QQVGA)
csi0.snapshot(time=2000) # let auto-exposure settle
csi0.auto_exposure(True, exposure_us=5000) # cap exposure
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
print(clock.fps())
Triggered mode lines pixel integration up exactly with each csi.CSI.snapshot call, so captures synchronize to the snapshot rather than the camera’s free-running frame clock — useful for syncing to an external event or another sensor. Enable it through csi.CSI.ioctl with csi.IOCTL_SET_TRIGGERED_MODE — frame rate drops to roughly half of free-running mode because the readout no longer pipelines with the next frame’s integration:
import csi
import time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.VGA)
csi0.snapshot(time=2000)
csi0.ioctl(csi.IOCTL_SET_TRIGGERED_MODE, True)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
print(clock.fps())