はじめに
前回の記事では、Pythonの threading を使って
X軸とY軸を同時に動かす方法 を解説しました。
これにより
・X軸
・Y軸
・XY同時制御
を同時に動かすXY制御の基本が完成しました。
しかし、この状態ではまだ実用的な装置とは言えません。。
それは「現在位置が分からず、安全制御がないこと」です。
多くの工作機械では、電源投入後に
原点復帰(Homing)
という動作を行います。
そこで今回は「XYテーブルの原点復帰機能」を実装します。
今回のゴール
今回のプログラムでは以下を実装します。
- リミットスイッチ検出
- 原点方向へ移動
- 原点検出
- バックオフ
- 原点位置確定
これにより「電源ON → 原点復帰 → 動作開始」という実用的な制御になります。
リミットスイッチとは
リミットスイッチは「機械の端(移動限界)をスイッチが押される事で検出するセンサー」です。
XYテーブルでは通常
X軸の端
Y軸の端
に設置します
本サイトではX軸Y軸に1個づつ配置することを想定しています。
使用するリミットスイッチは
「オムロン製:D2JW-01K1A1」です


今回の配線
今回は以下のGPIOを使用します。
X軸 X_LIMIT = 4
Y軸 Y_LIMIT = 14
リミットスイッチは「NC(ノーマルクローズ)」で接続します

Pythonで原点復帰を行う
まず、原点復帰を開始する関数を作ります。
# -----------------------------------------------------
# 原点復帰処理
# -----------------------------------------------------
def start_homing(): threading.Thread(
target=homing_axis,
args=("X軸", X_STEP, X_DIR, X_EN, X_LIMIT,
X_MS1,X_MS2,X_MS3,X_RESET,X_SLEEP),
daemon=True
).start()
threading.Thread(
target=homing_axis,
args=("Y軸", Y_STEP, Y_DIR, Y_EN, Y_LIMIT,
Y_MS1,Y_MS2,Y_MS3,Y_RESET,Y_SLEEP),
daemon=True
).start()
この関数では
X軸
Y軸
それぞれの原点復帰を別スレッドで実行しています。
そのため
「XY軸が同時に原点復帰」
する仕組みになります
原点復帰処理
次に、実際の原点探索処理です。
def homing_axis(axis_name, STEP, DIR, EN, limit_pin,
MS1,MS2,MS3,RESET,SLEEP):
まず、A4988ドライバを初期化します。
gpio_init_axis(STEP,DIR,EN,MS1,MS2,MS3,RESET,SLEEP)
これにより
ENABLE
マイクロステップ
SLEEP
RESET
などの設定が行われます。
原点方向の設定
次に、原点方向を設定します。
if axis_name == "X軸":
homing_dir = GPIO.HIGH
backoff_dir = GPIO.LOW
else:
homing_dir = GPIO.LOW
backoff_dir = GPIO.HIGH
XYテーブルでは
X軸 → 左方向
Y軸 → 下方向
のように、軸ごとに原点方向が異なることがあります。
そのため
軸ごとに方向を設定
しています。
原点探索
次に、リミットスイッチが押されるまで移動します。
while GPIO.input(limit_pin) == GPIO.LOW:
GPIO.output(STEP,GPIO.HIGH)
time.sleep(0.001)
GPIO.output(STEP,GPIO.LOW)
time.sleep(0.001)
この処理で
スイッチON
になるまでモーターを動かします。
バックオフ処理
リミットスイッチを押した状態のままだと
次の動作ができなくなります。
そこで
少しだけ逆方向へ戻します。
GPIO.output(DIR,backoff_dir)for _ in range(BACKOFF_STEPS): GPIO.output(STEP,GPIO.HIGH)
time.sleep(0.001) GPIO.output(STEP,GPIO.LOW)
time.sleep(0.001)
この処理を
バックオフ(Backoff)
と呼びます。
原点位置の確定
最後に、現在位置を
0mm
として設定します。
current_pos[axis_name]=0.0
これにより
現在位置管理
が可能になります。
Pythonフルコードをダウンロード
この記事で使用したフルコードはこちらからダウンロードできます。
XY_safe_move.py をダウンロード(ZIP)実行時の動作
プログラムを起動すると
X軸 原点復帰
Y軸 原点復帰
が実行されます。
その後
XY移動
が可能になります。
動作動画
今回のポイント
今回の重要ポイントは次の3つです。
リミットスイッチ
原点復帰(Homing)
バックオフ
この機能により
工作機械の基本制御
が完成します。
次回予告
次回は「XYテーブル GUI操作」を実装します
Pythonの「tkinter」を使い
- 移動量入力
- XY同時制御
- 緊急停止
などを実装します。
これにより「WINDOW(アプリ)から操作できるXYテーブル」が完成します。
過去のXYテーブル製作シリーズはこちらから
- 【第0回】Raspberry PiのOSインストール完全ガイド|初心者向けにゼロから解説
- 【第1回】PythonでLEDを光らせる|GPIOの基本をやさしく解説
- 【第2回】ラズパイ+A4988でステッピングモーターを回す
- 【第3回】ステッピングモーターをmm単位で動かす|ベルト駆動の計算方法まで解説
- 【第1.5回】 A4988のVref調整手順(XYテーブル製作シリーズ)
- 【番外編】L6470が動かない?A4988と同じ感覚で使ってハマった話
- 【第4回】XYテーブル化の第一歩|X軸とY軸を2台動かす
- 【第5回】Pythonでステッピングモーターの加減速制御を実装する
- 【第6回】Pythonでステッピングモーターを2軸同時に動かす
- 【第7回】Raspberry PiでXYテーブル制御|リミットスイッチと原点復帰(Homing)の実装
- 【第8回】【Python × Raspberry Pi】XYテーブルをGUI操作する(Tkinter)


コメント