enclosure-designer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEnclosure Designer
外壳设计工具
Creates 3D-printable enclosures for electronics projects.
为电子项目创建可3D打印的外壳。
Resources
资源
This skill includes bundled tools and templates:
- scripts/generate_enclosure.py - Parametric OpenSCAD generator with PCB database
- assets/basic-template.scad - Customizable OpenSCAD template
本工具包含配套的工具与模板:
- scripts/generate_enclosure.py - 带PCB数据库的参数化OpenSCAD生成器
- assets/basic-template.scad - 可自定义的OpenSCAD模板
Quick Start
快速开始
Generate for specific PCB:
bash
uv run --no-project scripts/generate_enclosure.py --pcb "Arduino Uno" --output uno_case.scad
uv run --no-project scripts/generate_enclosure.py --pcb "ESP32 DevKit" --output esp32_case.scadCustom dimensions:
bash
uv run --no-project scripts/generate_enclosure.py --width 100 --depth 60 --height 30 --output custom.scadInteractive mode:
bash
uv run --no-project scripts/generate_enclosure.py --interactiveList supported PCBs:
bash
uv run --no-project scripts/generate_enclosure.py --list为特定PCB生成外壳:
bash
uv run --no-project scripts/generate_enclosure.py --pcb "Arduino Uno" --output uno_case.scad
uv run --no-project scripts/generate_enclosure.py --pcb "ESP32 DevKit" --output esp32_case.scad自定义尺寸:
bash
uv run --no-project scripts/generate_enclosure.py --width 100 --depth 60 --height 30 --output custom.scad交互模式:
bash
uv run --no-project scripts/generate_enclosure.py --interactive列出支持的PCB:
bash
uv run --no-project scripts/generate_enclosure.py --listWhen to Use
适用场景
- "I need a case for my project"
- "How do I make an enclosure?"
- "Design a box for my Arduino"
- User has working circuit, needs housing
- Preparing for deployment/presentation
- "我需要为我的项目制作一个外壳"
- "如何制作电子设备外壳?"
- "为我的Arduino设计一个盒子"
- 用户已有可用电路,需要外壳
- 为部署或展示做准备
Design Workflow
设计流程
Step 1: Gather Measurements
步骤1:收集尺寸数据
Ask user for:
1. Main board dimensions (L × W × H in mm)
2. Component clearances (tallest component height)
3. Connectors/ports that need access (USB, power jack, etc.)
4. Mounting holes (positions, diameters)
5. Any displays, buttons, LEDs that need cutouts
6. Environment (indoor/outdoor, waterproof?)向用户确认以下信息:
1. 主电路板尺寸(长×宽×高,单位:毫米)
2. 元件间隙(最高元件的高度)
3. 需要预留接口的连接器(USB、电源接口等)
4. 安装孔(位置、直径)
5. 需要开孔的显示屏、按钮、LED等部件
6. 使用环境(室内/室外、是否需要防水)Step 2: Design Parameters
步骤2:设计参数
Enclosure Type: [Box/Clamshell/Snap-fit/Screw-mount]
Material: [PLA/PETG/ABS]
Wall Thickness: [2-3mm typical]
Mounting Style: [Standoffs/Clips/Rails]
Ventilation: [None/Slots/Holes]
Access: [Top-remove/Front-panel/Side-openings]外壳类型:[普通盒式/翻盖式/卡扣式/螺丝固定式]
材料:[PLA/PETG/ABS]
壁厚:[典型值2-3毫米]
安装方式:[支撑柱/卡扣/导轨]
通风:[无/槽式/孔式]
开启方式:[顶部开启/前面板/侧面开口]Step 3: Generate Design
步骤3:生成设计方案
Choose approach:
- Parametric OpenSCAD - Full customization
- Pre-made generator - Quick results
- Manual Fusion360/TinkerCAD - Visual design
选择合适的实现方式:
- 参数化OpenSCAD - 完全自定义
- 预制生成器 - 快速得到结果
- 手动使用Fusion360/TinkerCAD - 可视化设计
Parametric OpenSCAD Template
参数化OpenSCAD模板
Basic Project Box
基础项目外壳
openscad
// === PARAMETRIC PROJECT BOX ===
// Customize these values for your project
// Internal dimensions (mm)
inner_length = 70; // X axis
inner_width = 50; // Y axis
inner_height = 30; // Z axis (internal depth)
// Wall and tolerances
wall = 2.5; // Wall thickness
lid_tolerance = 0.4; // Gap for lid fit
corner_radius = 3; // Rounded corners
// Mounting standoffs
standoff_height = 5; // PCB clearance from bottom
standoff_dia = 6; // Standoff outer diameter
screw_hole_dia = 2.5; // M2.5 screw hole
// PCB mounting hole positions (from corner)
// Measure from your board!
pcb_holes = [
[5, 5], // Bottom-left
[65, 5], // Bottom-right
[5, 45], // Top-left
[65, 45] // Top-right
];
// Lid attachment
lid_screw_dia = 3; // M3 screws
lid_screw_positions = [
[5, 5],
[inner_length-5, 5],
[5, inner_width-5],
[inner_length-5, inner_width-5]
];
// Cutouts (add as needed)
usb_cutout = true;
usb_x = 35; // Center position
usb_width = 12;
usb_height = 8;
// === MODULES ===
module rounded_box(l, w, h, r) {
hull() {
for (x = [r, l-r])
for (y = [r, w-r])
translate([x, y, 0])
cylinder(h=h, r=r, $fn=32);
}
}
module standoff(h, outer_d, inner_d) {
difference() {
cylinder(h=h, d=outer_d, $fn=24);
cylinder(h=h+1, d=inner_d, $fn=24);
}
}
module box_base() {
outer_l = inner_length + 2*wall;
outer_w = inner_width + 2*wall;
outer_h = inner_height + wall; // Bottom wall
difference() {
// Outer shell
rounded_box(outer_l, outer_w, outer_h, corner_radius);
// Inner cavity
translate([wall, wall, wall])
rounded_box(inner_length, inner_width, inner_height+1, corner_radius-wall);
// USB cutout
if (usb_cutout) {
translate([wall + usb_x - usb_width/2, -1, wall + standoff_height])
cube([usb_width, wall+2, usb_height]);
}
}
// Add standoffs
for (pos = pcb_holes) {
translate([wall + pos[0], wall + pos[1], wall])
standoff(standoff_height, standoff_dia, screw_hole_dia);
}
}
module box_lid() {
lid_wall = wall - lid_tolerance;
outer_l = inner_length + 2*wall;
outer_w = inner_width + 2*wall;
lip_h = 5; // How deep lid inserts
// Lid top
rounded_box(outer_l, outer_w, wall, corner_radius);
// Lid lip (inserts into box)
translate([wall + lid_tolerance, wall + lid_tolerance, -lip_h])
difference() {
rounded_box(inner_length - 2*lid_tolerance,
inner_width - 2*lid_tolerance,
lip_h, corner_radius - wall);
}
}
// === RENDER ===
// Uncomment one at a time for printing:
box_base();
// translate([0, inner_width + 20, 0]) box_lid();openscad
// === PARAMETRIC PROJECT BOX ===
// Customize these values for your project
// Internal dimensions (mm)
inner_length = 70; // X axis
inner_width = 50; // Y axis
inner_height = 30; // Z axis (internal depth)
// Wall and tolerances
wall = 2.5; // Wall thickness
lid_tolerance = 0.4; // Gap for lid fit
corner_radius = 3; // Rounded corners
// Mounting standoffs
standoff_height = 5; // PCB clearance from bottom
standoff_dia = 6; // Standoff outer diameter
screw_hole_dia = 2.5; // M2.5 screw hole
// PCB mounting hole positions (from corner)
// Measure from your board!
pcb_holes = [
[5, 5], // Bottom-left
[65, 5], // Bottom-right
[5, 45], // Top-left
[65, 45] // Top-right
];
// Lid attachment
lid_screw_dia = 3; // M3 screws
lid_screw_positions = [
[5, 5],
[inner_length-5, 5],
[5, inner_width-5],
[inner_length-5, inner_width-5]
];
// Cutouts (add as needed)
usb_cutout = true;
usb_x = 35; // Center position
usb_width = 12;
usb_height = 8;
// === MODULES ===
module rounded_box(l, w, h, r) {
hull() {
for (x = [r, l-r])
for (y = [r, w-r])
translate([x, y, 0])
cylinder(h=h, r=r, $fn=32);
}
}
module standoff(h, outer_d, inner_d) {
difference() {
cylinder(h=h, d=outer_d, $fn=24);
cylinder(h=h+1, d=inner_d, $fn=24);
}
}
module box_base() {
outer_l = inner_length + 2*wall;
outer_w = inner_width + 2*wall;
outer_h = inner_height + wall; // Bottom wall
difference() {
// Outer shell
rounded_box(outer_l, outer_w, outer_h, corner_radius);
// Inner cavity
translate([wall, wall, wall])
rounded_box(inner_length, inner_width, inner_height+1, corner_radius-wall);
// USB cutout
if (usb_cutout) {
translate([wall + usb_x - usb_width/2, -1, wall + standoff_height])
cube([usb_width, wall+2, usb_height]);
}
}
// Add standoffs
for (pos = pcb_holes) {
translate([wall + pos[0], wall + pos[1], wall])
standoff(standoff_height, standoff_dia, screw_hole_dia);
}
}
module box_lid() {
lid_wall = wall - lid_tolerance;
outer_l = inner_length + 2*wall;
outer_w = inner_width + 2*wall;
lip_h = 5; // How deep lid inserts
// Lid top
rounded_box(outer_l, outer_w, wall, corner_radius);
// Lid lip (inserts into box)
translate([wall + lid_tolerance, wall + lid_tolerance, -lip_h])
difference() {
rounded_box(inner_length - 2*lid_tolerance,
inner_width - 2*lid_tolerance,
lip_h, corner_radius - wall);
}
}
// === RENDER ===
// Uncomment one at a time for printing:
box_base();
// translate([0, inner_width + 20, 0]) box_lid();Adding Cutouts
添加开孔
openscad
// === CUTOUT LIBRARY ===
// Round hole (for buttons, LEDs)
module round_cutout(x, y, z, diameter, depth) {
translate([x, y, z])
rotate([90, 0, 0])
cylinder(h=depth, d=diameter, $fn=32);
}
// Rectangle (for displays, SD cards)
module rect_cutout(x, y, z, width, height, depth) {
translate([x - width/2, -0.1, z])
cube([width, depth + 0.2, height]);
}
// Slot (for ventilation, cables)
module slot_cutout(x, y, z, width, height, depth) {
translate([x, y, z])
hull() {
translate([0, 0, 0])
cylinder(h=depth, d=height, $fn=24);
translate([width-height, 0, 0])
cylinder(h=depth, d=height, $fn=24);
}
}
// OLED display cutout (128x64 module)
module oled_cutout() {
// Visible area
rect_cutout(inner_length/2, wall, inner_height - 15, 26, 14, wall+1);
// Mounting holes (if needed)
}
// Common connector dimensions
usb_micro = [8, 3]; // USB Micro
usb_c = [9, 3.5]; // USB-C
barrel_jack = [12, 12]; // 5.5mm DC jack (round)
sd_card = [15, 3]; // SD card slotopenscad
// === CUTOUT LIBRARY ===
// Round hole (for buttons, LEDs)
module round_cutout(x, y, z, diameter, depth) {
translate([x, y, z])
rotate([90, 0, 0])
cylinder(h=depth, d=diameter, $fn=32);
}
// Rectangle (for displays, SD cards)
module rect_cutout(x, y, z, width, height, depth) {
translate([x - width/2, -0.1, z])
cube([width, depth + 0.2, height]);
}
// Slot (for ventilation, cables)
module slot_cutout(x, y, z, width, height, depth) {
translate([x, y, z])
hull() {
translate([0, 0, 0])
cylinder(h=depth, d=height, $fn=24);
translate([width-height, 0, 0])
cylinder(h=depth, d=height, $fn=24);
}
}
// OLED display cutout (128x64 module)
module oled_cutout() {
// Visible area
rect_cutout(inner_length/2, wall, inner_height - 15, 26, 14, wall+1);
// Mounting holes (if needed)
}
// Common connector dimensions
usb_micro = [8, 3]; // USB Micro
usb_c = [9, 3.5]; // USB-C
barrel_jack = [12, 12]; // 5.5mm DC jack (round)
sd_card = [15, 3]; // SD card slotOnline Generators (No CAD Needed)
在线生成工具(无需CAD软件)
Ultimate Box Maker (Thingiverse)
Ultimate Box Maker(Thingiverse)
Parameters:
- Enter internal dimensions
- Choose wall thickness
- Select lid type (snap/screw/slide)
- Add ventilation slots
- Download STL
Parametric Box by Heartman
Parametric Box by Heartman(Thingiverse)
Good for:
- Simple project boxes
- Snap-fit lids
- Basic customization
FreeCAD + Parametric Enclosure
FreeCAD + 参数化外壳
- Install FreeCAD
- Use Spreadsheet workbench for parameters
- Generate enclosure with formulas
- Export STL
- 安装FreeCAD
- 使用电子表格工作台设置参数
- 通过公式生成外壳
- 导出STL文件
Common Board Dimensions
常见开发板尺寸
Arduino Family
Arduino系列
| Board | L × W × H (mm) | Mounting Holes |
|---|---|---|
| UNO R3 | 68.6 × 53.4 × 15 | 4 holes, 3.2mm |
| Nano | 45 × 18 × 8 | 2 holes, 1.5mm |
| Mega 2560 | 101.5 × 53.4 × 15 | 4 holes, 3.2mm |
| Pro Mini | 33 × 18 × 5 | None standard |
| 开发板 | 长×宽×高(毫米) | 安装孔 |
|---|---|---|
| UNO R3 | 68.6 × 53.4 × 15 | 4个孔,直径3.2mm |
| Nano | 45 × 18 × 8 | 2个孔,直径1.5mm |
| Mega 2560 | 101.5 × 53.4 × 15 | 4个孔,直径3.2mm |
| Pro Mini | 33 × 18 × 5 | 无标准安装孔 |
ESP32 Family
ESP32系列
| Board | L × W × H (mm) | Mounting Holes |
|---|---|---|
| DevKit V1 (38pin) | 55 × 28 × 10 | None (use clips) |
| DevKit V1 (30pin) | 49 × 26 × 10 | None |
| NodeMCU-32S | 51 × 25 × 10 | 2 holes, 3mm |
| ESP32-CAM | 40 × 27 × 12 | 2 holes, 2mm |
| 开发板 | 长×宽×高(毫米) | 安装孔 |
|---|---|---|
| DevKit V1(38针) | 55 × 28 × 10 | 无(使用卡扣固定) |
| DevKit V1(30针) | 49 × 26 × 10 | 无 |
| NodeMCU-32S | 51 × 25 × 10 | 2个孔,直径3mm |
| ESP32-CAM | 40 × 27 × 12 | 2个孔,直径2mm |
Raspberry Pi Pico
Raspberry Pi Pico
| Board | L × W × H (mm) | Mounting Holes |
|---|---|---|
| Pico/Pico W | 51 × 21 × 4 | 4 holes, 2.1mm |
| 开发板 | 长×宽×高(毫米) | 安装孔 |
|---|---|---|
| Pico/Pico W | 51 × 21 × 4 | 4个孔,直径2.1mm |
Common Modules
常见模块
| Module | L × W × H (mm) | Notes |
|---|---|---|
| SSD1306 OLED 0.96" | 27 × 27 × 4 | 4 corners 2mm |
| BME280 | 15 × 12 × 3 | 2 holes 2mm |
| SD Card | 42 × 24 × 5 | 4 corners 2mm |
| TP4056 | 26 × 17 × 4 | None |
| 18650 holder | 77 × 21 × 19 | Varies |
| 模块 | 长×宽×高(毫米) | 说明 |
|---|---|---|
| SSD1306 OLED 0.96" | 27 × 27 × 4 | 4个角落孔,直径2mm |
| BME280 | 15 × 12 × 3 | 2个孔,直径2mm |
| SD卡模块 | 42 × 24 × 5 | 4个角落孔,直径2mm |
| TP4056 | 26 × 17 × 4 | 无安装孔 |
| 18650电池座 | 77 × 21 × 19 | 尺寸因型号而异 |
Design Guidelines
设计指南
Wall Thickness
壁厚参考
Application Thickness
─────────────────────────────────────
Desktop/indoor 2.0 mm
Portable/handheld 2.5 mm
Outdoor 3.0 mm
Structural/load-bearing 4.0+ mm应用场景 壁厚
─────────────────────────────────────
桌面/室内使用 2.0 mm
便携/手持设备 2.5 mm
户外使用 3.0 mm
结构承重/受力部件 4.0+ mmClearances
间隙参考
Component Add clearance
─────────────────────────────────────
PCB to wall 1-2 mm
USB/connector 0.5 mm extra per side
Moving parts 2-3 mm
Lid fit 0.3-0.5 mm gap部件类型 需预留间隙
─────────────────────────────────────
PCB与外壳壁 1-2 mm
USB/连接器 每侧额外0.5 mm
活动部件 2-3 mm
盖子配合间隙 0.3-0.5 mmMounting Strategies
安装策略
PCB Standoffs:
[Standoff]──┐
│ │
[PCB] │ standoff_height
│ │
────────────┘
▲
box_floorEdge Rails:
┌────────────┐
│ [PCB] │
│ ─────── │
│ / \ │ <-- Rails support PCB edges
└───┘ └────┘Snap-in Clips:
┌──╲ ╱──┐
│ [PCB] │
│ ───────│
└─────────┘
▲
Flexible clipsPCB支撑柱:
[支撑柱]──┐
│ │
[PCB] │ 支撑柱高度
│ │
────────────┘
▲
外壳底部边缘导轨:
┌────────────┐
│ [PCB] │
│ ─────── │
│ / \ │ <-- 导轨支撑PCB边缘
└───┘ └────┘卡扣固定:
┌──╲ ╱──┐
│ [PCB] │
│ ───────│
└─────────┘
▲
弹性卡扣Ventilation
通风设计
When needed:
- MCU draws >100mA continuously
- Motor drivers
- Power regulators
- Any component getting warm
Vent patterns:
// Slot pattern (easy to print, good flow)
for (i = [0:5]) {
translate([10 + i*8, wall/2, 10])
slot_cutout(20, 3, wall+1);
}
// Honeycomb (looks cool, harder to print)
// Use pre-made pattern from Thingiverse需要通风的场景:
- MCU持续功耗超过100mA
- 电机驱动模块
- 电源稳压模块
- 任何会发热的部件
通风样式:
// 槽式通风(易打印,通风效果好)
for (i = [0:5]) {
translate([10 + i*8, wall/2, 10])
slot_cutout(20, 3, wall+1);
}
// 蜂窝状通风(外观美观,打印难度高)
// 使用Thingiverse上的预制样式Print Settings
打印设置
Material Selection
材料选择
| Material | Pros | Cons | Best For |
|---|---|---|---|
| PLA | Easy to print, cheap | Weak to heat (>50°C) | Indoor projects |
| PETG | Heat resistant, strong | Stringing, harder | Outdoor, functional |
| ABS | Heat resistant, tough | Warps, fumes | Professional |
| ASA | UV resistant | Like ABS | Outdoor long-term |
| 材料 | 优点 | 缺点 | 最佳适用场景 |
|---|---|---|---|
| PLA | 易打印、成本低 | 耐热性差(超过50℃变形) | 室内项目 |
| PETG | 耐热性好、强度高 | 易拉丝、打印难度较高 | 户外、功能性外壳 |
| ABS | 耐热性好、韧性强 | 易翘曲、有异味 | 专业级项目 |
| ASA | 抗紫外线 | 特性类似ABS | 长期户外使用 |
Recommended Settings
推荐设置
PLA Enclosure:
Layer height: 0.2mm
Wall count: 3-4 (for 2-3mm wall)
Infill: 15-20%
Support: Usually not needed if designed right
Bed temp: 60°C
Nozzle temp: 200-210°CPETG Enclosure:
Layer height: 0.2mm
Wall count: 3-4
Infill: 20-25%
Support: Often needed
Bed temp: 80°C
Nozzle temp: 230-245°C
Print slower than PLAPLA外壳打印设置:
层高:0.2mm
壁厚层数:3-4层(对应2-3mm壁厚)
填充率:15-20%
支撑:设计合理的话通常不需要
热床温度:60℃
喷嘴温度:200-210℃PETG外壳打印设置:
层高:0.2mm
壁厚层数:3-4层
填充率:20-25%
支撑:通常需要
热床温度:80℃
喷嘴温度:230-245℃
打印速度比PLA慢Orientation Tips
打印方向建议
Print box BASE standing up (opening facing up)
- No supports needed
- Good surface finish inside
- Strong walls
Print LID flat (top surface down)
- Smooth exterior surface
- May need supports for cutouts外壳底座竖直打印(开口朝上)
- 无需支撑
- 内部表面光洁度好
- 外壳壁强度高
外壳盖子平放打印(顶面朝下)
- 外部表面光滑
- 开孔部分可能需要支撑Waterproofing
防水设计
IP Rating Guide
IP等级参考
IP65 - Dust tight, water jets OK
IP67 - Dust tight, submersible briefly
IP68 - Dust tight, continuous submersionIP65 - 防尘防喷水
IP67 - 防尘可短暂浸水
IP68 - 防尘可持续浸水Strategies
防水策略
Rubber Gasket:
Add groove in lid for O-ring:
┌───╔═══════╗───┐
│ ║O-ring ║ │
│ ╚═══════╝ │
│ [box] │
└───────────────┘Cable Glands:
- Use PG7/PG9 cable glands for wires
- Drill precise holes, thread in glands
- Seal with silicone if needed
Conformal Coating:
- Spray PCB with conformal coat
- Protects electronics inside box
橡胶密封圈:
在盖子上添加O型圈凹槽:
┌───╔═══════╗───┐
│ ║O型圈 ║ │
│ ╚═══════╝ │
│ [外壳] │
└───────────────┘电缆密封接头:
- 使用PG7/PG9规格的电缆密封接头
- 钻出精准的孔,拧入接头
- 必要时用硅胶密封
** conformal涂层:**
- 在PCB上喷涂conformal涂层
- 保护外壳内部的电子元件
Example: ESP32 Weather Station Enclosure
示例:ESP32气象站外壳
openscad
// ESP32 Weather Station Enclosure
// Components: ESP32 DevKit, BME280, SSD1306 OLED, 18650 battery
// Internal dimensions (measured from components + clearance)
inner_length = 80;
inner_width = 55;
inner_height = 50; // Room for battery under PCB
wall = 3; // Outdoor = thicker walls
// ESP32 on standoffs
esp_standoff_h = 25; // Above battery
esp_holes = [[5, 5], [5, 50], [52, 5], [52, 50]];
// OLED window position (top of enclosure)
oled_x = 40;
oled_y = 15;
oled_w = 28;
oled_h = 16;
// BME280 vent hole
bme_vent_x = 70;
bme_vent_y = 30;
bme_vent_dia = 8;
// USB access
usb_x = 30;
usb_y = inner_height - 15;
// Generate with above parameters...openscad
// ESP32 Weather Station Enclosure
// Components: ESP32 DevKit, BME280, SSD1306 OLED, 18650 battery
// Internal dimensions (measured from components + clearance)
inner_length = 80;
inner_width = 55;
inner_height = 50; // Room for battery under PCB
wall = 3; // Outdoor = thicker walls
// ESP32 on standoffs
esp_standoff_h = 25; // Above battery
esp_holes = [[5, 5], [5, 50], [52, 5], [52, 50]];
// OLED window position (top of enclosure)
oled_x = 40;
oled_y = 15;
oled_w = 28;
oled_h = 16;
// BME280 vent hole
bme_vent_x = 70;
bme_vent_y = 30;
bme_vent_dia = 8;
// USB access
usb_x = 30;
usb_y = inner_height - 15;
// Generate with above parameters...Troubleshooting
故障排查
| Problem | Cause | Solution |
|---|---|---|
| Lid too tight | Tolerance too small | Increase to 0.5mm |
| Lid too loose | Tolerance too large | Decrease, add clips |
| Screws strip | Holes too large | Use proper thread inserts |
| Parts don't fit | Measurement error | Remeasure, print test piece |
| Weak walls | Too thin, low infill | Increase wall count |
| Warping | ABS, big flat surfaces | Use brim, enclosure, PETG |
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 盖子过紧 | 公差设置过小 | 增大至0.5mm |
| 盖子过松 | 公差设置过大 | 减小公差,添加卡扣 |
| 螺丝滑牙 | 螺丝孔过大 | 使用合适的螺纹嵌件 |
| 部件无法装入 | 尺寸测量错误 | 重新测量,打印测试件 |
| 外壳壁强度不足 | 壁厚过薄、填充率低 | 增加壁厚层数 |
| 打印翘曲 | 使用ABS材料、大平面结构 | 使用裙边、封闭打印舱,或更换为PETG |
Resources
参考资源
- OpenSCAD: https://openscad.org
- Thingiverse Customizer: Parametric designs
- Printables: More enclosure designs
- McMaster-Carr: Reference for hardware dimensions
- OpenSCAD:https://openscad.org
- Thingiverse自定义器:参数化设计资源
- Printables:更多外壳设计方案
- McMaster-Carr:硬件尺寸参考数据库