Claude Code + Blender MCP로 3D 케이스 4종 제작기

한 세션에서 Claude Code와 Blender MCP를 활용해 실제 사용 가능한 3D 프린트 케이스 4종을 설계·생성한 기록.

TL;DR


사용한 도구 스택

1. Blender 5.1 + BlenderMCP

BlenderMCP addon을 Blender 5.1에 설치하면 외부에서 Python 코드를 보내 메쉬를 생성·편집할 수 있다. 본 작업에서는 Claude Code 세션에서 mcp__blender__execute_blender_code 도구로 bpy API 호출.

[Claude Code 세션] ──MCP/JSON over TCP:9876──> [Blender + BlenderMCP addon]
                                                  bpy.ops.* (primitives, booleans, STL export)

2. Claude Code superpowers skills

세 가지 skill을 시퀀스로 사용:

brainstorming         → 요구사항 인터뷰 + 디자인 옵션 + spec 문서

writing-plans         → 구현 계획 (태스크 8~9개로 분해, TDD 스타일)

subagent-driven-development → 태스크당 새 subagent 디스패치, 2단계 리뷰

각 프로젝트마다 동일 패턴 반복. spec/plan 문서가 git에 함께 commit되어 추후 치수 수정 시 단일 소스로 참조.

3. 검증된 모듈 패턴

모든 케이스 프로젝트가 같은 파일 구조를 공유:

project/
├── docs/
│   ├── specs/YYYY-MM-DD-<name>-design.md
│   └── plans/YYYY-MM-DD-<name>.md
├── src/
│   ├── params.py     # 모든 치수 (단일 소스 of truth)
│   ├── geom.py       # 공유 Blender 헬퍼 (clear_scene, add_cube, add_cylinder, boolean_*)
│   ├── <component>.py # 각 부품 (shell, lcd_mounts, cutouts, ...)
│   ├── verify.py     # bbox + non-manifold edge 검증
│   └── build.py      # 오케스트레이터 + STL 익스포트
└── output/
    └── *.stl, *.png  # 인쇄용 STL + 시각 검증 렌더

params.py만 수정하면 즉시 재빌드되어 새 STL 생성. 치수 조정에 매우 유연.


프로젝트 1: 🌿 Halo Spray Nozzle (스마트팜 분무팁)

개요

5V DC 워터펌프 + 6mm ID 실리콘 호스에 끼우는 360° 안쪽 분무 링. 식물 근권부 균등 급수 용도.

디자인 핵심 결정

단면 구조

                  ┌─ 바브 (호스 6mm 안쪽으로 꽂힘)
                  │   외경 8mm / 7.5mm 2단 미늘

              ━━━━━┓
        ┌──────────┻──────────┐
        │  ┌────────────────┐ │  ◀── 평면 디스크 (안지름 90mm)
        │  │  ●  ●  ●  ●  ● │ │  ◀── 안쪽 림에 노즐 6개 (60° 간격)
        │  │  ●         ●   │ │
        │  │      ┌──┐      │ │
        │  │      │식물│      │ │
        │  │      └──┘      │ │
        │  │  ●         ●   │ │
        │  │  ●  ●  ●  ●  ● │ │
        │  └────────────────┘ │
        └─────────────────────┘
        ◀────── 외경 114mm ──────▶

치수 요약

항목
외경 × 안지름 × 높이114 × 90 × 10 mm
노즐6개 × Ø1.5mm, -15° 틸트
바브8/7.5/8mm 2단 미늘, 높이 15mm
인쇄PETG, 100% infill, ~1.5시간

렌더

Halo Nozzle Top 상단 뷰: 도넛 형태 + 12시 바브 + 안쪽 림 6개 노즐

Halo Nozzle Perspective 입체 형상

Halo Nozzle Front 측면: 디스크 + 바브 돌출

STL 다운로드

halo-nozzle-v1.stl (200 KB)


프로젝트 2: 🔋 Arduino Mega + L298P 모터쉴드 케이스

개요

Arduino Mega 2560 + L298P H브리지 모터쉴드(우노 사이즈)를 담는 위 오픈 트레이 케이스. 쉴드 위 점퍼 헤더에 자유롭게 접근하기 위해 윗면 완전 오픈.

디자인 핵심 결정

정정 이력 (사용자 사진 박스 표시 기반)

버전변경
v1 (잘못)USB-B/DC 잭 위치 좌우 반대
v1 정정USB/DC 좌표 swap
v2 정정모터 컷아웃 면 변경 (긴 변 1 → 긴 변 2) + 통풍 슬릿 재배치

사진 박스 표시가 가장 정확한 정보. 추정 X.

치수 요약

항목
외형 (W × D × H)111 × 63 × 35 mm
스탠드오프M3 × 4, Ø6/Ø2.5, 높이 5mm
컷아웃USB-B + DC 잭 + 모터 케이블 + 통풍 슬릿
인쇄PETG, 4 walls, 25% infill, ~3.5시간

렌더

Mega+L298P Case Top 상단 뷰: 트레이 + 4코너 보스 + 측면 컷아웃

Mega+L298P Case Perspective 입체 (정정 후 v2)

STL 다운로드

mega-l298p-case-v1.stl (138 KB)


프로젝트 3: 📺 5인치 DSI LCD + Pi 4 + 릴레이쉴드 케이스 (학습 사례)

개요

Waveshare 5inch DSI LCD (B) + Raspberry Pi 4 + Pi-Sd8R 릴레이쉴드(PA1A 4개 + MAX485)를 담는 landscape 케이스.

디자인 결정 + 7번의 정정 (가장 많은 시행착오)

버전변경
v1portrait 방향, Pi USB를 아래로
v2landscape 회전 + 컷아웃 재매핑 (12핀 단자/Pi USB 위치 정정)
v3마운팅 핀 → 내부 보스 컬럼 (잠금 방식 정정)
v4불필요한 케이블 통과 슬롯 제거
v5STEP 정밀 분석 + 외형 축소 + Pi USB 뒷판 컷아웃
v6뒷판 막힘 + Pi USB 좌측 측면
v72피스 분리형 (LCD 프레임 + Pi 케이스)
v7.2LCD 실측 반영 (베젤 128×82, PCB 122×76)
종료본질 구조(클램쉘 결합/Pi 접근/LCD 마운트) 모호 → 처음부터 다시 하기로

가장 중요한 교훈

  1. STEP/CAD 파일은 처음부터 정밀 파싱: R=4 코너원이 “코너 라운드”인지 “보드 가장자리”인지 명확히
  2. 사용자 실측이 데이터시트보다 정답: 베젤/PCB 사이즈 차이는 측정해야 함
  3. 본질 구조를 먼저 확정:
    • LCD 마운팅 방향 (앞/뒤/측면 나사?)
    • Pi 4의 USB 잭이 LCD 외형 안쪽에 있어서 단일 케이스 측면 컷아웃 불가 (LCD 표준 = Pi가 LCD 뒷면 중앙에 매달림)
    • 부품 분리/결합 방식
  4. 2피스 분리형의 결합 구조 (스냅 / 나사 / 끼움) 명확히

정밀 분석으로 추출한 STEP 데이터

LCD 외형 (R=4 코너원 + z=-1.7 outline):
  127.7 × 87.4 mm (코너 R4)

LCD 마운팅 홀 (Ø2.0):
  LCD 중심에서 (±56.5, ±32.9)
  → 가장자리 인셋: X=7.35, Y=10.8 mm (비대칭)

Pi 4 마운팅 홀 (LCD 뒷면):
  LCD 중심에서 (-32.5~25.4, -23.8~25.3)
  → 표준 Pi 4 58×49 패턴, X 방향 -3.55mm 오프셋

결론

이 프로젝트는 본질 구조 결정 없이 외형부터 만들면 끝없이 정정한다는 교훈을 줌. 처음부터 다시 하기로 결정.


프로젝트 4: 🐰 Raspberry Pi 4B 단독 케이스

개요

LCD 케이스 경험을 살려 처음부터 정확히 진행한 표준 클램쉘 케이스. GPIO 미사용 → 윗면 막힘 OK.

디자인 핵심 결정 (정정 없이 한 번에 통과)

단면 구조

   ┌─────────────────────────────────────┐
   │  ┌─┐ HDMI HDMI ┌─┐  ┌─┐  USB-C     │  ← 윗 뚜껑 (z=25~30, 5mm 두께)
   │  │ │  □   □   │ │  │ │  □          │     통풍 슬릿 12개
   │  └─┘                                │     클램쉘 결합 4코너 관통구
   ├─ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ─┤  ← 클램쉘 결합부 (z=25)
   │  ◯ Pi 4 마운팅 보스 4개       ◯    │  ← 본체 (z=0~25)
   │     (Pi 표준 58×49 패턴)            │
   │                                     │     측벽 컷아웃:
   │  ◯                              ◯  │     USB+Eth (긴 변)
   │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │     USB-C/HDMI/AV (단변)
   └─────────────────────────────────────┘     microSD (반대 단변)
   ◀────── 92mm ──────▶

치수 요약

항목
외형 (W × H × D)92 × 62 × 30 mm (본체 25 + 뚜껑 5)
Pi 마운팅4× M2.5 보스 (Pi 표준 58×49)
클램쉘 결합4× M3 보스 (코너) + 뚜껑 Ø3.2 관통구
인쇄PETG, 4 walls, 25% infill, 본체 ~2h + 뚜껑 ~1h
메쉬manifold ✅ (body 0, lid 0)

렌더

Pi 4B Body Top 본체 상단: 4코너 클램쉘 보스 + 가운데 Pi 마운팅 보스 + 측면 컷아웃

Pi 4B Body Perspective 본체 입체

Pi 4B Lid Top 뚜껑 상단: 4코너 관통구 + 통풍 그릴 12 슬릿

Pi 4B Lid Perspective 뚜껑 입체

STL 다운로드


워크플로우 패턴 (재사용 가능)

1. Brainstorming 단계

사용자 요구 입력

한 번에 하나씩 multiple-choice 질문
  - 케이스 형태? (트레이/클램쉘/슬라이드)
  - 노출 포트? (다중 선택)
  - 마운팅 방식?
  - 거치 방식?
  - 냉각?

2-3 접근 방식 제안 + 트레이드오프

디자인 섹션 제시 (치수표 + ASCII 다이어그램)

spec 문서 작성 + 셀프 리뷰

사용자 검토 게이트

2. Writing-plans 단계

spec을 7~9개 태스크로 분해:

Task 1: params + geom + git init
Task 2: shell (외형 박스)
Task 3: mounting bosses (보스 컬럼)
Task 4: cutouts (포트 컷아웃)
Task 5: verify (manifold + bbox)
Task 6: build orchestrator + STL export
Task 7: visual verification (다각도 렌더)
Task 8: README (인쇄/조립 가이드)

각 태스크는 2~5분 단일 동작. 완전한 코드 블록 포함 (placeholder 없음).

3. Subagent-driven-development 단계

각 태스크마다 fresh subagent 디스패치 → 2단계 리뷰 (spec compliance + code quality). 컨텍스트 오염 X.


배운 점 (다음 프로젝트에 적용)

✅ 잘 한 것

  1. params.py 단일 소스: 치수 한 번 정의, 모든 모듈이 import. 수정 시 한 곳만.
  2. 검증된 모듈 패턴 재사용: geom.py / verify.py / build.py 같은 boilerplate를 프로젝트마다 복사. 인프라 작업 시간 절약.
  3. subagent 워크플로우: 한 세션에서 4개 프로젝트 (총 30+ 태스크) 완료. 컨텍스트 폭발 없음.
  4. 시각 검증 자동화: 매 빌드 후 Blender 렌더로 형태 확인. 보드 미연결 상태에서도 디자인 검토 가능.

❌ 피해야 할 것

  1. 추정값으로 디자인 진행: LCD 케이스에서 STEP 첫 50줄만 보고 외형 추정 → 5mm 빗나감 → 7번 정정.
  2. 본질 구조 없이 외형 부터: 결합 방식·마운팅 방향이 모호하면 외형이 맞아도 결국 다시.
  3. 사용자 실측 무시: 베젤 128 vs PCB 122처럼 두 사이즈가 다른 경우, 사용자가 자로 잰 게 정답.
  4. 단일 케이스 + Pi USB 측면 노출: Pi가 LCD 뒷면에 매달리면 USB가 항상 LCD 안쪽 → 측면 컷아웃 불가능. 본질적 제약을 처음에 알아야 함.

인쇄 설정 (모든 프로젝트 공통)

항목
재료PETG (1순위, 내열·내구) / PLA 가능
노즐0.4 mm
레이어 높이0.2 mm
벽 라인 수4
상/하판4 라인
인필25% (Halo는 100%)
서포트없음 (모든 디자인이 서포트 불필요)

코드 예시: params.py 한 곳에서 모든 치수 관리

"""Pi 4B Case dimensions (all in mm)."""

# Pi 4 표준
PI_PCB_W = 85.0
PI_PCB_H = 56.0
PI_MOUNT_HOLES_PCB = [
    (3.5, 3.5), (61.5, 3.5), (3.5, 52.5), (61.5, 52.5),
]

# 케이스 외형 (Pi + 측벽 + 마진 = 자동 계산)
WALL = 2.5
PI_BOARD_MARGIN_X = 1.0
OUTER_W = PI_PCB_W + 2 * (WALL + PI_BOARD_MARGIN_X)  # 92.0

# 마운팅 보스 (case 좌표 = PCB 위치 + 표준 홀 좌표)
PCB_ORIGIN_X = WALL + PI_BOARD_MARGIN_X  # 3.5
PI_BOSS_BL = (PCB_ORIGIN_X + PI_MOUNT_HOLES_PCB[0][0], ...)  # (7.0, 6.5)

# ... 모든 컷아웃, 보스, 통풍 등이 단일 파일에

치수 수정 → build.main() 한 번 호출 → 새 STL 자동 생성.


마무리

Claude Code + Blender MCP 조합으로 하루 만에 4개 케이스를 디자인부터 인쇄 준비까지 끝낼 수 있었다. 특히 LCD 케이스의 7번 정정 경험이 이후 Pi 4B 케이스를 한 번에 통과시키는 데 결정적이었음.

3D 프린트 케이스를 만들 때 알게 된 교훈:

다음에 해볼 것: ESP32 케이스, DIN 레일 마운트 컨버터 케이스, VESA 마운트 미디어 PC 케이스.