- 最終更新日
- 記事公開日
Arduinoで12Vステッピングモーターを動かす (SM-42BYG011/DRV8835)
Arduinoで12V仕様のステッピングモーターの回転を制御するためのサンプルコードです。
※5V仕様のステッピングモーターを動かしたときの記事はコチラ
スイッチを押している間、LEDが点灯し、モーターが回転し続けます。
使用したもの
- バイポーラ型ステッピングモーター:SM-42BYG011
- モータードライバー:DRV8835
- マイコン:Arduino UNO R3(CH340版)
- 電源:鉛バッテリー LONG WP1.2-12
回路図・配線
12V仕様のステッピングモーターなので、電源は12Vの鉛バッテリーから給電。
Arudinoの電源は、USBケーブルを通ってパソコンから給電しています。
プログラム(Arduino言語)
Arduino標準ライブラリ『Stepper』を使用しています。
#include <Stepper.h>
// 1回転ステップ数(SM-42BYG011の場合)
int around_step = 200;
int sw_pin = 3; // スイッチの入力Pin
int led_pin = 7; // LEDの出力Pin
volatile int sw; // SWの状態
// ボタン一回を押して進むステップ数
// 正転:10、反転:-10
int step = 10;
// 回転スピード(10:遅い、50:早い)
int speed =50;
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, CHANGE);
}
void loop() {
// スイッチを長押し中かどうか
sw = digitalRead(sw_pin);
// スイッチがONのときのみモーターを回転
if(sw == 1) {
//ステップ数(正転)
stepper.step(step);
// 回転スピード
stepper.setSpeed(speed);
}
}
// スイッチが押されたときの割り込み処理
void sw_on(void) {
if(sw == 0) {
sw = 1;
digitalWrite(led_pin,HIGH);
}
else {
digitalWrite(led_pin,LOW);
}
}
技術解説
「モータードライバ(DRV8835)のモード」や「ステッピングモーターの励磁方式」など、詳しい解説は、5V仕様のステッピングモーターを動かしたときの記事をご覧ください↓
発熱について
ステッピングモーターは、停止中でも今のポジションを維持するためのトルクが働いています。
よって、バッテリーを繋いだまま10分くらい経つと、ステッピングモーターが発熱し、手では触れないくらい熱くなります。
一応、100度くらいまでは大丈夫らしいです。
12V仕様のステッピングモーターを選んだ理由
以前、5V仕様のステッピングモーターを動かしてみたとき、トルク力が思ってる以上にの弱かったんです。
そこで、「12V仕様のステッピングモーターなら、トルク力アップが見込めるのでは?」との思いで、今回試してみました。
結果的には、5Vも12Vも大して変わりませんでした。
素直に、スペック表を見て、静止トルクの強いステッピングモーターを選べば良かったかもしれません。
しかし、トルクの強いモーターは、一気に値段が高くなるんですよね・・・
秋月電子で販売されているバイポーラ型ステッピングモーターの規格比較
- SM-42BYG011(12V)1,380円 → 静止トルク:2.3kgf・cm
- ST-42BYH1004(5V)1,900円 → 静止トルク:4.4kgf・cm
- 42SHD4002-24B(12V)1,100円 → 静止トルク:3.0kgf・cm
- ST-57BYG076(12V)4,000円 → 静止トルク:13kgf・cm
- 42SHD4404-24(3.4V)1,650円 → 静止トルク:5.2kgf・cm
- ST-57BYG056-1004(3.3V)2,780円 → 静止トルク:12kgf・cm