0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

素人でも作れる金属ネームプレート

0
Last updated at Posted at 2026-07-25

目的

  • 素人が生成AIと3Dプリンタの組み合わせで、金属ネームプレートを作ってみた

背景

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

環境

  • Windows11 バージョン25H2 (OSビルド26200.8737)
    • chocolatey 2.6.0
    • OpenSCAD version 2021.01
  • 生成AI
    • Google AI Studio
      • Model:Gemini 3 Flash Preview
  • 石川県工業試験場
    • 3Dプリンタ
      • 三次元造形機(金属造形用)OPM 250L ㈱ソディック
    • 切り出し機
      • ワイヤー放電加工機 SL600Q ㈱ソディック
    • サンドブラスター
      • ショットピーニング装置 SGK-4ST 不二製作所

全体の流れ

  • フロー図です

詳細

  1. 環境構築

    Chocolateyセットアップ

    • 例えばこちらの記事を参考にChocolateyをセットアップします

    OpenSCADセットアップ

    • Windowsキーを押します
    • 検索ボックスに「cmd」と入力します
    • Ctrl + Shift + Enterを押します(管理者として実行)
    • 以下のコマンドを実行します
    cmd.exe(管理者として実行)
    choco install openscad
    
    • 途中選択肢が出る場合は、A + Enterします
    • 以上でOpenSCADがインストールされました
  2. 生成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ファイルに保存

    • OpenSCADを起動します
    • image.png
    • Newボタンをクリックします
    • image.png
    • 左側のエディターに、生成AIが作ったOpenSCADのコードをペーストして、F5を押します
    • image.png
    • F6を押すと、レンダリングが始まり、右下のプログレスバーが一杯になると完了です
    • F7を押すと、STLファイル保存画面になるので、適当なファイル名で保存します
  3. 石川県工業試験場と調整

    STLファイル送付~訪問スケジュールの確定

    • 石川県工業試験場の金属3Dプリンタを、個人で利用させていただきました
    • ホームページの「お問い合わせ」に記載されているメールアドレスに連絡しました
    • 石川県工業試験場 Sさんとのやり取りを以下にまとめました
  4. 訪問1回目:造形開始

    3Dモデルの最終確認

    • ベースプレート(25cm x 25cm)に収まるように、モデルが並べられていました
    • 最終確認してデータを運びます
    • IMG_6342.JPG

    3Dプリンタの造形開始

    • データを読み込ませて造形開始しました
    • IMG_6347.JPG

    施設利用料の支払い

    • カードが使えました

    • 開放試験明細書

      区分 単価 数量 単位 金額(円)
      三次元造形機(金属造形用) 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円
  5. 訪問2回目:仕上げ・受取

    工作物の切り出し

    • 訪問したら切り出し済みでしたので、切り出し時の写真をいただきました
    • ベースプレートを取り付けた、切り出し前の写真です
    • 5_ワイヤーカット前外観.jpeg
    • 液体で満たしたプールの中で切断するので見えません
    • IMG_6348.JPG

    サンドブラスターによる研磨

    • 砂の粒をぶつけて表面を研磨します
    • IMG_6371.JPG
    • 蓋を開いた内部の様子です
    • IMG_6373.JPG
    • 研磨前
    • IMG_6368.JPG
    • 研磨後
    • IMG_6370.JPG

    梱包・輸送

    • 受け取った工作物は部品数が多いため、どのように梱包して運ぶか悩みました
    • その結果、海上自衛隊に保護していただき、輸送しました
    • スクリーンショット 2026-07-01 204640.png
    • スクリーンショット 2026-07-01 205824.png

おわりに

  • 生成AIでモデル作成について
    • 生成AIで、シンプルなモデルが作れました
    • そして、そのシンプルなモデルの組み合わせで、もう少し複雑なモデルも作れることがわかりました
    • それぞれのモデルに、サイズ変数や位置オフセットをつければ、後から調整できるので、柔軟に使えそうです
  • 石川県工業試験場について
    • 個人でも、高度な設備を、職員の手助けを得られながら利用できることは、画期的だと思いました
    • 今後も、何か実用的なアイデアを考えて、利用したいです
    • 目的が曖昧な個人の利用にも、丁寧に対応いただき、とても感謝しています

関連リンク

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?