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