OpenSCAD

TE11 OpenSCAD サンプル作成 LLM ネジ

この記事は約18分で読めます。

OpenSCADで作成したモデルです。LLMによるコード生成で行います。

VScodeとLLMを使っています。作業環境上、規模の大きなローカルLLMは使用できないので、githubのCopilotを使っています。(Claude 3.5 Sonnet使用。 2025/4月現在、github Copilotの自律的なAI機能が抜きんでているので、他だと手順が異なると思います)

プロジェクト設定

openSCADでネジのモデルを作成したいので、フォルダ構成を作成してもらえますか。

ワークスペースになんとなくフォルダとファイルを設定してくれます。
中身はあまり整備されたものではないので、指示を繰り返して作成したいものに近づけます。

モデル修正

今回の作業構造ではいくつかのファイルが作成されていますが、main.scadで完結していたので、このファイルを修正していきます。(アセンブリにする場合には、これらの構造を利用します)

ネジの形状がいびつなので修正してもらいます。

修正1

ネジ部の径が小さくてネジ頭の高さが高いです。

現在のコードを修正して、より一般的なネジの形状にしましょう。ネジ頭を追加し、ネジ部の径を調整します。

module screw_model() {
    // ネジの基本的なパラメータ
    thread_height = 15;    // ネジ部の高さ
    head_height = 5;       // ネジ頭の高さ
    head_diameter = 12;    // ネジ頭の直径
    thread_diameter = 6;   // ネジ部の直径
    thread_depth = 0.8;    // ネジの深さ
    thread_pitch = 1;      // ネジのピッチ

    union() {
        // ネジ頭
        translate([0, 0, thread_height/2]) {
            cylinder(h = head_height, d = head_diameter, center = false);
        }

        // ネジ部
        difference() {
            // ネジの本体
            cylinder(h = thread_height, d = thread_diameter, center = true);

            // ネジの溝を作成
            for (i = [0 : thread_height / thread_pitch - 1]) {
                translate([0, 0, -thread_height/2 + i * thread_pitch]) {
                    rotate_extrude(angle = 360) {
                        translate([thread_diameter/2, 0, 0]) {
                            circle(d = thread_depth);
                        }
                    }
                }
            }
        }
    }
}

// モデルを表示
screw_model();

主な変更点:

  1. パラメータの名前をより具体的に変更
  2. ネジ部と頭部のサイズを分離
  3. より現実的な寸法に調整
  • ネジ頭: 直径12mm、高さ5mm
  • ネジ部: 直径6mm、高さ15mm
  1. ネジ山のピッチを1mmに変更
  2. union()を使用してネジ頭とネジ部を結合

修正2

ネジ頭を丸くして十字の溝をつけてください。

・・・修正の繰り返し

  • README.md
  • main.scad
# README.md

# OpenSCAD ネジモデル作成プロジェクト

## 概要
OpenSCADを使用して、3Dプリント可能な現実的なネジモデルを作成するプロジェクトです。

## 特徴
- 丸頭ネジの形状を再現
- プラスドライバー用の十字溝
- リアルなねじ山の表現
- パラメータ化された設計

## 実装の詳細

### ネジ頭部の構造
1. 下部円柱(全高の60%)
- 直径: 12mm
2. 上部円錐台(全高の40%)
- 下部直径: 12mm
- 上部直径: 8.4mm(下部の70%)
3. 十字溝
- 開始位置: ネジ頭高さの20%位置
- 溝の深さ: ネジ頭高さと同じ
- 溝の幅: 2mm

### ネジ部の構造
1. 本体シャフト
- 直径: 6.5mm(ネジ山を除く)
- 高さ: 15mm
2. ねじ山
- ピッチ: 1.5mm
- 山の高さ: 0.6mm
- 谷の深さ: 0.2mm

## パラメータ一覧
```scad
thread_height = 15; // ネジ部の高さ
head_height = 2.5; // ネジ頭の高さ
head_diameter = 12; // ネジ頭の直径
thread_diameter = 8; // ネジ部の直径
thread_pitch = 1.5; // ネジのピッチ
```

## 開発履歴
1. 基本的なネジ形状の作成
2. ねじ山のらせん状表現の実装
3. 丸頭形状の改善
4. 十字溝の位置と深さの調整
5. ねじ山形状の現実的な調整

## プロジェクト構成

```
openscad-screw-model/
└── src/
└── main.scad # ネジモデルの定義
```

## 使用方法
1. OpenSCADで`main.scad`を開く
2. プレビューでモデルを確認
3. 必要に応じてパラメータを調整
4. レンダリングしてSTLファイルとして出力

このプロジェクトを使用して、さまざまなサイズのネジモデルを作成できます。

module screw_model() {
    // ネジの基本的なパラメータ
    thread_height = 15;    // ネジ部の高さ
    head_height = 2.5;     // ネジ頭の高さ
    head_diameter = 12;    // ネジ頭の直径
    thread_diameter = 8;   // ネジ部の直径
    thread_pitch = 1.5;    // ネジのピッチ
    
    union() {
        // 丸いネジ頭
        translate([0, 0, thread_height]) {
            difference() {
                // 丸い頭の本体 - 円錐台で表現
                union() {
                    // 下部の円柱
                    cylinder(h = head_height * 0.6, 
                            d = head_diameter, 
                            $fn=120);
                    // 上部の円錐台
                    translate([0, 0, head_height * 0.6])
                        cylinder(h = head_height * 0.4, 
                                d1 = head_diameter, 
                                d2 = head_diameter * 0.7, 
                                $fn=120);
                }
                
                // プラスの溝
                translate([0, 0, head_height * 0.2]) {
                    union() {
                        // 横の溝 - 高さを調整
                        translate([-head_diameter/2, -1, 0])
                            cube([head_diameter, 2, head_height * 1.0]);  // 0.8から1.0に変更
                        // 縦の溝 - 高さを調整
                        translate([-1, -head_diameter/2, 0])
                            cube([2, head_diameter, head_height * 1.0]);  // 0.8から1.0に変更
                    }
                }
            }
        }
        
        // ネジ部の本体
        cylinder(h = thread_height, d = thread_diameter - 1.5, $fn=120);
        
        // らせん状のねじ山(現実的な形状)
        linear_extrude(height = thread_height, twist = 360 * thread_height/thread_pitch, convexity = 10, $fn=120) {
            translate([thread_diameter/2 - 0.5, 0, 0]) {
                polygon([
                    [-0.6, -0.2],   // 谷の左端
                    [-0.3, 0.3],    // 左斜面の中間点
                    [0, 0.6],       // 山頂
                    [0.3, 0.3],     // 右斜面の中間点
                    [0.6, -0.2],    // 谷の右端
                    [0.6, -0.6],    // 右下端
                    [-0.6, -0.6]    // 左下端
                ]);
            }
        }
    }
}

// モデルを表示
screw_model();

README.mdも生成してもらいます。

品種追加

exampleフォルダとex1.scadのファイルを追加して、パラメータから他の形状を作成します。

openscad-screw-model/
├── src/
│ └── main.scad # ネジモデルの基本定義
└── example/
└── ex1.scad # カスタムネジの実装例

モデルをパラメータ化して、他のファイルでパラメータを調整して変更したモデルを増やせるような仕組みにしてください。

・・・mainの形状を非表示にするなどの対応を繰り返し

  • README.md
  • ex1.scad
# README.md

# OpenSCAD ネジモデル作成プロジェクト

## 概要
OpenSCADを使用して、3Dプリント可能な現実的なネジモデルを作成するプロジェクトです。

## 特徴
- 丸頭ネジの形状を再現
- プラスドライバー用の十字溝
- リアルなねじ山の表現
- パラメータ化された設計
- 様々なサイズのネジを作成可能

## 実装の詳細

### ネジ頭部の構造
1. 下部円柱(全高の60%)
- 直径: 12mm(デフォルト)
2. 上部円錐台(全高の40%)
- 下部直径: 12mm(デフォルト)
- 上部直径: 8.4mm(下部の70%)
3. 十字溝
- 開始位置: ネジ頭高さの20%位置
- 溝の深さ: ネジ頭高さと同じ
- 溝の幅: 2mm

### ネジ部の構造
1. 本体シャフト
- 直径: 6.5mm(ネジ山を除く)
- 高さ: 15mm(デフォルト)
2. ねじ山
- ピッチ: 1.5mm(デフォルト)
- 山の高さ: 0.6mm
- 谷の深さ: 0.2mm

## パラメータ一覧
```scad
thread_height = 15; // ネジ部の高さ
head_height = 2.5; // ネジ頭の高さ
head_diameter = 12; // ネジ頭の直径
thread_diameter = 8; // ネジ部の直径
thread_pitch = 1.5; // ねじのピッチ
```

## プロジェクト構成

```
openscad-screw-model/
├── src/
│ └── main.scad # ネジモデルの基本定義
└── example/
└── ex1.scad # カスタムネジの実装例
```

## 使用方法

### 基本的な使用方法
1. `src/main.scad`を開く
2. プレビューでデフォルトモデルを確認
3. 必要に応じてパラメータを調整
4. レンダリングしてSTLファイルとして出力

### カスタムネジの作成
1. `example/ex1.scad`を参考に新しいファイルを作成
2. モジュールをインポート: `use <../src/main.scad>`
3. パラメータを指定してカスタムネジを作成
4. 必要に応じて複数のネジを配置

## 開発履歴
1. 基本的なネジ形状の作成
2. ねじ山のらせん状表現の実装
3. 丸頭形状の改善
4. 十字溝の位置と深さの調整
5. ねじ山形状の現実的な調整
6. モジュールの再利用性向上
7. カスタムネジ作成機能の追加

このプロジェクトを使用して、M3、M5、M8などの標準的なサイズや、カスタムサイズのネジモデルを作成できます。

use <../src/main.scad>

module screw_model_override(
    thread_height = 15,
    head_height = 2.5,
    head_diameter = 12,
    thread_diameter = 8,
    thread_pitch = 1.5
) {
    // スクリューモデルのパラメータを渡す
    screw_model(
        thread_height = thread_height,
        head_height = head_height,
        head_diameter = head_diameter,
        thread_diameter = thread_diameter,
        thread_pitch = thread_pitch
    );
}

// M3ネジ
module m3_screw() {
    screw_model_override(
        thread_height = 12,
        head_height = 2,
        head_diameter = 5.5,
        thread_diameter = 3,
        thread_pitch = 0.5
    );
}

// M5ネジ
module m5_screw() {
    screw_model(
        thread_height = 15,
        head_height = 2.5,
        head_diameter = 8.5,
        thread_diameter = 5,
        thread_pitch = 0.8
    );
}

// M8ネジ
module m8_screw() {
    screw_model_override(
        thread_height = 20,
        head_height = 3,
        head_diameter = 13,
        thread_diameter = 8,
        thread_pitch = 1.25
    );
}

// モデルの配置と表示
translate([-20, 0, 0]) m3_screw();
translate([0, 0, 0]) m5_screw();
translate([20, 0, 0]) m8_screw();
README.mdの更新

パラメータ追加

m3のネジ頭の十字溝を小さくするため、パラメータを追加します。

m3の十字溝のサイズを小さくしたいので、パラメータを追加して編集可能にしてください。

main.scadex1.scadを修正して、十字溝のサイズをパラメータ化します。

まず、main.scadを以下のように修正します:

module screw_model(
    thread_height = 15,    // ネジ部の高さ
    head_height = 2.5,     // ネジ頭の高さ
    head_diameter = 12,    // ネジ頭の直径
    thread_diameter = 8,   // ネジ部の直径
    thread_pitch = 1.5,    // ねじのピッチ
    cross_width = 2,       // 十字溝の幅
    cross_depth = 1.0      // 十字溝の深さ係数(head_heightに対する比率)
) {
    // ...existing code...

    // プラスの溝
    translate([0, 0, head_height * 0.2]) {
        union() {
            // 横の溝
            translate([-head_diameter/2, -cross_width/2, 0])
                cube([head_diameter, cross_width, head_height * cross_depth]);
            // 縦の溝
            translate([-cross_width/2, -head_diameter/2, 0])
                cube([cross_width, head_diameter, head_height * cross_depth]);
        }
    }
    // ...existing code...
}

次に、ex1.scadを以下のように修正します:

use <../src/main.scad>

module screw_model_override(
    thread_height = 15,
    head_height = 2.5,
    head_diameter = 12,
    thread_diameter = 8,
    thread_pitch = 1.5,
    cross_width = 2,
    cross_depth = 1.0
) {
    // スクリューモデルのパラメータを渡す
    screw_model(
        thread_height = thread_height,
        head_height = head_height,
        head_diameter = head_diameter,
        thread_diameter = thread_diameter,
        thread_pitch = thread_pitch,
        cross_width = cross_width,
        cross_depth = cross_depth
    );
}

// M3ネジ
module m3_screw() {
    screw_model_override(
        thread_height = 12,
        head_height = 2,
        head_diameter = 5.5,
        thread_diameter = 3,
        thread_pitch = 0.5,
        cross_width = 1.2,    // M3用に小さい十字溝
        cross_depth = 0.8     // やや浅めの溝
    );
}

// ...existing code...

変更点:

  1. cross_widthcross_depthパラメータを追加
  2. 十字溝の寸法をパラメータ化
  3. M3ネジ用に小さめの溝を設定

これにより、ネジのサイズに応じて適切な十字溝のサイズを設定できます。

ge_OSC_TE11-screw-model.zip

注記

ネジのサンプルを作成しましたが、ねじ山の形が制御しきれていません。薄いねじ山になっています。

コメント

Translate »
タイトルとURLをコピーしました