AI Terakoya Top›Materials Science›Advanced Materials Systems›Chapter 4
🌐 EN | 🇯🇵 JP | Last sync: 2025-11-16
Learning Objectives
Upon completing this chapter, you will be able to explain:
Basic Understanding (Level 1)
- Definition of Additive Manufacturing (AM) and basic concepts of ISO/ASTM 52900 standard
- Characteristics of 7 AM process categories (MEX, VPP, PBF, MJ, BJ, SL, DED)
- Structure of STL file format (triangle mesh, normal vectors, vertex order)
- History of AM (from 1986 stereolithography to modern systems)
Practical Skills(Level 2)
- Ability to read STL files in Python and calculate volume and surface area
- Ability to validate and repair meshes using numpy-stl and trimesh
- Understanding of basic slicing principles (layer height, shell, infill)
- Ability to interpret basic G-code structure (G0/G1/G28/M104, etc.)
Application Skills (Level 3)
- Ability to select optimal AM process according to application requirements
- Ability to detect and fix mesh problems (non-manifold, inverted normals)
- Ability to optimize build parameters (layer height, print speed, temperature)
- Ability to assess STL file quality and printability
1.1 What is Additive Manufacturing (AM)?
1.1.1 Definition of Additive Manufacturing
Additive Manufacturing (AM) is defined by ISO/ASTM 52900:2021 standard as “the process of manufacturing objects by adding material layer by layer from 3D CAD data”.In contrast to traditional subtractive machining (material removal), AM adds material only where needed, providing the following innovative characteristics:
- Design Freedom : Capability to manufacture complex geometries impossible with traditional methods (hollow structures, lattice structures, topology-optimized shapes)
- Material Efficiency : Material waste rate of 5-10% by using material only where needed (traditional machining: 30-90% waste)
- On-Demand Manufacturing : Capability for low-volume, high-variety production of customized products without tooling
- Integrated Manufacturing : One-piece fabrication of structures that traditionally required assembly of multiple parts, reducing assembly steps
💡 Industrial Importance
The AM market is growing rapidly. According to Wohlers Report 2023:
- Global AM market size: $18.3B (2023) → $83.9B projected (2030, 23.5% CAGR)
- Application breakdown: Prototyping (38%), Tooling (27%), End-use parts (35%)
- Major industries: Aerospace (26%), Medical (21%), Automotive (18%), Consumer goods (15%)
- Material share: Polymers (55%), Metals (35%), Ceramics (7%), Others (3%)
1.1.2 History and Evolution of AM
Additive manufacturing technology has approximately 40 years of history, evolving through the following milestones:
flowchart LR
A[1986
SLA Invented
Chuck Hull] --> B[1988
SLS Introduced
Carl Deckard]
B --> C[1992
FDM Patent
Stratasys Inc.]
C --> D[2005
RepRap
Open Source]
D --> E[2012
Metal AM Adoption
EBM/SLM]
E --> F[2023
Industrial Acceleration
Large-scale & High-speed]
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e9
style D fill:#f3e5f5
style E fill:#fce4ec
style F fill:#fff9c4
- 1986year: ステレオリソグラフィ(SLA)発明 - Chuck HullDr.(3D Systems社創業者)光硬化樹脂layers状硬化せる最初AM技術発明(US Patent 4,575,330)。「3Dプリンティング」う言葉もこ時期誕生。
- 1988year: 選択的laser焼結(SLS)登場 - Carl DeckardDr.(テキサス大学)laserat/in/with粉末材料焼結する技術開発。metalandセラミックスへ応用possibility開く。
- 1992year: 熱溶解productlayers(FDM)特許 - Stratasys Inc.FDM技術商用化。現在最も普及してる3Dプリンティング方equation/formula基礎確立。
- 2005year: RepRapプロジェクト - Adrian Bowyer教授Open Source3Dプリンタ「RepRap」発表。特許切れ相まってLow価格化・民主化進展。
- 2012year以降: metalAM産業普及 - 電子ビーム溶解(EBM)、選択的laser溶融(SLM)航空宇宙・医療minutes野at/in/withactual用化。GE AviationFUEL噴射nozzle量産開始。
- 2023year現在: 大型化・Highspeed化時代 - バインダージェット、連続繊維複合材AM、Multi-materialAMなど新技術産業actual装段階へ。
1.1.3 Major Application Areas of AM
Application 1: Rapid Prototyping
The first major application of AM, for rapid manufacturing of prototypes for design verification, functional testing, and market evaluation:
- Lead Time Reduction : Traditional prototyping (weeks to months) → AM in hours to days
- Accelerated Design Iteration : Prototype multiple versions at low cost to optimize design
- Improved Communication : Unify understanding among stakeholders with visual and tactile physical models
- Typical Examples : Automotive design models, consumer electronics housing prototypes, pre-surgical simulation models for medical devices
Application 2: Tooling & Fixtures
Application of manufacturing jigs, tools, and molds used in production facilities with AM:
- Custom Fixtures : Rapid fabrication of assembly and inspection fixtures specialized for production lines
- Conformal Cooling Molds : Injection molds with 3D cooling channels conforming to product shape, not traditional straight channels (30-70% cooling time reduction)
- Lightweight Tools : Reduce worker burden with lightweight end-effectors using lattice structures
- Typical Examples : BMW assembly line fixtures (over 100,000 units manufactured annually with AM), TaylorMade golf driver molds
Application 3: End-Use Parts
Direct manufacturing of end-use products with AM has been rapidly increasing in recent years:
- Aerospace Components : GE Aviation LEAP fuel injection nozzles (20 parts consolidated into one AM part, 25% weight reduction, over 100,000 units produced annually)
- Medical Implants : Titanium hip replacements and dental implants (optimized for patient-specific anatomy, porous structures promoting bone integration)
- Custom Products : Hearing aids (over 10 million units manufactured annually with AM), sports shoe midsoles (Adidas 4D, Carbon DLS technology)
- Spare Parts : 絶版parts・希LowpartsOn-Demand Manufacturing(自動車、航空機、産業機械)
⚠️ AM Constraints and Challenges
AM is not universal and has the following constraints:
- Build Speed : Not suitable for mass production (injection molding 1 piece/seconds vs AM hours). Economic break-even typically below 1,000 units
- Build Size Limitations : Large parts exceeding build volume (typically around 200×200×200mm for many machines) require segmented manufacturing
- Surface Quality : Layer lines remain, requiring post-processing (polishing, machining) when high-precision surfaces are needed
- Material Property Anisotropy : Mechanical properties may differ between build direction (Z-axis) and in-plane direction (XY-plane), especially in FDM
- Material Cost : AMグレード材料汎用材料2-10timesHigh価(ただしMaterial Efficiency設計最適化at/in/with相殺可能)
1.2 Seven AM Process Categories by ISO/ASTM 52900
1.2.1 Overview of AM Process Classification
ISO/ASTM 52900:2021規格at/in/with、すべてAM技術エネルギー源材料供給方法基づて7つprocessカテゴリ Categoryしてます。各process固有長所・短所あり、用途応じて最適な技術選択する必要あります。
flowchart TD
AM[productlayersbuild
7つprocess] --> MEX[Material Extrusion
Material Extrusion]
AM --> VPP[Vat Photopolymerization
液槽光重合]
AM --> PBF[Powder Bed Fusion
粉末床溶融結合]
AM --> MJ[Material Jetting
材料噴射]
AM --> BJ[Binder Jetting
結合剤噴射]
AM --> SL[Sheet Lamination
シートproductlayers]
AM --> DED[Directed Energy Deposition
指向性エネルギー堆product]
MEX --> MEX_EX[FDM/FFF
Low Cost& Widespread]
VPP --> VPP_EX[SLA/DLP
HighAccuracy・HighSurface Quality]
PBF --> PBF_EX[SLS/SLM/EBM
High Strength・metal対応]
style AM fill:#f093fb
style MEX fill:#e3f2fd
style VPP fill:#fff3e0
style PBF fill:#e8f5e9
style MJ fill:#f3e5f5
style BJ fill:#fce4ec
style SL fill:#fff9c4
style DED fill:#fce4ec
1.2.2 Material Extrusion (MEX)
Principle : Thermoplastic filament is heated and melted, then extruded through a nozzle for layer-by-layer deposition. The most widespread technology (also called FDM/FFF).
process: フィラメント → heatingnozzle(190-260°C)→ 溶融押出 → 冷却solidification → next/orderlayersproductlayers
Characteristics:
- Low Cost : Equipment price $200-$5,000 (desktop), $10,000-$100,000 (industrial)
- Material Diversity : PLA, ABS, PETG, nylon, PC, carbon fiber composites, PEEK (high-performance)
- Build Speed : 20-150 mm³/s (moderate), layer height 0.1-0.4mm
- Accuracy : ±0.2-0.5 mm (desktop), ±0.1 mm (industrial)
- Surface Quality : Layer lines are visible (improvable with post-processing)
- Material Anisotropy : Z-axis (build direction) strength is 20-80% lower (interlayer adhesion is weakness)
Applications:
- プロトタイピング(最も一般的な用途、Low Cost・Highspeed)
- Jigs and tools (used in manufacturing, lightweight and easily customizable)
- 教育用モデル(学校・大学at/in/with広く使用、安全・Low Cost)
- End-use parts (custom hearing aids, prosthetics, architectural models)
💡 Representative FDM Equipment
- Ultimaker S5 : Dual head, build volume 330×240×300mm, $6,000
- Prusa i3 MK4 : Open source based, high reliability, $1,200
- Stratasys Fortus 450mc : Industrial, ULTEM 9085 compatible, $250,000
- Markforged X7 : Continuous carbon fiber composite compatible, $100,000
1.2.3 Vat Photopolymerization (VPP)
Principle : Liquid photopolymer resin is selectively cured layer by layer using ultraviolet (UV) laser or projector light.
process: UVexposure → 光重合反応 → solidification → ビルドプラットフォーム上昇 → next/orderlayersexposure
Two main VPP methods:
- SLA(Stereolithography) : UV laser(355 nm)ガルバノミラーat/in/with走査し、点描的硬化。HighAccuracyだLowspeed。
- DLP (Digital Light Processing) : Entire layer exposed at once with projector. Fast but resolution depends on projector pixel count (Full HD: 1920×1080).
- LCD-MSLA(Masked SLA) : LCDマスク使用、DLP類似だLow Cost化($200-$1,000デスクトップ機多数)。
Characteristics:
- HighAccuracy : XY resolution 25-100 μm, Z resolution 10-50 μm (highest level among all AM technologies)
- Surface Quality : Smooth surface (Ra < 5 μm), layer lines nearly invisible
- Build Speed : SLA (10-50 mm³/s), DLP/LCD (100-500 mm³/s, area dependent)
- Material Constraints : Photopolymer resin only (mechanical properties often inferior to FDM)
- Post-processing Required : Cleaning (IPA etc.) → Secondary curing (UV exposure) → Support removal
Applications:
- Dental applications (orthodontic models, surgical guides, dentures, millions produced annually)
- ジュエリー鋳造用ワックスモデル(HighAccuracy・複雑形状)
- Medical models (surgical planning, anatomical models, patient education)
- Master models (for silicone molding, design verification)
1.2.4 Powder Bed Fusion (PBF)
Principle : Powder material is spread in thin layers, selectively melted or sintered with laser or electron beam, then cooled and solidified. Compatible with metals, polymers, and ceramics.
process: powder spreading → laser/電子ビーム走査 → 溶融・焼結 → solidification → next/orderlayerspowder spreading
Three main PBF methods:
- SLS (Selective Laser Sintering) : Laser sintering of polymer powder (PA12 nylon etc.). No support needed (surrounding powder provides support).
- SLM (Selective Laser Melting) : Complete melting of metal powder (Ti-6Al-4V, AlSi10Mg, Inconel 718 etc.). Can produce high-density parts (relative density >99%).
- EBM(Electron Beam Melting) : 電子ビームat/in/withmetal粉末溶融。Hightemperature予熱(650-1000°C)より残留応力小く、Build SpeedFast。
Characteristics:
- High Strength : Mechanical properties comparable to forged materials through melting and re-solidification (tensile strength 500-1200 MPa)
- Complex Geometry Capability : Can build overhangs without support (powder provides support)
- Material Diversity : Ti alloys, Al alloys, stainless steel, Ni superalloys, Co-Cr alloys, nylon
- High Cost : Equipment price $200,000-$1,500,000, material cost $50-$500/kg
- Post-processing : Support removal, heat treatment (stress relief), surface finishing (blasting, polishing)
Applications:
- Aerospace Components(weight reduction、一体化、GE LEAP燃料nozzle等)
- Medical Implants(患者固有形状、多孔質構造、Ti-6Al-4V)
- Molds (conformal cooling, complex shapes, H13 tool steel)
- Automotive parts (lightweight brackets, custom engine components)
1.2.5 Material Jetting (MJ)
Principle : Similar to inkjet printers, droplets of material (photopolymer resin or wax) are jetted from heads and immediately cured with UV exposure for layer-by-layer build.
Characteristics:
- 超HighAccuracy : XY resolution 42-85 μm, Z resolution 16-32 μm
- Multi-material : Can use multiple materials and colors within single build
- Full-color Build : Over 10 million colors expressible through CMYK resin combinations
- Surface Quality : Extremely smooth (virtually no layer lines)
- High Cost : Equipment $50,000-$300,000, material cost $200-$600/kg
- Material Constraints : Photopolymer resin only, moderate mechanical properties
Applications: : Medical anatomical models (soft/hard tissue reproduced with different materials), full-color architectural models, design verification models
1.2.6 Binder Jetting (BJ)
Principle : Liquid binder (adhesive) is jetted inkjet-style onto powder bed to bond powder particles. Strength improved through sintering or infiltration after build.
Characteristics:
- High-speed Build : laser走査不要at/in/with面全体一括処理、Build Speed100-500 mm³/s
- Material Diversity : Metal powder, ceramics, sand molds (for casting), full-color (gypsum)
- No Support Needed : Surrounding powder provides support, recyclable after removal
- Low Density Issue : Fragile before sintering (green density 50-60%), relative density 90-98% after sintering
- Post-processing Required : Debinding → Sintering (metal: 1200-1400°C) → Infiltration (copper/bronze)
Applications: : Sand molds for casting (large castings like engine blocks), metal parts (Desktop Metal, HP Metal Jet), full-color figures (souvenirs, educational models)
1.2.7 Sheet Lamination (SL)
Principle : Sheet materials (paper, metal foil, plastic film) are laminated and bonded by adhesive or welding. Each layer contour-cut with laser or blade.
Representative Technologies:
- LOM (Laminated Object Manufacturing) : Paper/plastic sheets, laminated with adhesive, laser cut
- UAM (Ultrasonic Additive Manufacturing) : Metal foil ultrasonically welded, contour machined with CNC
Characteristics: 大型build可能、材料費安価、AccuracyMedium程度、用途限定的(主視覚モデル、metalat/in/with埋込センサー等)
1.2.8 Directed Energy Deposition (DED)
Principle : Metal powder or wire fed and melted with laser, electron beam, or arc, then deposited on substrate. Used for large parts and repair of existing parts.
Characteristics:
- High-speed Deposition : Deposition rate 1-5 kg/h (10-50 times PBF)
- Large-scale Capability : Minimal build volume constraints (using multi-axis robot arms)
- Repair & Coating: Repair worn parts of existing components, form surface hardened layers
- LowAccuracy : Accuracy±0.5-2 mm、後加工(machining)必須
Applications: : タービンブレード補修、大型Aerospace Components、工具耐摩耗コーティング
⚠️ Process Selection Guidelines
The optimal AM process varies by application requirements:
- Accuracy最優先 → VPP (SLA/DLP) or MJ
- Low Cost & Widespread → MEX (FDM/FFF)
- metalHigh Strengthparts → PBF (SLM/EBM)
- Mass Production (Sand molds) → BJ
- 大型・High-speed Deposition → DED
1.3 STL File Format and Data Processing
1.3.1 Structure of STL Files
STL (STereoLithography) is the most widely used 3D model file format in AM , developed by 3D Systems in 1987.STL files represent object surfaces as a collection of triangle meshes.
Basic Structure of STL Files
STL file = Normal vector (n) + 3 vertex coordinates (v1, v2, v3) × Number of triangles
ASCII STL形equation/formulaExample:
solid cube
facet normal 0 0 1
outer loop
vertex 0 0 10
vertex 10 0 10
vertex 10 10 10
endloop
endfacet
facet normal 0 0 1
outer loop
vertex 0 0 10
vertex 10 10 10
vertex 0 10 10
endloop
endfacet
...
endsolid cube
Two types of STL format:
- ASCII STL : Human-readable text format. Large file size (10-20 times Binary for same model). Useful for debugging and verification.
- Binary STL : Binary format, small file size, fast processing. Standard for industrial use. Structure: 80-byte header + 4 bytes (triangle count) + 50 bytes per triangle (normal 12B + vertices 36B + attributes 2B).
1.3.2 Important Concepts of STL Files
1. Normal Vector
Each triangular face has a normal vector (outward direction) defined to distinguish between “inside” and “outside” of the object.Normal direction is determined by the right-hand rule :
法線n = (v2 - v1) × (v3 - v1) / |(v2 - v1) × (v3 - v1)|
Vertex Ordering Rule: Vertices v1, v2, v3 are arranged counter-clockwise (CCW), so that the normal points outward when viewed from outside.
2. Manifold Conditions
For an STL mesh to be 3D printable, it must be manifold :
- Edge Sharing : Every edge is shared by exactly two triangles
- Vertex Sharing : Every vertex belongs to a continuous triangle fan
- Closed Surface : 穴and開口部なく、完全Closed Surface形成
- No Self-intersection : Triangles do not intersect or penetrate each other
⚠️ Non-Manifold Mesh Problems
Non-manifold meshes are not 3D printable. Typical problems:
- Holes : Open surface, edges belonging to only one triangle
- T-junction : Edges shared by three or more triangles
- Inverted Normals : Triangles with inward-facing normals mixed in
- Duplicate Vertices : Multiple vertices at the same position
- Degenerate Triangles : Triangles with zero or near-zero area
These problems cause errors in slicer software and lead to build failures.
1.3.3 STL File Quality Metrics
STL mesh quality is evaluated by the following metrics:
- Triangle Count : Typically 10,000-500,000. Avoid too few (coarse model) or too many (large file size, processing delays).
- Edge Length Uniformity : Quality degrades with extreme variation in triangle sizes. Ideally in 0.1-1.0 mm range.
- Aspect Ratio : Elongated triangles (high aspect ratio) cause numerical errors. Ideally aspect ratio < 10.
- Normal Consistency : All normals consistently outward. Mixed inverted normals cause inside/outside determination errors.
💡 STL Fileresolutionトレードオフ
STLメッシュresolution(triangle数)Accuracyファイルサイズトレードオフat/in/withす:
- Lowresolution(1,000-10,000triangle) : Highspeed処理、小ファイル、但し曲面角張る(ファセット化明瞭)
- Mediumresolution(10,000-100,000triangle) : 多く用途at/in/with適切、good balance
- Highresolution(100,000-1,000,000triangle) : 滑らかな曲面、但しファイルサイズ大(tens ofMB)、処理遅延
CADソフトat/in/withSTLエクスポート時、Chordal Tolerance(chordal tolerance) またAngle Tolerance(angular tolerance) at/in/withresolution制御します。recommended value:chordal tolerance0.01-0.1 mm、angular tolerance5-15度。
1.3.4 STL Processing with Python Libraries
Major Python libraries for handling STL files:
- numpy-stl : Fast STL read/write, volume and surface area calculation, normal vector operations. Simple and lightweight.
- trimesh : Comprehensive 3D mesh processing library. Mesh repair, Boolean operations, ray casting, collision detection. Feature-rich but many dependencies.
- PyMesh : Advanced mesh processing (remeshing, subdivision, feature extraction). Somewhat complex installation.
numpy-stl基number of的な使用法:
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
"""
Example: numpy-stl基number of的な使用法:
Purpose: Demonstrate core concepts and implementation patterns
Target: Beginner to Intermediate
Execution time: ~5 seconds
Dependencies: None
"""
from stl import mesh
import numpy as np
# STL File読み込み
your_mesh = mesh.Mesh.from_file('model.stl')
# 基number of的な幾何情報
volume, cog, inertia = your_mesh.get_mass_properties()
print(f"Volume: {volume:.2f} mm³")
print(f"Center of Gravity: {cog}")
print(f"Surface Area: {your_mesh.areas.sum():.2f} mm²")
# triangle数
print(f"Number of Triangles: {len(your_mesh.vectors)}")
1.4 Slicing and Toolpath Generation
The process of converting STL files into commands (G-code) that 3D printers can understand is called slicing.こセクションat/in/with、スライシング基number ofPrinciple、ツールパス戦略、そしてG-code基礎学びます。
1.4.1 Basic Principles of Slicing
Slicing is the process of horizontally cutting a 3D model at constant height (layer height) and extracting the contour of each layer:
flowchart TD
A[3D Model
STL File] --> B[In Z-axis direction
Layer-wise slicing]
B --> C[Contour extraction for each layer
Contour Detection]
C --> D[Shell generation
Perimeter Path]
D --> E[Infill generation
Infill Path]
E --> F[Add support
Support Structure]
F --> G[Toolpath optimization
Retraction/Travel]
G --> H[G-code output]
style A fill:#e3f2fd
style H fill:#e8f5e9
Layer Height Selection
Layer height is the most important parameter determining the tradeoff between build quality and build time:
| Layer Height | Build Quality | Build Time | Typical Applications |
|---|---|---|---|
| 0.1 mm (Ultra-fine) | Very high (layer lines nearly invisible) | Very long (×2-3 times) | Figurines, medical models, end-use parts |
| 0.2 mm (Standard) | Good (layer lines visible but acceptable) | Standard | General prototypes, functional parts |
| 0.3 mm (Coarse) | Low (layer lines obvious) | Short (×0.5 times) | Initial prototypes, internal structure parts |
⚠️ Layer Height制approximately
Layer Heightnozzle径25-80% settingする必要あります。Exampleえば0.4mmnozzle場合、Layer Height0.1-0.32mm推奨範囲at/in/withす。Exceeding this causes insufficient resin extrusion or the nozzle dragging previous layers.
1.4.2 Shell and Infill Strategies
Shell (Perimeter) Generation
Shell/Perimeter is the path forming the outer periphery of each layer:
- Perimeter Count : Typically 2-4. Affects external quality and strength.
- 1: Very weak, high transparency, decorative only
- 2number of: Standard(good balance)
- 3-4number of: High Strength、Surface Qualityimprovement、気密性improvement
- Shell Order : 内側→outside(Inside-Out)一般的。outside→内側Surface Quality重視時使用。
Infill (Internal Fill) Patterns
Infill forms internal structure and controls strength and material usage:
| Pattern | Strength | Print Speed | Material Usage | Characteristics |
|---|---|---|---|---|
| Grid | Medium | Fast | Medium | シンプル、等方性、Standard的な選択 |
| Honeycomb | High | Slow | Medium | High Strength、重量比優秀、航空宇宙用途 |
| Gyroid | 非常High | Medium | Medium | 3D isotropic, curved, latest recommendation |
| Concentric | Low | Fast | Low | Flexibility focused, follows shell |
| Lines | Low(異方性) | 非常Fast | Low | Highspeed印刷、方向性Strength |
💡 Infill Density Guidelines
- 0-10% : Decorative items, non-load bearing parts (material saving priority)
- 20% : Standard的なプロトタイプ(good balance)
- 40-60% : Functionparts、High Strength要求
- 100% : 最終製品、水密性要求、最High Strength(Build Time×3-5times)
1.4.3 Support Structure Generation
Parts with overhang angles exceeding 45 degrees require support structures :
Support Types
- Linear Support : 垂直な柱状support。シンプルat/in/with除去しandす、Material Usage多。
- Tree Support : 樹木状minutes岐するsupport。Material Usage30-50%reduction、除去しandす。CuraandPrusaSlicerat/in/withStandardsupport。
- Interface Layers : support上面薄接合layers設ける。除去しandすく、Surface Qualityimprovement。typically2-4 layers。
Important Support Parameters
| パラメータ | recommended value | 効果 |
|---|---|---|
| Overhang Angle | 45-60° | Generate support above this angle |
| Support Density | 10-20% | 密度Highほど安定だ除去困難 |
| Support Z Distance | 0.2-0.3 mm | Gap between support and part (ease of removal) |
| Interface Layers | 2-4 layers | 接合layers数(Surface Quality除去性バランス) |
1.4.4 G-code Fundamentals
G-code 、3DプリンタandCNCマシン制御するStandard的な数値制御言語at/in/withす。各行1つCommand表します:
Major G-code Commands
| Command | Category | Function | Example |
|---|---|---|---|
| G0 | Movement | HighspeedMovement(非押出) | G0 X100 Y50 Z10 F6000 |
| G1 | Movement | 直線Movement(押出あり) | G1 X120 Y60 E0.5 F1200 |
| G28 | Initialization | Return to home position | G28 (all axes), G28 Z (Z-axis only) |
| M104 | Temperature | nozzleTemperaturesetting(非wait) | M104 S200 |
| M109 | Temperature | nozzleTemperaturesetting(wait) | M109 S210 |
| M140 | Temperature | bedTemperaturesetting(非wait) | M140 S60 |
| M190 | Temperature | bedTemperaturesetting(wait) | M190 S60 |
G-codeExample(build開始部minutes)
; === Start G-code ===
M140 S60 ; Start bed heating to 60°C (non-blocking)
M104 S210 ; Start nozzle heating to 210°C (non-blocking)
G28 ; Home all axes
G29 ; Auto-leveling (bed mesh measurement)
M190 S60 ; bedTemperature到達wait
M109 S210 ; nozzleTemperature到達wait
G92 E0 ; Reset extrusion to zero
G1 Z2.0 F3000 ; Raise Z-axis 2mm (safety)
G1 X10 Y10 F5000 ; プライム位置へMovement
G1 Z0.3 F3000 ; Z軸0.3mmへ降下(初layersHigh)
G1 X100 E10 F1500 ; Draw prime line (clear nozzle)
G92 E0 ; Reset extrusion again to zero
; === Build start ===
1.4.5 Major Slicing Software
| Software | License | Characteristics | Recommended Use |
|---|---|---|---|
| Cura | Open Source | 使andす、豊富なプリセット、Tree SupportStandard搭載 | 初心者〜Mediumlevel users、FDM汎用 |
| PrusaSlicer | Open Source | High度なsetting、variableLayer Height、カスタムsupport | Mediumlevel users〜上level users、最適化重視 |
| Slic3r | Open Source | Original PrusaSlicer, lightweight | Legacy systems, research applications |
| Simplify3D | Commercial ($150) | Highspeedスライシング、マルチprocess、詳細制御 | Professional, industrial applications |
| IdeaMaker | Free | Raise3D専用だ汎用性High、直感的UI | Raise3D users, beginners |
1.4.6 Toolpath Optimization Strategies
効率的なツールパス、Build Time・品質・Material Usage改善します:
- Retraction : Movement時フィラメント引き戻してストリング(糸引き)防止。
- Distance: 1-6mm (Bowden 4-6mm, direct 1-2mm)
- Speed: 25-45 mm/s
- Excessive retraction causes nozzle clogging
- Z-hop : Movement時nozzle上昇せてbuild物衝突times/iterations避。0.2-0.5mm上昇。Build Time微増だSurface Qualityimprovement。
- Combing : Movement経路インフィル上制限し、表面へMovement痕Lowreduction。外観重視時有効。
- Seam Position : Strategy for aligning layer start/end points.
- Random: Random placement (inconspicuous)
- Aligned: Aligned in line (easy to remove seam in post-processing)
- Sharpest Corner: Place at sharpest corner (less noticeable)
Example 1: STL File読み込み基number of情報取得
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
"""
Example: Example 1: STL File読み込み基number of情報取得
Purpose: Demonstrate neural network implementation
Target: Beginner to Intermediate
Execution time: 5-10 seconds
Dependencies: None
"""
# ===================================
# Example 1: STL File読み込み基number of情報取得
# ===================================
import numpy as np
from stl import mesh
# STL File読み込む
your_mesh = mesh.Mesh.from_file('model.stl')
# Get basic geometric information
volume, cog, inertia = your_mesh.get_mass_properties()
print("=== STL File基number of情報 ===")
print(f"Volume: {volume:.2f} mm³")
print(f"Surface Area: {your_mesh.areas.sum():.2f} mm²")
print(f"Center of Gravity: [{cog[0]:.2f}, {cog[1]:.2f}, {cog[2]:.2f}] mm")
print(f"Number of Triangles: {len(your_mesh.vectors)}")
# Calculate bounding box (minimum enclosing box)
min_coords = your_mesh.vectors.min(axis=(0, 1))
max_coords = your_mesh.vectors.max(axis=(0, 1))
dimensions = max_coords - min_coords
print(f"\n=== Bounding Box ===")
print(f"X: {min_coords[0]:.2f} to {max_coords[0]:.2f} mm (Width: {dimensions[0]:.2f} mm)")
print(f"Y: {min_coords[1]:.2f} to {max_coords[1]:.2f} mm (Depth: {dimensions[1]:.2f} mm)")
print(f"Z: {min_coords[2]:.2f} to {max_coords[2]:.2f} mm (High: {dimensions[2]:.2f} mm)")
# Build Time簡易estimation(Layer Height0.2mm、speed度50mm/s仮定)
layer_height = 0.2 # mm
print_speed = 50 # mm/s
num_layers = int(dimensions[2] / layer_height)
# Simple calculation: estimate based on surface area
estimated_path_length = your_mesh.areas.sum() / layer_height # mm
estimated_time_seconds = estimated_path_length / print_speed
estimated_time_minutes = estimated_time_seconds / 60
print(f"\n=== Build Estimation ===")
print(f"Number of layers (0.2mm/layer): {num_layers} layers")
print(f"estimationBuild Time: {estimated_time_minutes:.1f} minutes ({estimated_time_minutes/60:.2f} hours)")
# outputExample:
# === STL File基number of情報 ===
# Volume: 12450.75 mm³
# Surface Area: 5832.42 mm²
# Center of Gravity: [25.34, 18.92, 15.67] mm
# Number of Triangles: 2456
#
# === Bounding Box ===
# X: 0.00 to 50.00 mm (Width: 50.00 mm)
# Y: 0.00 to 40.00 mm (Depth: 40.00 mm)
# Z: 0.00 to 30.00 mm (High: 30.00 mm)
#
# === Build Estimation ===
# Number of layers (0.2mm/layer): 150 layers
# estimationBuild Time: 97.2 minutes (1.62 hours)
Example 2: Mesh Normal Vector Verification
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
# ===================================
# Example 2: Mesh Normal Vector Verification
# ===================================
import numpy as np
from stl import mesh
def check_normals(mesh_data):
"""Check consistency of normal vectors in STL mesh
Args:
mesh_data: numpy-stl Mesh object
Returns:
tuple: (flipped_count, total_count, percentage)
"""
# Check normal direction with right-hand rule
flipped_count = 0
total_count = len(mesh_data.vectors)
for i, facet in enumerate(mesh_data.vectors):
v0, v1, v2 = facet
# Calculate edge vectors
edge1 = v1 - v0
edge2 = v2 - v0
# Calculate normal with cross product (right-hand)
calculated_normal = np.cross(edge1, edge2)
# Normalize
norm = np.linalg.norm(calculated_normal)
if norm > 1e-10: # Confirm not zero vector
calculated_normal = calculated_normal / norm
else:
continue # Skip degenerate triangles
# Compare with stored normal in file
stored_normal = mesh_data.normals[i]
stored_norm = np.linalg.norm(stored_normal)
if stored_norm > 1e-10:
stored_normal = stored_normal / stored_norm
# Check direction match with dot product
dot_product = np.dot(calculated_normal, stored_normal)
# If dot product negative, opposite direction
if dot_product < 0:
flipped_count += 1
percentage = (flipped_count / total_count) * 100 if total_count > 0 else 0
return flipped_count, total_count, percentage
# STL File読み込み
your_mesh = mesh.Mesh.from_file('model.stl')
# Execute normal check
flipped, total, percent = check_normals(your_mesh)
print("=== Normal Vector Verification Results ===")
print(f"Total triangles: {total}")
print(f"Flipped normals: {flipped}")
print(f"Flip rate: {percent:.2f}%")
if flipped == 0:
print("\n✅ All normals point in correct direction")
print(" This mesh is 3D printable")
elif percent < 5:
print("\n⚠️ Some normals are flipped (minor)")
print(" スライサー自動修正するpossibilityHigh")
else:
print("\n❌ Many normals are flipped (critical)")
print(" Recommend repair with mesh repair tools (Meshmixer, netfabb)")
# outputExample:
# === Normal Vector Verification Results ===
# Total triangles: 2456
# Flipped normals: 0
# Flip rate: 0.00%
#
# ✅ All normals point in correct direction
# This mesh is 3D printable
Example 3: Manifold Check
# ===================================
# Example 3: Manifold (Watertight) Check
# ===================================
import trimesh
# STL File読み込み(trimesh自動at/in/with修復試みる)
mesh = trimesh.load('model.stl')
print("=== Mesh Quality Diagnosis ===")
# Basic information
print(f"Vertex count: {len(mesh.vertices)}")
print(f"Face count: {len(mesh.faces)}")
print(f"Volume: {mesh.volume:.2f} mm³")
# Check manifold property
print(f"\n=== 3D Print Suitability Check ===")
print(f"Is watertight: {mesh.is_watertight}")
print(f"Is winding consistent: {mesh.is_winding_consistent}")
print(f"Is valid: {mesh.is_valid}")
# Diagnose problem details
if not mesh.is_watertight:
# Detect number of holes
try:
edges = mesh.edges_unique
edges_sorted = mesh.edges_sorted
duplicate_edges = len(edges_sorted) - len(edges)
print(f"\n⚠️ Problem detected:")
print(f" - Mesh has holes")
print(f" - Duplicate edges: {duplicate_edges}")
except:
print(f"\n⚠️ Mesh structure has problems")
# Attempt repair
if not mesh.is_watertight or not mesh.is_winding_consistent:
print(f"\n🔧 自動修復actual行Medium...")
# Fix normals
trimesh.repair.fix_normals(mesh)
print(" ✓ Fixed normal vectors")
# Fill holes
trimesh.repair.fill_holes(mesh)
print(" ✓ Filled holes")
# Remove degenerate faces
mesh.remove_degenerate_faces()
print(" ✓ Removed degenerate faces")
# Merge duplicate vertices
mesh.merge_vertices()
print(" ✓ Merged duplicate vertices")
# Check post-repair status
print(f"\n=== Post-repair Status ===")
print(f"Is watertight: {mesh.is_watertight}")
print(f"Is winding consistent: {mesh.is_winding_consistent}")
# Save repaired mesh
if mesh.is_watertight:
mesh.export('model_repaired.stl')
print(f"\n✅ Repair complete! Saved as model_repaired.stl")
else:
print(f"\n❌ Automatic repair failed. Recommend dedicated tools like Meshmixer")
else:
print(f"\n✅ This mesh is 3D printable")
# outputExample:
# === Mesh Quality Diagnosis ===
# Vertex count: 1534
# Face count: 2456
# Volume: 12450.75 mm³
#
# === 3D Print Suitability Check ===
# Is watertight: True
# Is winding consistent: True
# Is valid: True
#
# ✅ This mesh is 3D printable
Example 4: Basic Slicing Algorithm
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
# ===================================
# Example 4: Basic Slicing Algorithm
# ===================================
import numpy as np
from stl import mesh
def slice_mesh_at_height(mesh_data, z_height):
"""Temperatureprofile生成
Args:
t (array): hoursarray [min]
T_target (float): holdingTemperature [°C]
heating_rate (float): heating rate [°C/min]
hold_time (float): holdinghours [min]
cooling_rate (float): cooling rate [°C/min]
Returns:
array: Temperatureprofile [°C]
"""
T_room = 25 # room temperature
T = np.zeros_like(t)
# heatinghours
t_heat = (T_target - T_room) / heating_rate
# 冷却開始時刻
t_cool_start = t_heat + hold_time
for i, time in enumerate(t):
if time <= t_heat:
# heatingフェーズ
T[i] = T_room + heating_rate * time
elif time <= t_cool_start:
# holdingフェーズ
T[i] = T_target
else:
# 冷却フェーズ
T[i] = T_target - cooling_rate * (time - t_cool_start)
T[i] = max(T[i], T_room) # room temperature以下ならな
return T
def simulate_reaction_progress(T, t, Ea, D0, r0):
"""Temperatureprofile基づくreaction progress計算
Args:
T (array): Temperatureprofile [°C]
t (array): hoursarray [min]
Ea (float): activation energy [J/mol]
D0 (float): frequency factor [m²/s]
r0 (float): particle radius [m]
Returns:
array: conversion rate
"""
R = 8.314
C0 = 10000
alpha = np.zeros_like(t)
for i in range(1, len(t)):
T_k = T[i] + 273.15
D = D0 * np.exp(-Ea / (R * T_k))
k = D * C0 / r0**2
dt = (t[i] - t[i-1]) * 60 # min → s
# 簡易productminutes(微小hoursat/in/withreaction progress)
if alpha[i-1] < 0.99:
dalpha = k * dt / (2 * (1 - (1-alpha[i-1])**(1/3)))
alpha[i] = min(alpha[i-1] + dalpha, 1.0)
else:
alpha[i] = alpha[i-1]
return alpha
# パラメータsetting
T_target = 1200 # °C
hold_time = 240 # min (4 hours)
Ea = 300e3 # J/mol
D0 = 5e-4 # m²/s
r0 = 5e-6 # m
# 異なるheating rateat/in/withcomparison
heating_rates = [2, 5, 10, 20] # °C/min
cooling_rate = 3 # °C/min
# hoursarray
t_max = 800 # min
t = np.linspace(0, t_max, 2000)
# plot
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
# Temperatureprofile
for hr in heating_rates:
T_profile = temperature_profile(t, T_target, hr, hold_time, cooling_rate)
ax1.plot(t/60, T_profile, linewidth=2, label=f'{hr}°C/min')
ax1.set_xlabel('Time (hours)', fontsize=12)
ax1.set_ylabel('Temperature (°C)', fontsize=12)
ax1.set_title('Temperature Profiles', fontsize=14, fontweight='bold')
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3)
ax1.set_xlim([0, t_max/60])
# reaction progress
for hr in heating_rates:
T_profile = temperature_profile(t, T_target, hr, hold_time, cooling_rate)
alpha = simulate_reaction_progress(T_profile, t, Ea, D0, r0)
ax2.plot(t/60, alpha, linewidth=2, label=f'{hr}°C/min')
ax2.axhline(y=0.95, color='red', linestyle='--', linewidth=1, label='Target (95%)')
ax2.set_xlabel('Time (hours)', fontsize=12)
ax2.set_ylabel('Conversion', fontsize=12)
ax2.set_title('Reaction Progress', fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3)
ax2.set_xlim([0, t_max/60])
ax2.set_ylim([0, 1])
plt.tight_layout()
plt.savefig('temperature_profile_optimization.png', dpi=300, bbox_inches='tight')
plt.show()
# 各heating rateat/in/with95%reaction attainmenthours計算
print("\n95%reaction attainmenthourscomparison:")
print("=" * 60)
for hr in heating_rates:
T_profile = temperature_profile(t, T_target, hr, hold_time, cooling_rate)
alpha = simulate_reaction_progress(T_profile, t, Ea, D0, r0)
# 95%到達時刻
idx_95 = np.where(alpha >= 0.95)[0]
if len(idx_95) > 0:
t_95 = t[idx_95[0]] / 60
print(f"heating rate {hr:2d}°C/min: t₉₅ = {t_95:.1f} hours")
else:
print(f"heating rate {hr:2d}°C/min: 反応不完全")
# outputExample:
# 95%reaction attainmenthourscomparison:
# ============================================================
# heating rate 2°C/min: t₉₅ = 7.8 hours
# heating rate 5°C/min: t₉₅ = 7.2 hours
# heating rate 10°C/min: t₉₅ = 6.9 hours
# heating rate 20°C/min: t₉₅ = 6.7 hours
Exercises
1.5.1 pycalphad
pycalphad 、CALPHAD(CALculation of PHAse Diagrams)法基づく相図計算ためPythonライブラリat/in/withす。熱力学データベースから平衡相計算し、反応経路設計有用at/in/withす。
💡 CALPHAD法利点
- 多元system(3元system以上)複雑な相図計算可能
- actual験データLowなsystemat/in/withも予測可能
- Temperature・組成・圧力依存性包括的扱える
1.5.2 二元system相図計算Example
# ===================================
# Example 5: pycalphadat/in/with相図計算
# ===================================
# 注意: pycalphadインストール必要
# pip install pycalphad
from pycalphad import Database, equilibrium, variables as v
import matplotlib.pyplot as plt
import numpy as np
# TDBデータベース読み込み(ここat/in/with簡易的なExample)
# actual際適切なTDBファイル必要
# Example: BaO-TiO2system
# 簡易的なTDB文字列(actual際より複雑)
tdb_string = """
$ BaO-TiO2 system (simplified)
ELEMENT BA BCC_A2 137.327 !
ELEMENT TI HCP_A3 47.867 !
ELEMENT O GAS 15.999 !
FUNCTION GBCCBA 298.15 +GHSERBA; 6000 N !
FUNCTION GHCPTI 298.15 +GHSERTI; 6000 N !
FUNCTION GGASO 298.15 +GHSERO; 6000 N !
PHASE LIQUID:L % 1 1.0 !
PHASE BAO_CUBIC % 2 1 1 !
PHASE TIO2_RUTILE % 2 1 2 !
PHASE BATIO3 % 3 1 1 3 !
"""
# 注: actual際計算正equation/formulaなTDBファイル必要
# ここat/in/with概念的な説明留める
print("pycalphadよる相図計算概念:")
print("=" * 60)
print("1. TDBデータベース(熱力学データ)読み込む")
print("2. Temperature・組成範囲setting")
print("3. 平衡計算actual行")
print("4. 安定相可視化")
print()
print("actual際適用Example:")
print("- BaO-TiO2system: BaTiO3形成Temperature・組成範囲")
print("- Si-Nsystem: Si3N4安定領域")
print("- 多元systemセラミックス相関係")
# 概念的なplot(actualデータ基づくイメージ)
fig, ax = plt.subplots(figsize=(10, 7))
# Temperature範囲
T = np.linspace(800, 1600, 100)
# 各相安定領域(概念図)
# BaO + TiO2 → BaTiO3 反応
BaO_region = np.ones_like(T) * 0.3
TiO2_region = np.ones_like(T) * 0.7
BaTiO3_region = np.where((T > 1100) & (T < 1400), 0.5, np.nan)
ax.fill_between(T, 0, BaO_region, alpha=0.3, color='blue', label='BaO + TiO2')
ax.fill_between(T, BaO_region, TiO2_region, alpha=0.3, color='green',
label='BaTiO3 stable')
ax.fill_between(T, TiO2_region, 1, alpha=0.3, color='red', label='Liquid')
ax.axhline(y=0.5, color='black', linestyle='--', linewidth=2,
label='BaTiO3 composition')
ax.axvline(x=1100, color='gray', linestyle=':', linewidth=1, alpha=0.5)
ax.axvline(x=1400, color='gray', linestyle=':', linewidth=1, alpha=0.5)
ax.set_xlabel('Temperature (°C)', fontsize=12)
ax.set_ylabel('Composition (BaO mole fraction)', fontsize=12)
ax.set_title('Conceptual Phase Diagram: BaO-TiO2', fontsize=14, fontweight='bold')
ax.legend(fontsize=10, loc='upper right')
ax.grid(True, alpha=0.3)
ax.set_xlim([800, 1600])
ax.set_ylim([0, 1])
# テキスト注釈
ax.text(1250, 0.5, 'BaTiO₃\nformation\nregion',
fontsize=11, ha='center', va='center',
bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.7))
plt.tight_layout()
plt.savefig('phase_diagram_concept.png', dpi=300, bbox_inches='tight')
plt.show()
# actual際使用Example(コメントアウト)
"""
# actual際pycalphad使用Example
db = Database('BaO-TiO2.tdb') # TDBファイル読み込み
# 平衡計算
eq = equilibrium(db, ['BA', 'TI', 'O'], ['LIQUID', 'BATIO3'],
{v.X('BA'): (0, 1, 0.01),
v.T: (1000, 1600, 50),
v.P: 101325})
# 結果plot
eq.plot()
"""
1.6 Design of Experiments(DOE)よる条件最適化
1.6.1 DOE
Design of Experiments(Design of Experiments, DOE)、複数パラメータ相互作用するsystemat/in/with、最小actual験times/iterations数at/in/with最適条件見つける統計手法at/in/withす。
固相反応at/in/with最適化すべき主要パラメータ:
- 反応Temperature(T)
- holdinghours(t)
- 粒子サイズ(r)
- 原料比(モル比)
- 雰囲気(空気、窒素、真空など)
1.6.2 応答曲面法(Response Surface Methodology)
# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0
# - numpy>=1.24.0, <2.0.0
# ===================================
# Example 6: DOEよる条件最適化
# ===================================
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.optimize import minimize
# 仮想的なconversion rateモデル(Temperaturehours関数)
def reaction_yield(T, t, noise=0):
"""Temperaturehoursからconversion rate計算(仮想モデル)
Args:
T (float): Temperature [°C]
t (float): hours [hours]
noise (float): ノイズレベル
Returns:
float: conversion rate [%]
"""
# 最適値: T=1200°C, t=6 hours
T_opt = 1200
t_opt = 6
# 二next/orderモデル(ガウス型)
yield_val = 100 * np.exp(-((T-T_opt)/150)**2 - ((t-t_opt)/3)**2)
# ノイズ追加
if noise > 0:
yield_val += np.random.normal(0, noise)
return np.clip(yield_val, 0, 100)
# actual験点配置(Medium心複合計画法)
T_levels = [1000, 1100, 1200, 1300, 1400] # °C
t_levels = [2, 4, 6, 8, 10] # hours
# グリッドat/in/withactual験点配置
T_grid, t_grid = np.meshgrid(T_levels, t_levels)
yield_grid = np.zeros_like(T_grid, dtype=float)
# 各actual験点at/in/withconversion rate測定(シミュレーション)
for i in range(len(t_levels)):
for j in range(len(T_levels)):
yield_grid[i, j] = reaction_yield(T_grid[i, j], t_grid[i, j], noise=2)
# 結果表示
print("Design of Experimentsよる反応条件最適化")
print("=" * 70)
print(f"{'Temperature (°C)':<20} {'Time (hours)':<20} {'Yield (%)':<20}")
print("-" * 70)
for i in range(len(t_levels)):
for j in range(len(T_levels)):
print(f"{T_grid[i, j]:<20} {t_grid[i, j]:<20} {yield_grid[i, j]:<20.1f}")
# 最大conversion rate条件探す
max_idx = np.unravel_index(np.argmax(yield_grid), yield_grid.shape)
T_best = T_grid[max_idx]
t_best = t_grid[max_idx]
yield_best = yield_grid[max_idx]
print("-" * 70)
print(f"最適条件: T = {T_best}°C, t = {t_best} hours")
print(f"最大conversion rate: {yield_best:.1f}%")
# 3Dplot
fig = plt.figure(figsize=(14, 6))
# 3D表面plot
ax1 = fig.add_subplot(121, projection='3d')
T_fine = np.linspace(1000, 1400, 50)
t_fine = np.linspace(2, 10, 50)
T_mesh, t_mesh = np.meshgrid(T_fine, t_fine)
yield_mesh = np.zeros_like(T_mesh)
for i in range(len(t_fine)):
for j in range(len(T_fine)):
yield_mesh[i, j] = reaction_yield(T_mesh[i, j], t_mesh[i, j])
surf = ax1.plot_surface(T_mesh, t_mesh, yield_mesh, cmap='viridis',
alpha=0.8, edgecolor='none')
ax1.scatter(T_grid, t_grid, yield_grid, color='red', s=50,
label='Experimental points')
ax1.set_xlabel('Temperature (°C)', fontsize=10)
ax1.set_ylabel('Time (hours)', fontsize=10)
ax1.set_zlabel('Yield (%)', fontsize=10)
ax1.set_title('Response Surface', fontsize=12, fontweight='bold')
ax1.view_init(elev=25, azim=45)
fig.colorbar(surf, ax=ax1, shrink=0.5, aspect=5)
# 等High線plot
ax2 = fig.add_subplot(122)
contour = ax2.contourf(T_mesh, t_mesh, yield_mesh, levels=20, cmap='viridis')
ax2.contour(T_mesh, t_mesh, yield_mesh, levels=10, colors='black',
alpha=0.3, linewidths=0.5)
ax2.scatter(T_grid, t_grid, c=yield_grid, s=100, edgecolors='red',
linewidths=2, cmap='viridis')
ax2.scatter(T_best, t_best, color='red', s=300, marker='*',
edgecolors='white', linewidths=2, label='Optimum')
ax2.set_xlabel('Temperature (°C)', fontsize=11)
ax2.set_ylabel('Time (hours)', fontsize=11)
ax2.set_title('Contour Map', fontsize=12, fontweight='bold')
ax2.legend(fontsize=10)
fig.colorbar(contour, ax=ax2, label='Yield (%)')
plt.tight_layout()
plt.savefig('doe_optimization.png', dpi=300, bbox_inches='tight')
plt.show()
1.6.3 actual験計画actual践的アプローチ
actual際固相反応at/in/with、以下手順at/in/withDOE適用します:
- スクリーニングactual験 (2水準要因計画法): 影響大きパラメータ特定
- 応答曲面法 (Medium心複合計画法): 最適条件探索
- 確認actual験 : 予測れた最適条件at/in/withactual験し、モデル検証
✅ actualExample: Li-ion電池正極材LiCoO₂合成最適化
ある研究グループDOE用てLiCoO₂合成条件最適化した結果:
- actual験times/iterations数: conventional method100times/iterations → DOE法25times/iterations(75%reduction)
- 最適Temperature: 900°C(従来850°CよりHightemperature)
- 最適holdinghours: 12hours(従来24hoursから半reduction)
- 電池容量: 140 mAh/g → 155 mAh/g(11%improvement)
1.7 反応speed度曲線フィッティング
1.7.1 actual験データからrate constant決定
# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0
# - numpy>=1.24.0, <2.0.0
"""
Example: 1.7.1 actual験データからrate constant決定
Purpose: Demonstrate data visualization techniques
Target: Intermediate
Execution time: 10-30 seconds
Dependencies: None
"""
# ===================================
# Example 7: 反応speed度曲線フィッティング
# ===================================
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# actual験データ(hours vs conversion rate)
# Example: BaTiO3合成 @ 1200°C
time_exp = np.array([0, 1, 2, 3, 4, 6, 8, 10, 12, 15, 20]) # hours
conversion_exp = np.array([0, 0.15, 0.28, 0.38, 0.47, 0.60,
0.70, 0.78, 0.84, 0.90, 0.95])
# Janderequation/formulaモデル
def jander_model(t, k):
"""Janderequation/formulaよるconversion rate計算
Args:
t (array): hours [hours]
k (float): rate constant
Returns:
array: conversion rate
"""
# [1 - (1-α)^(1/3)]² = kt α つて解く
kt = k * t
alpha = 1 - (1 - np.sqrt(kt))**3
alpha = np.clip(alpha, 0, 1) # 0-1範囲制限
return alpha
# Ginstling-Brounshteinequation/formula(別拡散モデル)
def gb_model(t, k):
"""Ginstling-Brounshteinequation/formula
Args:
t (array): hours
k (float): rate constant
Returns:
array: conversion rate
"""
# 1 - 2α/3 - (1-α)^(2/3) = kt
# 数値的解く必要ある、ここat/in/with近似equation/formula使用
kt = k * t
alpha = 1 - (1 - kt/2)**(3/2)
alpha = np.clip(alpha, 0, 1)
return alpha
# Power law (経験equation/formula)
def power_law_model(t, k, n):
"""べき乗則モデル
Args:
t (array): hours
k (float): rate constant
n (float): 指数
Returns:
array: conversion rate
"""
alpha = k * t**n
alpha = np.clip(alpha, 0, 1)
return alpha
# 各モデルat/in/withフィッティング
# Janderequation/formula
popt_jander, _ = curve_fit(jander_model, time_exp, conversion_exp, p0=[0.01])
k_jander = popt_jander[0]
# Ginstling-Brounshteinequation/formula
popt_gb, _ = curve_fit(gb_model, time_exp, conversion_exp, p0=[0.01])
k_gb = popt_gb[0]
# Power law
popt_power, _ = curve_fit(power_law_model, time_exp, conversion_exp, p0=[0.1, 0.5])
k_power, n_power = popt_power
# 予測曲線生成
t_fit = np.linspace(0, 20, 200)
alpha_jander = jander_model(t_fit, k_jander)
alpha_gb = gb_model(t_fit, k_gb)
alpha_power = power_law_model(t_fit, k_power, n_power)
# 残差計算
residuals_jander = conversion_exp - jander_model(time_exp, k_jander)
residuals_gb = conversion_exp - gb_model(time_exp, k_gb)
residuals_power = conversion_exp - power_law_model(time_exp, k_power, n_power)
# R²計算
def r_squared(y_true, y_pred):
ss_res = np.sum((y_true - y_pred)**2)
ss_tot = np.sum((y_true - np.mean(y_true))**2)
return 1 - (ss_res / ss_tot)
r2_jander = r_squared(conversion_exp, jander_model(time_exp, k_jander))
r2_gb = r_squared(conversion_exp, gb_model(time_exp, k_gb))
r2_power = r_squared(conversion_exp, power_law_model(time_exp, k_power, n_power))
# plot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
# フィッティング結果
ax1.plot(time_exp, conversion_exp, 'ko', markersize=8, label='Experimental data')
ax1.plot(t_fit, alpha_jander, 'b-', linewidth=2,
label=f'Jander (R²={r2_jander:.4f})')
ax1.plot(t_fit, alpha_gb, 'r-', linewidth=2,
label=f'Ginstling-Brounshtein (R²={r2_gb:.4f})')
ax1.plot(t_fit, alpha_power, 'g-', linewidth=2,
label=f'Power law (R²={r2_power:.4f})')
ax1.set_xlabel('Time (hours)', fontsize=12)
ax1.set_ylabel('Conversion', fontsize=12)
ax1.set_title('Kinetic Model Fitting', fontsize=14, fontweight='bold')
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3)
ax1.set_xlim([0, 20])
ax1.set_ylim([0, 1])
# 残差plot
ax2.plot(time_exp, residuals_jander, 'bo-', label='Jander')
ax2.plot(time_exp, residuals_gb, 'ro-', label='Ginstling-Brounshtein')
ax2.plot(time_exp, residuals_power, 'go-', label='Power law')
ax2.axhline(y=0, color='black', linestyle='--', linewidth=1)
ax2.set_xlabel('Time (hours)', fontsize=12)
ax2.set_ylabel('Residuals', fontsize=12)
ax2.set_title('Residual Plot', fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('kinetic_fitting.png', dpi=300, bbox_inches='tight')
plt.show()
# 結果サマリー
print("\n反応speed度モデルフィッティング結果:")
print("=" * 70)
print(f"{'Model':<25} {'Parameter':<30} {'R²':<10}")
print("-" * 70)
print(f"{'Jander':<25} {'k = ' + f'{k_jander:.4f} h⁻¹':<30} {r2_jander:.4f}")
print(f"{'Ginstling-Brounshtein':<25} {'k = ' + f'{k_gb:.4f} h⁻¹':<30} {r2_gb:.4f}")
print(f"{'Power law':<25} {'k = ' + f'{k_power:.4f}, n = {n_power:.4f}':<30} {r2_power:.4f}")
print("=" * 70)
print(f"\n最適モデル: {'Jander' if r2_jander == max(r2_jander, r2_gb, r2_power) else 'GB' if r2_gb == max(r2_jander, r2_gb, r2_power) else 'Power law'}")
# outputExample:
# 反応speed度モデルフィッティング結果:
# ======================================================================
# Model Parameter R²
# ----------------------------------------------------------------------
# Jander k = 0.0289 h⁻¹ 0.9953
# Ginstling-Brounshtein k = 0.0412 h⁻¹ 0.9867
# Power law k = 0.2156, n = 0.5234 0.9982
# ======================================================================
#
# 最適モデル: Power law
1.8 High度なトピック: 微細構造制御
1.8.1 粒成長抑制
固相反応at/in/with、Hightemperature・長hoursholdingより望ましくな粒成長起こります。これ抑制する戦略:
- Two-step sintering : Hightemperatureat/in/with短hoursholding後、Lowtemperatureat/in/with長hoursholding
- 添加剤使用 : 粒成長抑制剤(Example: MgO, Al₂O₃)微量添加
- Spark Plasma Sintering (SPS) : 急speedheating・短hours焼結
1.8.2 反応機械化学的活性化
メカノケミカル法(Highエネルギーボールミル)より、固相反応room temperature付近at/in/with進行せるこも可能at/in/withす:
# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0
# - numpy>=1.24.0, <2.0.0
# ===================================
# Example 8: 粒成長シミュレーション
# ===================================
import numpy as np
import matplotlib.pyplot as plt
def grain_growth(t, T, D0, Ea, G0, n):
"""粒成長hours発展
Burke-Turnbullequation/formula: G^n - G0^n = k*t
Args:
t (array): hours [hours]
T (float): Temperature [K]
D0 (float): frequency factor
Ea (float): activation energy [J/mol]
G0 (float): 初期粒径 [μm]
n (float): 粒成長指数(typically2-4)
Returns:
array: 粒径 [μm]
"""
R = 8.314
k = D0 * np.exp(-Ea / (R * T))
G = (G0**n + k * t * 3600)**(1/n) # hours → seconds
return G
# パラメータsetting
D0_grain = 1e8 # μm^n/s
Ea_grain = 400e3 # J/mol
G0 = 0.5 # μm
n = 3
# Temperature影響
temps_celsius = [1100, 1200, 1300]
t_range = np.linspace(0, 12, 100) # 0-12 hours
plt.figure(figsize=(12, 5))
# Temperature依存性
plt.subplot(1, 2, 1)
for T_c in temps_celsius:
T_k = T_c + 273.15
G = grain_growth(t_range, T_k, D0_grain, Ea_grain, G0, n)
plt.plot(t_range, G, linewidth=2, label=f'{T_c}°C')
plt.axhline(y=1.0, color='red', linestyle='--', linewidth=1,
label='Target grain size')
plt.xlabel('Time (hours)', fontsize=12)
plt.ylabel('Grain Size (μm)', fontsize=12)
plt.title('Grain Growth at Different Temperatures', fontsize=14, fontweight='bold')
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
plt.ylim([0, 5])
# Two-step sintering効果
plt.subplot(1, 2, 2)
# Conventional sintering: 1300°C, 6 hours
t_conv = np.linspace(0, 6, 100)
T_conv = 1300 + 273.15
G_conv = grain_growth(t_conv, T_conv, D0_grain, Ea_grain, G0, n)
# Two-step: 1300°C 1h → 1200°C 5h
t1 = np.linspace(0, 1, 20)
G1 = grain_growth(t1, 1300+273.15, D0_grain, Ea_grain, G0, n)
G_intermediate = G1[-1]
t2 = np.linspace(0, 5, 80)
G2 = grain_growth(t2, 1200+273.15, D0_grain, Ea_grain, G_intermediate, n)
t_two_step = np.concatenate([t1, t2 + 1])
G_two_step = np.concatenate([G1, G2])
plt.plot(t_conv, G_conv, 'r-', linewidth=2, label='Conventional (1300°C)')
plt.plot(t_two_step, G_two_step, 'b-', linewidth=2, label='Two-step (1300°C→1200°C)')
plt.axvline(x=1, color='gray', linestyle=':', linewidth=1, alpha=0.5)
plt.xlabel('Time (hours)', fontsize=12)
plt.ylabel('Grain Size (μm)', fontsize=12)
plt.title('Two-Step Sintering Strategy', fontsize=14, fontweight='bold')
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
plt.ylim([0, 5])
plt.tight_layout()
plt.savefig('grain_growth_control.png', dpi=300, bbox_inches='tight')
plt.show()
# 最終粒径comparison
G_final_conv = grain_growth(6, 1300+273.15, D0_grain, Ea_grain, G0, n)
G_final_two_step = G_two_step[-1]
print("\n粒成長comparison:")
print("=" * 50)
print(f"Conventional (1300°C, 6h): {G_final_conv:.2f} μm")
print(f"Two-step (1300°C 1h + 1200°C 5h): {G_final_two_step:.2f} μm")
print(f"粒径抑制効果: {(1 - G_final_two_step/G_final_conv)*100:.1f}%")
# outputExample:
# 粒成長comparison:
# ==================================================
# Conventional (1300°C, 6h): 4.23 μm
# Two-step (1300°C 1h + 1200°C 5h): 2.87 μm
# 粒径抑制効果: 32.2%
Learning Objectives確認
Upon completing this chapter, you will be able to explain:
基number of理解
- ✅ 固相反応3つ律speed段階(核生成・界面反応・拡散)説明at/in/withきる
- ✅ Arrheniusequation/formula物理的意味Temperature依存性理解してる
- ✅ Janderequation/formulaGinstling-Brounshteinequation/formula違説明at/in/withきる
- ✅ Temperatureprofile3要素(heating rate・holdinghours・cooling rate)重要性理解してる
Practical Skills
- ✅ Pythonat/in/with拡散係数Temperature依存性シミュレートat/in/withきる
- ✅ Janderequation/formula用てreaction progress予測at/in/withきる
- ✅ Kissinger法at/in/withDSC/TGデータからactivation energy計算at/in/withきる
- ✅ DOE(Design of Experiments)at/in/with反応条件最適化at/in/withきる
- ✅ pycalphad用た相図計算基礎理解してる
応用力
- ✅ 新規セラミックス材料合成process設計at/in/withきる
- ✅ actual験データから反応機構estimationし、適切なspeed度equation/formula選択at/in/withきる
- ✅ 産業processat/in/with条件最適化戦略立案at/in/withきる
- ✅ 粒成長制御戦略(Two-step sintering等)提案at/in/withきる
Exercises
Easy(基礎確認)
Q1: STL File形equation/formula理解
STL FileASCII形equation/formulaBinary形equation/formulaつて、正し説明どれat/in/withすか?
a) ASCII形equation/formula方ファイルサイズ小
b) Binary形equation/formula人間直接読めるテキスト形equation/formula
c) Binary形equation/formulatypicallyASCII形equation/formula5-10times小ファイルサイズ
d) Binary形equation/formulaASCII形equation/formulaよりAccuracyLow
answer表示
correct answer: c) Binary形equation/formulatypicallyASCII形equation/formula5-10times小ファイルサイズ
解説:
- ASCII STL : テキスト形equation/formulaat/in/with人間読める。各triangle7行(facet、normal、3頂点、endfacet)at/in/with記述れる。大きなファイルサイズ(tens ofMB〜数百MB)。
- Binary STL : バイナリ形equation/formulaat/in/with小型。80バイトヘッダー + 4バイトtriangle数 + 各triangle50バイト。同じ形状at/in/withASCII1/5〜1/10サイズ。
- Accuracy両形equation/formulaも同じ(32-bit浮動小数点数)
- 現代3Dプリンタソフト両形equation/formulasupport、Binary推奨
actualExample: 10,000triangleモデル → ASCII: approximately7MB、Binary: approximately0.5MB
Q2: Build Time簡易計算
体product12,000 mm³、High30 mmbuild物、Layer Height0.2 mm、Print Speed50 mm/sat/in/withbuildします。おおよそBuild Timeどれat/in/withすか?(インフィル20%、壁2layers仮定)
a) 30minutes
b) 60minutes
c) 90minutes
d) 120minutes
answer表示
correct answer: c) 90minutes(approximately1.5hours)
計算手順:
- レイヤー数 : High30mm ÷ Layer Height0.2mm = 150layers
- 1layersあたり経路長estimation :
- 体product12,000mm³ → 1layersあたり平均80mm³
- 壁(シェル): approximately200mm/layers(nozzle径0.4mm仮定)
- インフィル20%: approximately100mm/layers
- 合計: approximately300mm/layers
- 総経路長 : 300mm/layers × 150layers = 45,000mm = 45m
- 印刷hours : 45,000mm ÷ 50mm/s = 900秒 = 15minutes
- actual際hours : Movementhours・リトラクション・加reductionspeed考慮するapproximately5-6times → 75-90minutes
ポイント: スライサーソフト提供するestimationhours、加reductionspeed・Movement・Temperature安定化含むため、単純計算4-6times程度なります。
Q3: AMprocess選択
next/order用途最適なAMprocess選んat/in/withくだ:「航空機エンジンpartsチタン合金製燃料噴射nozzle、複雑な内部流路、High Strength・High耐熱性要求」
a) FDM (Fused Deposition Modeling)
b) SLA (Stereolithography)
c) SLM (Selective Laser Melting)
d) Binder Jetting
answer表示
correct answer: c) SLM (Selective Laser Melting / Powder Bed Fusion for Metal)
reason:
- SLMCharacteristics : metal粉末(チタン、インコネル、ステンレス)laserat/in/with完全溶融。High密度(99.9%)、High Strength、High耐熱性。
- 用途適合性 :
- ✓ チタン合金(Ti-6Al-4V)対応
- ✓ 複雑内部流路製造可能(support除去後)
- ✓ 航空宇宙グレード機械的特性
- ✓ GE Aviationactual際FUEL噴射nozzleSLMat/in/with量産
- 他選択肢不適なreason :
- FDM: プラスチックみ、Strength・耐熱性不足
- SLA: 樹脂み、Functionparts不適
- Binder Jetting: metal可能だ、焼結後密度90-95%at/in/with航空宇宙基準届かな
actualExample: GE AviationLEAP燃料nozzle(SLM製)、従来20parts溶接してたも1parts統合、重量25%reduction、耐久性5timesimprovement達成。
Medium(応用)
Q4: Pythonat/in/withSTLメッシュ検証
以下Pythonコード完成せて、STL Fileマニフォールド性(watertight)検証してくだ。
import trimesh
mesh = trimesh.load('model.stl')
# ここコード追加: マニフォールド性チェックし、
# 問題あれば自動修復行、修復後メッシュ
# 'model_fixed.stl'して保存してくだ
answer表示
answerExample:
import trimesh
mesh = trimesh.load('model.stl')
# Check manifold property
print(f"Is watertight: {mesh.is_watertight}")
print(f"Is winding consistent: {mesh.is_winding_consistent}")
# 問題ある場合修復
if not mesh.is_watertight or not mesh.is_winding_consistent:
print("メッシュ修復actual行Medium...")
# Fix normals
trimesh.repair.fix_normals(mesh)
# Fill holes
trimesh.repair.fill_holes(mesh)
# Remove degenerate faces
mesh.remove_degenerate_faces()
# Merge duplicate vertices
mesh.merge_vertices()
# 修復結果確認
print(f"修復後 watertight: {mesh.is_watertight}")
# Save repaired mesh
if mesh.is_watertight:
mesh.export('model_fixed.stl')
print("修復完了: model_fixed.stl して保存")
else:
print("⚠️ 自動修復失敗。Meshmixer等使用してくだ")
else:
print("✓ メッシュ3Dプリント可能at/in/withす")
解説:
trimesh.repair.fix_normals(): 法線ベクトル向き統一trimesh.repair.fill_holes(): メッシュ穴充填remove_degenerate_faces(): 面productゼロ縮退triangle削除merge_vertices(): 重複した頂点結合
actual践ポイント: trimeshat/in/withも修復at/in/withきな複雑な問題、Meshmixer、Netfabb、MeshLabなど専用ツール必要at/in/withす。
Q5: support材料体product計算
直径40mm、High30mm円柱、底面から45度角度at/in/with傾けてbuildします。support密度15%、Layer Height0.2mm仮定して、おおよそsupport材料体productestimationしてくだ。
answer表示
answerprocess:
- support必要な領域特定 :
- 45度傾斜 → 円柱底面approximately半minutesオーバーハング(45度以上傾斜)
- 円柱45度傾ける、片側浮た状態なる
- support領域幾何計算 :
- 円柱投影面product: π × (20mm)² ≈ 1,257 mm²
- 45度傾斜時support必要面product: approximately1,257mm² × 0.5 = 629 mm²
- supportHigh: 最大at/in/withapproximately 30mm × sin(45°) ≈ 21mm
- support体product(密度100%仮定): 629mm² × 21mm ÷ 2(triangle状)≈ 6,600 mm³
- support密度15%考慮 :
- actual際support材料: 6,600mm³ × 0.15 = approximately990 mm³
- 検証 :
- 円柱number of体体product: π × 20² × 30 ≈ 37,700 mm³
- support/number of体比: 990 / 37,700 ≈ 2.6%(妥当な範囲)
答え: approximately1,000 mm³ (990 mm³)
actual践的考察:
- build向き最適化at/in/with、support大幅reduction可能(こExampleat/in/with円柱立ててbuildすればNo Support Needed)
- Tree Support使用すれば、ら30-50%材料reduction可能
- 水溶性support材(PVA、HIPS)使用すれば、除去容易
Q6: Layer Height最適化
High60mmbuild物、品質hoursバランス考慮してbuildします。Layer Height0.1mm、0.2mm、0.3mm3つ選択肢ある場合、それぞれBuild Time比Recommended Use説明してくだ。
answer表示
answer:
| Layer Height | レイヤー数 | hours比 | 品質 | Recommended Use |
|---|---|---|---|---|
| 0.1 mm | 600layers | ×3.0 | 非常High | 展示用Figurines, medical models, end-use parts |
| 0.2 mm | 300layers | ×1.0(基準) | 良好 | General prototypes, functional parts |
| 0.3 mm | 200layers | ×0.67 | Low | 初期プロトタイプ、Strength優先内部parts |
hours比計算根拠:
- レイヤー数1/2なる、Z軸Movementtimes/iterations数も1/2
- BUT: 各layers印刷hours微増(1layersあたり体product増えるため)
- 総合的、Layer Height「ほぼ反比Example」(厳密0.9-1.1times係数あり)
actual践的な選択基準:
- 0.1mmrecommended case :
- Surface Quality最優先(顧客プレゼン、展示会)
- 曲面滑らか重要(顔、曲線形状)
- productlayers痕ほぼ消した
- 0.2mmrecommended case :
- 品質hoursバランス重視(最も一般的)
- Function試験用プロトタイプ
- 適度な表面仕上りat/in/with十minutes
- 0.3mmrecommended case :
- speed度優先(形状確認み)
- 内部構造parts(外観不問)
- 大型build物(hoursreduction効果大)
variableLayer Height(Advanced):
PrusaSlicerandCuravariableLayer HeightFunction使えば、平坦部0.3mm、曲面部0.1mm混在せて、品質hours両立可能。
Q7: AMprocess選択総合問題
航空宇宙用軽量ブラケット(アルミニウム合金、トポロジー最適化済み複雑形状、High Strength・軽量要求)製造最適なAMprocess選択し、そreason3つ挙げてくだ。また、考慮すべきPost-processing2つ挙げてくだ。
answer表示
最適process: LPBF (Laser Powder Bed Fusion) - SLM for Aluminum
選択reason(3つ):
- High密度・High Strength :
- laser完全溶融より相対密度99.5%以上達成
- 鍛造材匹敵する機械的特性(引張Strength、疲労特性)
- 航空宇宙認証(AS9100、Nadcap)取得可能
- トポロジー最適化形状製造能力 :
- 複雑なラティス構造(厚0.5mm以下)HighAccuracyat/in/withbuild
- Medium空構造、バイオニック形状など従来加工不可能な形状対応
- support除去後、内部構造もアクセス可能
- Material Efficiencyweight reduction :
- Buy-to-Fly比(材料投入量/最終製品重量)切削加工1/10〜1/20
- トポロジー最適化at/in/with従来設計比40-60%weight reduction
- アルミ合金(AlSi10Mg、Scalmalloy)at/in/with比Strength最大化
必要なPost-processing(2つ):
- 熱処理(Heat Treatment) :
- 応力除去焼鈍(Stress Relief Annealing): 300°C、2-4hours
- 目的: build時残留応力除去、寸法安定性improvement
- 効果: 疲労寿命30-50%improvement、反り変形防止
- 表面処理(Surface Finishing) :
- machining(CNC): 取り付け面、ボルト穴HighAccuracy加工(Ra < 3.2μm)
- 化学研磨(Electropolishing): 表面粗Lowreduction(Ra 10μm → 2μm)
- ショットピーニング(Shot Peening): 表面layers圧縮残留応力付与、疲労特性improvement
- アノダイズ処理: 耐食性improvement、絶縁性付与(航空宇宙Standard)
追加考慮事項:
- build方向 : 荷重方向productlayers方向考慮(Z方向Strength10-15%Low)
- support設計 : 除去しandすTree Support、接触面product最小化
- 品質管理 : CT スキャンat/in/with内部欠陥検査、X線検査
- トレーサビリティ : 粉末ロット管理、buildパラメータ記録
actualExample: Airbus A350チタンブラケット
従来32parts組立ててたブラケット1parts統合、重量55%reduction、リードタイム65%短縮、コスト35%reduction達成。
3水準 × 3水準 = 9times/iterations (フルファクトリアル計画)
DOE利点(conventional methodcomparison):
- 交互作用検出可能
- conventional method: Temperature影響、hours影響個別評価
- DOE: 「Hightemperatureat/in/withhours短くat/in/withきる」った交互作用定量化
- Example: 1300°Cat/in/with4hoursat/in/with十minutesだ、1100°Cat/in/with8hours必要、など
- actual験times/iterations数reduction
- conventional method(OFAT: One Factor At a Time):
- Temperature検討: 3times/iterations(hours固定)
- hours検討: 3times/iterations(Temperature固定)
- 確認actual験: 複数times/iterations
- 合計: 10times/iterations以上
- DOE: 9times/iterationsat/in/with完了(全条件網羅+交互作用解析)
- らMedium心複合計画法使えば7times/iterationsreduction可能
- conventional method(OFAT: One Factor At a Time):
追加利点:
- 統計的有意な結論得られる(誤差評価可能)
- 応答曲面構築at/in/withき、未actual施条件予測可能
- 最適条件actual験範囲外ある場合at/in/withも検出at/in/withきる
Hard(発展)
Q7: 複雑な反応system設計
next/order条件at/in/withLi₁.₂Ni₀.₂Mn₀.₆O₂(リチウムリッチ正極材料)合成するTemperatureprofile設計してくだ:
- 原料: Li₂CO₃, NiO, Mn₂O₃
- 目標: 単一相、粒径 < 5 μm、Li/遷移metal比精密制御
- 制approximately: 900°C以上at/in/withLi₂O揮発(Li欠損リスク)
Temperatureprofile(heating rate、holdingTemperature・hours、cooling rate)、そ設計reason説明してくだ。
answer見る
推奨Temperatureprofile:
Phase 1: 予備heating(Li₂CO₃minutes解)
- room temperature → 500°C: 3°C/min
- 500°Cholding: 2hours
- reason: Li₂CO₃minutes解(~450°C)ゆっくり進行せ、CO₂完全除去
Phase 2: Medium間heating(前駆体形成)
- 500°C → 750°C: 5°C/min
- 750°Cholding: 4hours
- reason: Li₂MnO₃andLiNiO₂などMedium間相形成。Li揮発LowなTemperatureat/in/with均質化
Phase 3: number of焼成(目的相合成)
- 750°C → 850°C: 2°C/min(ゆっくり)
- 850°Cholding: 12hours
- reason:
- Li₁.₂Ni₀.₂Mn₀.₆O₂単一相形成長hours必要
- 850°C制限してLi揮発最小化(<900°C制approximately)
- 長hoursholdingat/in/with拡散進める、粒成長抑制れるTemperature
Phase 4: 冷却
- 850°C → room temperature: 2°C/min
- reason: 徐冷より結晶性improvement、熱応力よる亀裂防止
設計重要ポイント:
- Li揮発対策:
- 900°C以下制限(number of問制approximately)
- ら、Li過剰原料(Li/TM = 1.25など)使用
- 酸素気流Mediumat/in/with焼成してLi₂Ominutes圧Lowreduction
- 粒径制御 ( < 5 μm):
- Lowtemperature(850°C)・長hours(12h)at/in/with反応進める
- Hightemperature・短hoursだ粒成長過剰なる
- 原料粒径も1μm以下微細化
- 組成均一性:
- 750°Cat/in/withMedium間holding重要
- こ段階at/in/with遷移metalminutes布均質化
- 必要応じて、750°Cholding後一度冷却→粉砕→再heating
全体所要hours: approximately30hours(heating12h + holding18h)
代替手法検討:
- Sol-gel法: よりLowtemperature(600-700°C)at/in/with合成可能、均質性improvement
- Spray pyrolysis: 粒径制御容易
- Two-step sintering: 900°C 1h → 800°C 10h at/in/with粒成長抑制
Q8: speed度論的解析総合問題
以下データから、反応機構estimationし、activation energy計算してくだ。
actual験データ:
| Temperature (°C) | 50%reaction attainmenthours t₅₀ (hours) |
|---|---|
| 1000 | 18.5 |
| 1100 | 6.2 |
| 1200 | 2.5 |
| 1300 | 1.2 |
Janderequation/formula仮定した場合: [1-(1-0.5)^(1/3)]² = k·t₅₀
answer見る
answer:
step1: rate constantk計算
Janderequation/formulaat/in/with α=0.5 き:
[1-(1-0.5)^(1/3)]² = [1-0.794]² = 0.206² = 0.0424
したって k = 0.0424 / t₅₀
| T (°C) | T (K) | t₅₀ (h) | k (h⁻¹) | ln(k) | 1000/T (K⁻¹) |
|---|---|---|---|---|---|
| 1000 | 1273 | 18.5 | 0.00229 | -6.080 | 0.7855 |
| 1100 | 1373 | 6.2 | 0.00684 | -4.985 | 0.7284 |
| 1200 | 1473 | 2.5 | 0.01696 | -4.077 | 0.6788 |
| 1300 | 1573 | 1.2 | 0.03533 | -3.343 | 0.6357 |
step2: Arrheniusplot
ln(k) vs 1/T plot(線形times/iterations帰)
線形フィット: ln(k) = A - Eₐ/(R·T)
傾き = -Eₐ/R
線形times/iterations帰計算:
slope = Δ(ln k) / Δ(1000/T)
= (-3.343 - (-6.080)) / (0.6357 - 0.7855)
= 2.737 / (-0.1498)
= -18.27
step3: activation energy計算
slope = -Eₐ / (R × 1000)
Eₐ = -slope × R × 1000
Eₐ = 18.27 × 8.314 × 1000
Eₐ = 151,899 J/mol ≈ 152 kJ/mol
step4: 反応機構考察
- activation energycomparison:
- 得られた値: 152 kJ/mol
- 典型的な固相拡散: 200-400 kJ/mol
- 界面反応: 50-150 kJ/mol
- estimationれる機構:
- こ値界面反応拡散Medium間
- possibility1: 界面反応主律speed(拡散影響小)
- possibility2: 粒子微細at/in/with拡散距離短く、見かけEₐLow
- possibility3: 混合律speed(界面反応拡散両方寄与)
step5: 検証方法提案
- 粒子サイズ依存性: 異なる粒径at/in/withactual験し、k ∝ 1/r₀² 成立するか確認
- 成立 → 拡散律speed
- 不成立 → 界面反応律speed
- 他speed度equation/formulaat/in/withフィッティング:
- Ginstling-Brounshteinequation/formula(3next/order元拡散)
- Contracting sphere model(界面反応)
- どちらR²Highかcomparison
- 微細構造観察: SEMat/in/with反応界面観察
- 厚生成物layers → 拡散律speed証拠
- 薄生成物layers → 界面反応律speedpossibility
最終結論:
activation energy Eₐ = 152 kJ/mol
estimation機構: 界面反応律speed、また微細粒子systemat/in/with拡散律speed
追加actual験推奨れる。
next/orderstep
第4章at/in/withproductlayersbuild(AM)基礎して、ISO/ASTM 52900よる7つprocessCategory、STL File形equation/formula構造、スライシングG-code基number of学びました。next/order第2章at/in/with、Material Extrusion(FDM/FFF)詳細なbuildprocess、材料特性、processパラメータ最適化つて学びます。
参考文献
- Gibson, I., Rosen, D., & Stucker, B. (2015). Additive Manufacturing Technologies: 3D Printing, Rapid Prototyping, and Direct Digital Manufacturing (2nd ed.). Springer. pp. 1-35, 89-145, 287-334. - AM技術包括的教科書、7つprocessカテゴリSTLデータ処理詳細解説
- ISO/ASTM 52900:2021. Additive manufacturing — General principles — Fundamentals and vocabulary. International Organization for Standardization. - AM用語processCategory国際Standard規格、産業界at/in/with広く参照れる
- Kruth, J.P., Leu, M.C., & Nakagawa, T. (1998). “Progress in Additive Manufacturing and Rapid Prototyping.” CIRP Annals - Manufacturing Technology , 47(2), 525-540. - 選択的laser焼結バインディング機構理論的基礎
- Hull, C.W. (1986). Apparatus for production of three-dimensional objects by stereolithography. US Patent 4,575,330. - 世界初AM技術(SLA)特許、AM産業起源なる重要文献
- Wohlers, T. (2023). Wohlers Report 2023: 3D Printing and Additive Manufacturing Global State of the Industry. Wohlers Associates, Inc. pp. 15-89, 156-234. - AM市場動向産業応用最新統計レポート、yearnext/order更新れる業界Standard資料
- 3D Systems, Inc. (1988). StereoLithography Interface Specification. - STL File形equation/formula公equation/formula仕様書、ASCII/Binary STL構造定義
- numpy-stl Documentation. (2024). Python library for working with STL files. https://numpy-stl.readthedocs.io/ - STL File読込・体product計算ためPythonライブラリ
- trimesh Documentation. (2024). Python library for loading and using triangular meshes. https://trimsh.org/ - メッシュ修復・ブーリアン演算・品質評価包括的ライブラリ
使用ツールライブラリ
- NumPy (v1.24+): 数値計算ライブラリ - https://numpy.org/
- numpy-stl (v3.0+): STL File処理ライブラリ - https://numpy-stl.readthedocs.io/
- trimesh (v4.0+): 3Dメッシュ処理ライブラリ(修復、検証、ブーリアン演算) - https://trimsh.org/
- Matplotlib (v3.7+): データ可視化ライブラリ - https://matplotlib.org/
- SciPy (v1.10+): 科学技術計算ライブラリ(最適化、補間) - https://scipy.org/
Disclaimer
- This content is provided solely for educational, research, and informational purposes and does not constitute professional advice (legal, accounting, technical warranty, etc.).
- This content and accompanying code examples are provided “AS IS” without any warranty, express or implied, including but not limited to merchantability, fitness for a particular purpose, non-infringement, accuracy, completeness, operation, or safety.
- The author and Tohoku University assume no responsibility for the content, availability, or safety of external links, third-party data, tools, libraries, etc.
- To the maximum extent permitted by applicable law, the author and Tohoku University shall not be liable for any direct, indirect, incidental, special, consequential, or punitive damages arising from the use, execution, or interpretation of this content.
- The content may be changed, updated, or discontinued without notice.
- The copyright and license of this content are subject to the stated conditions (e.g., CC BY 4.0). Such licenses typically include no-warranty clauses.