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


コメント