ジャンル不定の日記です。

prusa-slicerでG-CODE変換とコードを眺めてみた

OpenSCADで図形作って、3Dプリンタ買っちゃおうか考えてたが、
可動部品の多い機械で壊れやすそうだし、デカイから壊れたときに直せなかったら捨てるのも難しいし困る。
市販品買っちゃうと壊れたときに直すのも難しいだろう。
安いのでも2万くらいするからゴミになったら痛いし。
あと、安い3DプリンターってwifiなしでSDカードかUSBケーブルで接続するんだよね。wifiで制御したい。

というわけで、OpenSCADで簡単な図形を作ってG-CODEに変換して、
G-CODEが理解できそうならやっぱ木かなんかそこらで入手できる安い素材で構造作って簡易プリンタ自作しちゃうか。
ってことにした。

G-CODEに変換するのはスライサーってアプリで、OpenSCADでSTL形式でエクスポートしたファイルをgcodeに変換できる。
Arch Linux標準では prusa-slicer ってのと cura ってのがあった。
curaってのが有名みたいで、prusa-slicerってのはあまり情報ない感じだが、prusa-slicerはslic3rってのがベースみたいでslic3rは有名みたい。
curaの方が複雑な造形するときに良いみたいだが、slic3rは簡単ぽい。
模型作りたいとかじゃなくて箱とか部品を作りたいし、curaに比べてprusa-slicerの方が依存が少なかったんでprusa-slicerを入れてみた。

簡単な図形をgcodeにしてみたわけだが、gcodeはテキストファイル。
;の後ろは行末までコメントで、
G1 パラメータ
みたいな感じでスペース区切りで先頭が関数で続く値が引数な感じ。


M73 P0 R1
M73 P100 R0
最初のコードがM73だったが、進歩状況のようで、
最初がP0で最後にP100があってパーセントで進歩状況を設定してる。
途中経過は設定されてないから、無視して機械の方で計算しちゃっえば良さそうな気がする。

M201 X1250 Y1250 Z400 E5000 ; sets maximum accelerations, mm/sec^2
最大加速度
Eはエクストルーダー

M203 X180 Y180 Z12 E80 ; sets maximum feedrates, mm/sec
最大送り速度

M204 P1250 R1250 T1250 ; sets acceleration (P, T) and retract acceleration (R), mm/sec^2
標準加速度

M205 X8.00 Y8.00 Z2.00 E10.00 ; sets the jerk limits, mm/sec
M205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec
詳細設定
初速?

M107
ファンOFF

G90 ; use absolute coordinates
すべてを絶対座標に設定

M83 ; extruder relative mode
エクストルーダーを相対座標に設定

M104 S170 ; set extruder temp for bed leveling
エクストルーダー目標温度設定
温度が達する前に次へ。

M140 S60 ; set bed temp
ベッド目標温度設定
温度が達する前に次へ。

M109 R170 ; wait for bed leveling temp
エクストルーダー温度が達するまで待機

M190 S60 ; wait for bed temp
ベッド温度が達するまで待機

G28 ; home all without mesh bed level
原点に移動

G29 ; mesh bed leveling
Z軸を調べる?

G92 E0.0
現在位置を指定座標に設定する

G1 Y-2.0 X179 F2400
直線移動

M221 S95 ; set flow
不明
ファンの%か?

G21 ; set units to millimeters
単位をミリメートルに設定

M900 K0.2 ; Filament gcode
フィラメントの送り係数?

M84 ; disable motors
停止


こんな感じのコードが使われてた。
M系のコードは大量にあって全部網羅できないし、無視して機械の方で処理しちゃえば良い気がする・・・
プリント中はG1の直線移動が大量に並ぶ感じ。
移動と座標設定さえできれば動くものができそうな気がする。

OpenSCAD使ってみた

前から3Dプリンタ買おうか迷ってるが、とりあえず3D CADで図形作るのやってみた。
3Dプリンタの図形を作るのはfusion 360ってのが主流みたいなんだが、Arch Linuxの標準パッケージにはOpenSCADってのしかなく、これでも3DプリンタできるみたいなんでとりあえずOpenSCADを使った。
fusion 360はマウスで描く感じのアプリのようだが、OpenSCADはプログラミングみたいにテキストでコードを書く。

OpenSCADを起動すると画面が3分割されてて左にソースコード、中央に描画領域で、右はCustomizer。
Customizerってのは変数をあとから変更できる?要らない感じがする。描画領域がかなり狭いんで右のCustomizerは閉じた。

数値の単位はmmらしいく、引数に少数も渡せる。

構文は行末にセミコロンで、
関数(引数);
関数(引数){ ... }
みたいな感じ。
ブロックの代わりにセミコロン省略で範囲指定もできるみたいだがブロックで囲めば良さそう。

描画領域下にある Render ボタンで描画(更新)される。

cube等の関数を使って図形を作成するが、図形は基準点に作られ、
translate([x,y,z]){
  cube(10);
}
みたいな感じで移動する。
で、図形を組み合わせていく感じ。

difference(){
   cube(10);
   cube(5);
   cube([2,2,10]);
}
differenceで、1番目の図形から2番目以降の図形を削り取った図形が作れる。

cube(n)
cube([x,y,z])
引数は辺の長さ。
引数が1つの数値だと立方体、3つだと直方体。

cylinder で円柱、円錐、多角柱、多角錐が作れる。
sphere で球体が作れるが、3Dプリンタで箱とか部品作りたいと思うんで球体を作ることはない気がする。
polyhedron で任意の点を結んだ多角形が作れる。
立体を作る関数はこの4つかな。

linear_extrude(height=z){
   平面図形
}
で2Dを3D化することもできる。
height以外の指定で複雑な引き伸ばしもできるようだが難しくてわからん。
平面だと文字書いたりもできる。

こんな感じ。
角丸めるのは簡単な関数がない感じだが、四角と丸を組み合わせるのが簡単なのかな。
箱とか作るのにキーボードで入力していくOpenSCADは便利かとも思ったが、あとからソースコード見てもわかりにくいねw