Arduino と L293D でステッパーモーターを制御する
ここでは2相4ワイヤーの小さなステッパーモーター (stepper motor) を Arduino から制御する方法について説明します。
通常のモーターは連続回転するのを期待するときに使いますが、 ステッパーモーターは特定の角度だけ回って止まるような動きをしたい場合に使います。
制御単位となるのは、ステップで、それぞれのステッパーモーター毎に1ステップでどのくらいの角度で回転するか決まっています。
今回利用した小さなステッパーモーターは1ステップで 18°。従って、20 ステップで1回転します。
ここで使うステッパモーターの種類は、バイポーラ (bipolar) ステッパーモーター といって内部にコイルが二つあり、その極性を切り替えることで、モーターの回転角を操作します。
ステッパーモータードライバー IC (トランスレータ) としては L293D を使いました。 L293D はデュアル H ブリッジ IC です。次のように接続します。
"1 in", "2 in", ... と記載した箇所は Arduino に接続します。
L293D はインターナルのフライバックダイオードを内臓してます。SN754410 等を使うならダイオードを外付けする必要があります。
ブレッドボードに接続した様子は次の通り。
今回利用したステッパーモーターは図のようなペア (1 in & 2 in もしくは 3 in & 4 in) になりました。
Arduino のコードは次のようにしました。半回転して止まり、逆向きに半回転して止まり、・・・を繰り返すだけです。
#include <Stepper.h>
const int stepsPerRevolution = 20;
Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
stepper.setSpeed(180);
}
void loop() {
stepper.step(10);
delay(1000);
stepper.step(-10);
delay(1000);
}
動作の様子は次の通りです。
Stepper クラスの setSpeed メソッドでモーターの回転速度を RPM で指定します。RPM は 1 分間に回転する回転数です。 例えば 60 RPM なら 1 分間に 60 回転。すなわち、1 秒で 1 回転する速度です。ここでは 180 RPM を指定しています。
step メソッドでは現在の位置から回転するステップ数を指定します。負の値を指定すると逆回転になります。
尚、step メソッドは同期関数で、操作が終了するまでブロックします。つまり、指定したステップだけ、モーターが回転するまで返りません。
以上で、上の動画のような動きが実現できます。