目的
- 素人が生成AIと3Dプリンタの組み合わせで、金属ネームプレートを作ってみた
背景
- CADと3Dプリンタの学習コストがほぼゼロでも、生成AIと3Dプリンタがあれば、短期間でよいものが作れると思ったので試してみました
- 石川県工業試験場のセミナーを受けた際に、高性能な3Dプリンタが利用できることを聞いていました
- NT金沢2026出展時の作品です

環境
- Windows11 バージョン25H2 (OSビルド26200.8737)
- chocolatey 2.6.0
- OpenSCAD version 2021.01
- 生成AI
- Google AI Studio
- Model:Gemini 3 Flash Preview
- Google AI Studio
-
石川県工業試験場
- 3Dプリンタ
- 三次元造形機(金属造形用)OPM 250L ㈱ソディック
- 切り出し機
- ワイヤー放電加工機 SL600Q ㈱ソディック
- サンドブラスター
- ショットピーニング装置 SGK-4ST 不二製作所
- 3Dプリンタ
全体の流れ
- フロー図です
詳細
-
環境構築
Chocolateyセットアップ
- 例えばこちらの記事を参考にChocolateyをセットアップします
OpenSCADセットアップ
- Windowsキーを押します
- 検索ボックスに「cmd」と入力します
- Ctrl + Shift + Enterを押します(管理者として実行)
- 以下のコマンドを実行します
cmd.exe(管理者として実行)choco install openscad- 途中選択肢が出る場合は、A + Enterします
- 以上でOpenSCADがインストールされました
-
生成AIによる設計
Gemini 3 Flash を使用
- 今回はGoogle AI StudioのGemini 3 Flashを使いました
- 一般的にメジャーな生成AIならできると思います
OpenSCAD用のコードを生成
- 以下のプロンプトで生成しました
OpenScadで以下のネームプレートを作りたい。 ネームは「五十嵐」「亮介」「有里」「千浬」「日乃」で横書きです。 ネームだけあればよくて、プレート部分は不要です。 縦は5cm、高さは2mmです。 文字間隔は変数で調整できるようにしてください。 ネームを裏返しに配置してください。 ネームに直径2mmで高さ1.5cmの柱を立ててください。 柱は「五」、「十」、「有」、「里」、「千」、「日」、「乃」に二本、「嵐」、「介」に三本、「亮」、「浬」に五本、立ててください。 柱を立てる位置は以下の通りです。 ・「五」、「十」、「里」、「千」、「日」は、各文字の横方向の中心かつ、縦方向の中心+2mmの位置に一本目、もう一本は、横方向の中心かつ、縦方向の文字と重なる上端。 ・「有」は、一画目の中心と、六画目の中心。 ・「嵐」は、各文字の横方向の中心かつ、縦方向の中心+2mmの位置に一本目、もう一本は、横方向の中心かつ、縦方向の文字と重なる上端。三本目は一本目と二本目の中間の位置。 ・「介」は、横方向の中心かつ、縦方向の文字と重なる上端。三画目の中心と、四画目の中心。 ・「亮」は、各文字の横方向の中心かつ、縦方向の中心+6mmの位置に一本目、もう一本は、横方向の中心かつ、縦方向の文字と重なる上端。三本目は一本目と二本目の中間の位置。四本目は八画目の中心。五本目は九画目の中心。 ・「浬」は、三水辺に三本、里造りに二本です。 ただし、柱の位置はx軸とy軸の変数にして、以下のようにしてください。 PILLAR_OFFSETS = [ ["五", [[0, 2], [0, 25]]], ["十", [[0, 2], [0, 25]]], ["嵐", [[0, 2], [0, 25], [0, 13.5]]], ["亮", [[0, -2], [0, 25], [0, 15], [-9, -18], [9, -18]]], ["介", [[0, 25], [-10, -10], [11, -10]]], ["有", [[0, 18], [0, -15]]], ["里", [[0, 2], [0, 25]]], ["千", [[0, 2], [0, 24]]], ["浬", [[-21, 26], [-21, 6], [-21, -15], [9, 2], [9, 25]]], ["日", [[0, 2], [0, 25]]], ["乃", [[5, 4], [0, 25]]] ];柱を最小限でつなぐアームを作ってほしい 柱がはまる部分は穴にしてほしい このアームはネームの横に並べて配置してほしい - テーブルデータにして、各文字毎のオフセット位置を、変えられるようにしました
- 後でバラのSTLファイルを作る必要が出てきましたが、その際にも、テーブルになっていることで簡単に用意できました
- 以下は生成AIの結果です(オフセットは修正しました)
// --- 設定パラメータ --- FONT_SIZE = 50; // 文字の縦サイズ TEXT_HEIGHT = 2; // 文字の厚み PILLAR_DIA = 2; // 柱の直径 PILLAR_LEN = 15; // 柱の高さ CHAR_SPACING = 58; // 文字同士の横間隔(詰め気味に設定) // アームの設定 ARM_WIDTH = 5; // アームの幅 ARM_HEIGHT = 2; // アームの厚み ARM_HOLE_TOLERANCE = 0.3; // 柱を通す穴の余裕 FONT_STYLE = "MS Gothic:style=Bold"; // --- 【テーブル1】ネームの配置設定 --- // [表示文字列, [X座標, Y座標]] NAME_CONFIG = [ ["五十嵐", [30, -33]], // 縦の間隔を詰めたい場合はYを小さく ["亮介", [30, -95]], ["有里", [145, -91]], ["千浬", [30, -158]], ["日乃", [140, -150]] ]; // --- 【テーブル2】アームの配置設定 --- // [対応するNAME_CONFIGのインデックス, [X座標, Y座標]] ARM_CONFIG = [ [0, [10, -214]], // 「五十嵐」用のアーム [1, [17, -224]], // 「亮介」用のアーム(長いのでXを調整) [2, [135, -193]], // 「有里」用のアーム(長いのでXを調整) [3, [175, -30]], // 「千浬」用のアーム [4, [92, -235]] // 「日乃」用のアーム ]; // 柱のオフセット設定(各文字ごとの柱の位置) PILLAR_OFFSETS = [ ["五", [[0, 2], [0, 25]]], ["十", [[0, 2], [0, 25]]], ["嵐", [[0, 2], [0, 25], [0, 13.5]]], ["亮", [[0, 25], [0, 15], [0, -2], [-9, -18], [9, -18]]], ["介", [[-10, -10], [11, -10], [0, 25]]], ["有", [[0, 18], [0, -15]]], ["里", [[0, 2], [0, 25]]], ["千", [[0, 2], [0, 24]]], ["浬", [[-21, 26], [-21, 6], [-21, -15], [9, 2], [9, 25]]], ["日", [[0, 2], [0, 25]]], ["乃", [[5, 4], [0, 25]]] ]; // --- 実行処理 --- // 全体を裏返し(鏡像)にする mirror([1, 0, 0]) { // 1. ネームの配置 for (conf = NAME_CONFIG) { translate(conf[1]) { draw_single_name(conf[0]); } } // 2. アームの配置 for (conf = ARM_CONFIG) { let(index = conf[0], pos = conf[1]) { translate(pos) { draw_single_arm(NAME_CONFIG[index][0]); } } } } // --- モジュール定義 --- // 柱の座標取得 function get_offsets(c) = [ for (item = PILLAR_OFFSETS) if (item[0] == c) each item[1] ]; // ネームと柱の描画 module draw_single_name(name_str) { for (j = [0 : len(name_str) - 1]) { char = name_str[j]; translate([j * CHAR_SPACING, 0, 0]) { // 文字本体 linear_extrude(height = TEXT_HEIGHT) text(char, size = FONT_SIZE, font = FONT_STYLE, halign = "center", valign = "center"); // 柱本体 offsets = get_offsets(char); for (p = offsets) { translate([p[0], p[1], 0]) cylinder(d = PILLAR_DIA, h = PILLAR_LEN, $fn = 20); } } } } // アーム(穴あき)の描画 module draw_single_arm(name_str) { // 柱の全座標をリスト化 all_points = [ for (j = [0 : len(name_str)-1]) let (char = name_str[j], offsets = get_offsets(char)) for (p = offsets) [p[0] + j * CHAR_SPACING, p[1]] ]; linear_extrude(height = ARM_HEIGHT) { difference() { // アームの土台(柱の地点を順に接続) union() { for (i = [0 : len(all_points) - 2]) { hull() { translate(all_points[i]) circle(d = ARM_WIDTH, $fn = 20); translate(all_points[i+1]) circle(d = ARM_WIDTH, $fn = 20); } } } // 柱を通す穴 for (p = all_points) { translate(p) circle(d = PILLAR_DIA + ARM_HOLE_TOLERANCE, $fn = 20); } } } }
3Dモデルの作成 STLファイルに保存
-
石川県工業試験場と調整
STLファイル送付~訪問スケジュールの確定
- 石川県工業試験場の金属3Dプリンタを、個人で利用させていただきました
- ホームページの「お問い合わせ」に記載されているメールアドレスに連絡しました
- 石川県工業試験場 Sさんとのやり取りを以下にまとめました
-
訪問1回目:造形開始
3Dモデルの最終確認
3Dプリンタの造形開始
施設利用料の支払い
-
カードが使えました
-
開放試験明細書
区分 単価 数量 単位 金額(円) 三次元造形機(金属造形用) 3,460 10 34,600 使用材料(金属) 200 51 10,200 デジタル高度化支援設備 1,710 1 1,710 ワイヤ放電加工機 2,620 2 5,240 ショットピーニング装置 1,010 1 1,010 機器操作技術指導 1,610 4 6,440 合計 59,200円
-
-
訪問2回目:仕上げ・受取
工作物の切り出し
サンドブラスターによる研磨
梱包・輸送
おわりに
- 生成AIでモデル作成について
- 生成AIで、シンプルなモデルが作れました
- そして、そのシンプルなモデルの組み合わせで、もう少し複雑なモデルも作れることがわかりました
- それぞれのモデルに、サイズ変数や位置オフセットをつければ、後から調整できるので、柔軟に使えそうです
- 石川県工業試験場について
- 個人でも、高度な設備を、職員の手助けを得られながら利用できることは、画期的だと思いました
- 今後も、何か実用的なアイデアを考えて、利用したいです
- 目的が曖昧な個人の利用にも、丁寧に対応いただき、とても感謝しています












