【XYペンプロッター制作⑤】リミットスイッチでホーミング
こんなこと、やります。
- Y軸のリニアレールの追加
- CNCシールドV3.00にリミットスイッチ取り付け
- Grbl v0.9の初期設定値の変更
- ホーミングで原点復帰
この記事は、ArduinoでXYプロッターを制作する過程の一部をご紹介してます。今回はホーミングに絞って解説いたします。下記の記事も合わせてご覧ください。
つかうもの
はじめに、この記事でつかうものをご紹介いたします。
リミットスイッチ
本記事で新たにリミットスイッチを使用します。 一般には、マイクロスイッチと呼ばれるプッシュ型のスイッチになります。私は秋月電子通商のものを使いましたが、Amazonでも安く入手できます。
その他
また、 前回の記事まで で、使用している部品一覧はこちらになります。
- Arduino Uno x 1
- ステッピングモータ x 2
- CNCシールド x 1
- モータドライバ x 2
- スイッチング電源 x 1
- タイミングベルト&タイミングプーリー x 1
- リニアガイド x 3
- ジャンパーキャップ x 6
Y軸のリニアレール追加
X軸のステッピングモータ側と同じレールを作って、Y軸にしました。タイミングベルトは少し緩めに作って、後からバネで引っ張ります。タイミングベルトの接続部分は、写真のとおり機械的に圧着してつなぎ合わせてます。
細かい部品は3Dプリンタで自作してます。作ったパーツはThingiverseで無料ダウンロードいただけます。
▼ ちなみに、私が使用している3DプリンタはCrealityの「Ender3 V2」です。
リミットスイッチの取り付け
写真のように、マイクロスイッチをホットボンドで固定しました。合計2つのマイクロスイッチを使って、X軸とY軸の片側にリミットスイッチを設けいてます。安全を考えると、もう片方側にもリミットスイッチを設けるべきですが、今回は最小限の設備で先へすすめます。
リミットスイッチの配線
リミットスイッチの配線は次のとおりです。
マイクロスイッチの端子は通常、C(Common)、NO(Normally Open)、NC(Normally Closed)です。片方の配線をCommonへつなぎ、もう片方の配線をNormally Openにつなげば、スイッチが押されていないときはオープン(絶縁)状態になります。また、Normally Closedにつなげば、スイッチが押されていないときは、ショート(導通)状態になります。 ここらへんは、 リレーモジュールの使い方|Raspberry Pi・Arduino(ESP32) でも扱った、リレースイッチと同じ原理になります。
環境によっては、リミットスイッチ周辺のノイズ対策が必要になるようです。 Wiring Limit Switches · gnea/grbl Wiki · GitHub
Grbl v0.9設定値
ホーミングを行うにあたって、Grbl v0.9の初期設定値をいくつか変更する必要がありました。ここでは私の環境下での設定値を紹介します。
$0=10 (step pulse, usec)
モータードライバへ送る最小パルスの長さです。A4988を使用する場合は、1μs以上が必要です。 A4988のデータシート デフォルトのままです。
$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=1 (hard limits, bool)
リミットスイッチを使う場合は、1を設定します。
$22=1 (homing cycle, bool)
ホーミングサイクルを許可するかどうかの設定です。ホーミングするには1を設定します。
$23=7 (homing dir invert mask:00000000)
ホーミングの回転方向を変えます。設定値と動作の関係は、次の表のとおりです。
設定値 | マスク | Xを反転 | Yを反転 | Zを反転 |
---|---|---|---|---|
0 | 00000000 | N | N | N |
1 | 00000001 | Y | N | N |
2 | 00000010 | N | Y | N |
3 | 00000011 | Y | Y | N |
4 | 00000100 | N | N | Y |
5 | 00000101 | Y | N | Y |
6 | 00000110 | N | Y | Y |
7 | 00000111 | Y | Y | Y |
当然ですが、ステッピングモータの端子の向きによっても移動方向は反転されます。私の場合は、$23=7にしましたが、CNCマシンのセッティング合わせて変更してください。
$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=80.000 (x, step/mm)
$101=80.000 (y, step/mm)
$102=250.000 (z, step/mm)
軸の単位mmあたりのステップ数です。この値は、ステッピングモータとタイミングベルト、プーリの仕様を元に算出します。算出方法は、こちらの記事をご覧ください。
$110=500.000 (x max rate, mm/min)
$111=500.000 (y max rate, mm/min)
$112=500.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)
ソフトリミットが有効の場合の軸の最大移動量です。デフォルトのままです。
いざ、ホーミング!
XY軸にリミットスイッチを取り付けて、$Hを送信しホーミングしてみました。そのようすを動画でご覧ください!
機械原点(Machine Position)をゼロにするには?
ところで、CNCjsでホーミングを行ったあと、画像のようにX軸Y軸の機械原点がゼロになりません。
加工原点(Work Position)をゼロにすることはできるのですが、機械原点をコマンドなどでゼロにセットする方法が見つかりませんでした。 そもそも機械原点は、CNCjsがCNCマシンと接続した時点をゼロとみなします。よって、少し手間ではありますが、次のような手順で機械原点をゼロにセットしてます。
- $Hでホーミングして、ホームポジションへ移動
- Arduinoとの接続をいったん解除、再接続する
- 機械原点がゼロにセットされる
- $Xでアラームロックを解除する
機械原点をゼロにしてからたとえば、「G01 X50 Y50 F200」を命令してみましょう。画像のように、正確に移動できるはずです。