Introduction
This Arducam stereo camera bundle kit consists of two synched OV9281 global shutter cameras and an Arducam Camarray stereo camera HAT. As a stereo bundle system, it enables simultaneously working dual cameras with a variable baseline for better prototyping and evaluation with a single MIPI CSI camera slot: The two image sensors are on separated camera boards, and you easily move them around for different perspectives while the Camarray HAT handles the rest of the work. This is helpful for proof-of-concept stages when you may want more flexibilities than what a fixed stereo camera module can offer. You will be able to find the optimal baseline for your application with this bundle, and we welcome you to send us product customization requests after that.
What is Camarray
Camarray is a series of embedded stereo cameras and multiple camera solutions from Arducam. Upgraded from Arducam Sync Stereo Camera HAT, the Camarry can disguise up to 4 synched camera modules as a single camera slot connection to embedded systems like the Raspberry Pi, Jetson nano, and Xavier NX. With Arducam camarray, your camera connectivities are no longer limited to the camera connectors on the motherboard or the carrier board. Along with Arducam-provided camera drivers, more flexibility can be added to your multi-camera applications.
NOTE
1.The Camarray HAT does not support digital pan in half resolution combine and programmable pan speed control.
2.The Camarray HAT is not a crop and a half (halving the horizontal resolution of each camera and halving the field of view) but a compressed half (halving the horizontal resolution of each camera but leaving the field of view unchanged), so it does not need to support scan mode.
Common Specs
Image sensor
Sensor Model | OV9281 |
Shutter Type | Global Shutter |
Active Pixels | 1280*2×800 |
Resolution | 1MP*2 |
Image Sensor Format | Type 1/4″ |
Pixel Size | 3μm×3μm |
Color Filter Array | None(Monochrome) |

Lens Assembly
Interchangeability | YES |
F/NO | 2.8 |
Focus Type | Manual Focus |
Focusing Range | 30cm to infinity (when focused to infinity) |
Effective Focal Length(EFL) | 2.8 mm |
Field of View(FoV) | 70° Horizontal |
Lens Mount | M12 Lens |
IR Sensitivity | No IR filter (sensitive to IR light) |

Board
HAT Size | 65×56 mm |
Camera Board Size | 40×40 mm |

HAT Mechanical Drawing

Pin No. | Pin Name | Type | Description |
---|---|---|---|
1 | 3V3 | Power | 3.3V power supply |
2 | FSIN | Input | Frame Sync Input |
3 | STB | Output | LED Strobe Output |
4 | GND | Ground | Ground |
5 | 3V3 | Power | 3.3V power supply |
6 | SDA | I/O | SCCB serial interface data I/O |
7 | SCL | Input | SCCB serial interface clock input |
8 | GND | Ground | Ground |
Connector & Cable
Camera HAT Connector Interface | MIPI CSI-2 22-pin 2-lane |
Camera Module Connector Interface | MIPI CSI-2 22-pin 2-lane |
Ribbon Cable Length | 150mm (22-pin), 300mm(15-22pin), 73mm(15-22pin) |
Pin # | Name | Description |
---|---|---|
1 | GND | Ground |
2 | CAM_D0_N | MIPI Data Lane 0 Negative |
3 | CAM_D0_P | MIPI Data Lane 0 Positive |
4 | GND | Ground |
5 | CAM_D1_N | MIPI Data Lane 1 Negative |
6 | CAM_D1_P | MIPI Data Lane 1 Positive |
7 | GND | Ground |
8 | CAM_CK_N | MIPI Clock Lane Negative |
9 | CAM_CK_P | MIPI Clock Lane Positive |
10 | GND | Ground |
11 | CAM_D2_N | MIPI Data Lane 2 Negative |
12 | CAM_D2_P | MIPI Data Lane 2 Positive |
13 | GND | Ground |
14 | CAM_D3_N | MIPI Data Lane 3 Negative |
15 | CAM_D3_P | MIPI Data Lane 3 Positive |
16 | GND | Ground |
17 | CAM_IO0 | Power Enable |
18 | CAM_IO1 | LED Indicator |
19 | GND | Ground |
20 | SCL | I2C SCL |
21 | SDA | SCCB serial Interface data IO |
22 | VCC | 3.3V Power Supply |
Driver Performance (With Official V4L2 Driver)
Video Format | GERY(8-bit)/Y10P(10-bit) |
Output Interface | 2-lane MIPI serial output |
Output Formats | 8/10-bit BW RAW |
Frame Rates | [email protected]*4 × 800(on RPi) [email protected]*4 × 800(on Jetson) |
Quick Start Guide
Hardware Setup


Driver Installation
1. Driver note
There are 3 drivers for Raspberry Pi:
- Official driver
- Arducam MIPI camera driver
- Arducam V4L2 driver
1)Arducam MIPI camera driver is not in conflict with the official driver.
2)Arducam V4L2 driver is in conflict with the official driver. If you want to use the official driver, you need to uninstall the Arducam V4L2 driver first.
3)Arducam V4L2 driver is in conflict with Arducam MIPI camera driver. If you want to use the Arducam MIPI camera driver, you need to uninstall the Arducam V4L2 driver first.
4)Arducam V4L2 driver automatically overwrites the other two drivers. After uninstalling the Arducam V4L2 driver, it automatically reverts to the official driver.
The product is driven by the Arducam V4L2.
2.Check the driver
Check if the system is installed with the Arducam V4L2 driver.
sudo nano /boot/config.txt
Press【PageDown】several times or scroll your mouse wheel down to check if there is “dtoverlay=arducam”.

1)If you see “dtoverlay=arducam”, the Arducam V4L2 driver has been previously installed and is in a valid state.
2)If you see “#dtoverlay=arducam”, it means you have installed Arducam V4L2 driver before, but it is uninstalled now, remove the “#” to restore the V4L2 driver. Then reboot Pi to take effect.
3)If you don’t see “dtoverlay=arducam” or “#dtoverlay=arducam”, it means that Arducam’s V4L2 driver has never been installed before, so you need to follow the instructions below for a complete installation.
3. Install the driver
#Download driver package
wget https://github.com/ArduCAM/Arducam_OBISP_MIPI_Camera_Module/releases/download/v1.0/Release.tar.gz

#Extract the archive files
tar zxvf Release.tar.gz

#Enter the extracted folder
cd Release/
#Install the driver
./install_driver.sh

#Reboot the device
Press y
, and then hit Enter
to reboot.
Get an error?
If your operating system is not released by official Raspberry Pi, the driver installation will report an error and give a version error message.

Check out Raspberry Pi official supported operating system:
4. Uninstall the driver
Note that the driver will occupy CSI hardware resources. After installation, you will not be able to use the raspistill tool. There are two ways to uninstall Arducam V4L2 driver:
Method 1: Execute the uninstall command
cd Release/
./uninstall_driver.sh
NOTE
You have to reboot your Pi to make it effect.
Method 2: Modify configuration files
1.Type the following command:
sudo nano /boot/config.txt
2.Press【PageDown】several times or scroll your mouse wheel down to check if there is “dtoverlay=arducam”.

Modify “dtoverlay=arducam” as “#dtoverlay=arducam” to uninstall the V4L2 driver. Press 【Ctrl+X】, 【Y】,【Enter】to save the change and exit.
NOTE
You have to reboot your Pi to make it effect.
First Use
1.Check whether the camera is detected
ls /dev/video0

2.List the available video modes
v4l2-ctl --list-formats-ext

At present, only “GREY” and “Y10P” formats are supported, and “Y10” format is not supported.
Run the command without results?
You might have to check the ribbon connection or install the drivers correctly, then reboot the Raspberry Pi.
3.Preview the camera feed in real time
#RAW10
arducamstill -t 0 -pixfmt Y10P -w 2560 -h 800
#RAW8
arducamstill -t 0 -pixfmt GREY -w 2560 -h 800

The last line shows frame in real time.
GREY for RAW8 and Y10P for RAW10.
-w and -h indicate the width and height of the input image.

Press Ctrl+C to exit the preview.
4.Save an image
Take a picture after a two-second (time in milliseconds) delay and save it as image.jpg.
arducamstill -t 1000 -o image.jpg -pixfmt GREY -w 2560 -h 800 -p 800,100,1024,768



5.Receive data without displaying the image
Dropped frames may exist due to platform performance. You can test the actual input frames by only receiving data without displaying the image.
#RAW8
v4l2-ctl --set-fmt-video=width=2560,height=800,pixelformat='GREY' --stream-mmap --stream-count=-1 -d /dev/video0
#RAW10
v4l2-ctl --set-fmt-video=width=2560,height=800,pixelformat='Y10P' --stream-mmap --stream-count=-1 -d /dev/video0

6.Adjust exposure
Open two terminals, the first one is for executing the displaying images command, the second one is for executing the adjusting exposure command.
#Adjust exposure:
v4l2-ctl -c exposure=1000
#Check exposure parameters (minimum, maximum, default)
v4l2-ctl -l

For example, execute the below command in the second terminal:
v4l2-ctl -c exposure=4000

Turning up the exposure time results in a brighter image and a lower frame rate.
7. Adjust gain
Open two terminals, the first one is for executing the displaying images command, the second one is for executing the adjusting gain command.
#Adjust gain:
v4l2-ctl -c gain=12
#Check exposure parameters (minimum, maximum, default)
v4l2-ctl -l

For example, execute the below command in the second terminal:
v4l2-ctl -c gain=12

Turning up the gain results in a brighter image and no change in frame rate.
8.Change frame rate
Type the following command, change the value of “X” to change frame rate.
v4l2-ctl -c frame_rate=X
For example, you want to change the frame rate to 30. First, open two terminals, type the following command in the first terminal:
arducamstill -t 0 -pixfmt GREY -w 2560 -h 800

Type the following command in the second terminal to change frame rate:
v4l2-ctl -c frame_rate=30

Type the following command in the second terminal to view the frame rate range of the current display mode:
v4l2-ctl -l

IMPOORTANT NOTE
Dropped frames may exist due to the platform performance.
For example, if the frame rate is set to 80 fps, the display only goes up to 58fps.

But when you use only receiving data without displaying the image, the frame rate goes back to 80fps. (The frame rate values here are not real-time and are calculated iteratively with historical values, changing slowly.)

Display Images via VLC Media Player
You can display images in real time via the VLC media player.
(The VLC player can only play images that are output in RAW8 format.)
1.Open VLC media plyer

2.Select 【Media】→【Open Capture Device…】

3.【Video device name】→ select “/dev/video0“→ click 【Play】


The image screen may be too large for the display to be complete.
Right-click on the VLC title bar and select 【Maximize】.


4.Adjust the exposure, gain, and frame rate
【Tool】→【Effects and Filters】

Drag the different slider to adjust the corresponding parameter.

Display Images via Mplayer
1.Install mplayer
sudo apt-get install mplayer

2.Display images
mplayer tv:// -tv driver=v4l2:device=/dev/video0
Do not enter this command remotely, otherwise it will be stuck.


The image screen may be too large for the display to be complete.You need to drag the title bar to move the window to see the full image.
Right-click on the mplayer title bar and select 【Maximize】. Then you can see see the full image. (The image is pretty smooth.)


Or enter the following command to zoom the image. The image will appear full, but it will become stuck.
mplayer tv:// -tv driver=v4l2:device=/dev/video0 -zoom -x 1280 -y 400
“-x” “- y” denotes the width and height of the scaled image, and it is recommended to modify them in equal proportion.

What’s Next
Here are the things you can do after this quick start:
- Check the Application Note for applications like using Arducam userland MIPI camera drivers.
- Join the discussion in our forum.
Application Note
Depth Mapping on Raspberry Pi
1.Install Driver
Please refer to this page for a driver demonstration.
2.Hardware Setup


3.Reboot RPi
After rebooting RPi, use ls /dev/video* command to see the video device.
4.Software Setup
4.1Download the demo code
git clone https://github.com/ArduCAM/3d-camera.git
cd 3d-camera/stereo-camera/RaspberryPi/stereo_depth_demo/
4.2 Install Dependency for Python3.X
Latest Raspbian version is recommended.
sudo apt-get update && sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test && sudo pip3 install opencv-python==3.4.6.27
sudo pip3 install stereovision
sudo pip3 install matplotlib
5.Run the Programs
5.1Capture Images
python 1_test.py
Help message:

Example:

5.2 Collect Images for Calibration
python 2_chess_cycle.py

5.3 Separate Captured Images
python 3_pairs_cut.py

5.4 Calibration
python 4_calibration.py

5.5 Depth Map Tuning
python 5_dm_tune.py

5.6 Real-Time Depth Map Using Video
python 6_dm_video.py

Using on OpenCV
Make sure you have installed the driver.
Download the file here.
import numpy as np import cv2 import time def fourcc(a, b, c, d): return ord(a) | (ord(b) << 8) | (ord(c) << 16) | (ord(d) << 24) def pixelformat(string): if len(string) != 3 and len(string) != 4: msg = "{} is not a pixel format".format(string) raise argparse.ArgumentTypeError(msg) if len(string) == 3: return fourcc(string[0], string[1], string[2], ' ') else: return fourcc(string[0], string[1], string[2], string[3]) cap = cv2.VideoCapture(0,cv2.CAP_V4L2) cap.set(cv2.CAP_PROP_FOURCC, pixelformat("GREY")) cap.set(cv2.CAP_PROP_CONVERT_RGB,0) now = time.time() frame_num=0 while(True): if time.time() - now > 1: now = time.time() print(frame_num) frame_num=0 else: frame_num = frame_num+1 # Capture frame-by-frame ret, frame = cap.read() # Display the resulting frame cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capture cap.release() cv2.destroyAllWindows()
Then type the following command:
sudo python ov9281_dulcam_opencv_raw8.py