2019年12月14日土曜日

OctoPrint / OctoPi

基本的にはGコードを送るためのソフト

ネットワーク越しに、Webブラウザから操作する。
単なるSender/Controllerではなく、USBカメラを使用して遠隔監視する機能なども追加されている。
プラグインをインストールして機能を追加することも出来る。

3Dプリンタで使用することを意図して開発されているが、プラグインでGRBLにも対応する。
Windows / MacOS / Linux に対応している。
RaspberryPiでも動作可能なので、PCを常時起動しておく必要がなくなるなどのメリットがある。



インストールに関して難しい事は「何もない」はず。
普通に Raspberry に OSをインストールするだけの簡単なお仕事です。
分からなければ、ググればスクショ付きで丁寧に解説されているWebページなりBlogなりが見つかるはず。
多少の英語を苦にしないのなら、公式サイトの説明に従えば良い。


RaspberryPi向けにOS丸ごとパッケージ化したものがOctoPi。

詳細は公式サイト ↓ で…。

プラグインリポジトリ
  https://plugins.octoprint.org/

Webcam Tab
  ウェブカメラの映像を独立したタブに表示させるプラグイン。
  私は一番最初に、このプラグインをインストールしたけど、ぶっちゃけ不要だった。
  このプラグインはコントロール画面からカメラ映像を切り離してしまうので、映像を見ながらヘッドを動かす事が出来なくなってしまう。
  まあ、カメラ映像を頼りに遠隔でヘッドを動かす、なんて機会は滅多にないとは思うけど…。

  後述するダッシュボードを追加すればカメラ映像と出力状況を同時に表示してくれる。

Multicam
  複数のカメラを取り扱えるようにするプラグイン。
  普通に2台めのUSBカメラを繋げばいいのかと思いきや、カメラのストリームを追加する事になるので、ストリームサーバーを持ったカメラのサポートツールが必要になる。
  motion とか、インストールしておけばおkなんだけど、motion の説明が大変なので、見なかった事にして下さい。



  カメラ/ストリーム とにかく映像ソースを追加すると、コントロール画面に切り替えボタンが追加される。
  つまり、2台以上のカメラ映像を同時に表示する事はできない。
  あと、この Multicam と 上述の Webcam Tab は相性が良くないというか、タブ表示は1台めのカメラ映像しか表示してくれないので、実質的に併用不可なので注意が必要。
  OctoPrint-Dashboard プラグインで、ダッシュボードにカメラ映像を追加する場合も2台め以降は無視されて、1台めのカメラ映像が自動的に採用される、
  やや残念な点もあるけど、これはこれでアリかも知れない。
  実用性はともかく、試してみると面白いとは思う。

OctoPrint-Dashboard
  現在のプリンターの状態をザックリと表示するページを追加してくれるプラグイン。
  ザックリと、というと聞こえが悪いので、一覧性が高い簡潔な表示、という事にしよう。


  このプラグインは DisplayLayerProgress という別のプラグインに依存しているので、そちらもインストールする必要がある。
  プラグインマネージャーは依存関係を自動的に解決してくれたりしないようだ。

Resource Monitor
  OctoPrint サーバーとなっているホストのリソースを表示するプラグイン。
  ディスクの使用量など、一部の情報は OctoPrint-Dashboard でダッシュボードに表示出来るし、出力中はリソースの変動状況よりもカメラ映像を見る事が多いので、思ったよりも出番が無い可哀想なプラグインでもある。
  正直、無ければ無いで、そんなに困らないと思う。




以下は、気になってるけどインストールしていないプラグイン。

OctoPrint-Enclosure
  GPIOにセンサーを接続して監視するプラグイン。
  これも IFTTT 対応らしいので、OctoPrint-IFTTT よりも、こちらを選ぶべき?

  https://plugins.octoprint.org/plugins/enclosure/

OctoPrint-IFTTT
  出力の終了時などに IFTTT をトリガーするプラグイン。

OctoPrint-Slic3r
  スライサー関係のプラグインもいくつかあるみたいだけど、良くわかっていないので要調査。

  非力なRaspberryPiでスライスするのもどうか、とか色々と思うところはあるが、プリンターに食わせるデータを集約する事には、相応に意味があると考えている。
  出力される成果物の品質は、スライス設定に大きく影響されるので、元の形状データとスライスの設定を併せて管理したい。



The system OctoPrint is running on is currently throttled. Due to that it's not possible to install new plugins in order to avoid possible issues caused by system instability.
とか出てプラグインがインストール出来なかったり、システムのアップデートが出来なくなる場合の対処

間違っていたので訂正(2019/12/23)
監視を止めてしまう事で、プラグインのインストールを抑止する仕掛けも動かなくなる(但し、これによって生じる不具合もある)だろうと考えていて、一時的に問題がなくなったと思ってたら、いつの間にか再現していた。

ちゃんと、根本から解決しないとダメだ。

電源の容量不足かCPUの加熱によって、システムが制限状態になっている、という事なのだけど、Webブラウザで見ると 雷のマーク(⚡みたいなの)が出ていたので、原因は電源の問題らしい。

容量は足りているはずなので、USBケーブルを 2A対応 ってのに換えてみたら、落ち着いた模様。
5V 4A のACアダプタでも、⚡が出たという話もあったので、USBケーブルの選定は意外と大事なのかも知れない。
因みに、私が使用したのは100均のケーブルなんだけど、いつ、何処で買ったものか分からない。
多分、一番近くにある、セリアだかミーツだかで買ったもののような気がする。
問題があったケーブルは、ダイソーで大昔に買ったやつで、USBケーブルに500mA以上流すという発送はなかった時代の商品だったと思う。

当たり前の話だけど電源は大事だ。

スパナマークのアイコンをクリックして設定画面を開く



This will regularly check with the Pi if something is amiss either with power regulation or CPU/GPU temperature.

のチェックを外す


そして再起動
というか、この手順は後で編集して別エントリにしておいた方が良さそうだねぇ。

とりあえず、おしまい。

2019年11月21日木曜日

Anycubic Kossel Plus ホットエンド交換

実は購入して間もないころにヒーターカートリッジが壊れたことがあって、その時にホットエンドのアセンブリを2セット買っていた。

ヒーターは抜けたけど、サーミスタが抜けなくて、ヒーターを固定していたイモネジもバカになっていて新しいヒーターを固定出来そうになかったので、丸ごと交換を試みた訳だけど、色気を出して「使える部品は極力再利用する!」とか思ってたら、今度はスロートで詰まりましたよ?的な事になってて、修理する気力が湧かないと言うか「毎日使うもんでもないし、次に使う時でいいか」という先送りの結果。

なんというか2セット買った内の1.5セット分使った感じで、今度はアセンブリではなくて、ノズル単体とかで補充した方が良いのかもしれない。

まあ、ホットエンドは5個ぐらい持っておいて、フィラメントごとに使い分ける、みたいな、お大尽方式もアリな気がするけど、Anycubic の Kossel Plus はホットエンドの交換が地味に面倒なので、真のお大尽はフィラメントごとにプリンタを丸っと用意するのだと思った。

お金欲しいね。

2019年11月8日金曜日

CNC 3018 X軸もトラブルシューティング

 組み上げた時のチェック不足

ヘッドを右に動かしていくと、残り1/4ぐらいの所で動かなくなる症状が出た。
手で回そうにも、がっちり固定されてるような感触。
「あー、こりゃ脱調する訳だ」って納得。
モーターが相当頑張ったみたいで、右にも左にも動きにくい所に入り込んでしまった感じ。
送りネジの取り付け前に、スライドシャフトの調整の時点では問題なかったので、送りネジを取り付ける際に、モーター寄りの方で並行が出ていないのだと思った。

対策は簡単で、モーターを固定しているブラケットを緩めて、ヘッドを右に寄せてから締め直すだけ。
組む時に左も右もいっぱいに寄せてから固定していれば、こんな事にはならない。
多分、送りネジを手で回すのが面倒で「後で」って思って、それっきり、なパターン。

ダメ人間め!

2019年11月7日木曜日

3DプリントとCNCミリング

3D造形の基本についてメモ

Woodpecker CNC 3018 の調整について考えていて、自分が何も知らない事に気が付いた。
いや、自分が物を知らないという自覚は子供の頃からあるのだけど、単に物を知らないのではなくて、物事に対する理解が浅いというか、見て、知ってはいても、本質に届いていない感じがする。
というよりも明らかに届いてない。

見て、聞いて、試してみても、その先の考察が足りないのが主な原因だと思う。

話が大幅に横道に反れたけど、このブログで取り扱っているテーマについて、少しは掘り下げる努力をしてみたい。
誰かの役に立つかどうか?は問題ではなくて、自分自身を理解を深めるための作業として…。
自分自身の役に立つかどうかも、あまり気にしてはいない。
損得勘定で自分の行動を決めると、大抵のことは無為だったりする事も経験的に知っているから、そうしたくはない。

で、ここからが本題。

現状、私の手元にある機械で、3D造形に使えるのが、3DプリンターとCNCミリングマシンの2つ。
世の中には他にも色々と便利な物があるし、私が知らない機械とか技術とかもあるだろうし、これからも増えていくだろう。
けど、2019年の時点でポピュラーなのは、この2つだと思う。
3Dプリンターは大まかに2つに分けられる。
ここで取り扱うのは、FDMとか略される、溶かしたプラスチックを押し出して積み上げていくタイプのやつ。
FDMでも、いくつかの種類があるけど、いわゆる直交型とか呼ばれるヤツが主流派だと思う。
ちなみに、ここで取り扱ってるのはデルタ型で、直交型とは少しだけ違うけど、使い方には大した違いはない。(というのは乱暴すぎる?)

で、結論を先にいうと、この2つの機械は、本質的には同じ物だ。
3軸の加工機として、何らかの道具をXYZの各軸について、正確な位置に運ぶ。
3Dプリンタは溶かした樹脂を吐くノズルを動かして、造形テーブルの上にニルニル積んでいく。
CNCミリングマシンは、ドリルみたいな回転する刃物を、テーブルに固定された材料に押し当てて、ギョリギョリ削っていく。

そう、積み上げるか削るのか、道具で「足す」のか「引く」のか、の差しかない。
もちろん、フィラメントを押し出して、木材とか金属とかを削ることは出来ないし、逆に、刃物を振り回して何もない空間に何かを形成することも出来ないので、そういう意味で言えば2つの機械は決定的に違う。
それでも、「足す」か「引く」かの違いであって、どこをどのように加工するか、という指示で動いているという点は共通している。

では、得られる結果が全く同じになるか?というと、そこは全く違う。
CNCミリングマシンでは、中が空の物体を作ることは不可能で、中空に限らず、元々の材料を削るための刃物が通る場所のない形状を削り出す事は出来ない。
3Dプリンターはミリングマシンより、いくらか自由度が高いが、こちらも全くの空中に造形するとか、思いっきり細長い物体なんかは苦手だ。

どちらの場合でも、出力したい形状を指定する所は共通している。
立体の形状をPC内で表現するために何らかのモデリングツールを使用する。
広い意味では、CADと呼ばれるツールがそれで、DXFとかSTLとかの形式でデータを受け渡す。
モデリングして得られたデータを、プリンタなりミリングマシンに渡す形式に変換する。
ちなみに、3DプリンタとかCNCミリングマシンには、Gコードと呼ばれる形式のデータを渡すことになる。

この変換が肝で、ここで、積み上げるのか、削るのかが決まる。
もう少し正確に言うと、どちらに適したツールを選ぶのが先で、大抵の場合は何を作りたいかで、データを作るツールが半ば自動的に決まってしまう。
ツールにも色々あるけれど、全部を使うことは出来ない。
無料のものもあれば恐ろしく高価なのもあるし、使い易さとか好みとかも加味すると、自ずと使えるツールは絞り込まれる。

んー、ちょっと、話が見えにくくなってきた気がする。
整理すると
  1)形状を作る
  2)形状をGコードに変換する
  3)機械にGコードを送り込んで加工する
という、3つのステップに分かることが出来るだろう。
それぞれ、単体/単機能のツールもある。
1と2がくっついているもの。
2と3がくっついているもの(この場合は3が主体)。
1と2と3の全部入りってのもある。

WebサイトでもBlogでも、色々なツールが紹介されていて、多機能なものになるほど、上記の3つの境界が曖昧になっていたり、「そんなの常識だから」説明が省略されていたりすることも少なくない。

そこら辺についても、今後も機会があればメモを追加していこうと思う。
とりあえず、今回のエントリのまとめは

「盛る」のと「削る」のの差があるので、ツール(プログラム)は使い分けよう。
という一点。

長々書いて、たったこれだけ。
書き手のセンスのなさが丸出しだね。
落胆しつつ、今回はここまで。

2019年11月6日水曜日

Woodpecker って

CNCそのものの名前ではなくて、コントローラーの名前なの?
3Dプリンターで言うところの、LAMPSとか、そんな感じ??

つか、うちに来た中華CNCキットは、基板とか微妙に違ってるから、Woodpecker のパチモンだったりするのかな?

元々は、Arduino + A4988モータードライバーシールド だった所に GRBL がデファクトスタンダード化して、CNCシールドは GRBLシールドになった?
GRBLシールドの亜種として、A4988モジュールが載る基板に Arduino 相当の機能も押し込んだり、Arduino Nano (または互換機)をモジュールとして搭載する製品が出てきて、そのコピー品が出回るようになった。

亜種から、さらに派生して多様な商品が売られてはいるものの、ソフトウェア的には Uno 相当の AVR Mega328 で、A4988 を制御する、という辺りで互換性が保たれているように見える。

ただ、今回、テストにあたって、GRBLControl の他に試してみた Candle だと何故か動かなかったりした。
Y軸の問題解決が優先だったので、PCサイドのソフトを追うのは後回しにしたが、ぶっちゃけ、シリアルポートに向かってGコードをえっちらおっちら投げるだけの作業が何故できないのかが不明。
まあ、その辺は後で時間を取って調べる事にして、とりあえずは、SVGのデータとか作って、G-Codeを生成させて、カマボコ板かなんか彫ってみるとこまで進みたい。

CNCシールドは V3.0 以前と V3.1 以降では、少し仕様が異なっている。
V3.0以前だと、スピンドルを単純にON/OFFするだけだったが、V3.1以降だと PWM制御でスピンドルの回転数を調節可能になった。
うちに来た中華CNCは、スピンドルの回転数調整が出来ている感じなので、V3.1互換なんだろう。

CNC 3018 Y軸のトラブルシューティング

問題はY軸(テーブル)が一方向にしか進められない事。
PC画面のボタンで、手前への移動を指示しようが奥への移動を支持しようが、実際のテーブルの動きは、手前か奥かの一方通行で方向が逆転することはない。

確か、ArduinoからA4988への結線で、DIRとSTEPという信号線があって、今回の場合、DIRがLだかHだかに固定されてしまっていて、反転できなくなっているのではないかと推測してみる。

X軸のA4988モジュールを引っこ抜いて、Y軸のとこに挿す。
この状態でY軸を振ってみると正しく動く。
で、Y軸のとこにあったA4988モジュールをX軸のとこに挿してX軸を動かしてみると、左右どちらに振っても右にしか動かなくなった。

これで、A4988モジュールの不良が確定。

DIRビットが伝わってないのは単にヘッダーピンのハンダ付け不良の可能性もあるので、試しにあっためて、なんか汚いハンダをコテ先で掬った分だけ追いハンダ。
これをダメ元でX軸のところに戻してテストしたら無事に動いた。

面倒だったけど、動いたのでヨシとする。
中華キットだし。

A4988モジュールは、何個か手持ちがあるので、ぶっ壊れてても何とか出来たのだけど、備えは往々にして無駄になる、というアレな展開は割とありがち。

いきなり何か彫るのも怖いので、ペンとか持たせてテストと調整を行えないものかと思案中。

CNC 3018 試運転の覚書

ちょっと前にテストした時の記録
上げておかないと多分忘れるし、ファイルも無くしそうなので…。

USBシリアル変換のCH340だったかのドライバーは既に導入されていて、コントローラ基板とPCをUSBケーブルで繋いだら、普通にCOMポートが追加された。

ソフトはGRBLControl 0.8.1 で、GitHub からコンパイル済みのバイナリを ZIP で入手したもの。
https://github.com/trasz/grblControl

ZIPのアーカイブを展開すると、exe ファイルが含まれているので、それをダブルクリックするなりして実行。

初回起動時は COMポートの設定が空欄になっていて、「おめーが指示したとこには何にも繋がってねぇ!」的なメッセージが出て、何もできない。
メニューから、Service → Settings だか Options だかを選んで、それらしく設定。
ボーレートは115200のままで普通に動く模様。

後はスピンドルの項目で、スピンドルの回転を制御できるか? と
モーターが正しく動作して、XYZそれぞれの軸で移動できるか? を確認する

画面上に表示されている 上下左右の矢印ボタン で X軸とY軸 の移動。
X軸ではキャリッジが左右方向に動き、Y軸はテーブルが前後に動く。
少し離れた上下の矢印ボタン で Z軸 が動き、スピンドルを上げ下げする。

一応、動いてはいるしスピンドルモーターも回ってはいる。

ここで問題発生というか、まあ事前に分かっていた事ではあるけれども、どうやら、軸が反転していて気持ち悪いというか、このままだと切削はムリ。
なので、適切に移動してくれるように手配する必要がある。

X軸とZ軸は、普通に反転していて、Y軸は少し困ったことに、一方向にしか動かない。
Y軸について、もう少し追いかけると、コントローラ基板上には、Y軸のモーターに接続するコネクタが2個ある。
どちらに繋ぐかで、進行方向が決まっているようで、一方のコネクタだと、テーブルは手前にしか動かせず、他方では奥にしか動かせない。
これはファームウェアの仕様というよりも、この基板に固有の事情があるんじゃないか?って気がしているが、追いかけるための手がかりがない。よって少し先送り。


コントローラのファームウェアは GRBL らしいので、何かコマンドを叩いて
「違うよ」って教えるだけで、逆方向に動いてしまうのは修正できる。
もちろん、モーターの結線を変えて反対に回るようにする、って手もある。

キットには中文主体(一部英文)の紙で、軸の反転についての説明もあったのだけど、それは、特定のアプリの設定で反転させる、というものなので、違うアプリでは通用しないというか、まあ、アプリごとに違う方法で設定しなくてはならない。

与えられた GCodeに対して、どっちにモーターを回すか?ってのは、割と普遍的というか、系全体で統一されているべきなので、アプリでひっくり返す、というのはちょっと違う気がする。
私の理解としては「小手先の対処」であり、「正しいとは言えない」ので避けたい事柄。
いや、まあ「使えるなら何でも良い」といえば、それも正解ではあるけれど、そこは個人的な好みを優先したい。

ともあれ、現状把握のために設定?をダンプする。
$$ コマンドの結果は
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=0 (dir port invert mask:00000000)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=25.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=800.000 (x, step/mm)
$101=800.000 (y, step/mm)
$102=800.000 (z, step/mm)
$110=800.000 (x max rate, mm/min)
$111=800.000 (y max rate, mm/min)
$112=800.000 (z max rate, mm/min)
$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=200.000 (y max travel, mm)
$132=200.000 (z max travel, mm)
単なるダンプではなく、何を意味しているかの説明が加えられているのが有り難い。
とは言え、それほど詳細ではないので、参考程度。
XYZのそれぞれの軸を反転させるかどうかは $3 で決まるらしく
00000ZYX でビットマスクというか、1に設定した軸が反転する模様。

最初に起動した直後はZ軸を動かすたびに、コキコキと音がしていたのが、何度かテストしているうちに静かになった。
ほんの数回で慣らしが終わるとは思えないので、何かしらのトラブルが起きるかも知れない?