ペンプロッター製作の記録

##ペンプロッターとは
自動で紙に何か書いてくれる機械．3Dプリンタとよく似ている．

##なぜ製作するのか
研究室に所属したら先生に何かつくるように言われたため，AxiDrawというペンプロッターを参考にして何か作ることにした．
手を動かして何かを完成させる経験を積ませることが目的とのこと．正直B4数人でちゃんと完成させられる自信がない（）
目標はArduinoにつないだステッピングモータを動かし，動きを制御するソフトウェアを自分たちで作ること．

##必要機材と道具
まずは必要と思われるものを購入した.

#####AxiDraw V3
これは海外から．

#####Arduino Uno
#####CNC shield V3
#####ステッピングモータドライバA4988 ×4個
#####ステッピングモータ Nema17 ×3個
XY軸だけなので2個でいいんだけど予備．マイコンは焼けるもの．
#####タイミングベルト2m
実験室を探すと十分長いベルトが見つかることをこのときのぼくらは知る由も無かった……
#####20歯ギア
モータに嵌めるやつ．プーリともいうらしい？
#####リニアブッシュ
棒を嵌めるやつ．
#####万年筆
"ペン"プロッターだからね．
以上Amazonより購入．

###必要なソフト
まずは既存のソフトを使用して動かしてみる．全部無料でネットから入手．ちなみにPCはWin7
#####Arduino IDE
#####Python2.7と3.6
grblはPython2でしか動かないため．
#####bCNC
これもPython2で動かしてる
#####grbl
#####bCNC
#####Inkscape
エクステンションを作ってなんやかんやする．AxiDrawはこいつで動く．

###必要な道具
#####六角レンチ
#####ドライバーセット
#####ペンチ
#####ワイヤストリッパ
#####ボール盤
#####やすり
#####安定化電源
#####テスター
いろいろ使わせてもらってありがたい．

##進捗メモ
 - まずはArduino UnoにCNC ShieldとA4988を乗せ，可変抵抗を設定．
マイナスドライバーで回すのとテスター当てるのを何度も繰り返す．
Youtubeの動画では10Ω？くらいにしていたが，可変抵抗が素直じゃなさすぎて無理．回したぶんだけ線形に増減するんじゃないんですかね……
結局120Ωくらいでステッピングモータが正常にうごくことがわかったので妥協した．

 - 安定化電源を接続する．ここから12V程度の電圧をかけることになる．
 - サーボを電源入れるところの対角にある5VとGNDにつなぐ．信号の線はすぐ横のZ+へ．
 - 今回の製作ではXY軸の端のリミットスイッチは使わない．

 - Inkscapeにgcodetoolsを入れてGコードファイルを作れるようにする
 使い方はOrientation pointsで設定した後，Tools libraryで道具を選択，Path to Gcode．
 <font color="Red">2018/10/04　エラーが出るため使えない
Orientation points以外の操作をするとgcodetools.pyでAttributeError: 'NoneType' object has no attribute 'group'と出る．
解決方法は不明だが他の人のPCだと正常に動作するのでとりあえず放置</font>

 - PCにPythonとbCNCを入れて実行
使い方はPortで使用しているArduinoとつながるUSBポートを指定
->Openをクリック
->Status:connectedになっているのを確認
->FileのOpenから使いたいgcodeファイル（gcodetoolsで出たのはngcファイル）を開く
->ControlタブのUnlockをクリック
->この時点でステッピングモータが動かせる
->スタート!!!
<font color="Red">Stopを押したりすると再び動かすときにエラーが出るので，ArduinoとCNC Shieldのリセットボタンを押す．

20181012追記
grbl controllerのほうがpythonもいらないし楽なのでそっちを使うことにする．

----ソフト方面はここまで---- 

 - ハードの材料を買いに行く
 
- 木材と金属丸棒(φ8mm)，アルミ板を買いに行く
- アルミ板は1.5mm厚，丸棒は鉄がいいのにアルミしか置いてなかったので妥協

2018/10/02 これらを組んで養生テープで留めて一応動くことを確認した． 

----ハード方面はここまで----

現状ここまでなので進捗あるごとに追記．

20181005
grblのv0.9gが少し古いようなので同じ0.9jがほしいのdが見つからない．hexファイルなら見つかったのでarduinoIDE付属のavrdudeでarduino UNOに書き込もうとするがエラーになる．v1.1がv0.9とどれだけ変わったかわからないのでv0.9を使いたい(サーボモータを使ったgrbl動画はv0.9のしか見つからないし）のだけど......困った．とりあえずv1.1を使ってみる．grbl controlerめっちゃ使いやすい，bCNCの上位互換では？

20181010
grbl servoでサーボを動かせない．何が間違っているんだろう．
gcodeprocesserが動かない．coloramaはインストールしたのに認識しない．

20181011
未だサーボ動かせず．動かない原因はサーボの故障・ジャンパワイヤの断線・grbl-servoのバグ・grbl controllerのバグが思いつくけどどれも正常に見える（一応確かめた）．どうすればいいんだろう．
InkscapeのInkscape Laser Plug-In(Jtech?)で.gcodeファイルが作れるようになった．プロッターのためのextensionではないからそのままでは使えないけど，一歩前進した．

20181012
オシロスコープでM3 S125などの周波数を図ってみると974Hzだった．SG90は50Hzに合うサーボなのでこれでは動かない．ArduinoのPWMの周波数を変更する方法を探す．grbl servoのREADMEにこれで動いたと書いてあったのはなんだったんだろう．
Arduinoのincludeで読み込むライブラリはC:\Program Files (x86)\Arduino\librariesにあるファイルだと思っていたけどC:\Users\<ユーザー名>\Documents\Arduino\librariesのほうらしい？ので，そっちにgithubでダウンロードしていろいろのgrblフォルダをコピーして動くか試してみる．
cprezziさんのgrbl-servo(branch:eggbot)(https://goo.gl/YV2mFf) を使用したところ，同じ挙動をした．cpu_map.hでサーボに適した分周期を設定しているので，Jtech laser用の設定
 #define SPINDLE_TCCRB_INIT_MASK   (1<<CS22)
を
 #define SPINDLE_TCCRB_INIT_MASK   ((1<<CS22) | (1<<CS21) | (1<<CS20))
に書き換えたところ61Hzになった．（正しいやり方でないとは思いつつ）とりあえず一歩前進．

20181015
一応の完成を見た．
サーボの回転をするgcodeはM3S0からM3S255だと思い込んでいたが，このgrbl servoではS1~S999らしい．道理でS255の動きが45度弱なわけだ．branchがeggbotという名前なのでXY軸で動くかどうか心配だったが，ペンプロッターとしてモータが動いているように見える．安心．
ステッピングモータドライバ(A4988）の可変抵抗について，いろいろと調べたところ6Ωとか出てきたので小さい値にしようとしていたけれど，どう回してもそんな小さい値にならないしモータも動かないので，電圧かけながら回して適切な場所を探ってみた．（ジャンパブロックは3つとも嵌めてsixteenth step）可変抵抗０Ωのところから90度のところでうまく動いた．測定したところ1.5kΩとか1.7kΩとかの値になった．やっぱりちゃんと知識無いと駄目だね．テスターも大きい抵抗を測れるやつにすること．
あと大事なのは，接続切るときにgrbl controllerのclose/resetを押してから線を抜くこと．当たり前だけどこれをやってなかったのでgrblがしばらく使えないなんてことになってた．アホである．