M5Stackでできること 〜ステッピングモーターを動かす

センサとの接続

これまで、いろいろなマイコンデバイスで「DCモーター」や「サーボモーター」の制御を行ってきました。
今回は、「M5Stack Basic」で「ステッピングモーター」を動かしてみたいと思います。


「ステッピングモーター」は、パルス信号を入力するたびに、一定の角度(ステップ)ずつ回転させることができるモーターです。パルスの数で回転角度を正確に制御できるため、高精度な位置決めが可能です。

今回は、安価で5V駆動が可能な、電子工作向きのこちらのステッピングモーターを使います。


この「28BYJ-48」は、2048回のパルス入力で1回転するようです。また、1秒間に最大500〜1000回のパルスを入力することができます。つまり、最速で15RPM(4秒で1回転)程度で回転させることができるようです。

なお、ステッピングモーターは電流消費が大きいため、マイコンデバイスからの出力信号を、直接ステッピングモーターにつなぐことはできません。そのため、マイコンデバイスの出力信号を一旦「ドライバIC」に入力し、その「ドライバIC」の出力をステッピングモーターに供給します。
「ドライバIC」は、入力信号の論理(HighまたはLow)そのままで、ドライバビリティの大きい(大電流を供給できる)信号を出力する回路です。今回購入したステッピングモーターには、ドライバIC「ULN2003」ボードもセットになっています。

「ULN2003」ボードのコネクタに「28BYJ-48」を接続します。
今回は、「M5Stack Basic」の「16」「17」「2」「5」端子を、「ULN2003」ボードの「IN1」「IN2」「IN3」「IN4」にそれぞれつなぎます。
また「単三型Ni-MH電池×4本」の「+」「-」を、「M5Stack Basic」のGROVEポート(「V」「G」端子)につないだ上で、「M5Stack Basic」の「5V」「G」端子と「ULN2003」ボードの「+」「-」端子を接続します。これでNi-MH電池の5V程度のを「M5Stack Basic」と「ULN2003」ボードの両方に供給することができます。

動作確認用のスケッチは以下のとおりです。

#include <M5Unified.h>
#include <Stepper.h>

Stepper stepper(2048, 16, 2, 17, 5); // IN1, IN3, IN2, IN4
boolean direction = false;
int     speed = 5;
int     w, h;

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);
  stepper.setSpeed(speed);

  w = M5.Display.width();
  h = M5.Display.height();
  M5.Display.setTextColor(TFT_WHITE);
  M5.Display.setTextDatum(MC_DATUM);
  M5.Display.fillScreen(TFT_BLACK);
  M5.Display.drawNumber(speed, w/2, h/2, 8);
}

void loop() {
  M5.update();
  if(M5.BtnB.isPressed()) {
    if(!direction) stepper.step(-1);
    else           stepper.step(1);
  }
  if(M5.BtnB.wasPressed()) {
    direction = !direction;
  }
  if(M5.BtnA.wasPressed()) {
    speed--;
    if(speed<1) speed = 1;
    stepper.setSpeed(speed);
    M5.Display.fillScreen(TFT_BLACK);
    M5.Display.drawNumber(speed, w/2, h/2, 8);
  }
    if(M5.BtnC.wasPressed()) {
    speed++;
    if(speed>15) speed = 15;
    stepper.setSpeed(speed);
    M5.Display.fillScreen(TFT_BLACK);
    M5.Display.drawNumber(speed, w/2, h/2, 8);
  }
}

Bボタンを押している間、ステッピングモーターが回転します。また、Bボタンを押すたびに回転方向が切り替わります。
Aボタン、Cボタンを押すことで、回転スピードを変更できます(1RPM〜15RPM)。設定したスピードはLCDディスプレイに表示されます。

動かしてみました。

いい感じに動いています。
回転数が遅いため、簡単につくれて、なおかつ子供ウケが良さそうな作品例をなかなか思いつきませんが、回転角度を正確に制御できるので、頑張ればペンプロッタなどをつくることもできそうです。

 

なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。