電子工作をしていて、サーボモーターを使って何か動くものを作ろうとしたけど、モーターのトルク(回す力)が足りず、うまくいかなかった、という経験をお持ちの方もいらっしゃるのではないでしょうか。
ステッピングモーターは、小型なものでもかなりトルクが大きいものがありますので、トルクがほしい場合の対策として役立ちます。
しかし、サーボモーターと違って単純につなげば動くかと言えばそうではなく、ステッピングモーター専用のドライバボードを利用するのが一般的です。
本記事では、がじぇるねのGR-ADZUKIを使ってステッピングモーターを動かす方法を紹介します。
DCモーターとサーボモーターを動かし方はこちら。
ハードの準備
以下を使用して動作確認を行いました。
- GR-ADZUKI (0.9〜5.5V)
- ステッピングモーター 28BYJ-48 (5V)
- ULN2003ドライバボード (5〜12V)
- リチウムイオンバッテリー (3.7V)
ステッピングモーターの電源は、当初GR-ADZUKIボードの電源と別系統にしようかと思っていましたが、モーター1つであればサーボモーター用電源端子からの供給で駆動できたので、単一の電源構成にしました。
電池はリチウムイオンバッテリーを使いましたが、乾電池を使用したり、モバイルバッテリーを使ってUSB端子から供給することもできます。
リチウムイオンバッテリーは3.7Vですが、GR-ADZUKIボードの昇圧回路により、サーボモーター用の電源供給用端子からは5Vが出るようになっています。
以下が回路図です。
電池からの供給の場合、電源端子付近にあるスライドスイッチをVATT側に、USB端子から電源供給したりプログラムの書き換えをする場合はUSB側に倒す必要がありますのでご注意ください。
もう一方のスライドスイッチはSketch側に倒しておきます。
プログラムの作成
GR-ADZUKIのプログラムは、IDE for GRを使用してC言語で記述します。
#include <Stepper.h> #define MOTOR_1 (12) // blue #define MOTOR_2 (13) // pink #define MOTOR_3 (11) // yellow #define MOTOR_4 (10) // orange #define MOTOR_STEPS (2048) // ライブラリが想定している配線が異なるので2番、3番を入れ替える Stepper myStepper(MOTOR_STEPS, MOTOR_1, MOTOR_3, MOTOR_2, MOTOR_4); void setup() { myStepper.setSpeed(10); } void loop() { myStepper.step(512); myStepper.step(-512); stopMotor(); delay(5000); } void stopMotor() { digitalWrite(MOTOR_1, LOW); digitalWrite(MOTOR_2, LOW); digitalWrite(MOTOR_3, LOW); digitalWrite(MOTOR_4, LOW); }
setup()関数内で回転スピードを設定し、loop()関数内に動作を記述します。
「90度右回し」→「90度左回し」→「5秒待つ」を繰り返すプログラムとしました。
このページにあるのと同様にステッピングモーター28BYJ-48を使う場合は、MOTOR_2とMOTOR_3を入れ替えることでモーターを意図どおり動かすことができました。
プログラムを書いたら、メニューの「ファイル」から「名前をつけて保存」または「保存」で保存します。
動作確認
GR-ADZUKIボード上にある2つのスライドスイッチの状態が、SketchおよびUSBになっていることを確認し、USBケーブルでパソコンとGR-ADZUKIをつなぎます。
IDE for GRの右矢印のボタン
を押すとコンパイル、書き込み、リセットが実行されます。
問題なければ、今度はGR-ADZUKIのスイッチをUSB→BATTに切り替え、バッテリーをつなぎます。下の動画のように動作すれば成功です。
まとめ
がじぇるねのGR-ADZUKIを使ってステッピングモーターを動かす方法を紹介しました。
サーボモーターよりトルクがありますので、回転力が必要な工作をする際に役立つと思います。
GR-ADZUKIのサーボモーター用電源出力端子は、電流能力が高いので3.7Vのリチウムイオンバッテリー1つから、GR-ADZUKIに搭載された昇圧回路により出力される5Vをドライバボードに供給することで、電源を分離することなくシンプルな回路構成で実現できました。
参考ページ
- ステッピングモーター(28BYJ-48)の動かし方 (ULN2003A使用)(https://stupiddog.jp/note/archives/1235)