Remix of DeVsFaN1830's corner cam: Modified to hold both a camera module and an ArduCam CSI to USB adapter PCB, this mount angles downward to provide a view of both the nozzle and the bed when mounted near the front idlers of a fixed-gantry printer such as the Voron Trident.
I wanted a low-profile, rear-facing camera mount for the Voron Trident, and I wanted it to be at nozzle-height relative to the gantry, rather than a bird's-eye view from the top panel like most of the Trident camera mount I could find. This design uses the CSI to USB-C adapter board that comes with the ArduCam B0305 to connect the camera via USB, which allows for easy cable management and better software compatibility when using the Pi 5 with KlipperScreen and a TFT display.
I made the CAD files as parametric as I could so that you can easily edit the camera angle or the camera dimensions to fit other types of modules.
Depending on the length of your hotend/nozzle, the front left Z carriage mount may collide with the camera mount when the bed is near Z=0. I have included a modified version of the Trident_Z_Carriage_Left to provide better clearance between the Z carriage mount and the camera. With some creative thinking, it is technically possible to swap out this printed part without disconnecting the rest of the bed (but it certainly wasn't easy).
I have also included my earlier prototype that mounts the B0305 in its original form (with the cam and adapter PCBs stacked, without removing the brass stand-offs). However, this version sticks out far enough in X and Y for the toolhead to collide with the camera, which is why I redesigned to disassemble the PCB stack and mount them side-by-side.
I recommend using the ArduCam B0305 (https://www.arducam.com/12mp-imx708-usb-uvc-102-wide-angle-fixed-focus-camera-module-3.html) so that you can connect the camera via USB rather than trying to cable-manage a very long CSI ribbon cable. In my testing, the USB adapter board included with this B0305 actually works perfectly fine with other camera modules, such as the Raspberry Pi Camera Module 3 Wide NoIR (Note: such configurations are not officially supported according to ArduCam). As of March 2025, ArduCam does not sell the UC-A43 CSI to USB adapter board on its own. It can only purchased as a pre-assemble stack with an ArduCam camera module
I have included copies of my crowsnest.conf from my Trident and my V0 as examples of how to set fix-focus and manual exposure for the ArduCam and Pi Camera Module 3 when connected via the AdruCam USB adapter board.
For the ArduCam B0305 via USB with the Crowsnest camera service, this is what I use in my crowsnest.conf:
[cam 1]
mode: ustreamer # ustreamer - Provides mjpg and snapshots. (All devices)
# camera-streamer - Provides webrtc, mjpg and snapshots. (rpi + Raspi OS based only)
enable_rtsp: false # If camera-streamer is used, this enables also usage of an rtsp server
rtsp_port: 8554 # Set different ports for each device! port: 8080 # HTTP/MJPG Stream/Snapshot Port
device: /dev/v4l/by-id/usb-Arducam_Technology_Co.__Ltd._Arducam_12MP_SN0001-video-index0 # See Log for available ...
resolution: 2304x1296 # widthxheight format
max_fps: 30 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
#custom_flags: # You can run the Stream Services with custom flags.
v4l2ctl: sharpness=6,auto_exposure=1,exposure_time_absolute=100 # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of.The B0305 has a fix-focus camera that requires you to physically turn the lens housing to adjust the focus. Doing so may require you to cut or break-loose the adhesive that was used to lock the focus position that was set at the factory.
For the Raspberry Pi Camera Module 3 Wide NoIR connected via the ArduCam UC-A43 adapter PCB (the one that comes with the B0305), I use the following in crowsnest.conf:
[cam 1]
mode: ustreamer # ustreamer - Provides mjpg and snapshots. (All devices)
# camera-streamer - Provides webrtc, mjpg and snapshots. (rpi + Raspi OS based only)
enable_rtsp: false # If camera-streamer is used, this enables also usage of an rtsp server
rtsp_port: 8554 # Set different ports for each device!
port: 8080 # HTTP/MJPG Stream/Snapshot Port
device: /dev/v4l/by-id/usb-Arducam_Technology_Co.__Ltd._Arducam_12MP_SN0001-video-index0 # See Log for available ...
resolution: 2304x1296 # widthxheight format
max_fps: 30 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
#custom_flags: --rotate 2 # You can run the Stream Services with custom flags.
v4l2ctl: sharpness=6,auto_exposure=1,exposure_time_absolute=157,focus_absolute=688,focus_automatic_continuous=0 # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of.That will lock your focus to the objects on your bed. You will need to play with the exposure_time_absolute and focus_absolute values to get it where you want it. This is the value that works for me with the NoIR camera in a V0 with a 120x120 bed. If you adjust the value in the config file, you must restart the crowsnest service each time. It will not happen in real time.
If you are comfortable with the Linux terminal on the Pi, you can test out different values in real-time using the following command: v4l2-ctl --set-ctrl focus_absolute=512.
The author remixed this model.
Modified to hold both a Camera Module and an ArduCam CSI to USB adapter PCB, this mount angles downward to provide a view of both the nozzle and the bed when mounted near the front idlers of a fixed-gantry printer such as the Voron Trident. I rebuild the CAD from scratch and tried to make all the features parametric so that it is easy to customize for other cameras or other printers.