ArduinoでBYJ-48ステッピングモーター2基を同時制御する方法|AccelStepperが動かない原因と対策

工学

ArduinoでBYJ-48ステッピングモーターを2基同時に動かしたい場合、AccelStepperライブラリを使っても思ったように動作しないことがあります。原因はライブラリの使い方だけではなく、BYJ-48特有の駆動方式やULN2003ドライバの設定、電源容量、プログラム構成など複数の要素が関係しています。

この記事では、Arduino Uno系ボードとBYJ-48、ULN2003ドライバを使って2台のステッピングモーターを同時制御する際に確認すべきポイントと、動かすための基本的な考え方を解説します。

BYJ-48とULN2003の基本的な仕組み

BYJ-48は小型の4相ステッピングモーターで、一般的なNEMA規格のステッピングモーターとは制御方法が少し異なります。多くのBYJ-48は内部に減速ギアを持っており、非常に細かいステップで回転します。

BYJ-48用のULN2003ドライバ基板には、IN1〜IN4の4つの入力端子があります。Arduinoから4本の制御信号を送り、コイルを順番に励磁することでモーターを回転させます。

そのため、AccelStepperを使用する場合も、通常のSTEP/DIR方式のドライバとは設定方法が異なります。A4988やDRV8825などのドライバ用コードをそのまま流用すると動作しません。

AccelStepperでBYJ-48が動かない主な原因

BYJ-48でAccelStepperが動かない原因として多いのが、ステッピングモーターの種類に合った設定がされていないことです。

AccelStepperではモーターの駆動方式を指定する必要があります。BYJ-48とULN2003の場合は、4ピン制御のFULL4WIREまたはHALF4WIRE設定を使用します。

例えば、以下のような設定が必要になります。

AccelStepper motor(AccelStepper::FULL4WIRE, IN1, IN3, IN2, IN4);

このピン順が間違っていると、モーターが振動するだけ、逆方向に動く、まったく動かないといった症状が発生します。

ステッピングモーター2基を同時に動かすプログラムの考え方

AccelStepperで複数のステッピングモーターを動かす場合、重要なのはloop関数内でそれぞれのモーターに対してrun()を実行することです。

例えば、以下のような構成になります。

motor1.run();
motor2.run();

run()はモーターを1ステップ進める必要があるか判断する関数です。片方のモーターだけrun()を書いている場合、もう片方は制御されません。

また、delay()を多用するとArduinoが停止状態になり、複数モーターを同時制御できなくなる場合があります。

2基のBYJ-48を動かす際の配線確認ポイント

モーターを2基使用する場合、それぞれのULN2003基板をArduinoの別々のピンへ接続する必要があります。

部品 必要な接続
BYJ-48 1台目 ULN2003基板1枚目のIN1〜IN4
BYJ-48 2台目 ULN2003基板2枚目のIN1〜IN4
電源 モーター用5V電源

Arduino Unoの5V端子だけで2基のBYJ-48を動かそうとすると、電流不足になる可能性があります。特に負荷がかかる工作では、外部5V電源を使用し、ArduinoとはGNDを共通にする方法が安定します。

BYJ-48を2基同時制御するサンプルコードの考え方

2つのモーターを同時に動かす場合、以下のように2つのAccelStepperオブジェクトを作成します。

例として、モーター1を8〜11番ピン、モーター2を4〜7番ピンに接続した場合、それぞれ別の制御ピンを指定します。

そしてloop内では、以下のように両方のrun()を常に呼び出します。

void loop(){
motor1.run();
motor2.run();
}

このようにArduinoは高速で交互に処理することで、人間には2台のモーターが同時に動いているように見える制御を行います。

動かない場合に確認するチェックリスト

BYJ-48が動かない場合は、以下の項目を順番に確認すると原因を特定しやすくなります。

  • ULN2003のIN1〜IN4の配線が正しいか
  • AccelStepperの駆動方式設定がFULL4WIREまたはHALF4WIREになっているか
  • ピン番号の指定順が間違っていないか
  • Arduinoの電源容量が不足していないか
  • delay()でプログラムを停止させていないか
  • モーター単体では正常に動くか

特にBYJ-48では、配線順の間違いが原因で動かないケースが非常に多いため、まず1台だけ動作確認してから2台目を追加するとトラブルを減らせます。

まとめ

ArduinoでBYJ-48ステッピングモーターを2基同時に動かす場合、AccelStepperを使うこと自体は可能ですが、通常のSTEP/DIR型ステッピングモーターとは設定が異なります。

重要なのは、ULN2003用の4線制御設定を使用すること、2台それぞれにAccelStepperオブジェクトを作成すること、loop内で両方のrun()を呼び続けることです。

また、2基のモーターでは電源容量不足も起こりやすいため、外部電源の利用も検討すると安定した動作につながります。

コメント

タイトルとURLをコピーしました