Arduino 入門
Lesson 29
【ステッピングモーター編 その2】
「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。
少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。
本記事はLesson 29 【ステッピングモーター編 その2】です。
Lesson 28では、ライブラリを使いステッピングモーターを制御しました。
Lesson 29では、ライブラリを使用せずにステッピングモーターを制御します。
ライブラリは電子部品の動作をあまり意識することなく簡単に制御することができます。
しかし、欠点があって「電子部品をスケッチ(コード)でどのように制御しているのかわからない」ということがあります。
わからなくても困らない場合もありますが本Lessonは入門編。
できるだけ電子部品の制御も理解したいと考えています。
そのため、Lesson 29ではライブラリを使用しません。
1つ1つの動作をスケッチに描くことで、ステッピングモーターの制御をより深く理解していきます。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
ステッピングモーターの原理、使用する電子部品の説明はLesson 28にて解説しています。
まずは、Lesson 28を学習してからLesson 29に取り組むことをお勧めします。
ではさっそく本題に入ります。
ステッピングモーターの動作は以下の2つで制御されます。
- 回転角度:パルスの数で制御
- 回転速度:パルスの速度(周波数)で制御
この制御信号をステッピングモーターに与えれば制御できるということです。
パルスの数と、パルスの周波数というのを頭の片隅に置いておいてください!
これを踏まえたうえで、ステッピングモーターの制御をより深く理解していきましょう。
Lesson 29 目標
本Lessonの目標は以下です。
2.ライブラリを使わない制御方法を理解する
今回も遊ぶことを最大の目標に楽しみましょう!
準備
ではLessonの準備に取り掛かりましょう。
電子部品の種類はLesson 28と同じです。
詳細はLesson 28を確認してください。
では、頑張って組み上げていきましょう。
必要なもの
下記に示した電子部品はLesson 28と同じとなります。
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - ステッピングモーターとドライバモジュール 安価品
- 電源モジュール
- 電源モジュールに供給する電源(9Vの電池、ACアダプタなど)
ACアダプタ 9V/1A
Amazonでは、ステッピングモーターとドライバモジュールがセットで売られています。
数多くほしいかたは、4個セットなどもあります。
※こちらAmazon発送です。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
Lesson 28から新たに使う電子部品は特にありません。
詳細はLesson 28を参照ください。
- 28BYJ-48 ステッピングモーター
- ULN2003ドライバモジュール
ステッピングモーター、ULN2003ドライバーモジュールの手持ちがない方はAmazonなどで下記が購入できます。
以下の部品に関しては、Lesson 26にて解説していますのでご確認ください。
ちなみに、ELEGOO UNO キットには合わせて梱包されています。
ステッピングモーター 制御方法
下記はLesson 28にて解説していますが、ライブラリを使用せずに制御するためには理解する必要があるため、再度解説しておきます。
ここからはLesson 28の復習となります。
すでに、学習した方は飛ばしてください!
●励磁方式
「28BYJ-48」は下図に示すようにフェーズ数が4相となっています。
この相への電流のかけ方は3種類あります。
- 1相励磁(4 step が1つの動作のかたまり)
パルス(電流)を順番に与えていく方式
制御が簡単だが、安定性が良くない。
step → | 1 | 2 | 3 | 4 |
---|---|---|---|---|
IN1(青) | ON | – | – | – |
IN2(桃) | – | ON | – | – |
IN3(黄) | – | – | ON | – |
IN4(橙) | – | – | – | ON |
- 2相励磁(4 step が1つの動作のかたまり)
次の相と1パルスずつずらして同時に励磁する方式
1相励磁に比べて安定しているが消費電力も2倍
step → | 1 | 2 | 3 | 4 |
---|---|---|---|---|
IN1(青) | ON | ON | – | – |
IN2(桃) | – | ON | ON | – |
IN3(黄) | – | – | ON | ON |
IN4(橙) | ON | – | – | ON |
- 1-2相励磁(8 step が1つの動作のかたまり)
1相励磁と2相励磁を交互に繰り返す方式
1相励磁、2相励磁に対して回転角度が半分
step → | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
IN1(青) | ON | ON | ON | – | – | – | – | – |
IN2(桃) | – | – | ON | ON | ON | – | – | – |
IN3(黄) | – | – | – | – | ON | ON | ON | – |
IN4(橙) | ON | – | – | – | – | – | ON | ON |
以上、簡単に励磁方式の特徴を羅列。
それぞれ、必要に応じて選択します。
- 1相励磁方式:
- トルクが弱い
- 回路が簡単(低コスト)
- 2相励磁方式
- トルクが強い
- 回路が多少複雑
- 1-2相励磁方式
- 細かいモーター制御が可能
- 回路が複雑(高コスト)
●回転角度について
ステッピングモーターの仕様から以下のことが言えます。
●1-2相励磁の場合
8 step × 8 = 64 stepで中心軸が1回転。
そのため、実際の車軸(外に出ている軸)を1回転させるのに必要なstep数は下記となります。
64 step × 64(ギア比) = 4096 step
となり、4096 stepで1回転することになります。
●2相励磁方式の場合(1相も同じ)
4 step × 8 = 32 stepで中心軸が1回転。
そのため、実際の車軸(外に出ている軸)を1回転させるのに必要なstep数は下記となります。
32 step × 64(ギア比) = 2048 step
となり、2048 stepで1回転することになります。
ドライバーモジュール 接続例
Lesson 28復習を兼ねて、再度ULN2003Aとステッピングモーターの接続例を示します。
こちらも、Lesson 28の復習!
実践 回路作成とコード作成
回路はLesson 28と同じものを使用します。
Lesson 28を学習されたかたは、回路をそのまま使用することができます。
Lesson 28との違いはスケッチの内容のみです。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
ドライバモジュールのコネクトピンにステッピングモーターを接続。
Arduinoはデジタル入出力ピンの8,9,10,11番ピンを使用しドライバーモジュールに接続。
8番ピン ⇒ IN4(ドライバモジュール)
9番ピン ⇒ IN3(ドライバモジュール)
10番ピン ⇒ IN2(ドライバモジュール)
11番ピン ⇒ IN1(ドライバモジュール)
回路図がこちら。
Lesson 28とまったく同じです。
こちらがブレッドボード図。
こちらもLesson 28と同じです。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
こちらも、Lesson 28と同じです。
部品はステッピングモーター、ドライバモジュール(ULN2003A)、電源モジュールとなります。
部品点数が少ないため、接続は簡単です。
使用するポートは、デジタルピンは「8,9,10,11」です。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
スケッチ(コード)を書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
本Lessonではライブラリを使用せずにステッピングモーターを制御します。
サンプルコードは3つ。
3種類ある励磁方式のスケッチ(コード)を考えてみました。
- 1相励磁方式
- 2相励磁方式
- 1-2相励磁方式
コマンド説明
特に新しくででくるコマンドはありません。
今までの学習範囲内でわかるコマンドのみで簡単なスケッチ(コード)としました。
サンプルコードについて
サンプルスケッチ(コード)は各励磁方式の真理値表の動作をそのまま表現しました。
理解しやすいように単純なスケッチです。
LEDの点灯で各励磁方式の真理値表に沿って制御されているのがわかります。
LEDの点灯を確認したい場合は下記の設定値を大きくしてください。
また、モーターの回転を速くしたい場合は下記設定値を小さくしてください。
最初に解説しましたが、ステッピングモーターは下記の制御が必要です。
- 回転角度:パルスの数で制御
- 回転速度:パルスの速度(周波数)で制御
回転速度はスケッチ内の「wait_time」で制御できるようになっています。
回転角度はstepをループさせているだけのため永遠に回る状態です。
回転角度は「パルスの数 = stepの数」で制御できます。
制御したい場合は、void loop()内でfor文などを使って、loopの回数を制限してみてください。
for文の後にdelay()関数を入れて止めておくなどすればわかりやすいと考えます。
回転角度を制御を確認できるはずです。
ちなみにloopの回数を何回にすれば、1回転しますか?
Lesson 28にて1回転に必要なStep数を解説しています。
コード内では、4stepまたは8stepを1つの動作として記述しています。
そのため、
= 1回転に必要なstep数/4stepまたは8step
となります。
そのため、1回転するためのloop回数/4の数だけloopさせてあげれば45度回転するはずです。
ぜひトライしてみてください。
サンプルスケッチ1
1相励磁方式にて制御しているスケッチとなります。
//Lesson 29 ステッピングモーター編 その2 //1相励磁方式 サンプルスケッチ(1) //https://omoroya.com/ // 電子部品 // 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター const int PIN_B = 11; const int PIN_P = 10; const int PIN_Y = 9; const int PIN_O = 8; void setup() { pinMode(PIN_B, OUTPUT); //11番ピンを出力モードにする pinMode(PIN_P, OUTPUT); //10番ピンを出力モードにする pinMode(PIN_Y, OUTPUT); // 9番ピンを出力モードにする pinMode(PIN_O, OUTPUT); // 8番ピンを出力モードにする } void loop() { //wait時間[ms], 回転速度を決めるパルスの周期 int wait_time = 100; //真理値表に従って、B->P->Y->Oの順番で励磁 //1相励磁方式 4step/1動作 //step1 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step2 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step3 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 0); delay(wait_time); //step4 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 1); delay(wait_time); }
サンプルスケッチ2
2相励磁方式にて制御しているスケッチとなります。
//Lesson 29 ステッピングモーター編 その2 //2相励磁方式 サンプルスケッチ(2) //https://omoroya.com/ // 電子部品 // 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター const int PIN_B = 11; const int PIN_P = 10; const int PIN_Y = 9; const int PIN_O = 8; void setup() { pinMode(PIN_B, OUTPUT); //11番ピンを出力モードにする pinMode(PIN_P, OUTPUT); //10番ピンを出力モードにする pinMode(PIN_Y, OUTPUT); // 9番ピンを出力モードにする pinMode(PIN_O, OUTPUT); // 8番ピンを出力モードにする } void loop() { //wait時間[ms], 回転速度を決めるパルスの周期 int wait_time = 100; //真理値表に従って、B->P->Y->Oの順番で励磁 //2相励磁方式 4step/1動作 //step1 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 1); delay(wait_time); //step2 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step3 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 0); delay(wait_time); //step4 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 1); delay(wait_time); }
サンプルスケッチ3
1-2相励磁方式にて制御しているスケッチとなります。
//Lesson 29 ステッピングモーター編 その2 //1-2相励磁方式 サンプルスケッチ(3) //https://omoroya.com/ // 電子部品 // 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター const int PIN_B = 11; const int PIN_P = 10; const int PIN_Y = 9; const int PIN_O = 8; void setup() { pinMode(PIN_B, OUTPUT); //11番ピンを出力モードにする pinMode(PIN_P, OUTPUT); //10番ピンを出力モードにする pinMode(PIN_Y, OUTPUT); //9番ピンを出力モードにする pinMode(PIN_O, OUTPUT); //8番ピンを出力モードにする } void loop() { //wait時間[ms], 回転速度を決めるパルスの周期 int wait_time = 100; //真理値表に従って、B->P->Y->Oの順番で励磁 //1-2相励磁方式 8step/1動作 //step1 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 1); delay(wait_time); //step2 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step3 digitalWrite(PIN_B, 1); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step4 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 0); delay(wait_time); //step5 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 1); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 0); delay(wait_time); //step6 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 0); delay(wait_time); //step7 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 1); digitalWrite(PIN_O, 1); delay(wait_time); //step8 digitalWrite(PIN_B, 0); digitalWrite(PIN_P, 0); digitalWrite(PIN_Y, 0); digitalWrite(PIN_O, 1); delay(wait_time); }
動作確認
では、さっそく動作を確認していきます。
LEDの点灯を確認したいので、モーターの回転速度は遅いです。
※gifで作成しているため、画像サイズは小さくしてあります。
gifで作成しているため、わかりずらい・・・。
すみません・・・。
Youtubeにアップできるようになれば良いのですが、なかなか準備ができません。
●サンプルスケッチ1 1相励磁方式
●サンプルスケッチ 2相励磁方式
●サンプルスケッチ3 1-2相励磁方式
gifで作成しているため違いがわかりずらいですが、それぞれ各励磁方式で制御されていることがLEDの点灯から確認することができます。
int wait_time = 100;
を調整して確かめてみてください。
まとめ
今回は以下の内容について理解してもらいました。
2.ライブラリを使わない制御方法を理解する
3.楽しんで遊ぶ。
いかがだったでしょうか。
ライブラリを使わずに制御すると、実際の制御方法がわかります。
そして、思ったよりも単純な制御だなと感じるわけです。
複雑な動作をさせようと考え出すと、ライブラリを使った方が早いですが・・・。
ステッピングモーター、制御方法を理解して使い方をマスターできれば、色々なもの作りに応用ができそうです。
色々と作ってみたくなります。
Lesson 29 【ステッピングモーター編 その2】 はここまで。
ステッピングモーター
もう少し遊んでみようかな・・・
いや、違う電子部品も学習したい!
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 30は【ステッピングモーター編 その3】 です。
TVのリモコンと赤外線受信センサモジュールを用いてステッピングモーターを制御します。
リモコンを使って遠隔操作でステッピングモーターを動かすということです。
しかも、身近にあるTVリモコンを使います!

最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント