最終更新日
記事公開日

Arduinoで5Vステッピングモーターを動かす (ST-42BYH1004/DRV8835)

Arduinoで5V仕様のステッピングモーターの回転を制御するためのサンプルコードです。

※12V仕様のステッピングモーターを動かしたときの記事はコチラ

スイッチを押している間、LEDが点灯し、モーターが回転し続けます。

YouTubeで見てみる

使用したもの

回路図

DRV8835モータードライバーには、2つのモードが搭載されています。

  • PHASE/ENABLEモード  ・・・ シンプル制御モード
  • IN/INモード ・・・ ノーマル制御モード

シンプル制御モードとは言っても、基本的にはDCモーター向けに用意された機能です。

ステッピングモーター制御に使う場合は、どちらを選んでも大差ありません。

※ただし、選んだモードによってコードの書き方が違ってきます。

この記事で紹介しているコードは、『IN/INモード(ノーマル制御モード)』 を使用していますので、必ずMODE端子はオープンにして下さい。

プログラム(Arduino言語)

Arduino標準ライブラリ『Stepper』を使用しています。

#include <Stepper.h>

// モーターの1回転ステップ数(ST-42BYH1004の場合)
int around_step = 400;

// ボタンを一回を押して進むステップ数
// 正転:10、反転:-10
int step = 10;

// 回転スピード(10:遅い、50:早い)
int speed = 25;

int sw_pin = 3;   // スイッチの入力Pin
int led_pin = 7;  // LEDの出力Pin
volatile int sw;  // SWの状態

void sw_on(void);

// stepper インスタンス生成
Stepper stepper(around_step, 8,9,10,11);

void setup() {

  pinMode(sw_pin,INPUT);
  pinMode(led_pin,OUTPUT);

  // 立ち上がりで割り込み処理開始
  attachInterrupt(1,sw_on, RISING);
}

void loop() {

  // スイッチを長押し中かどうか
  sw = digitalRead(sw_pin);

  // スイッチがONのときのみモーターを回転
  if(sw == 1) {

    //ステップ数(正転)
    stepper.step(step);


    // 回転スピード
    stepper.setSpeed(speed) ;   

  }
  
}

// スイッチが押されたときの割り込み処理
void sw_on(void) {
  sw = 1;
  digitalWrite(led_pin,HIGH);
}

励磁方式について

ステッピングモーターは、電流の流し方によって特性が変わります。

  • 1相励磁方式 ・・・ 消費電力が低い分、トルクも低い。高速回転には不向きで振動が発生しやすい。
  • 2相励磁方式バージョン ・・・ 消費電力が大きいが、トルクも大きい。回転が安定しており、動きも滑らか。
  • 1-2相励磁方式 ・・・ ステップ角が細かく、最も滑らかに動く。

Stepperライブラリでは、トルク重視の『2相励磁方式』が採用されています

他の励磁方式で制御したい場合は、Stepperライブラリを使わずにコードを書き直す必要があります↓

[Arduino]Stepper.hライブラリを使わずにステッピングモーターを制御する

トラブルシューティング

ステッピングモーターがうまく動かない場合は、以下の記事を参考にしてください↓

[Arduino]ステッピングモーターがうまく動かないときの対処法

関連情報

運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

プロが教える!イチからわかるハンダ付けのコツ(工学社)の著者です。

カテゴリー