Arduinoと戯れてみる!

Arduino 入門 Lesson 29 【ステッピングモーター編 その2】

arduino-lesson29-00Arduino入門編
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 29
【ステッピングモーター編 その2】

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

 

本記事はLesson 29 【ステッピングモーター編 その2】です。

Lesson 28では、ライブラリを使いステッピングモーターを制御しました。

 

Lesson 29では、ライブラリを使用せずにステッピングモーターを制御します。

ライブラリは電子部品の動作をあまり意識することなく簡単に制御することができます。

しかし、欠点があって「電子部品をスケッチ(コード)でどのように制御しているのかわからない」ということがあります。

わからなくても困らない場合もありますが本Lessonは入門編。

できるだけ電子部品の制御も理解したいと考えています。

 

そのため、Lesson 29ではライブラリを使用しません。

1つ1つの動作をスケッチに描くことで、ステッピングモーターの制御をより深く理解していきます。

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

正規品の本体単品がほしい方はこちらとなります。

 

スポンサーリンク

はじめに

ステッピングモーターの原理、使用する電子部品の説明はLesson 28にて解説しています。

まずは、Lesson 28を学習してからLesson 29に取り組むことをお勧めします。

 

ではさっそく本題に入ります。

ステッピングモーターの動作は以下の2つで制御されます。

  • 回転角度:パルスの数で制御
  • 回転速度:パルスの速度(周波数)で制御

 

この制御信号をステッピングモーターに与えれば制御できるということです。

パルスの数と、パルスの周波数というのを頭の片隅に置いておいてください!

これを踏まえたうえで、ステッピングモーターの制御をより深く理解していきましょう。

 

Lesson 28を学習されたかたは、途中は復習となりますので飛ばしてください。
サンプルスケッチ(コード)のところから読み始めるのが良いです。

 

Lesson 29 目標

本Lessonの目標は以下です。

1.より深くステッピングモーターの使い方を理解する。
2.ライブラリを使わない制御方法を理解する

今回も遊ぶことを最大の目標に楽しみましょう!

 

準備

ではLessonの準備に取り掛かりましょう。

電子部品の種類はLesson 28と同じです。

詳細はLesson 28を確認してください。

 

では、頑張って組み上げていきましょう。

 

必要なもの

下記に示した電子部品はLesson 28と同じとなります。

Amazonでは、ステッピングモーターとドライバモジュールがセットで売られています。

数多くほしいかたは、5個セットなどもあります。
※こちらAmazon発送です。

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

短めが使いやすい場合も。

 

使用部品説明

Lesson 28から新たに使う電子部品は特にありません。

詳細はLesson 28を参照ください。

  • 28BYJ-48 ステッピングモーター
  • ULN2003ドライバモジュール

ステッピングモーター、ULN2003ドライバーモジュールの手持ちがない方はAmazonなどで下記が購入できます。

 

以下の部品に関しては、Lesson 26にて解説していますのでご確認ください。

 

ちなみに、ELEGOO UNO キットには合わせて梱包されています。

 

ステッピングモーター 制御方法

下記はLesson 28にて解説していますが、ライブラリを使用せずに制御するためには理解する必要があるため、再度解説しておきます。

ここからはLesson 28の復習となります。

すでに、学習した方は飛ばしてください!

●励磁方式

「28BYJ-48」は下図に示すようにフェーズ数が4相となっています。

1.青 2.桃 3.黄 4.橙

arduino-lesson28-03

 

この相への電流のかけ方は3種類あります。

  • 1相励磁(4 step が1つの動作のかたまり)
    パルス(電流)を順番に与えていく方式
    制御が簡単だが、安定性が良くない。
step →1234
IN1(青)ON
IN2(桃)ON
IN3(黄)ON
IN4(橙)ON

 

  • 2相励磁(4 step が1つの動作のかたまり)
    次の相と1パルスずつずらして同時に励磁する方式
    1相励磁に比べて安定しているが消費電力も2倍
step →1234
IN1(青)ONON
IN2(桃)ONON
IN3(黄)ONON
IN4(橙)ONON

 

  • 1-2相励磁(8 step が1つの動作のかたまり)
    1相励磁と2相励磁を交互に繰り返す方式
    1相励磁、2相励磁に対して回転角度が半分
step →12345678
IN1(青)ONONON
IN2(桃)ONONON
IN3(黄)ONONON
IN4(橙)ONONON

 

以上、簡単に励磁方式の特徴を羅列。

それぞれ、必要に応じて選択します。

  •  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の復習!

arduino-lesson28-05

 

実践 回路作成とコード作成

回路はLesson 28と同じものを使用します。

Lesson 28を学習されたかたは、回路をそのまま使用することができます。

Lesson 28との違いはスケッチの内容のみです。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

ドライバモジュールのコネクトピンにステッピングモーターを接続。

Arduinoはデジタル入出力ピンの8,9,10,11番ピンを使用しドライバーモジュールに接続。

8番ピン ⇒ IN4(ドライバモジュール)
9番ピン ⇒ IN3(ドライバモジュール)
10番ピン ⇒ IN2(ドライバモジュール)
11番ピン ⇒ IN1(ドライバモジュール)

Arduinoを損傷させないために
ドライバモジュールの電源は電源モジュールから供給。

 

回路図がこちら。

Lesson 28とまったく同じです。

arduino-lesson28-07

 

こちらがブレッドボード図。

こちらもLesson 28と同じです。

電源モジュールにはDCプラグから9Vの電池(ACアダプタでも可)でつなぎます。
ブレッドボードへの電源供給は、電源モジュールの左上、左下にある+、-端子をブレッドボードの上下のVCCとGNDに挿入することで供給されます。
電源モジュールの出力は5Vとする。

 

arduino-lesson28-08

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

こちらも、Lesson 28と同じです。

部品はステッピングモータードライバモジュール(ULN2003A)電源モジュールとなります。

部品点数が少ないため、接続は簡単です。

 

使用するポートは、デジタルピンは「8,9,10,11」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

 

arduino-lesson28-09

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

スケッチ(コード)を書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

本Lessonではライブラリを使用せずにステッピングモーターを制御します。

サンプルコードは3つ。

3種類ある励磁方式のスケッチ(コード)を考えてみました。

  • 1相励磁方式
  • 2相励磁方式
  • 1-2相励磁方式

 

コマンド説明

特に新しくででくるコマンドはありません。

今までの学習範囲内でわかるコマンドのみで簡単なスケッチ(コード)としました。

 

サンプルコードについて

サンプルスケッチ(コード)は各励磁方式の真理値表の動作をそのまま表現しました。

理解しやすいように単純なスケッチです。

 

LEDの点灯で各励磁方式の真理値表に沿って制御されているのがわかります。

LEDの点灯を確認したい場合は下記の設定値を大きくしてください。

また、モーターの回転を速くしたい場合は下記設定値を小さくしてください。

int wait_time = 100;

 

※補足
ステッピングモーターは使用できる周波数範囲を外れると「脱調」といってモーターの回転がスピードについていかずうまく回転しない現象が起きます。
動かない場合は、wait_timeの設定値を変更してみてください。

 

最初に解説しましたが、ステッピングモーターは下記の制御が必要です。

  • 回転角度:パルスの数で制御
  • 回転速度:パルスの速度(周波数)で制御

回転速度はスケッチ内の「wait_time」で制御できるようになっています。

回転角度はstepをループさせているだけのため永遠に回る状態です。

回転角度は「パルスの数 = stepの数」で制御できます。

制御したい場合は、void loop()内でfor文などを使って、loopの回数を制限してみてください。

for文の後にdelay()関数を入れて止めておくなどすればわかりやすいと考えます。

回転角度を制御を確認できるはずです。

 

ちなみにloopの回数を何回にすれば、1回転しますか?

Lesson 28にて1回転に必要なStep数を解説しています。

コード内では、4stepまたは8stepを1つの動作として記述しています。

そのため、

1回転するためのloop回数
 = 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相励磁方式

arduino-lesson29-01

 

●サンプルスケッチ 2相励磁方式

arduino-lesson29-02

 

●サンプルスケッチ3 1-2相励磁方式

arduino-lesson29-03

 

gifで作成しているため違いがわかりずらいですが、それぞれ各励磁方式で制御されていることがLEDの点灯から確認することができます。

int wait_time = 100;

を調整して確かめてみてください。

 

まとめ

今回は以下の内容について理解してもらいました。

1.より深くステッピングモーターの使い方を理解する。
2.ライブラリを使わない制御方法を理解する
3.楽しんで遊ぶ。

 

いかがだったでしょうか。

ライブラリを使わずに制御すると、実際の制御方法がわかります。

そして、思ったよりも単純な制御だなと感じるわけです。

複雑な動作をさせようと考え出すと、ライブラリを使った方が早いですが・・・。

 

ステッピングモーター、制御方法を理解して使い方をマスターできれば、色々なもの作りに応用ができそうです。

色々と作ってみたくなります。

 

Lesson 29 【ステッピングモーター編 その2】 はここまで。

ステッピングモーター

もう少し遊んでみようかな・・・

いや、違う電子部品も学習したい!

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 30は【ステッピングモーター編 その3】です。

TVのリモコンと赤外線受信センサモジュールを用いてステッピングモーターを制御します。

リモコンを使って遠隔操作でステッピングモーターを動かすということです。

しかも、身近にあるTVリモコンを使います!

Arduino 入門 Lesson 30 【ステッピングモーター編 その3】
本記事はLesson 30 【ステッピングモーター編 その3】です。Lesson 28、29でステッピングモーターの基礎を学習しました。Lesson 30は赤外線受信センサモジュールを追加してリモコンでステッピングモーターを制御します。リモ…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

タイトルとURLをコピーしました