Arduinoでステッピングモーターを制御!Stepperライブラリ・専用ブロックがあれば誰でも簡単に制御できます【ビジュアルプログラミングLESSON24】
こんにちは、せでぃあ(@cediablog)です。
今回のArduinoプログラミングLESSON24では、「ステッピングモーターの回転制御」を紹介します。
本記事ではELEGOOスーパースターターキットに含まれるパーツを使って、ステッピングモーターを誰でも簡単に制御できる方法を紹介します。
本記事は、プログラミングと電子パーツの知識が習得できるプログラミング初心者も安心して取り組めるテーマとなっています。
文字コードプログラミングが苦手な方も安心してプログラミングができるように、文字列を使わなビジュアルプログラミング方法も紹介しています。
ビジュアルプログラミングの作り方は、Youtube動画でも解説していますので、ぜひチャンネル登録していただけますと幸いです。
本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらのプログラミング方法も紹介しています。
無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。
- ステッピングモーターの仕組みと動かし方
- Arduino IDEでのプログラミング方法
- mBlockを使ったビジュアルプログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
ステッピングモーターの仕組みと動かし方
今回Arduinoキットに含まれる、ステッピングモーターとモータードライバーを使用します。
今回使用する機器と型式
- ステッピングモーター:28BYJ-48
- モータードライバー:ULN2003Aドライバボード
これらの機器の仕組みや、ステッピングモーター回転制御回路の作り方について解説します。
ステッピングモーターとドライバーだけの購入も可能です。
ステッピングモーターの解説
ステッピングモーターとは、指定したステップ数だけ回転させられるモーターです。
モーター・制御励磁方式ごとに1STEPあたりの角度が決まっていて、その角度の倍数で回転角度を制御することができます。
ステッピングモーターは以下のような特徴があります。
- 高精度位置(回転角度)決めが可能。
- 高トルクが得られる。
- 回転速度を一定に保つことが可能。
- 静止状態でもトルクを維持できる。
ステッピングモーターは内部のコイルに電流を流すことで回転させる仕組みで、流巻き線の電流を1方向に流す「ユニポーラ型」と、巻き線の電流を双方向に流す「バイポーラ型」が存在します。
今回使用するステッピングモーター(28BYJ-48)は、ユニポーラ型となります。
ステッピングモーター「28BYJ-48」のSPEC
- 相数:4相
- 定格電圧:5V
- ギア比:64:1
- ステップ角:5.265°÷64=0.087890625°(1-2相励磁方式)
※2相励磁方式の場合のステップ角は0.17578125° - 1回転のSTEP数:4096STEP(1-2相励磁方式)
※2相励磁方式の場合は:2048STEP - 周波数:100Hz
- 結線:5線式
これまでDCモーターやサーボモーターも扱ってきましたが、それぞれの特徴をざっくり下記します。
各モーターの特性比較
- DCモーター:回転速度や回転方向の制御が可能。
- サーボモーター:目標角度(基本0~180°)への回転角度制御が可能。
- ステッピングモーター:回転角度量制御が可能。
サーボモーターはどの角度位置まで回転させるかという「絶対角度制御」なのに対し、ステッピングモーターは現状からどれくらいの角度回転させるかという「相対角度制御」になります。
ステッピングモーターの回転方法
ステッピングモーターは、内部にある4つのコイルに対して順番に電流を与えることで回転させることができます。
1~4番の配線が各コイルへの配線で、5番が共通線(+5V)となります。
励磁方式(電流の与え方)は3種類あります。
励磁方式の種類と特徴
- 1相励磁方式:1相ずつ電流を与える方式で制御が簡単だがトルクが弱い。
- 2相励磁方式:同時に2相電流を与える方式で高トルク。
- 1-2相励磁方式:1相励磁と2相励磁を交互に繰り返す方式で、細かい角度制御が可能。
この後に示すSTEP順にコイルを励磁することでモーター回転させるのですが、回転方向についてはSTEP1→2→3→4の順にコイルを励磁すると反時計回り(左回り)、STEP4→3→2→1の順に励磁すると時計回り(右回り)させることができます。
1相励磁方式
1つのコイルに電流を流し励磁させ、励磁させるコイルを順番に切り替えることで軸を回転させます。
2相励磁方式
コイル2つずつ電流を流して励磁させる方式です。
2つ同時に励磁させるのでトルクが高くなります。
本記事で扱うプログラムは2相励磁方式での制御になります。
1-2相励磁方式
1相励磁と2相励磁を交互に繰り返す方式で、STEP数が8STEPと倍のSTEP数で制御します。
その分1STEPあたりの動作角度が半分になり、制御できる角度が細かくなります。
モータードライバー(UNL2003A)の解説
ステッピングモーターはコイルを励磁させて回転駆動させるため、大きな電流が必要となります。
Arduinoの出力能力では不足するため、モータードライバーを使って必要な電流値を作り出してステッピングモーターを制御します。
モータードライバ「ULN2003A」のSPEC
- 定格電流:500mA
モータードライバーには、ステッピングモーターから出ているコネクタを差し込む口があるためコネクタ挿入することでステッピングモーターと接続することができます。
ステッピングモーター制御動作の解説
今回紹介する「ステッピングモーターの回転制御動作」について説明します。
動作の説明
- ステッピングモーターが反時計回りに90°回転する。
- ステッピングモーターが時計回りに90°回転する。
- ステッピングモーターが反時計回りに180°回転する。
- ステッピングモーターが時計回りに180°回転する。
- ステッピングモーターの仕組みと動作原理について
- ステッピングモーターの回転制御動作
- mBlockを使ったプログラミング方法
まずは動画を見て、今回のLESSONで実行させたい動作内容を確認してください。
また、mBlockを使ったブロックプログラミングや動作確認方法についても解説しています。
ビジュアルプログラムの作り方も動画で解説しています。
ステッピングモーター制御動作に必要な準備作業
ステッピングモーターの回転制御を行うまでに必要な作業を解説します。
今回は文字列を使ったプログラム形式と、文字列を使わないビジュアルプログラミング形式の両方について説明します。
あなたの作りたいプロブラム形式に対応した手順に応じて、対応してください。
プログラム形式に応じた開発環境
- 文字列による命令語形式 ⇒ ArduinoIDE
- スクラッチベースのビジュアル形式 ⇒ mBlock
文字コードプログラミングが苦手な方は、ビジュアルプログラミング形式をチョイスしてください。
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です。
パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。
以下の記事にて詳しく説明しています。
ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です。
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
私が作成したプログラムをコピペして使ってください。
Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です。
スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します
プログラム内容については、後述するプログラミング例を参考にしてください。
ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です。
プログラムが完成したら動作確認を行います。
- ステッピングモーターが反時計回りに90°回転するか?
- ステッピングモーターが時計回りに90°回転するか?
- ステッピングモーターが反時計回りに180°回転するか?
- ステッピングモーターが時計回りに180°回転するか?
ステッピングモーターの回転制御回路で使うもの
今回のステッピングモーター回転制御に使用する機器を紹介します。
かなりシンプルな配線になるので、配線作業は難しくないと思います。
- パソコン
- Arduino本体【キット】
- USBケーブル【キット】
- ブレッドボード【キット】
- モータードライバ【キット】
- ステッピングモーター【キット】
- 電源モジュール【キット】
- スナップケーブル【キット】
- 9V電池【キット】
- ジャンパー線(オスーメス)×6本【キット】
- ジャンパー線(オスーオス)×1本【キット】
今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
【おすすめ】コスパ最強のArduinoキットの中間グレードです!
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能は同じです。
ブレッドボードだけの購入も可能です。
ステッピングモーター(28BYJ-48)【キット】
今回使用する「28BYJ-48」は、2相ユニポーラ型のステッピングモーターとなります。
ステッピングモーターは、電気信号を与えることで一定の角度ずつ動いて回転するモーターです。
ステッピングモータードライバー(ULN2003ドライバボード)【キット】
ステッピングモーターを動かすために必要なドライバボードです。
ステッピングモーターの駆動に必要な電力を作り出して、制御することができます。
電源モジュール【キット】
ArduinoUnoのデジタル入出力ピンから供給できる電流は40mAとなっており、それほど大きくはありません。
モーター駆動時にArduino基板回路を破損しないようにするため、今回のような外部電源モジュール(最大出力700mA)を接続して駆動させる必要があります。
モータードライバの最大定格電流は500mAであり、使用する外部電源モジュールは十分なSPECを有しています。
電源モジュールについては、こちらの記事にて詳しく説明しています。
DC9V電池、スナップケーブル【キット】
9V電池とDCジャックがついたスナップケーブルです。
電源モジュールに接続します。
今回キット付属の電池を使いきってしまったので、Amazonで購入した9V電池を使用しています。
ジャンパー線(オスーメス)【キット】
オス-メスジャンパー線を6本使用します。
ステッピングモータードライバーとArduinoのデジタル入出力ピンやブレッドボードと接続させるために使用します。
ジャンパー線(オスーオス)【キット】
ジャンパー線を1本使用します。
Arduino本体とブレッドボードの接続に使います。
スーパースターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。
ステッピングモーター制御回路の配線方法
ここからは、各機器間の配線方法について解説します。
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
ステッピングモーターからは5本のリード線が出ており、コネクタをモータードライバーに差し込んでください。
機器が故障するおそれがあるので、接続するプラスマイナス極性には十分注意して配線してください。
モータードライバーの電源ピンにはプラスマイナスの極性がありますので、間違えないように注意してください。
Arduino入出力ピンとモータードライバーの接続先
- 8番ピン:IN1に接続
- 9番ピン:IN2に接続
- 10番ピン:IN3に接続
- 11番ピン:IN4に接続
機器故障させないためにも、「通電OFF」状態にて配線を行ってください。
プログラムの作り方とプログラム解説
本記事では、以下に示す「Arduino IDEプログラミング」と「mBlockプログラミング」の2通りのプログラミング方法について解説しています。
いずれか1つのプログラミング方法を用いることで、本LESSONの動作を行うことが可能です。
ArduinoIDE:文字列による命令語形式
mBlock:スクラッチベースのビジュアル形式
文字列を使わないmBlockの方が、直感的で分かりやすくプログラミング初心者の方におすすめのプログラミング方法になります。
mBlockを使ってプログラミングをする方は、mBlockの説明まで読み飛ばしてください。
両方のプログラミング方法にチャレンジするのも楽しいですよ!
Stepperライブラリのインストール
今回紹介するプログラムでは、簡単にステッピングモーターを制御できる「Stepperライブラリ」を使用します。
このStepperライブラリは個別にインストールする必要があります。
Stepperライブラリを使用すると、2相励磁(2048ステップで1回転)方式の制御プログラムが簡単に作れます。
mBlockでプログラミングをする場合は、本ライブラリインストール作業は不要です。
Arduino IDEを開き、スケッチ⇒ライブラリをインクルード⇒ライブラリを管理をクリックする。
検索窓に「stepper」と入力して、Stepperライブラリを検索します。
ライブラリが検索できたら、インストールボタンをクリックしてライブラリをインストールします。
ライブラリのインストールが完了した旨の表示がされたら、Stepperライブラリのインストールは完了です。
Arduino IDEプログラミング
Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。
プログラミングするにあたり、ある程度の命令語を知っておく必要があります。
Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。
日本語版のArduino公式リファレンスが記載されていて、関数を調べるときに重宝するのでオススメな一冊です!
私もこの本を所有してプログラム作成時に活用しています!
プログラミング方法
Arduino IDEを使って、文字列プログラミングを行います。
Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。
Arduino IDEプログラム
/* 作品名:LESSON24 */
/* 作成者:せでぃあ https://cediablog.com */
/* ステッピングモーター制御 */
// ライブラリのインクルード
#include <Stepper.h> //ステッピングモーター制御ライブラリ
// ピン番号の定義
#define PIN1 8 // ドライバ「IN1」接続ピン
#define PIN2 9 // ドライバ「IN2」接続ピン
#define PIN3 10 // ドライバ「IN3」接続ピン
#define PIN4 11 // ドライバ「IN4」接続ピン
// ステッピングモーター軸が1回転するのに必要なステップ数
#define STEP 2048
//Stepper型のオブジェクトを作成
Stepper stepper1(STEP, PIN1, PIN3, PIN2, PIN4);
void setup() {
//プログラム起動時1回だけ処理される回路
//入出力ピンの割り当て
pinMode(PIN1, OUTPUT); //8番ソケットは出力として使用
pinMode(PIN2, OUTPUT); //9番ソケットは出力として使用
pinMode(PIN3, OUTPUT); //10番ソケットは出力として使用
pinMode(PIN4, OUTPUT); //11番ソケットは出力として使用
//ステッピングモーターの回転速度を設定(rpm)
stepper1.setSpeed(10);
}
void loop() {
//プログラム起動後ループ処理される回路
//STEP1:反時計方向に180°回転
stepper1.step(512);
delay(1000); //1.0秒ウェイト
//STEP2:時計方向に180°回転
stepper1.step(-512);
delay(1000); //1.0秒ウェイト
//STEP3:反時計方向に180°回転
stepper1.step(1024);
delay(1000); //1.0秒ウェイト
//STEP4:時計方向に180°回転
stepper1.step(-1024);
delay(1000); //1.0秒ウェイト
}
上記が2相励磁方式でのステッピングモーター制御プログラムになります。
Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。
各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。
Stepperライブラリを用いたステッピングモーター制御は2相励磁方式になるため、1回転あたり2048STEPになることに注意してください。
命令語の解説
今回のプログラムで使用した命令文について、解説します。
#define 定数名 値
プログラム中の定数に対して名前を付けることができます。
#defineで定義された定数は、コンパイル時に値に置き換えられます。
pinMode(入出力番号,INPUTまたはOUTPUT)
指定したデジタル入出力ソケット番号の機能を指示します。
入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。
delay(時間)
()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。
Stepperライブラリの説明
ステッピングモーターを制御するために、「Stepperライブラリ」を使用します。
このライブラリを使うことで、モータードライバーへのSTEP出力切り替えを自動で行ってくれます。
Stepperライブラリの読み出し
プログラム冒頭の宣言部にてStepperライブラリを読み出します。
#include <Stepper.h>
Stepperオブジェクトの作成
ステッピングモーターを制御するためのオブジェクトを作成します。
モータードライバー「IN1~4」と接続するArduinoの入力ピン番号を指定します。
Stepper オブジェクト名(STEP , PIN1 , PIN3 , PIN2 , PIN4)
PINとドライバーのIN対照表
PIN1(8番ピン):IN1
PIN2(9番ピン):IN2
PIN3(10番ピン):IN3
PIN4(11番ピン):IN4
PIN1、PIN3、PIN2、PIN4と記述順が特殊な点に注意です。
ステッピングモーターの回転速度を指定する
ステッピングモーターの回転速度を設定します。
Stepperオブジェクト名.setSpeed(速度);
ステッピングモーターを回転させる
ステッピングモーターを指定したSTEP数だけ回転させます。
Stepperオブジェクト名.step(STEP数);
プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!
mBlockプログラミング
ここからは、ビジュアルプログラミングツール「mBlock」を使ったプログラムの作り方を解説します。
- デバイスにArduino Uno R3を追加する
- 接続モードを「アップロードモードON」にする
- mBlockプログラムを作成する
- プログラムをArduino本体に転送する
これらの基本操作方法については、こちらの記事を参照してください。
ビジュアルプログラミングは直感的にプログラミングができるところが嬉しいですよね!
Stepperブロックの追加方法
拡張ブロックである「Stepperブロック」を追加することで、簡単にステッピングモーターを制御するプログラムが作れます。
mBlockを開いて、拡張ボタンをクリックします。
検索窓に「stepper」と入力して、拡張ブロックを検索します。
上図に示すstepperを選択して「追加」をクリックします。
Stepperブロックが追加され、プログラムに使用可能となります。
mBlockを使ったプログラム内容
今回は「アップロードモード オン」でのプログラム作成例を紹介しています。
プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。
以下のプログラムが動作プログラムと解説になります。
プログラムのボリュームが少ないので、作りやすいと思います。
mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。
Stepperブロックの解説
拡張ブロックとして追加したStepperブロックの機能について解説します。
Stepperブロックを使うことで、モータードライバーへのSTEP出力切り替えを自動で行ってくれます。
オブジェクト作成ブロック
オブジェクト作成ブロックで、ステッピングモーター1回転あたりのSTEP数や、回転速度、ドライバーへの接続ピン番号などを指定します。
- オブジェクト番号:接続モーター別で番号を付けます。デフォルト値:1のままでOKです。
- モーター軸1回転あたりのステップ数:2相励磁方式の場合は2048STEPです。
- モーターの回転速度:1分当たりの回転数=rpmで指定します。
- ドライバー接続ピン:「IN1」「IN3」「IN2」「IN4」の順にArduino入出力ピン番号を指定します。
※指定順が特殊なので注意してください。
回転指示ブロック
ステッピングモーターを指定したSTEP数分だけ回転させます。
動作確認方法
- ステッピングモーターが反時計回りに90°回転するか?
- ステッピングモーターが時計回りに90°回転するか?
- ステッピングモーターが反時計回りに180°回転するか?
- ステッピングモーターが時計回りに180°回転するか?
プログラム転送が完了したら①から順番に動作が始まります。
反時計回り=左周りに90°回転するところから動作を目視で確認してください。
④までの動作を完了すると、再び①から順に動作が継続します。
うまく動作ができない時のチェックポイント
- 電源モジュールの電源スイッチがONになっているか?
(電源モジュールのランプは点灯しているか?) - モータードライバーに接続した電源線の+-配線は合っているか?
- プログラム記述に間違いがないか?
(特に接続ピン番号の記載順)
動作がうまくいかないときは、上記チェックポイントを参考に確認してみてください。
ステッピングモーターは専用ライブラリ・ブロックが有能!(まとめ)
- ステッピングモーターは、指定したSTEP数回転させることができる。
- Stepperライブラリやブロックを使うことで簡単にステッピングモーターを制御できる。
- 上記ライブラリやブロックを使うと2相励磁方式での制御となる。
ステッピングモーターについて、なんとなく理解していただけましたでしょうか?
ステッピングモーターは今回使用したユニポーラ型以外にバイポーラ型というタイプもあり、突き詰めれば奥が深いモーターでもあります。
まずは細かいことを気にせず、Arduinoを使ったステッピングモーター回転制御を楽しんでください!
ステッピングモーターは、「現在位置からの相対移動角度量=STEP数回転させられるモーター」と覚えていただけたらと思います!
最後まで読んでいただき、ありがとうございました。
DCモーターを使ったプログラム例を紹介しています。
サーボモーターを使ったプログラム例を紹介しています。
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
コメント