注目キーワード

【Arduino】Raspberry Pi Pico/W でほしい角度だけモーターを動かす!(ステッピングモーター)

すけろく
うーむ。
モーターを毎回同じくらい回転させることはできんのかな。
げんろく
DCモーターや、サーボモーターだと、
回転量を正確に制御することは難しいぞ。
すけろく
では、何か解決策はあるのかぇ?
げんろく
ステッピングモーターというものがある。
モーターの回転をステップとして制御できる。
今回はこのあたりを動かしてみるか。

この記事では、「Raspberry Pi  Pico W」を使って、「ステッピングモーターを動かす」方法をご紹介します。

Raspberry Pi  Pico W」は、Raspberry Pi の中でも、省電力なCPUを搭載したマイコン開発ボードです。

他のRaspberry Pi 製品とは異なり、Linux OSを搭載することは難しいですが、

省スペース、省電力の専用CPU「RP2040」を搭載しており、Arduino IDEや、MicroPythonなどで開発することができます。

しかも、Wi-FiとBluetoothが使用できるモジュールも搭載されているので、スタンドアロンでの稼働のみならず、他のマイコンと無線通信することが可能です。

さまざまなものに組み込むことができるので、モーターと組み合わせたりすることも多いのではないでしょうか。

その際に、指定の角度だけモーターを回転させたいということも出てきますよね。

DCモーター(ブラシ/ブラシレス)では、どれだけ回転したかを制御しようとすると、センサー値をフィードバックさせるなど、複雑な仕組みが必要になります。

また、サーボモーターは、回転角度は指定できますが、360度を超えて連続した回転を細かく制御するとなると難しいです。

そこで、登場するのが、「ステッピングモーターです。

ステッピングモーターを使えば、360度回転をステップという単位に分けて制御することができます。

そこで、今回は、「Raspberry Pi  Pico W」で、「ステッピングモーターを、一定角度ずつ動作させるということを行ってみます。

Raspberry Pi  Pico W」に接続する際の環境構成や、プログラムを紹介します。

ぜひ、皆さんも挑戦してみてくださいね!

この記事の前提となる「Raspberry Pi  Pico W」のはじめかたは、次の記事で紹介しています。

関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

あわせて読みたい!「Raspberry Pi  Pico W」関連の便利記事

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

今回使用したマイコンとステッピングモーター、ドライバはこちら!

created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)

created by Rinker
Raspberrypi
¥1,656 (2024/04/14 03:14:19時点 Amazon調べ-詳細)

ステッピングモーター

ステッピングモーターを準備する

今回、使用するステッピングモーターは、「28BYJ-48」です。

まずは、ステッピングモーターについて、紹介します。

ステッピングモーターとは?

ステッピングモーターは、電気信号(パルス)を入力することで一定の角度だけ回転するモーターです。

回転数だけではなく角度を制御できるため、高精度な位置決めや制御に利用されます。

ステッピングモーターの種類

ステッピングモータは構造によって,2相,3相,5相に分類されます。

時計のように回転するステッピングモータは,1パルスで動かせる角度を「基準ステップ角」と呼びます。

基準ステップ角が細かければ細かいほど,滑らかでより精度の高い動きができます。

今回つかうステッピングモーター「28BYJ-48」は、「2相」です。
ステップ数は「2048」です。

ステッピングモーターの駆動方式

ステッピングモータを駆動するにはドライバが必要です。

2相の場合,バイポーラ駆動かユニポーラ駆動かによって,ドライバの駆動回路が異なります。

3相と5相は,電流を双方向に流すことが可能なドライバが必要になります。

また,2相や3相ステッピングモータは,巻線構造が簡単なため,メーカーが違っても,同じ駆動回路でモータを回すことができます。

しかし,5相ステッピングモータの場合,巻線構造が複雑で,モータを回すために流す相の組み合わせや順番も1通りではありません。

したがって,5相ステッピングモータの場合,組み合わせるドライバには注意が必要です。

バイポーラ駆動とユニポーラ駆動について

バイポーラ結線

1つの巻線に対して双方向に電流を流す駆動方式(バイポーラ駆動)を取る形式です。以下の特徴があります。
・構造は簡単だが駆動回路は複雑になる。
・巻線の利用効率がよく細やかな制御ができるので高い出力トルクが得られる。
・コイルに発生する逆起電力を低減できるので、耐圧が低めのモータードライバを利用できる。ユニポーラ結線
センタータップを持ち、1つの巻線に対し常に一定方向に電流を流す駆動方式(ユニポーラ駆動)を取る形式です。
次の特徴があります。
・構造は複雑になるが駆動回路は簡単になる。
・巻線の利用効率が悪く、バイポーラ結線に比べ約半分程度の出力トルクしか得られない。
・コイルに高い逆起電力が発生するので、高耐圧のモータードライバが必要になる。
今回つかうステッピングモーター「28BYJ-48」は、「ユニポーラー駆動」です。
接続構造は、次のようになります。

ステッピングモータードライバ

ステッピングモーターを駆動させるためには、ドライバーICが必要となります。
今回使用するのは、ステッピングモーターに同梱されているものを使用します。
ステッピングモータードライバICが実装されている基板になります。
入力用のピン配置は次のようになります。
  • ステッピングモーター接続部
    ステッピングモーターのケーブルについているコネクタを接続します。
  • 信号入力
    IN1~IN4まで、「Raspberry Pi Pico W」のGPIOと接続して信号を入力します。

    マイコン(Raspberry Pi Pico W)側 ステッピングモータードライバ基板側
    GPIO2 IN1
    GPIO3 IN2
    GPIO4 IN3
    GPIO5 IN4
  • 電力供給(5V~12V)
    電池や、電源から電力を供給します。

    電源側 ステッピングモーター
    ドライバIC基板側
    Raspberry Pi Pico W側
    5V 5V(+) VSYS
    GND GND(-) GND
今回使用するステッピングモーターのドライバ搭載基板には、電源入力の隣に動作用のピンが2つあり、この2つをショートピンでつなぐ必要があります。
当方で使用した際には、ショートピンも付属していましたが、もしない場合は、別途準備してください。

ステッピングモーター駆動時の動き

今回使用するステッピングモータードライバには、4つのLEDが実装されていて、電気信号の状態をLEDで確認できます。
電気信号の入力に応じて、次のように光ります。
回転時
待機時
停止時(全てのGPIOの信号をLOWにした状態)

ステッピングモーターとRaspberry Pi Pico Wを接続する

マイコンと接続する際に、ブレッドボードを使って、回路を作ります。

今回は、次のように回路を作りました。

回路を作るのに準備したものは次の通りです。
created by Rinker
¥1,356 (2024/04/15 00:07:46時点 楽天市場調べ-詳細)
【サンハヤト Sunhayato】サンハヤト ジャンプワイヤ SMP-200

実際にブレッドボード上で回路を組んだ際のイメージは次のようになりました。

ステッピングモーターを動かすプログラム

ステッピングモーターを動かすプログラムを作っていきます。

 プログラム内容

今回のプログラムは、次のような動きをするように記述してみます。

  • 電源投入後、シリアルの入力待ちにする
  • シリアル入力された値の回数だけ以下を繰り返す
    ①シリアル入力された回転角度を元に、どのくらいのステップを実行するか計算する
    ②ステッピングモーターを計算したステップ数だけ回転させる
    ③ステッピングモーターを停止する

ライブラリのインストール

次のライブラリをインストールします。

ライブラリ名 説明
Stepper
ステッピングモーター制御用ライブラリ

ライブラリのインストールは、次の記事で紹介しています。

関連記事

「Arduino IDE」では、使用する機能やセンサー、ボードを使用するプログラムで使用できる有効なライブラリが公開されています。 ライブラリを使用すると、効率的かつ品質を確保したプログラミングが可能です。 この記事では、Ar[…]

 Arduino IDE スケッチ例

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

<プログラム本体>

 ステッピングモーターを制御するプログラムの説明

ステッピングモーターを制御するために、プログラム内で次のように記載しています。

ステッピングモーター制御用ライブラリをインクルードします。

#include <Stepper.h> // ステッピングモーター制御用ライブラリ

ステッピングモーターを制御するための「Raspberry Pi Pico W」のGPIOと、使用するステッピングモーターのステップ数を定義します。

//Raspberry Pi Pico W GPIO →Stepping Motor Driver
#define SMTR_IN1 3                         // ステッピングモータドライバへの入力用
#define SMTR_IN2 4                         // ステッピングモータドライバへの入力用
#define SMTR_IN3 5                        // ステッピングモータドライバへの入力用
#define SMTR_IN4 6                        // ステッピングモータドライバへの入力用

// Stepper Value
#define STEPS 2048                         // ステッピングモータのステップ数

次にステッピングモーター制御のインスタンスを生成します。

ここで、「SMTR_IN3」と「SMTR_IN2」の順番を変えていることに注意してください。

// ステッピングモータ制御用インスタンスの生成(SMTR_IN2 とSMTR_IN3を入れ替え)
Stepper stepper(STEPS, SMTR_IN1, SMTR_IN3, SMTR_IN2, SMTR_IN4); 

3

ステッピングモーターのスピードを指定します。

stepper.setSpeed(10);                      // ステッピングモーターの速度を指定
ステッピングモーターを回転させます。
stepper.step(256);                               // ステッピングモーターで動作させるステップ数を指定して実行(256 →45度)
補足
ステッピングモーターへの信号を停止するため、次の関数も作成しています。
void stopMotor() {
      digitalWrite(SMTR_IN1, LOW);
      digitalWrite(SMTR_IN3, LOW);
      digitalWrite(SMTR_IN2, LOW);
      digitalWrite(SMTR_IN4, LOW);
}

 Raspberry Pi Pico W への書き込み

  1. Raspberry Pi Pico WをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「ツール」メニューからボートの設定部分にある「IP/Bluetooth Stack」の設定を次のものにします。
    「IPv4 + Bluetooth」
  5. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
    この時指定するCOMポートは、USBで優先接続したプログラム書き込み用のCOMポートです。
    注意しましょう。
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

動作確認

実際に、Bluetoothシリアルで接続した、Arduino IDEシリアルコンソールから次のように入力してみました。

入力値 命令の意味
45 45度回転させる
90 90度回転させる
180 180度回転させる
360 360度回転させる

【回転させている様子】

 

【シリアルモニタでの出力】

Input angle: 45.00 Stepper steps: 256
Input angle: 90.00 Stepper steps: 512
Input angle: 180.00 Stepper steps: 1024
Input angle: 360.00 Stepper steps: 2048

 

編集後記

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

ステッピングモーターを使うと、決まった角度だけ動作させることができるので、活用の幅は広そうです。

今回の記事は以上になります。

最後まで、ご覧いただきありがとうございました。

今回使用したマイコンと部品はこちら!

created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)

created by Rinker
Raspberrypi
¥1,656 (2024/04/14 03:14:19時点 Amazon調べ-詳細)
created by Rinker
¥1,356 (2024/04/15 00:07:46時点 楽天市場調べ-詳細)
【サンハヤト Sunhayato】サンハヤト ジャンプワイヤ SMP-200

Raspberry Pi Pico W の他の記事はこちらからどうぞ!

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「Raspberry Pi  Pico W」を使って、「赤外線リモコンの通信内容を分析する」 […]

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]