注目キーワード

【Arduino】切手サイズのコンピュータ「M5Stamp Pico」でステッピングモーターを動かす!

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

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

M5Stamp Pico」は、切手サイズのマイコンです。

さまざまなものに組み込むことができるので、モーターと組み合わせて、一定間隔で指示した回転をさせたいということも出てくるのでないでしょうか。

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

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

 

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

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

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

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

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

この記事の前提となるM5Stamp Picoのはじめかたについては、次の記事で紹介しています。

関連記事

すけろく 切手サイズのコンピューター。 なかなかいい響きだの~。 げんろく 何だそれは? すけろく 「M5Stamp Pico」だ。 ESP32系のマイコンを搭載した切手サイ[…]

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

ステッピングモーター

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

今回、使用するステッピングモーターは、「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まで、M5Stamp PicoのGPIOと接続して信号を入力します。

    マイコン(M5Stamp Pico)側 ステッピングモータードライバ基板側
    GPIO26 IN1
    GPIO18 IN2
    GPIO19 IN3
    GPIO21 IN4
  • 電力供給(5V~12V)
    電池や、電源から電力を供給します。

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

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

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

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

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

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

回路を作るのに準備したものは次の通りです。
created by Rinker
¥1,356 (2024/04/28 00:59:56時点 楽天市場調べ-詳細)
created by Rinker
¥702 (2024/04/28 08:46:22時点 楽天市場調べ-詳細)

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

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

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

 プログラム内容

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

  • 電源投入後、以下を繰り返す
    ①ステッピングモーターを45度回転させる
    ②3秒間待機する

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

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

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

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

関連記事

本記事は、Arduino IDE 1.8.xバージョンのライブラリ管理方法を紹介した記事です。 Arduino IDEは、より新しいバージョン「2.0.x」が発表されています。     機能がよりリッチになった「Ardu[…]

 Arduino IDE スケッチ例

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

<プログラム本体>

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

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

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

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

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

//M5Stamp Pico GPIO →Stepping Motor Driver
#define SMTR_IN1 26                         // ステッピングモータドライバへの入力用
#define SMTR_IN2 18                         // ステッピングモータドライバへの入力用
#define SMTR_IN3 19                        // ステッピングモータドライバへの入力用
#define SMTR_IN4 21                        // ステッピングモータドライバへの入力用

// 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);
}

 M5Stamp Picoへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、M5Stamp Picoであるか確認します。
    「Partition Scheme」を「No OTA(Large APP)」に設定します。
    この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  3. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
  4. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 プログラム実行結果

電池ボックスのスイッチをONにすると、M5Stamp Picoが起動し、次のようにステッピングモーターが回転します。

編集後記

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

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

前回の記事「DeepSleep」と合わせたプログラムにすると、電池やバッテリー使用時にも定期的に動くものが作れますね!

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

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

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

created by Rinker
¥1,356 (2024/04/28 00:59:56時点 楽天市場調べ-詳細)
created by Rinker
¥702 (2024/04/28 08:46:22時点 楽天市場調べ-詳細)

M5Stamp Pico の他の記事はこちらからどうぞ!

すけろく メダカもだいぶ増えたの~。 げんろく そうだな。 毎日の餌やりと、水替え、結構がんばっとるからな。 すけろく 水温は、第一弾で水温センサーを仕込んだから、 管理は楽になった。 げんろく そうだな。 よし、今回は、餌やりを自動化してみるか! 皆さん、お家で何か動植物を飼っていますか? 我が家のメダカもよく育っています。 前回の第一弾で、水槽内の水温を計測・記録するものを作りました。 おかげ […]

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

すけろく うーむ。 何とかならんか~ げんろく どうした? 電池を見つめて。 すけろく 電池を電源にしてM5Stampを使っているのだが、 一定間隔で動かしているのだが、電池の持ちが悪くてな。 げんろく うーむ。どれどれ。 Sleepさせていないのか?これだとずっとCPUが電力を消費するぞ。 よし、今回はDeepSleepの方法を使う方法を紹介しよう。 この記事では、「M5Stamp Pico」を […]

すけろく そういえば、LCDパネルがあるのだが、 使ってなかったな。 げんろく んー。 どれどれ、このコントローラICなら Arduinoで使えるな。 すけろく それなら、M5Stamp Picoで時計を表示したいな。 時刻同期は以前の記事でやっているし。 げんろく よし、やってみよう! この記事では、「M5Stamp Pico」を使って、「LCDモジュール」に時計を表示させてみます。 「M5St […]

すけろく んーどうしたものか。 げんろく どうした? 深刻な顔をして。 すけろく M5Stackにプログラムを書き込んだら 起動しなくなってな。 電源ON/OFFでも無理なのだ。 げんろく 書き込んだプログラムか、バッテリーの 過放電か。工場出荷時に戻してみてはどうだ? この記事では、M5Stackにプログラムを書き込んだ結果、うまく動作しなくなった場合の対処方法を記載します。 ご紹介するのは「工 […]

すけろく 最近、透明で先の見えるディスプレイが あるらしいな。 げんろく ああ、薄暗いサングラスくらいの透過率で 先が見えるものがある TOLED(Transparent OLED)と言うんだ。 すけろく M5Stampからでも表示制御できるのかな。 げんろく Arduinoでプログラムできるものがあるから、 M5Stamp Pico用に改造してみるか。 この記事では、M5Stamp Picoを使 […]

すけろく ちょっと!! e-Paper(電子ペーパー)ってディスプレイ制御は 独特なの? げんろく まあ、そりゃ違うわな。 ものが違うからの。 すけろく Raspberry Pi Pico向けのe-Paperを入手したが、 Arduino+M5Stamp Picoで使いたいのだ。 げんろく よし。 ではM5Stamp Picoで使ってみるか! この記事では、M5Stamp Picoを使って、e-P […]

すけろく M5Stamp Picoのことはじめに、 LEDを一つだけ光らせたが、やはりもっと派手にやりたいな。 げんろく 左様、わしも考えていたのだ。 LEDストラップを使って派手に光らせようではないか。 この記事では、M5Stamp PicoのGroveコネクタを使って、LEDが複数実装されたLEDストラップをいろいろな色やアニメーションで光らせてみます。 M5Stamp Picoはディスプレイ […]

すけろく WiFi接続は前回行ったが、次は時刻同期だな。 げんろく そうだな。IoTに正確な時刻は大切だ。 NTPサーバと時刻同期してみよう。 この記事では、M5Stamp PicoをアクセスWi-Fiアクセスポイントに接続し、インターネットの時刻サービスを使って時刻を同期する方法について紹介します。 M5Stamp Picoはディスプレイを持っていないため、主に処理時間やセンサーなどからデータを […]

すけろく 切手サイズのコンピュータに書き込むことはできな。 げんろく 次は、WiFi接続まわりを試してみよう。 基本はM5Stick Cと同じはずだ。 この記事では、M5Stamp Picoに実装されているWiFi機能を使って、Wi-Fiルータに接続する方法について紹介します。 この記事の前提となるM5Stamp Picoのはじめかたについては、次の記事で紹介しています。 Wi-Fi接続する際には […]