markのアイコン画像

IchigoJamで動くGrbl制御のペンプロッタを作ってみた。

mark 2021年02月23日に作成  (2021年02月27日に更新)
IchigoJamで動くGrbl制御のペンプロッタを作ってみた。

1. 前書き
IchigoJamで使えるプリンタが欲しい! というわけで、作ってみました。
昔は、小型のプリンタメカが手に入ったのですが、いまはありませんね。
というわけでメカから作ってみました。構造はペンプロッタです。
ペンプロッタの材料は、CNCや3Dプリンタと共通点が多く比較的材料が手に入りやすいです。

2.基本構成
サインペンを使って線を描くペンプロッタ構造にします。
ざっくりこんな感じです。

項目 内容
1 アクチュエータ X-Y軸 ステッピングモーター NEMA17の2相バイポーラ型です。
2 アクチュエータ ペン上下 RCサーボモーター。よくあるSG9Gという小型品。
3 スライド機構 8㎜径のシャフトとオイルレススライダー。構造体を兼ねます。
4 ペン上下 オリジナルでデザインします。
5 モータドライバ 市販のモータードライバーモジュールを使います。
6 コントローラ SBC Arduino Nano. UNOを使うとモータードライバーを載せるシールドがありますが、今回は自作します。ATMega328Pの書き込み機が必要。
7 伝動機構 タイミングベルト6㎜幅 X-Yはタイミングベルトを使いました。ギアは18歯です。20歯のものを使うときは$100と$101を書き換える必要があります。ペン上下は、RCサーボについてくるホーン(であってますか)でペンを押し上げます。
8 ペン 「ZEBRA社製 クリッカート」 ペンプロッタなので、ペンは重要です。フエルトペンでキャップなしで乾かないというちょうどよさげなペンがあり使ってみました。発色もきれいです。
9 電源 ステッピングモーターを使うので12V1.5AのACアダプタを電源にしました。Arduinoは12vでも使えるのですがRCサーボモータが5V程度で電流容量が必要です。5V1.5Aの降圧DC/DCコンバータで5Vを作りました。

3.構造設計
無料CAD(DesignSpark Mechanical)で設計です。CADで造形して3Dプリンタでパーツを作ります。
ペンプロッタ全体構造

4. コントローラ
Arduino Nano(ATMEGA328P搭載)にGRBLを書き込んでコントローラにします。
最新版は、GRBL1.1のようですね。 これなんですが、プログラムサイズが大きくなっていてブートローダが使えなくなっていますので、ATMEGA書き込み機が必要になります。書き込み機は色々販売されていますので、各自用意してください。

ハードリミット、ソフトリミット、ホーミングを使えるようにしています。

5.GRBL 準備
ATmega328Pの書き込み機が必要です。Arduinoの書き込み機能は最新版では使うことができません。私はUSBASPというのを使っています。Aで始まる大手通販会社でも安く買えます。これは安いし自作も可能ですが、Windows10にインストールはちょっと面倒です。機会があれば、別途書きたいと思いますが、今日のところは「お気に入りの書き込み機を用意してください。」とさせていただきます。

Arduino IDEをインストールします。最新版が良いですね。Homeはここです。英語のページが開くので、SOFTWAREメニューのDOWNLOADSを選ぶと最新版がダウンロードできるページに移動します。寄付するなり、しないなりしてダウンロードしてください。できたらインストールしておきます。設定はディフォルトでいいはずです。

GRBLはココから最新版がダウンロードできます。右上にある↓CodeボタンをクリックしてDownloadZIPを選びます。
解凍したら、中にあるGRBLフォルダをArduinoのライブラリの下にコピーまたは移動します。Win10ならこの辺りで見つかると思います。

  • C:\Users\”ユーザー名”\Documents\Arduino\libraries

次にArduinoIDEを起動してファイルを開く→から先ほどのファイルにあるINOファイルを選んでください。

  • C:\~~~~\Arduino\libraries\grbl\examples\grblUpload\grblUpload.ino

次にArduinoIDEのメニューのツールでボードをArduino Nano(またはUno)を選び、CPU をATmega328Pにします。書き込み機も選んでおきます。

そして、Ctrl-Rとタイプするとコンパイルが始まります。エラーとなっていなければOKです。

コンパイル結果(の最後)

最大30720バイトのフラッシュメモリのうち、スケッチが29760バイト(96%)を使っています。 最大2048バイトのRAMのうち、グローバル変数が1633バイト(79%)を使っていて、ローカル変数で415バイト使うことができます。 スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。

では、Arduino Nanoをつないで(書き込み用の6ピンコネクタ経由)ArduinoIDEのメニューから「スケッチ」→「書き込み装置を使って書き込む」で書き込みます。

正常に書き込むことができたら、今度はArduinoのUSBコネクタでPCとつなぎます。これでWindowsがシリアルポートを認識するはずです。お好みのターミナルソフトでポートを開いてみてください。

  • ポート設定:115200BPS 8ビットパリティなし、1ストップビット

次のようなプロンプトが出ればOKです。
-Grbl 1.1h ['$' for help]

ここまで出来たら、$$(半角ドルマークを2個とEnter)を入力してみます。次のようなリストが出るはずです。数値は違っていてかまいません。同じ設定に変える場合は、これをターミナルにコピペすると設定できます。

Grbl設定例

ok $$ $0=10 $1=25 $2=0 $3=0 $4=0 $5=0 $6=0 $10=1 $11=0.010 $12=0.002 $13=0 $20=1 $21=1 $22=1 $23=1 $24=100.000 $25=500.000 $26=250 $27=5.000 $30=1000 $31=0 $32=0 $100=80.000 $101=80.000 $102=250.000 $110=2000.000 $111=2000.000 $112=500.000 $120=10.000 $121=10.000 $122=10.000 $130=180.000 $131=160.000 $132=200.000 ok

6.使うコマンド
当面必要になるコマンドを紹介しておきます。XとYに続く0は位置座標の数字に置き換えて使います。

  • $$ 設定を読み出します。

  • $数字=設定  設定の書き換えです。

  • $X ロック解除 ホーミングをONにすると電源投入後これを入力しないと動きません。

  • $H ホーミング 原点まで移動し、位置合わせをします。

  • G0X0Y0  高速移動(直線に動く保証はない点に注意。)

  • G1X0Y0F100 指定速度で直線で移動します。

  • G2     右回りで円弧移動

  • G3     左回りで円弧移動

  • G28.1 X0 Y0 XY点まで移動し位置を覚えます。

  • G28     覚えた位置まで移動します。

  • F100    G1~3の移動速度を設定します。一度設定すればOK

  • M3   スピンドル回転 回転コマンドでRCサーボ用PWM信号がでます。

  • M5   スピンドル停止

  • S500    スピンドル回転速度を指定。今回はRCサーボの位置設定に使います。

電源をいれたらM3コマンドを与えます。これでPWM信号が出るようになるので、その後次のように制御できます。上下の方向は取り付け方にもよりますので、適宜調整してください。

  • S500 ペン下げ

  • S900 ペン上げ

  • Control-X リセット

  • ?    位置などの情報表示

  • $#    設定読出し。

7.回路図

キャプションを入力できます
手描きですが、CADを使うほどでもなかったので、こうなりました。これをユニバーサル基板に組みます。

8.ギャラリー

機構部の全体はこんな感じです
回路基板 Arduino Nanoとモータードライバ ペン保持部 サーボモータがついています X軸モーター取り付け部 X移動するキャリアとY軸のリミットスイッチ

サンプルのGコードと描いた四角です。1㎝x1㎝の正方形です。

サンプルGコード

M3 S500 G91 G1X10F500 Y-10 X-10 Y10 S900

1㎝の正方形を描いたところ

9.最後に
最後までご覧いただきありがとうございました。
これで、G-Codeをシリアルで書き込むと動くペンプロッタができました。表題のIchigoJamに限らずマイコンでお絵描きができますので、試したいと思います。使いやすくするには制御するマイコンのプログラムに工夫が必要になります。
またステップモータはSBCと相性が良いので、他にもいろいろ使って遊べそうです。

10.追補

表題にIchigoJamとしていますが制御はArduinoを使っています。これをIchigoJamで直接動かしてみました。
予想通り、実用には少々遅いですね。ところが、現在RISK-Vを採用したIchigoJam-Rのβ版が存在します。オリジナルの10倍高速らしいので、試したところ、使えそうですね。回路は、ArduinoをIchigoJamに置き換えただけです。
Firmwareは、出来合いがありませんので次のように自分で書く必要がありますが、機能を限定でよいので問題はありません。OUT1とOUT3がクロックでOUT2とOUT4が方向です。OUT6はモータのEnable(脱力)です。OUT5はペン上下の制御にしています。

IchigoJam-R版 コントローラ

DDAコード

100 out6,1 110 x=-5000:y=-1000: 120 gosub 31000: end 1000 'parser 31000 out 6,0 31010 out2,x>0:x=abs(x) 31020 out4,y<0:y=abs(y) 31030 if x>y then goto 31100 31040 v=y:for i = 0 to y 31060 out3,1:v=v-x:if v<=0 then out 1,1:v = v+y 31070 out 3,0:out 1,0 31080 next:out 6,1:return 31100 v=x:for i=0 to x 31110 out1,1:v=v-y:if v<=0 then out 3,1:v=v+x 31120 out 1,0:out 3,0 31130 next:out 6,1:return

LINKs
GRBLダウンロードはここです。
GーCode/M-Codeの説明はこのあたりを参考にさせていただきました。
RCサーボモータの記事はこちらを参考にさせて頂きました。

mark さんが 2021/02/23 に 編集 をしました。 (メッセージ: 初版)
mark さんが 2021/02/23 に 編集 をしました。 (メッセージ: テーブルの誤記等修正)
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/23 に 編集 をしました。
mark さんが 2021/02/27 に 編集 をしました。
ログインしてコメントを投稿する