Skip to the content
PCBKitNew board
2 layers87.5 × 63 mmCuttlefish carrier, the printed circuit board in 3D

Cuttlefish carrier

Ezhkin-Kot/cuttlefish1

Self-driving car

Size
87.5 × 63 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
39
Pads
107
Tracks, vias
103, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
16 Sep 2026
Updated
2 Nov 2026

Overview

Cuttlefish carrier is an open-source printed circuit board by Ezhkin-Kot, from the Ezhkin-Kot/cuttlefish repository on GitHub. It is a 2-layer board of 87.5 × 63 mm with 15 parts on 39 nets, routed with 103 tracks and 0 vias.

It belongs with the AVR (ATmega, ATtiny) boards of this library.

README

README.md

Cuttlefish

Cuttlefish rotation

Cuttlefish is an autonomous RC car platform built around an Orange Pi 3B single-board computer and an Arduino Nano microcontroller.

The vehicle uses a camera as its primary sensor. Video is processed by an autopilot running on the Orange Pi, which generates steering and motor commands. An Arduino Nano handles low-level motor and servo control.

The project combines custom 3D-printed mechanics, dedicated power and interconnection electronics, embedded firmware, and computer vision software.


Features

  • Custom 3D-printed chassis with Ackermann steering geometry.
  • Rear-wheel drive with a 12 V geared DC motor.
  • Arduino Nano for low-level hardware control.
  • Orange Pi 3B for video processing and autonomous navigation.
  • USB UVC camera with MJPEG output.
  • Two autopilot deployment modes (TODO):
    • Onboard: all computations run directly on the Orange Pi.
    • Remote: video is streamed to an external computer, which runs the autopilot and sends control commands back.
  • Modular architecture designed to support different autonomous driving algorithms (TODO).

Project Status

ComponentStatus
Mechanical platformComplete
Power electronicsComplete
Interconnection PCBComplete
Arduino firmwarePrototype
Camera and video streamingComplete
Orange Pi control softwareIn development
Autonomous navigationPlanned

System Architecture

The system is divided into two main computing units, each responsible for a separate layer of control.

text
                  Orange Pi 3B
              ┌───────────────────┐
 Camera ─────►│ Video acquisition │
              │        ↓          │
              │ Scene processing  │
              │        ↓          │
              │     Autopilot     │
              │        ↓          │
              │ Control commands  │
              └─────────┬─────────┘
                        │ USB Serial
                        │ 115200 baud
                        ▼
                  Arduino Nano
              ┌───────────────────┐
              │ Command parsing   │
              │ Motor PWM control │
              │ Servo control     │
              └────┬─────────┬────┘
                   │         │
               TB6612FNG   MG90S
                   │         │
                DC motor  Steering

Orange Pi 3B

The SBC handles high-level operations:

  • Camera capture and video processing.
  • Autonomous navigation.
  • Control algorithm execution.
  • Communication with the Arduino.
  • Video streaming and remote control interfaces.

Arduino Nano

The MCU handles low-level hardware operations:

  • DC motor speed and direction control.
  • Steering servo control.
  • Receiving and parsing commands over Serial.

This separation allows autonomous driving algorithms to be developed independently of the low-level hardware implementation.

Hardware

Components

ComponentDescription
ChassisCustom 3D-printed platform
Drive motor12 V geared DC motor
SteeringMG90S servo with Ackermann steering linkage
Motor driverTB6612FNG
Microcontroller (MCU)Arduino Nano
Single-board computer (SBC)Orange Pi 3B (2 GB RAM)
CameraOV2710 GXIVISION, 2 MP, 1080p, 30 FPS, 100° FOV
Battery3 × 18650 Li-ion cells (3S)
Main DC-DC converterMP1584, 12 V to 5 V, 3 A
SBC DC-DC converterXL4015E, 12 V to 5 V, 4 A

Power System

The vehicle is powered by a 3S 18650 Li-ion battery pack.

text
              3S Battery Pack
                 (~11.1 V)
                     │
                Power Switch
                     │
        ┌────────────┼────────────┐
        │            │            │
  TB6612FNG VM     MP1584      XL4015E
        │            │            │
    DC Motor      5 V rail     5 V rail
                     │            │
               Arduino Nano    Orange Pi
               + TB6612FNG VCC
               + Servo

The two DC-DC converters provide separate 5 V power rails for the control electronics and the single-board computer.

The battery cells are removable and charged using an external charger.

Battery protection is not yet implemented. The current prototype does not include a BMS or automatic undervoltage cutoff. Battery voltage must therefore be monitored manually. Avoid discharging individual cells below approximately 3.0 V.

Interconnection PCB

The vehicle uses a dedicated interconnection PCB as part of its power and electronics assembly. Two 470 µF / 16 V electrolytic capacitors are mounted on the board to help stabilize the power supply.

The KiCad project is available in hardware/schemas/. It includes:

  • cuttlefish-carrier.kicad_sch — schematic.
  • cuttlefish-carrier.kicad_pcb — PCB layout.
  • gerber/ — manufacturing files.
  • cuttlefish-carrier.csv, cuttlefish-carrier.xlsx — bills of materials.
  • cuttlefish-carrier-all-pos.csv — component placement data.

Arduino Pinout

Arduino PinFunction
D9Steering servo signal
D3 (PWM)TB6612FNG PWMA
D2TB6612FNG AIN1
D4TB6612FNG AIN2
D5TB6612FNG STBY
USBSerial communication with Orange Pi

The current implementation uses USB Serial communication at 115200 baud. Hardware UART communication is a possible future alternative.

Note: Arduino Nano uses 5 V logic, while Orange Pi GPIO uses 3.3 V logic. Direct UART connections require appropriate logic-level conversion.

Mechanical Design

The chassis is designed in Fusion 360 and manufactured using 3D printing.

STL model of the chassis

Source files and printable models are available in
hardware/3d-models/:

  • cuttlefish.f3d — parametric Fusion 360 model.
  • cuttlefish.stl — printable chassis model.

Software

The software is split between the Arduino firmware and the Orange Pi application.

Arduino Firmware

Source code: mcu-firmware/

The current firmware implements basic manual control over Serial communication.

CommandAction
wMove forward
sMove backward
xStop the motor
a / dStart steering left / right
e / qStop steering left / right
cImmediately return steering to center

Current steering parameters:

  • Servo center: 90°.
  • Maximum steering offset: ±40°.
  • Steering movement: 0.8° every 15 ms.
  • Default motor PWM: 200 / 255.

The current firmware is a prototype intended for manual control. A more advanced command protocol with numerical steering and motor speed values, telemetry, and a communication watchdog is planned.

Orange Pi Software

The Orange Pi application is planned in Rust and will serve as the main interface between the camera, autopilot, and microcontroller.

Planned functionality:

  • Camera capture through V4L2.
  • Serial communication with Arduino.
  • Pluggable autopilot implementations.
  • Local and remote autonomous driving modes.
  • Remote video streaming and manual control.
  • Recording camera frames and corresponding control commands for dataset collection.

The target operating system is Armbian (Debian 13).

Camera and Video Streaming

The camera is an OV2710-based USB UVC device that provides MJPEG video without requiring software-side encoding.

A working video streaming prototype is available in software/cam-test/.

It is implemented in Rust using:

  • axum for the HTTP server and WebSocket communication.
  • v4l for camera access through V4L2.

The application captures MJPEG frames and forwards them to connected clients over WebSocket. A browser-based interface displays the video stream along with FPS and bandwidth statistics.

Supported camera modes:

ResolutionFrame rate
1920 × 108030 FPS
1280 × 102430 FPS
1280 × 96030 FPS
1280 × 72030 FPS
1024 × 76830 FPS
800 × 60030 FPS
640 × 48030 FPS
352 × 28830 FPS
320 × 24030 FPS

Building and running:

Install the required dependencies:

bash
sudo apt install -y build-essential libclang-dev clang v4l-utils

Build the application:

bash
cd cam-test
cargo build --release

Run the video server:

bash
./target/release/cam-test /dev/video4 1280 720 30 8080

Arguments:

text
[device] [width] [height] [fps] [port]

Open the following address in a browser:

text
http://<orange-pi-ip>:8080/

The camera exposes separate video and metadata device nodes. Their /dev/videoN numbers may change between system boots. For reliable device selection, use a persistent path from /dev/v4l/by-id/.

Build note: libclang-dev is required by v4l2-sys-mit for bindgen. The application must be built in a Linux environment with the required V4L2 headers.

Autonomous Navigation

The project is intended to support multiple autonomous driving approaches through a modular autopilot interface.

Two approaches are currently considered:

Classical Computer Vision

An OpenCV-based pipeline without machine learning:

  • Image preprocessing.
  • Road and lane detection using color segmentation and edge detection.
  • Geometric analysis and perspective transformations.
  • Steering angle estimation.
  • PID-based control.

Neural Network-Based Navigation

A neural network that predicts steering and potentially motor speed directly from camera frames.

One possible approach is behavioral cloning, where the model is trained using camera footage paired with control commands recorded during manual driving.

This requires a dataset collection pipeline and an appropriate training workflow.

Deployment Modes

Both approaches are intended to support two execution modes.

AspectOnboardRemote
ComputationOrange Pi 3BExternal computer
Video processingLocalRemote
Network dependencyNoneWi-Fi
LatencyLowerIncludes network and streaming overhead
Computing resourcesLimited by RK3566 and 2 GB RAMDepends on external hardware

The remote mode uses WebSocket communication to transmit camera frames to an external computer and receive control commands in return.

The Orange Pi acts as a bridge between the network and the Arduino.

Hardware Acceleration

The Orange Pi 3B is based on the Rockchip RK3566 and provides an NPU rated at approximately 0.8 TOPS.

Hardware acceleration through the RKNN toolkit is a potential option for neural network inference. Integration with the Rust application is yet to be investigated.

Repository Structure

text
cuttlefish/
├── hardware/
│   ├── 3d-models/   # Fusion 360 source and printable models
│   └── schemas/     # KiCad schematics, PCB, Gerber files and BOM
├── mcu-firmware/    # Arduino Nano firmware
├── README.md        # Project documentation
└── software/
    └── cam-test/    # Rust-based camera streaming prototype

Additional software components will be added as development progresses.

Future Development

The following improvements are planned:

  • Implement the Orange Pi control application.
  • Develop a unified numerical Serial command protocol.
  • Add a communication watchdog and fail-safe motor stop.
  • Implement autonomous navigation algorithms.
  • Collect training data for neural network-based navigation.
  • Add battery voltage monitoring and undervoltage protection.
  • Evaluate the accuracy of camera-only navigation.
  • Measure video streaming latency and system performance.
  • Investigate RKNN-based neural network acceleration.
  • Improve calibration and repeatability across multiple vehicles.

The platform is also intended to serve as a reproducible hardware base for educational events and robotics hackathons.

License

Cuttlefish consists of hardware and software components distributed under separate open-source licenses.

ComponentLicense
Hardware designs (hardware/)CERN-OHL-S-2.0
MCU firmware (mcu-firmware/)GPL-3.0-only
Software (software/)GPL-3.0-only

See the respective LICENSE files in each directory for the full license texts.

Third-party components remain under their respective licenses.

Parts

15
QtyValueFootprintReferences
2470uF_16VCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC1, C2
1Arduino_Nano_v3.xModule:Arduino_Nano_Socket_2x15Arduino Nano1
1Battery_SocketTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalBATTERY1
1Motor_SocketTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalMOTOR1
1SBC_SocketTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalSBC1
1SW_SPSTTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalSWITCH1
1Servo_SocketConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_HorizontalSRV1
1~Connector_PinSocket_2.54mm:TB6612FNG_PinSocketTB6612FNG1
1~Connector_PinSocket_2.54mm:MP1584_PinSocketMP1584
1~Connector_PinSocket_2.54mm:XL4015E_PinSocketXL4015E1

The 11 most common of 15 parts.

Questions

How big is the Cuttlefish carrier PCB?

It measures 87.5 × 63 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Cuttlefish carrier use?

15 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Cuttlefish carrier KiCad files?

From the Ezhkin-Kot/cuttlefish repository on GitHub, at the commit this page was made from: the board is hardware/schemas/cuttlefish-carrier.kicad_pcb and its schematic hardware/schemas/cuttlefish-carrier.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Cuttlefish carrier design in my own project?

Its repository states no licence, so its author keeps all rights: ask Ezhkin-Kot before reusing the design.

Similar boards

  • 2 layers19 × 76 mmSub, the printed circuit board in 3D

    Sub

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    15 parts3kApache-2.0
  • 2 layers26.7 × 62.2 mmDeniseadapter, the printed circuit board in 3D

    Deniseadapter

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    15 parts1kGPL-3.0
  • 2 layers100 × 44 mmVideoslot, the printed circuit board in 3D

    Videoslot

    mntmn/amiga2000-gfxcard

    MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

    15 parts1k
  • 2 layers91 × 51 mmBusinessCard, the printed circuit board in 3D

    BusinessCard

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    15 parts915
  • 2 layers24.3 × 57.9 mmFlosspods pro flex, the printed circuit board in 3D

    Flosspods pro flex

    kenp-io/not-for-airpods-repairs

    The content of this repository is licensed under the WTFPL License. Please have a close look at the terms before using this material.

    15 parts609WTFPL
  • 2 layers20.3 × 15.2 mmL0 Load, the printed circuit board in 3D

    L0 Load

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    15 parts546MIT
  • 2 layers68 × 50 mmEleLab v2 PowerFeed, the printed circuit board in 3D

    EleLab v2 PowerFeed

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    15 parts531GPL-3.0
  • 2 layers50.8 × 35.6 mmInterface, the printed circuit board in 3D

    Interface

    harbaum/I2C-Tiny-USB

    Cheap and simple I²C to USB interface

    15 parts454