Skip to content

ohrbit/open3dpainter

Repository files navigation

🖌️ Open3Dpainter

The missing tool for every 3D printer owner.

An open-source automated airbrush station for 3D-printed parts.

License: CERN-OHL-W-2.0 License: MIT License: CC BY 4.0 Status: Planning Controller: Arduino UNO Q PRs Welcome


You printed it. Now paint it — automatically.

front rear


🧭 Table of Contents


What is Open3Dpainter?

Open3Dpainter is a compact, open-source desktop robot that automatically base-coats and finishes 3D-printed parts using an airbrush.

It combines:

  • An overhead robotic arm mounted on linear gantry rails — so it can reach every side of your print without the arm getting in the way.
  • A motorized rotary turntable that continuously presents all faces of the part to the nozzle.
  • An airbrush toolhead with electronically controlled trigger and air supply.
  • An enclosed, fume-managed workspace — initially a standard grow tent, later a rigid desktop enclosure.
  • A modern dual-brain controller (Arduino UNO Q): Linux for planning and AI, STM32 for real-time motion and IO.

The whole system is fully open-source: CAD files, firmware, software, and documentation.


Why does this exist?

Every serious 3D-printer owner eventually wants to paint their prints. Today that means:

  • Masking, priming, and painting by hand — slow, inconsistent, skill-dependent.
  • Inconsistent finish quality across identical parts.
  • No repeatable workflow.

Open3Dpainter automates this step. You place your part, select a preset, and the robot applies a controlled, repeatable coating while you do something else.

It is the logical "next module" in the desktop fabrication stack — the same way a laser engraver or pick-and-place machine extends what a 3D printer can do.


System Overview

┌─────────────────────────────────────────────────────┐
│                    GROW TENT / ENCLOSURE             │
│                                                     │
│   ┌────────────────────────────────────────────┐   │
│   │          OVERHEAD GANTRY (X / Y rails)      │   │
│   │                                             │   │
│   │        ┌─────────────────────────┐          │   │
│   │        │   Slim robotic arm (Z)  │          │   │
│   │        │     ┌───────────┐       │          │   │
│   │        │     │ Airbrush  │◄ mist │          │   │
│   │        │     │ toolhead  │       │          │   │
│   │        └──────────┬──────┘       │          │   │
│   └───────────────────┼──────────────┘          │   │
│                       ▼                          │   │
│              ┌──────────────────┐               │   │
│              │  Rotary table    │               │   │
│              │  3D-printed part │               │   │
│              └──────────────────┘               │   │
│                                                     │
└─────────────────────────────────────────────────────┘

Key design choices:

  • Overhead arm → zero desk footprint, full 360° reach around the part.
  • Rotary table → eliminates need for complex arm IK for most spray passes.
  • Grow tent first → existing ports for exhaust, air, and power; cheap; replaceable.
  • MQTT-native → integrates with your existing home automation stack out of the box.

Control Architecture

Open3Dpainter uses a Klipper-style split on the Arduino UNO Q:

┌─────────────────────────────────────────────────────┐
│                   Arduino UNO Q                     │
│                                                     │
│   ┌──────────────────────┐  RPC  ┌───────────────┐  │
│   │   Linux MPU          │◄────►│  STM32 MCU    │  │
│   │   Qualcomm QRB2210   │       │  STM32U585    │  │
│   │   Debian Linux       │       │               │  │
│   │                      │       │ • Step/dir    │  │
│   │ • Path planning      │       │ • Endstops    │  │
│   │ • Kinematics         │       │ • Pump PWM    │  │
│   │ • RL/ML control      │       │ • Air valve   │  │
│   │ • Web UI             │       │ • Servo ctrl  │  │
│   │ • MQTT / HA /        │       │ • E-stop      │  │
│   │   Node-RED           │       │ • Safety IO   │  │
│   │ • Job manager        │       │               │  │
│   └──────────────────────┘       └───────────────┘  │
└─────────────────────────────────────────────────────┘
         │                                 │
         ▼                                 ▼
   Web UI / MQTT                    Stepper drivers
   Home Assistant                   Servo / solenoid
   Node-RED flows                   Pump controller
Side Chip Responsibility
Linux MPU Qualcomm QRB2210 Planning, ML, UI, MQTT, integrations
Real-time MCU STM32U585 Step/dir, IO, safety, RPC at 50–200 Hz

The Linux side never touches hardware directly. The MCU side never makes planning decisions. This clean split makes each side independently testable and replaceable.


Airbrush Toolhead

The toolhead is designed as a self-contained, parametric module that mounts to the arm via a defined interface plane.

Core components

Component Spec / Example Purpose
Gravity-feed airbrush Iwata HP-C Plus, 0.3 mm nozzle, 7 ml cup Primary spray tool
Servo trigger cam Metal-gear, ≥ 3–5 kg·cm digital servo Controls needle / paint volume
Air solenoid valve 12–24 V DC, 1/8" port, 15–25 psi rated Hard on/off of airflow
Quick-disconnect 1/8" BSP airbrush QD with shutoff Fast toolhead swap
Flexible air hose 1/8" braided, 1–2 m Air supply routing
Paint pump (opt.) 5–12 V peristaltic, 5–20 ml/min Remote reservoir feed
Toolhead clamp Parametric 3D-printed (OpenSCAD) Arm interface mount
Servo cam bracket 3D-printed, servo-specific Trigger actuation
Hose strain reliefs Printed clips, 2–3 per arm Cable/hose management

Control logic

Linux side sets:    "spray 40% flow, 20 psi, 80 mm/s pass"
                          │
                    RPC to MCU
                          │
MCU controls:       servo PWM  →  needle position (paint volume)
                    solenoid   →  air on/off (hard gate)
                    pump PWM   →  paint feed rate (optional)

Servo position controls paint; solenoid provides a reliable hard shutoff. Both are independently controllable so the system can feather paint, do dry air passes, or emergency-stop the spray instantly.


Enclosure Options

Open3Dpainter is designed to support three enclosure configurations:

1. 🌱 Grow Tent (default prototype)

Standard off-the-shelf grow tent used as the primary enclosure.

Why:

  • Inexpensive (€30–€80 for a suitable size).
  • Large working volume — plenty of room for the gantry and arm.
  • Built-in duct ports for exhaust, compressed air, and power.
  • Mylar interior reflects light and is easy to wipe clean.
  • Available worldwide, no custom fabrication needed.

How it works:
The mechanical gantry frame and rotary table base sit on a rigid freestanding base plate inside the tent. The tent is just a shell — swap it out if it wears or if you want a bigger workspace.

Grow tent size recommendation:
60×60×120 cm minimum for the first prototype.
80×80×160 cm for larger parts or multiple turntable fixtures.

2. 🏗️ Rigid Desktop Enclosure (future reference design)

Custom aluminum-extrusion frame with polycarbonate clear panels — as shown in the concept patent drawings.

  • Better rigidity and dimensional consistency.
  • More professional appearance.
  • Easier to seal and certify.
  • Higher build cost and effort.
  • Planned for v1.0 after the motion and paint process is validated.

3. 🔧 Open Frame Bench Jig (development only)

Bare motion system, no enclosure.

  • For dry-run motion testing and firmware development only.
  • Not safe for real paint — no fume containment.
  • Clearly marked as a non-production configuration in the docs.

Axis Layout

Axis Description Actuator Notes
X Gantry horizontal NEMA 17 stepper Overhead rail
Y Gantry depth NEMA 17 stepper Optional for larger volume
Z Arm vertical NEMA 17 stepper Height above part
A Rotary table (part) NEMA 17 stepper Primary rotation axis
J1–J4 Arm joints Servo or stepper Optional articulation

For most paint jobs, X + Z + A is sufficient. Y and arm joints add reach for complex geometries.


Repository Structure

open3dpainter/
│
├── README.md                       ← you are here
├── AGENT.md                        ← context for AI agents and tools
├── CONTRIBUTING.md
├── RELEASE_NOTES.md
├── LICENSE-HW                      ← CERN-OHL-W-2.0
├── LICENSE-SW                      ← MIT / GPLv3
├── LICENSE-DOCS                    ← CC BY(-SA)
│
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       └── ci.yml
│
├── hardware/
│   ├── mechanical/
│   │   ├── gantry/                 ← overhead rail system
│   │   ├── arm/                    ← robotic arm (3–4 DOF)
│   │   ├── fixtures/               ← part holders, jigs
│   │   ├── enclosure_desktop/      ← rigid box reference design
│   │   ├── enclosure_grow_tent_adapter/  ← tent mounting frame
│   │   └── BOM_mechanical.md
│   └── electronics/
│       ├── controller_pcb/
│       ├── power_distribution/
│       ├── schematics/
│       └── BOM_electronics.md
│
├── firmware/
│   ├── motion_firmware/            ← STM32 MCU: step/dir, IO, RPC
│   └── hardware_tests/             ← per-axis and IO test sketches
│
├── software/
│   ├── planner/                    ← path planning, kinematics
│   ├── rpc_bridge/                 ← UNO Q Linux↔MCU communication
│   ├── ui_web/                     ← job control web UI
│   └── integration/
│       ├── home_assistant/
│       └── node_red/
│
├── docs/
│   ├── overview/
│   ├── assembly/
│   ├── calibration/
│   ├── safety/
│   ├── developer/
│   └── images/
│
├── examples/
│   ├── jobs/                       ← example spray job configs
│   └── parts/                      ← demo STLs
│
└── planning/
    ├── automated_airbrush_station_planning_v3.xlsx
    └── Open3Dpainter_Project_Brief.pdf

Bill of Materials

Mechanical structure

Item Spec Qty
Aluminum extrusion 20×20 Frame and gantry ~8 m
Precision linear rails + carriages X/Y overhead gantry 2 sets
Rotary indexing table Motorized, NEMA 17 driven 1
Polycarbonate / acrylic panels Clear enclosure walls 6 pcs
Custom bracket plates CNC-milled aluminum 1 set
T-slot nuts, M3/M5 screws Frame hardware 1 set

Robotic arm & toolhead

Item Spec Qty
Articulated arm (3–4 DOF) Carbon fiber tubes + machined joints 1
NEMA 17 stepper motors Gantry and rotary axes 4
Iwata HP-C Plus (or equiv.) 0.3 mm nozzle, gravity feed 1
Metal-gear servo ≥ 3–5 kg·cm for trigger cam 1
Air solenoid valve 12–24 V DC, 1/8" BSP 1
Flexible air hose 1/8" braided, 1–2 m 1
Mini peristaltic pump 5–20 ml/min (optional) 0–1
3D-printed clamp + cam OpenSCAD parametric 1 set

Electronics & control

Item Spec Qty
Arduino UNO Q QRB2210 MPU + STM32U585 MCU 1
Stepper drivers TMC2209 or similar 4–6
Custom carrier PCB Drivers, IO, power distribution 1
24 V DC power supply ~500 W 1
Cabling harness Color-coded, drag-chain rated 1 set
E-stop + safety interlocks Enclosure door + emergency stop 1 set

Full sourcing BOM with part numbers and cost estimates: planning/automated_airbrush_station_planning_v3.xlsx


Roadmap

Milestone Goal Status
v0 — Docs & repo Publish repo, README, AGENT.md, planning docs 🟡 In progress
v0.1 — Open-frame rig Gantry + rotary + UNO Q firmware + minimal planner 🔲 Planned
v0.2 — Grow-tent prototype Full enclosure, airbrush toolhead, safety interlocks 🔲 Planned
v0.3 — First community release Reproducible BOM, assembly docs, basic web UI 🔲 Planned
v1.0 — Stable release Rigid enclosure reference, refined arm, full docs 🔲 Planned

See RELEASE_NOTES.md for detailed per-version changelogs.


Performance Targets

Target Value (MVP)
Part envelope 200–250 mm diameter, ~200 mm height
Positional repeatability < 0.3 mm at nozzle tip
Coating repeatability ± 10–15% film thickness
Setup time < 15 minutes
Daily calibration < 10 minutes
Maintenance interval Every 1–2 hours of spray time
Working pressure 15–25 psi
Default nozzle size 0.3 mm

Integration Ecosystem

Open3Dpainter is designed to live inside a modern maker automation stack:

Tool Integration
Home Assistant MQTT topics for job status, control, and monitoring
Node-RED Flow-based job triggers and paint automation logic
MQTT (Mosquitto) Primary message bus for all device communication
Docker / Portainer All Linux-side services run containerized
Arduino IDE MCU firmware development and flashing
OpenSCAD (OHRBIT Suite) All 3D-printed parts are parametric generators

All state and control is accessible as MQTT topics. If it can subscribe to MQTT, it can drive or monitor Open3Dpainter.


Open-Source Licensing

Open3Dpainter uses a split licensing model:

Layer License Covers
Hardware CERN-OHL-W-2.0 Mechanical CAD, PCBs, fixtures
Firmware & software MIT (or GPLv3 if required) MCU code, Linux planner, UI, tools
Documentation & media CC BY 4.0 Guides, renders, photos, PDFs

In plain language:

  • Modify the hardware designs → share your modifications under the same open license.
  • Use or modify the software → no restriction, but credit the project.
  • Share or remix the docs → credit the project.
  • Build it commercially → you can. Just keep hardware changes open.

Contributing

Contributions are welcome across all layers: hardware design, firmware, software, documentation, and examples.

Please open an issue first for any significant change so we can discuss direction and interfaces before implementation.

See CONTRIBUTING.md for full guidelines on:

  • How to structure hardware contributions (OpenSCAD, STEP, KiCad).
  • Firmware conventions (keep MCU thin, push logic to Linux).
  • Software conventions (Python 3.10+, PEP 8, YAML config, MQTT-native).
  • Commit message format and PR process.

⚠️ Safety

This project involves:

  • Moving machinery — overhead gantry and rotating arm.
  • Compressed air — up to 25 psi.
  • Atomized paint and solvents — ensure adequate ventilation.
  • Mains-powered equipment — 24 V DC from AC mains.

Do not run with real paint without:

  • Adequate ventilation or active fume extraction.
  • Safety interlocks and E-stop wired and tested.
  • Personal protective equipment (gloves, eye protection, mask).
  • Compliance with local regulations for spray painting.

The grow-tent prototype configuration relies on the tent's existing duct ports for fume management. You are responsible for ensuring your installation meets local safety standards.


Project Status

[██████████░░░░░░░░░░░░░░] Planning & early design — v0 in progress
  • ✅ Concept defined, patent-style drawings completed
  • ✅ Control architecture finalized (Arduino UNO Q)
  • ✅ Toolhead BOM researched
  • ✅ Open-source license structure defined
  • ✅ Repository structure, README, AGENT.md, CONTRIBUTING.md live
  • ✅ Project brief and outreach letters drafted
  • 🟡 GitHub repository going live
  • 🔲 First hardware prototypes
  • 🔲 First firmware release
  • 🔲 Community builds

Acknowledgements

Open3Dpainter builds on the shoulders of many open projects and communities:

  • Marlin, Klipper, RepRapFirmware — for proving that open motion control is possible and reliable.
  • Arduino — especially the UNO Q dual-brain platform that makes this architecture clean and accessible.
  • PAROL6, LowiekVDS 6-axis arm, BCN3D arm — open robot arm projects that prove 3D-printed arms can be precise enough.
  • FRIDA (CMU), Third-Hand-Research Spraycan-Actuator — for prior art in robotic spray painting.
  • The 3D printing and maker community — Printables, Hackaday, Reddit r/3Dprinting, and everyone who builds in public.
  • Early collaborators contributing robot arm designs and reinforcement-learning controllers.

Open3Dpainter — made in Hagen, Germany 🇩🇪
Open hardware · Open software · Open to contributors

About

The missing tool for every 3D printer owner. An open-source automated airbrush station for 3D-printed parts.

Resources

License

Unknown and 2 other licenses found

Licenses found

Unknown
LICENSE-DOCS
Unknown
LICENSE-HW
Unknown
LICENSE-SW

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages