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

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の直線移動が大量に並ぶ感じ。
移動と座標設定さえできれば動くものができそうな気がする。

市販プリンタはAVRマイコンで制御してるみたいだが、wifi出やりたいしorange piかなんかでステッピングモーター制御してみたい。
ステッピングモーターの制御はドライバICを使うのが一般的らしいが、piのGPIOで直接制御しちゃいかんのか?
というか、まずGPIOでLチカからだな。