Arduinoと戯れてみる!

Arduino 入門 Lesson 28 【ステッピングモーター編】

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

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

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

 

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

ステッピングモーターはモーターです。

ただし、Lesson 09、Lesson 26で解説したモーターとは異なります。

 

パルス電力に同期して動作するモーターです。

そのため、パルスモーターとも呼ばれます。

 

このパルスと呼ばれる電力信号がステッピングモーターの肝となります。

「パルスの電力信号って何?」と思うかもしれません。

これは、モーターをパルスで制御するというだけです。

これは以前に学習した「PWM」で制御するということとほぼ同義になります。
※Pulse Width Modulation(パルス幅変調)

Lesson 04 【RGBダイオード制御編】にて学習しました。

本Lessonに入る前に、一度復習しておくと理解の助けとなると考えます。

Arduino 入門 Lesson 04 【RGBダイオード制御編】
RED LEDを使い、RED LEDの各輝度を変更する作業を通して、RED LEDの色が3色以外の色になっていることを確認します。輝度の変更はパルス幅変調(PWM)にて制御します。これは「LEDがONしている時間を制御する」ということです。…

 

本Lesson解説で使用しているのはArduino互換品です。

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

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

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

 

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

 

スポンサーリンク

はじめに

まず、ステッピングモーターの意味、原理をWikipediaで確認してみましょう。

Wikipedia ステッピングモーター

ステッピングモーター(Stepper motor)は、パルス電力に同期して動作する同期電動機である。したがってパルスモーター(Pulse motor)とも言われる。簡単な回路構成で、正確な位置決め制御を実現できるので、装置の位置決めを行う場合などによく使われる。

パルス電力に同期して動作する」とあります。

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

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

 

PWM制御でと考えると複雑に思うかもしれません。

Arduinoの良いところはライブラリを使用するため制御を意識することはありません。

 

ライブラリを使ってしまうと、実際の制御を理解できないという欠点があります。

しかし、まずは動かして遊んでみたいのでライブラリを使います。

次回Lessonにて、ライブラリを使わない制御にも取り組んでいきます。

 

これまで学習したモーターとの違いを簡単に記載しておきます。

DCモーター    :電力をかけるとひたすら回転する。
サーボモーター   :信号によって0度~N度の角度を制御できる。
ステッピングモーター:信号によって回転範囲に制限なく回転角を制御できる。

といったところでしょうか。

 

また、DCモーター同様に駆動させるためには一定の大きさの電流が必要になります。

そのため、Arduinoの出力信号では能力不足となります。

駆動能力を補うため、ステッピングモーター用のドライバICを使用するのが一般的です。

 

Lesson 28 目標

本Lessonの目標は以下です。

1.ステッピングモーターの使い方を理解する。
2.ライブラリを使った制御方法を理解する。
3.ドライバモジュール(ULN2003A)の使い方を理解する。

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

 

準備

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

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

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

 

必要なもの

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

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

 

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

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

 

使用部品説明

新たに登場した部品について説明していきます。

本Lessonで新しく登場する部品は以下となります。

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

 

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

 

ステッピングモーター 実物写真

下の写真が、ステッピングモーターです。

型名:28BYJ-48

制御用のドライバモジュールに接続できるようにコネクト端子がついています。

arduino-lesson28-01

arduino-lesson28-02

 

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

 

ステッピングモーター原理

ステッピングモーターの原理を解説すると膨大になります。

膨大すぎて、管理人には説明しきれません・・・。

そこで、学習できるサイトをさがしました。

 

下記サイトはe-ラーニングでステッピングモーターについて学習できます。

興味のある方はご確認ください。

東芝半導体&ストレージ製品情報サイト 「ステッピングモータ」

 

ここでは簡単に分類だけ解説しておきます。

 

●回転子(軸)の種類で分類

  • PM型(Permanent Magnet Type、永久磁石)
  • VR型(Variable Reluctance Type、歯車状鉄心形)
  • HB型(Hybrid Type、複合形)

 

●コイルへの電流の流し方での分類

  • ユニポーラ型(単極性)
  • バイポーラ型(双極性)

 

本Lessonで使用する「28BYJ-48」は、PM型/ユニポーラ型となります。

 

ステッピングモーター 仕様

本Lessonで使用してるステッピングモーター型番は「28BYJ-48」。

ELEGOO UNO キットに梱包されているモーターとなります。

データシートはDigi-keyなどで確認ができます。
https://www.digikey.jp/ja/datasheets/mikroelektronika/mikroelektronika-step-motor-5v-28byj48-datasheet

 

ここでは代表的な仕様のみ記載します。

詳細はデータシートをご確認ください。

 

●ステッピングモーター仕様「28BYJ-48」

項目仕様
型名28BYJ-48
種類ユニポーラ型
定格電圧5V
フェーズ数4
ギア比64:1
ステップ角64ステップで5.625度回転
ハーフステップモード
周波数100Hz
DC抵抗50Ω±7%
結線5線式

※ハーフステップモード:ステップ角が基本ステップ角度の1/2の角度で駆動する方式
※ギア比:ローター(中心軸)が64回転で車軸(表に出ている軸)が1回転

 

●励磁方式

「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相励磁方式
    • 細かいモーター制御が可能
    • 回路が複雑(高コスト)

 

本Lessonのドライバモジュールとライブラリ「Stepper.h」を使用した場合
制御方式は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では2相励磁方式での制御となります。

2048 stepで1回転を頭の片隅に置いておいてください。

 

ドライバーモジュール 実物写真

こちらが、ドライバモジュール実物写真。

ULN2003AのドライバICが搭載されています。

arduino-lesson28-04

 

ドライバモジュール 仕様

本Lessonで使用してるドライバーモジュールは「ULN2003AのICを使用」。

ELEGOO UNO キットに梱包されているドライバモジュールとなります。

 

ここでは代表的な仕様のみ記載します。

詳細はデータシートをご確認ください。

 

●ドライバモジュール仕様「ULN2003A」

項目仕様
型名ULN2003A
コレクタ定格電流500mA
出力クランプ・ダイオード
※保護ダイオードのことです。
あり

※詳細仕様はTexas Instrumentsで確認ができます。
http://www.tij.co.jp/product/jp/ULN2003A/technicaldocuments

 

●接続例

下記にULN2003Aとステッピングモーターの接続例を示します。

arduino-lesson28-05

 

●ドライバモジュール概要

下記にドライバーモジュールの概要を示します。

基本構成は、下記4つをまとめたモジュールです。

  1. ULN2003AのドライバIC
  2. Arduinoから出力を受け取る入力
  3. ステッピングモーターへの出力
  4. 動作状態を確認できるLED
  5. 電源

arduino-lesson28-06

 

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

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、ステッピングモーターを動かしていきましょう。

 

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

 

回路図

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

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

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

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

 

回路図がこちら。

arduino-lesson28-07

 

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

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

arduino-lesson28-08

 

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

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

 

接続

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

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

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

 

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

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

 

arduino-lesson28-09

 

コードの書き込み

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

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

 

本Lessonではライブラリ「Stepper.h」を使用します。

このライブラリは標準ライブラリです。

IDEに標準で搭載されていますので、そのまま使用できるはずです。

 

使用できない場合は、下記を参照して使えるようにしておきましょう。

Arduino 入門 Lesson 01 【ライブラリインストールおよびPCとの接続編】
ライブラリはセンサなどの部品を簡単にArduinoに接続して使用するためのコードの集まりです。接続はArduinoにコードをアップデートするために、COMポートを設定し、PCとArduinoを接続する作業です。ここではライブラリの追加方法(…

 

コマンド説明

本Lessonでは、「Stepper.h」のライブラリを使用します。

このライブラリのコマンドについて解説します。

コマンド内容
Stepper(steps, pin1, pin2, pin3, pin4)Arduinoボードに接続されているステッパモータを表すStepperクラスのインスタンスを新たに生成。
setup()とloop()より前で定義。steps:1回転あたりのステップ数 (int)
pin1, pin2, pin3, pin4:モータに接続されているピンの番号
戻り値:作成したインスタンス例
myStepperというインスタンスを生成。
100ステップ、Arduinoのピンは8,9,10,11を定義。
Stepper myStepper(100, 8, 10, 9, 11);
Stepper:setSpeed(rpms)モータの速さを毎分の回転数(RPM)で設定。

rpms:1分間あたりの回転数 正の数 (long)
戻り値:なし


スピードを20RPMにセット
※インスタンス名 myStepperで定義済みの場合
myStepper.setSpeed(20);

Stepper:step(steps)setSpeed()で設定した速さで、指定したステップ数だけモータを回す。

steps:モーターが回転するステップ数。逆回転は負を設定(int)
戻り値:なし

例 1000ステップモーターを回す。
※インスタンス名 myStepperで定義済みの場合
myStepper.step(1000);

ライブラリを使用することで、励磁方式等々を意識することなく使用できます。

これがArduinoの良いところですね。

ただし、実際の動作シーケンスを理解できないという欠点があります・・・。

 

サンプルコード

GitHubにステッピングモーターを動かすサンプルコードがあります。

参考にしてみてください。

arduino-libraries/Stepper
Stepper Library for Arduino. Contribute to arduino-libraries/Stepper development by creating an account on GitHub.…

 

本Lessonでは、上記のサンプルコードを参考にわかりやすくするために簡潔にしました。

一定のスピードで90度づつ回転するスケッチとなります。

 

また、スケッチ内で電流を遮断するコードを記載しています。

これは、静止状態が「その状態を維持する」という状態であり、維持するために電流が流れ続けてしまうからです。

それなりに電流が流れ発熱しますので、90度回転後はその状態を維持するのではなく電流を遮断するようにしています。

補足
Stepper myStepper(MOTOR_STEPS, 8, 10, 9, 11);
4相のため、ピンは2ピンずつのセットで考えます。
本Lessonの接続の場合は、8と10、9と11の組み合わせとなります。

 

//Lesson 28 ステッピングモーター編
//ライブラリ使用によるスケッチ
//https://omoroya.com/

// 電子部品
// 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター

//ライブラリインクルード
#include <Stepper.h>

// ステッピングモータが1回転するのに必要なステップ数を定義
//2相励磁方式で制御するため2048 step で1回転
const int MOTOR_STEPS = 2048; 

//1回転あたりのステップ数と接続するピンの設定
Stepper myStepper(MOTOR_STEPS, 8, 10, 9, 11);
 
void setup() { 
  myStepper.setSpeed(10); // 10回転/1分に設定 rpm(1分あたりの回転数)
  }
  
void loop() { 
  myStepper.step(512);    // 512ステップで90度回転
  
  // 静止時には電流を遮断する。 
  digitalWrite(8,  LOW); 
  digitalWrite(9,  LOW); 
  digitalWrite(10, LOW); 
  digitalWrite(11, LOW); 
  
  delay(500);            //90度回転したら500ms待つ
}

 

動作確認

では、さっそく動作を確認していきます。

90度回転、0.5秒止まる → 90度回転、0.5秒止まる → ・・・

の繰り返しとなるはずです。

※gifで作成しているため、容量圧縮のため画像サイズは小さくしてあります。

arduino-lesson28-10

 

まとめ

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

1.ステッピングモーターの使い方を理解する。
2.ライブラリを使った制御方法を理解する。
3.ドライバモジュール(ULN2003A)の使い方を理解する。
4.楽しんで遊ぶ。

 

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

ステッピングモーターは3Dプリンタなどでも使われています。

使い方をマスターできれば、色々なもの作りに応用ができそうです。

 

Lesson 28 【ステッピングモーター編】 はここまで。

ステッピングモーター

応用するにはもっと理解する必要がありそうです。

 

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

 

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

本Lessonではライブラリを使用しましたが、動作理解のためにライブラリを使用しないスケッチにも挑戦ます。

Arduino 入門 Lesson 29 【ステッピングモーター編 その2】
本記事はLesson 29 【ステッピングモーター編 その2】。Lesson 28では、ライブラリを使いステッピングモーターを制御しました。Lesson 29では励磁方式の制御を1つ1つスケッチに描くことで、ステッピングモーターの動作をより…

 

最後に

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

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

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

 

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

 

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

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

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

 

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

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

 

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

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 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をコピーしました