極座標ペンプロッタを作る

はじめに

 ペンプロッタ、特に直交座標系のペンプロッタがたくさんUpされている。だが私はそうではなく、極座標系のペンプロッタを自作した。なぜなら宗教上の理由wwwで直動案内を極力避けたかったし、構想・設計・製作からハード・制御回路・ファームウェアをとりあえず一通り経験したかったからだ。理由はどうであれ、わざわざ極座標系を選択した人の一助になればと思う。

 

目次

 

ハードウェア

 極座標のペンプロッタは主に3つの軸 R軸 θ軸 Z軸?のモータを動かして図形を描画する。真ん中のリードスクリューで中心からの距離Rを、下の回転テーブルで角度θを、上の糸巻で糸を巻き上げるとこでペンを上げ下げするZ軸を構成した。

 部品の多くが3Dプリンタ品だ。正直、工作が下手なので文明の利器を大いに使わせてもらった。3Dプリンタ最高!!

 

R軸

 一般的なペンプロッタでは、リニアシャフトのような直動案内とタイミングベルトのような位置決め部品を別々にするらしい。今回作ったモノは、リードスクリューに直動案内と位置決め2つの役割を持たせ、直動案内専用の部品を省いた。リード8mmのリードスクリューを一周200ステップのステッピングモータのフルステップ駆動で回すため、理論上は0.04mmの分解能がある(ガタツキの方が大きいのでこんなに正確に描画できないが)。フルステップ駆動で充分に細かく描画できると判断し、フルステップ駆動を選択した。しかし、この駆動形式が全く良くないことが判明して、それについて後半の「反省」で書く。

 R軸上のペンを支える部品の内部は以下のようになっている。スクリューナットでスラスト方向を、2つのブッシュでラジアル方向を拘束している。スクリューナットのラジアル方向のガタツキが大きいため、スクリューナット近くのブッシュでガタツキを抑える。

ブッシュ間距離BBとペン_スクリュー間距離PBの寸法比PB/BBが大きくなりすぎないようにして、ペン先のブレを抑えた。

 

θ軸

 秋月のステッピングモータ42SHD4002-24Bは、一周あたり200ステップある。φ200mmの回転テーブルを回すのに200ステップは荒すぎるため、タイミングベルトで1/4に減速してハーフステップ駆動でより細かく回すことにした。つまり回転テーブルは1600ステップで一回転する。

 回転テーブルの内部は以下図になっている。ブッシュを軸受けにした(ペンプロッタに転がり軸受けを使うのはもったいない気がした)。中心を貫く青色の軸と黄色のブッシュの間に遊びを設けつつも、軸を長めにすることで回転テーブルのガタツキをできる限り抑えたつもり。アイソグリッド構造からインスピレーションを受け、回転テーブルのプーリをゴッソリ肉抜きしてアクリル円板との複合構造にした。3Dプリントするのに時間がかかりそうな部品を無理なく軽量化できて少し嬉しい。

 とくに理由は無く、タイミングベルトの歯型に一番細かそうな2GTを、タイミングプーリーの歯型を円弧でモデリングした。歯型にはインボリュート曲線云々カンヌンあるらしいが、わけわからんのでパス。2GT並みに細かくなると3Dプリンタで正確にプリントできないのだから、厳密にモデリングしても意味は無いと思う。


Z軸?

 gifをご覧の通りペンを上げ下げできる。この仕組みによってZ軸専用の直動部品を省くことができた。鉛塊の重力で筆圧をまかない、糸でペンを持ち上げるようにした。鉛塊と糸でペンを上げ下げする仕組みを採用したが、全く気に入っていない。もっといい方法があるに違いないが、私の知恵が足りなかった。

 極座標ペンプロッタは直交座標ペンプロッタよりも原点のずれに敏感であると思う。直交座標系で原点がずれたとしても、横ずれして描画されるだけだ。しかし極座標系で原点がずれてしまうと、ズレた分だけ大きく描画されてしまう。原点ズレに敏感であるからこそ、ペン先の位置を調整する仕組みが必須であると思う。原点調整するための仕組みを以下のGIFのようにしてみた。ご覧の通り、ペンをつかむ位置によってペン先の位置を変えることができる。ペンの太さが少しくらい異なっていても原点に調整できるため、いろいろなペンを持たせることができるかも。

 

制御関係

ソフトウェア構成

 なぜかGRBLを使いたくなかったので、自分でプログラムを書いた。画像から描画までのソフトウェア構成はこんな感じ。

(1) 画像をInkscapeGコードに変える

(2) 自作プログラムでマイコン向けにGコードを加工し、変換する

(3) GコードもどきをArduinoで読み込んで描画する

 Arduinoのプログラムを立てるときに、以下サイトのお世話になった。

Polar Pen Machine Kinematics at Buildlog.Net Blog

座標系の変換角度0°をスムーズに超えることなど、極座標ペンプロッタの制御についていくつか指摘している。とてもためになることばかりなので必ず見てほしいくらいだ。

 

プリント基板

 モータードライバーにTB67S101ANGとSLA7070MPRTを使い、ATMEGA328PにArduinoスケッチを書き込んで制御する。描画データをSDカードに保存するので、簡単にデータを入れ替えられる。宗教上の理由wwwでPCに繋げずに独立して動作できるようにした。

 基板製作に全く自信が無かったので、JLCPCBにプリント基板を外注した。届いたプリント基板に頑張って部品を取り付けたのがこちら。

 

Gコードと座標系の変換といろいろと・・・

 画像処理してGコード化する技術なんぞ持ち合わせていないので、Inkscapeで画像をGコード化した。Inkscapeには画像をパスに変換する機能はいくつかあり、今回は線画を「ビットマップのトレース」の「中心線トレース(Centerline tracing)」で変換した。

 InkscapeGコードは直交座標系だから、ハードウェアに合わせて極座標系に変換する必要がある。また、InkscapeGコードには線の始点と終点しか載っていないため、始点と終点の間の座標を埋め合わせてあげる必要がある。つまり、InkscapeGコードをそのままマイコンに処理させることができないんジャイ。

クソ誰だよ極座標系にして、なおかつGRBLを拒否ったヤツは・・・私だよ

 

 なので気合でプログラムを立ててGコードを変換した。青い線が描画する座標で赤い線がペンを持ち上げる軌跡になっている。描画する順序を工夫すればもっと短時間で描くことができる気がするが、面倒なのでパス。

 

 

描かせてみる

 30分かけて19世紀の銅版画を描画してみた。やはり、ペンを持ち上げてから次の座標に移動させるのにとても時間がかかっていた。それに加え、ほぼ点のような短い線がデータにたくさん含まれていたため、再々ペンを上げ下げして時間を浪費していた。

画像の左端、つまり回転テーブルの外側で描画された部分を拡大した。中心がきれいに描画されているのに比べ、外側はガタガタだ。回転テーブルの一周を1600分割してみたが、外側では力不足だったようだ。中心と外側の描画精度の違いは極座標ペンプロッタの致命的な欠点だと思う。

元々の画像データがガタガタだとペンプロッタ性能が分かりにくいので、規則的なデータを描画してみる。

0.6mm間隔で線を引くとこんな感じ。隣の線と被らない程度にガタツキを抑えることができたらしい。明らかに形が歪んでいるけど・・・

フルステップやハーフステップ駆動でこれくらいガタガタを抑えたことを褒めてほしい

フンスッ!

 

反省

 いくつかの部品を簡略化することができたが、自分で考えた部分が多く未熟な部分が残ってしまった。例えば、リードスクリューとスクリューナット間でひどい騒音が鳴ってしまうことだ。ハーフステップ駆動やフルステップ駆動のような低速回転時に振動が発生する駆動方法にしてしまったのが主な原因だと思う。ステッピングモータをマイクロステップ駆動して振動を抑えて、振動を伝えにくいカップリングでリードスクリューと結合すればよさそうだが・・・制御基板から作り直す必要がありそうだ。

 ペンプロッタでペンを勢いよく振り下ろすと、ペンがだんだんオカシクなる気がする。インクの出が悪くなったり、いきなり沢山漏れだしたりとか。ペンを下したときの音が気になるのもあるが、ペンをゆっくり下すことができる機構にすべきだと思う。

 ハードウェアありきで進めてソフトウェアを後回しにしていたので、制御系が雑になってしまった。ソフトウェアを良く考えずにプリント基板を発注したので後に引けなくなったのも原因の一つだ。また、扱いずらいモータードライバーを選択してプリント基板を外注してしまったから、事前に制御系の動作確認できなかったことも大問題だった(素直にA4988を選べばよかった)。予めブレットボードで確認したらモーターの振動に気づけたかもしれないのに。もっと良いソフトウェア構成があると思うが、もう終えたことだ。知らん

 

おわりに

 お恥ずかしながら、この程度の工作が私にとって初めての計画的長期間?の工作である。(計画的と言いつつも途中変更がクソ多かったが)

ものづくりの一端を垣間見た気がするが、気のせいではないと信じたい。