- 最終更新日
- 記事公開日
Arduinoで5Vステッピングモーターを動かす (ST-42BYH1004/DRV8835)
Arduinoで5V仕様のステッピングモーターの回転を制御するためのサンプルコードです。
※12V仕様のステッピングモーターを動かしたときの記事はコチラ
スイッチを押している間、LEDが点灯し、モーターが回転し続けます。
使用したもの
- ステッピングモーター:ST-42BYH1004(バイポーラ型)
- モータードライバー:DRV8835(Pololu社製)
- Arduino UNO R3 (CH340版)
ステッピングモーター:ST-42BYH1004(バイポーラ型) – 秋月電子
モータードライバー:DRV8835(Pololu社製) – スイッチサイエンス
回路図
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ライブラリを使わずにコードを書き直す必要があります↓
トラブルシューティング
ステッピングモーターがうまく動かない場合は、以下の記事を参考にしてください↓