주말 레크 빌드: 3D 프린트 추정기
Source: Dev.to
Introduction
이 프로젝트는 형제의 간단한 질문에서 시작되었습니다:
“필라멘트가 얼마나 필요하고, 걸리는 시간은 얼마인가요?”
그는 확인해야 할 개별 STL 파일이 약 100개 정도 있었습니다. 슬라이서가 추정치를 제공할 수는 있지만, 파일을 열고, 슬라이스하고, 통계를 읽는 작업을 반복하면 금세 지루해집니다.
What the 3D Print Estimator Does
STL 파일을 직접 스캔하고 다음과 같은 비교적 정확한 수치를 제공하는 독립형, 슬라이서에 구애받지 않는 유틸리티입니다:
- 필라멘트 길이
- 필라멘트 무게
- 출력 시간
명령줄에서 사용하거나 가벼운 웹 인터페이스를 통해 사용할 수 있습니다.
GitHub repository – 3D‑Print‑Estimator
How It Works
Geometry Analysis
이 추정기는 바이너리와 ASCII STL 파일 모두를 읽고 메쉬의 모든 삼각형을 순회하면서 다음을 업데이트합니다:
- 부피 (부호가 있는 사면체 부피를 이용)
- 표면적
- 경계 상자 치수
estimator.py의 핵심 함수:
# estimator.py
def read_stl(...):
# parses STL file
...
def accumulate_triangle_stats(...):
# updates bounds, area, volume
...
Material & Time Estimation
기하학 정보가 확보되면 estimate() 함수가 이를 출력 가능한 재료와 시간 추정치로 변환합니다.
Shell Calculation
shell_thickness = settings.perimeter_count * settings.nozzle_diameter_mm
shell_volume = stats.surface_area_mm2 * shell_thickness
Infill Calculation
internal_volume = max(stats.volume_mm3 - shell_volume, 0.0)
infill_volume = internal_volume * settings.infill_density
Filament Length & Mass
import math
filament_cross_section = math.pi * (settings.filament_diameter_mm / 2) ** 2
filament_length = total_extrusion_volume / filament_cross_section
filament_mass = (total_extrusion_volume / 1000) * settings.filament_density_g_cm3
Print Speeds
세 가지 속도가 사용됩니다:
perimeter_speed_mm_sinfill_speed_mm_stravel_speed_mm_s
이 도구는 G‑code 수준의 정밀도보다는 근사치를 제공하지만, 휴리스틱은 놀라울 정도로 잘 작동합니다.
Usage
Command‑Line Interface
python estimator.py --config printer-config.json
- 현재 폴더의 모든
.stl파일을 스캔합니다. - 기본적으로 CSV를 출력합니다 (옵션: JSON, XLSX).
- XLSX 모드는 총합 및 시/분 형식(
build_workbook())을 위한 수식을 추가합니다.
Web Interface
python estimator.py --serve --port 5000
- 열기.
- 단일 STL 파일 또는 STL ZIP 파일을 업로드합니다.
- 데이터 URI 형태로 생성된 CSV, JSON, XLSX 다운로드 링크가 포함된 깔끔한 결과 테이블을 받습니다.
웹 UI는 WEB_TEMPLATE에 정의된 Flask‑렌더링 HTML 문자열을 사용해 자체 포함됩니다.
Configuration
프린터별 설정은 모두 printer-config.json에 있습니다. 예시:
{
"layer_height_mm": 0.2,
"nozzle_diameter_mm": 0.4,
"perimeter_count": 2,
"top_layers": 4,
"bottom_layers": 4,
"infill_density": 0.25,
"perimeter_speed_mm_s": 40.0,
"infill_speed_mm_s": 60.0,
"travel_speed_mm_s": 120.0,
"filament_diameter_mm": 1.75,
"filament_density_g_cm3": 1.24,
"travel_factor": 0.1
}
프린터, 재료, 혹은 원하는 출력 환경에 맞게 값을 조정하면 추정기가 자동으로 업데이트됩니다.
What It Is Not
- 슬라이서를 대체하는 도구가 아님
- 분 단위로 정확한 출력 시간을 예측하는 도구가 아님
- 가변 레이어 높이, 리트랙션, 코스팅, 가속도, 기계별 특수 기능 등을 처리하는 도구가 아님
Primary Benefits
- “필라멘트가 충분한가?” 라는 질문에 빠르게 답변
- 출력 소요 시간을 대략적으로 추정
- 어떤 STL이 주말 프로젝트에 적합하고, 어떤 것이 빠른 출력인지 식별
Future Improvements
- 모델별 설정 오버라이드 기능
- 실제 모델 + 실제 출력 시간을 입력해 휴리스틱을 보정하는 옵션형 실측 보정
- 보다 다듬어진 웹 UI
- 다양한 출력 설정에 따른 비용을 비교하는 배치 모드
이 프로젝트는 실험과 성장을 위한 충분한 여지를 남기면서도, 즐겁게 유지될 수 있을 만큼 작게 유지됩니다.