はじめに

本シリーズでは、PythonとRaspberry Piで制御する「自作XYテーブル」の製作を解説しています。前回はモーターを回すことに成功しましたが、今回はそれを「装置」へと進化させる重要な回です。
「10mm動かしたい」と思った時、プログラムに何を書き込めば良いのか? タイミングベルトやプーリーの仕様から移動量を割り出す計算式と、そのPython実装を詳しく見ていきましょう。
使用構成(おさらい)
ベルト駆動を想定
今回は将来のXYテーブル構成をもとに、下記アイテムの使用を想定してプログラムを組みます
今回の記事では実装はしませんが、距離でモーターを動作させる際は、ハードウェアの情報(数値)をプログラム上で必要となる為です。
・タイミングベルト:タイプ2GT ・・・型番GBN7262GT-60(misumi)
・歯付プーリー:32歯


【重要】mm単位で動かすための計算式
ステッピングモーターを「10mm動かす」という命令に変えるには、以下のステップで計算します。
お手元のプーリーの歯数を確認しながら計算してみましょう。
STEP1:1回転で何mm進むか?(進み量の計算)
ベルト駆動の場合、モーターが1回転した時の移動距離は以下の式で決まります。
1回転の移動距離 = ベルトピッチ × プーリーの歯数
【例】GT2ベルト(2mmピッチ)で「20歯」のプーリーを使う場合:
2.0mm × 20歯 = 40mm
👉 モーターが1回転すると、軸は40mm移動します。
STEP2:1mm動かすのに何ステップ必要か?(ステップ密度の計算)
次に、1mmあたりのステップ数(Step/mm)を求めます。これがプログラムで最も使う数値です。
1mmあたりのステップ数 = モーターの1回転ステップ数(200) ÷ 1回転の移動距離
【計算例】先ほどの40mm進む設定の場合:
200ステップ ÷ 40mm = 5ステップ/mm
👉 **「1mm動かすには5ステップ送ればいい」**ということが分かりました!
※マイクロステップ設定を使用している場合は、200の部分をその倍数に書き換えてください
STEP3:移動量(mm)をステップ数に変換する
実際のプログラムでは、この数値を掛け算するだけでOKです。
| 動かしたい距離 (mm) | 計算式 | 必要なステップ数 |
| 10mm | 10 × 5 | 50ステップ |
| 50mm | 50 × 5 | 250ステップ |
| 100mm | 100 × 5 | 500ステップ |
ハードウェア結線図(A4988 + Raspberry Pi)

結線は第2回のおさらいです。(そのまま)
画像の一部は raspberrypi.zyx さんより引用させて頂きました。
プログラムの前にVref調整は済んでいますか?
焼損のリスクがあるので必ず実施しましょう。
調整方法の詳細はこちらをクリック
Pythonでプログラミング(距離指定対応版)
stepper_mm.py を作成します。
nano stepper_mm.py
import RPi.GPIO as GPIO
import time
# ===== 機構設定 =====
BELT_PITCH = 2.0 #2GTタイミングベルトによる固定値
PULLEY_TEETH = 32 #32歯プーリーによる固定値
STEPS_PER_REV = 200
MM_PER_REV = BELT_PITCH * PULLEY_TEETH
MM_PER_STEP = MM_PER_REV / STEPS_PER_REV
# ===== PIN設定 =====
X_STEP = 21
X_DIR = 20
X_EN = 16
X_MS1 = 17
X_MS2 = 27
X_MS3 = 22
X_RESET = 5
X_SLEEP = 6
GPIO.setmode(GPIO.BCM)
for pin in [X_STEP, X_DIR, X_EN, X_RESET, X_SLEEP]:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(X_EN, GPIO.LOW)
GPIO.output(X_RESET, GPIO.HIGH)
GPIO.output(X_SLEEP, GPIO.HIGH)
GPIO.output(X_MS1, GPIO.LOW)
GPIO.output(X_MS2, GPIO.LOW)
GPIO.output(X_MS3, GPIO.LOW)
def move_mm(distance_mm, direction, delay=0.01): # delayの値で速度調整 値が大きいと遅くなる
steps = int(distance_mm / MM_PER_STEP)
GPIO.output(X_DIR, direction)
for _ in range(steps):
GPIO.output(X_STEP, GPIO.HIGH)
time.sleep(delay)
GPIO.output(X_STEP, GPIO.LOW)
time.sleep(delay)
try:
print("20mm 正転")
move_mm(20, GPIO.LOW) # 20=移動量(mm) GPIO.LOW=正転
time.sleep(1)
print("10mm 逆転") # 10=移動量(mm) GPIO.HIGH=逆転
move_mm(10, GPIO.HIGH)
finally:
GPIO.cleanup()
この記事で使用したコードはこちらからダウンロードできます。
stepper_mm.pyをダウンロード(ZIP)実行
python3 stepper_mm.py
10mm動けば成功です。
ここが超重要ポイント
今回やったことは:
✔ 回転制御 → 距離制御へ進化
✔ 機構設計とプログラムを連動
✔ 実用装置の基礎完成
これは“工作”から“装置設計”へのレベルアップです。
次回予告
次回はさらに進化します。
✔ 【第4回】XYテーブル化の第一歩|X軸とY軸を2台動かす(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)
- 【第9回】Python×Raspberry PiでXYテーブルを制御するGUIを作る(原点復帰・位置表示・ソフトリミット実装)






コメント