example解説
前置き(長めなので飛ばしてもらっても良い)
10年以上、3Dプリンタを使ってきて今更感がありますが、今までやってこなかった手法での3Dプリントをしてみました。
今まで、CADで3Dのモデルを設計して、それをSlicerというSTLをg codeに変換してくれるツールを使いプリントしてきました。これはいわゆる一般的な使い方です。多くの場合はこれで事足ります。あくまでモノを設計書(3DCAD)通りに製作するという一般的な当たり前のレールの上で行っている行為と言えます。
今回は、その手法から離れ、自由なデザインを数式を使ってGenerativeにプログラミングする手法になります。この幾何学的なアプローチ (generative artと海外では呼ばれます) は、従来の機械設計者にはない、芸術の文化ではよく使われている手法ですが、残念ながら、日本ではデザイン、CAD、プログラミングのすべてを教えてくれるところはほぼ皆無なので、実現するには個人による興味、独学による方法以外には成り立ちません。なので、このようなことを行っている人は本当に少ないです。。専門学校などではありますが、、
つまり興味がなければ、この組み合わせ(3DCAD、プログラミング、デザイン)で勉強しようとはなりにくいため=>日本の教育の限界をここで感じてしまいますが、これを話すと長くなるため割愛
そして、すでに前置きが長くなってしまったので、ここで本題に入りますが、G-coordinatorというのは、pythonでG-codeを生成するためのGUIソフトウェアです(似たような名前のgcoordinatorはCUIで実行できるようにしているライブラリー)
実際のプリントした物
話が長くなる前にまず。3Dプリントしたのが以下です。
コード
上記は、G-coordinatorのexampleフォルダにある以下をプリントしたものです (少し大きさなどを変更はしています、これ以外にもサンプルがありますが、なんとなくデザインがそれっぽいのを選びました)
GUI画面の説明
G-coordinatorのGUI画面で、表示されているのは以下
左 : pythonのコード
真ん中 : 3D表示
右 : 3Dプリンタの設定
pythonコード
pythonのコードを記載していきますが、基本は数式です。numpyという数式を扱うライブラリが読み込まれています。
つまり数学(特に三角関数、オイラー角とか)がすべてです。わからない場合はもう一度勉強しましょう(一度はやっているはず)
このソフトを使いこなすにはまずはここを押さえておく必要があります(あと、デザイン力) ただおいおいで問題ありません。ここではサンプルを動かしているだけですので。。
3D表示
pythonのコードで実行した3次元の情報がグラフィカルに表示されます。ここのデザインが重要で、G-coordinatorの良いところの一つですが、非常に使い手のテンションが上がるような美しいデザインが表示されるようになっています。個人的にこのソフトの好きなところです。
また、横、縦にバーがついており、層ごと(layer)に表示が可能です。
3Dプリンタの設定1
slicerを使ったことがある方はわかると思いますが、使用する3Dプリンタの設定が記載されています。今までかなりの量をいじってきたので、ここは特に問題ありませんでしたが、以下説明をしておきます。
nozzle diameter
ノズルの先端の穴径。 一般的なのは0.4
filament diameter
フィラメントの径。1.75が一般的なPLAの径かと思います。
layer height
layerごとの高さ 0.2が一般的な値
print speed
プリントスピードです。ここはぱっと見であれってなったんですが、単位がmm/minなのが注意。よく見るのはmm/secが多いので、値がデカすぎる!!って最初なったのですが、mm/sec に60をかけた値がmm/minになります。600はかなり遅い設定ですので、使わないでね。今は3600~4800とかに私はしています。
travel speed
移動時のスピード。単位はprint speedと同じ
x , y (origin)
xとyの基準点を設定します。ホットベッドの印刷領域の半分の値をセットすると良いです。x 160, y 160ならx=80, y=80
fan speed
ファンのスピードです。0~255で設定します。255が100%になります。
nozzle temperature
ノズルの温度、PLAなら190~210℃くらい
bed temperature
ホットベッドの温度 50~60℃くらい
restraction
フィラメントの引き込み量とON/OFFが設定できます。ノズルが一旦離れるようなものを印刷する場合は、ONにしますが、1本線で構成される(ノズルはずっと出っ放し)の場合はOFFでOK
z hop
層ごとにノズルをz方向に退避させるか、またその移動距離。ノズルが離れるときにz方向に動くため積層痕が目立ちにくいが私は特に使っていません。
extraction multiplier
フィラメントの射出係数。 1で標準的な量が出る 後で記載しますが、1層目だけをしっかりホットベッドにつけたい場合の量を多くしたい時は、ここの値を変更はせず(1のまま)、pythonコード側で行うと良い(最後に記載してます)
3Dプリンタの設定2
次にマシンのプリントサイズ、Start Gcode, End Gcodeの設定です。
kinetics
これは3Dプリントの手法を設定できます。以下が設定できますが、3次元(x,y,z)の直交システムの場合は、Cartesianを選択します
Cartesian
NozzleTilt
BedTilt
BedRotate
bedsize X/Y/Z
印刷可能な最大のサイズを入力します。
Start / End G code
G codeの最初と最後に追加したG codeを入れておきます。私は以下を入れてます。
Start G Code
M107
M190 S60 ; set bed temperature and wait for it to be reached
G28 ; home all axes
G1 Z5 F5000 ; lift nozzle
; Filament gcode
; (Add) filament nozzle clean
M109 S210 ; set temperature and wait for it to be reached
G1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position
G1 X10.1 Y140.0 Z0.28 F1500.0 E15 ;Draw the first line
G1 X10.7 Y140.0 Z0.28 F5000.0 ;Move to side a little
G1 X10.7 Y20 Z0.28 F1500.0 E30 ;Draw the second line
G1 X11.3 Y20 Z0.28 F1500.0 ;Move to side a little
G1 X11.3 Y140.0 Z0.28 F1500.0 E45 ;Draw the third line
G1 X11.9 Y140.0 Z0.28 F1500.0 ;Move to side a little
G1 X11.9 Y20 Z0.28 F1500.0 E60 ;Draw the fouth line
G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up
;
End G Code
; Filament-specific end gcode
;END gcode for filament
G28 X0 ; home X axis
M84 ; disable motors
M104 S0 ; set temperature
M140 S0 ; set bed temperature
3D表示の操作方法(macのみ)
macとwindowsで動作しますが、macの場合の3D表示の操作は以下です。
- 3本指で回転
- 2本指でズーム
- command + 3本指で移動
結構重要なこと
最後にpythonコード内に入れておいた方が良いコードを記載します。
1層目をしっかりベッドにつけるため、nozzle speedとextraction multiplierを1層目のみ遅く、量を多くするようなコードです。
if height == 0:
wall.extrusion_multiplier = 1.2
wall.print_speed = 500
使用した3Dプリンタ
hictop(crealityの前身か?) ender-2というちょ〜昔の3Dプリンタを使っています。もう10年以上使い続けており、結構いじってますが、こんな格安の3Dプリンタでも最初のような造形ができるってことをお伝えできればと思います。3Dプリンタは高い3Dプリンタを買っただけではダメで、そのマシンの癖や構造をしっかり理解すれば、slicerの設定を最適化してかなり精度を高くできることをこの10年で学びました。
そして今回新しい楽しみ方 Python コーディングで3Dプリントできることを見つけてさらに3Dプリンタが楽しくなりそうな予感がしています。
G-coorinatorで色々と出力したものはブログにアップしていきたいと思います。
[...] 出力するためには、まずはexampleのサンプルコードを理解するのが重要かと思います。 前回の基本編で説明しましたが、G-coordinatorには、しっかりとしたexampleコードがありますので、サン [...]
ピンバック by G-coordinator python g-codeプログラミング example解説 – lamp_shade.py – | Analogfeeder — 2025/03/13 @ 12:09