オリジナルプロッタ eddyWrite を逆運動学 で制御
自作のプロッタeddyWrite
これまでは画像を極座標変換したデータをもとにクルクルと描画してきたのですが、文字や図形をすらすら縦横無尽に描かせたくなりました。
だってプロッタだもん。
目次
ロータリーエンコーダ
ここでは極座標データでeddyWriteを制御するのではなく、直交座標で図形や文字の書き順を指定します。目標の座標にペンを移動するにはスライダの移動位置と土台の回転角を明確に制御する必要があります。
土台はステッピングモータを使用して回しているのでステップ数で回転位置の制御は容易にできます。しかしスライダの移動には360度連続回転サーボを用いているので回転数の管理は単体では難しいです。
そこで、ここでは360度連続回転サーボにロータリーエンコーダを追加して回転位置を制御しました。
手元にロータリーエンコーダがなかったのでダイソーに行ってマウスを購入し、分解して取り出しました。
俺に言わせればマジ 100均は激安パーツショップ。
ロータリーエンコーダを取り出してオシロで動作を確認してみました。
回転方向によって2端子の位相に差が発生して、1周12クロック出力されました。
eddyWriteに導入
スライダ内のスクリューと360度連続回転サーボの間に取り出したロータリーエンコーダを仕込みました。
ロータリーエンコーダの2端子をそれぞれArduinoのインターラプトピン(D2, D3)に接続して出力変化で割り込んで回転数を検出します。
以下の記事で紹介されたコードを使用して回転位置を制御できるようにいたしました。
実験
可変抵抗でスライダ位置を指定して追従するか試してみました。
おかげさまでeddyWriteのスライド方向もロタエンぶち込みで所望の位置に移動させることができるようになりました! pic.twitter.com/HL0NwjpUO0
— HomeMadeGarbage (@H0meMadeGarbage) March 1, 2020
バッチリ所望の位置にスライダが移動しています。
ロータリーエンコーダによって回転を検出しスライダ量を管理可能になったといえます!
逆運動学
これでeddyWriteのスライド位置と土台の回転位置を検出し制御することができるようになりました。
所望の座標(x, y)にペンを移動するためのスライド位置$r$と土台の回転位置$\theta$は以下で導出できます。
$$r = \sqrt{x^2 + y^2}$$
$$\theta =\tan^{-1} \left(\frac{y}{x} \right)$$
これでプロット位置の直交座標データ(x, y)を与えればペンを所望の位置に移動させることができます。
動作
試しに正方形の直交座標データを与えてeddyWriteでプロットしてみました。
1周のステップ数を200→400に変更
正方形描画
まぁまぁOK pic.twitter.com/ry14Qhd3mz— HomeMadeGarbage (@H0meMadeGarbage) March 2, 2020
まぁ。。完璧な正方形ではありませんが頑張ってくれてますw
文字のプロット
つづいて文字のプロットに挑戦しました。しっかり指定通りの書き順でプロットしてくれます。
プロッタ 完全に理解した pic.twitter.com/XVXygNYD14
— HomeMadeGarbage (@H0meMadeGarbage) March 3, 2020
文字の書き順の直交座標データはprocessing で導出いたしました。
マウスで文字を書いてシリアルモニタに座標を出力します。
出力された座標をeddyWriteに書き込みました。
おわりに
ロータリーエンコーダを導入することでeddyWriteのスライド位置を明確に指定できるようになりました。
任意の位置にペンを移動できるので図形や文字をプロットできるようになりました。
でもやっぱり当初のクルクル回りながら等間隔にスライドして絵を描くほうがeddyWriteの魅力が活かせるかなと
やってみて気づきました 🙄 。