サイトアイコン KOKENSHAの技術ブログ

Arduinoでステップモーターを動かす!(28BYJ-48)

今日の記事はArduinoでステップモーターを動かす例をご紹介します。

Arduinoで3Dプリンターを作るものも多くて、その中でもArduinoでステップモーターを制御するのが普通になっています。

ステップモーターと言っても様々な種類があります。

今回使うのは、下記のステップモーターです。

目次

ステップモーター:28BYJ-48

5個セットで購入しましたので、プラスチックのケースに入っています。

安価の代わりに、粗悪な作りではなく、綺麗な状態です。

型番を記載しています。28BYJ-48

回転部とコネクタ

早速ハードウェアの接続をみてみましょう

このステップモーター(28BYJ-48)は購入時、ステップモーターのドライバーの付いていますので

まず、ステップモーターのコネクタをそのままステップモーターのドライバーに接続して利用することになります。

ステップモーターのドライバーは個別包装になっています。

 

接続

ステップモーターのドライバーIN1  –> ArduinoのD8
ステップモーターのドライバーIN2 –> ArduinoのD9
ステップモーターのドライバーIN3 –> ArduinoのD10
ステップモーターのドライバーIN4 –> ArduinoのD11
ステップモーターのドライバーVCC –> Arduinoの5V
ステップモーターのドライバーGnd –> ArduinoのGND

ステップモータとステップモータードライバーはそのままコネクタで接続します。

ソフトウェア

ソフトウェアはこちらとなります。

/*
BYJ48 簡単なテストプログラム
*/

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

const int NBSTEPS = 4096;
const int STEPTIME = 900;
int Step = 0;
boolean Clockwise = true;

int arrayDefault[4] = {LOW, LOW, LOW, LOW};

int stepsMatrix[8][4] = {
    {LOW, LOW, LOW, HIGH},  
    {LOW, LOW, HIGH, HIGH}, 
    {LOW, LOW, HIGH, LOW},
    {LOW, HIGH, HIGH, LOW}, 
    {LOW, HIGH, LOW, LOW}, 
    {HIGH, HIGH, LOW, LOW},
    {HIGH, LOW, LOW, LOW},  
    {HIGH, LOW, LOW, HIGH},
};

unsigned long lastTime;
unsigned long time;

void setup() {
  Serial.begin(9600);
  Serial.println("スタート...");
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {
  unsigned long currentMicros;
  int stepsLeft = NBSTEPS;
  time = 0;
  while (stepsLeft > 0) {
    currentMicros = micros();
    if (currentMicros - lastTime >= STEPTIME) {
      stepper();
      time += micros() - lastTime;
      lastTime = micros();
      stepsLeft--;
    }
  }
  Serial.println(time);
  Serial.println("停止");
  delay(1000);
  //回転方向切り替え
  Clockwise = !Clockwise;
  stepsLeft = NBSTEPS;
}

void writeStep(int outArray[4]) {
  for (int i = 0; i < 4; i++) {
    digitalWrite(IN1 + i, outArray[i]);
  }
}

void stepper() {
  if ((Step >= 0) && (Step < 8)) {
    writeStep(stepsMatrix[Step]);
  } else {
    writeStep(arrayDefault);
  }
  setDirection();
}

void setDirection() {
  (Clockwise) ? (Step++) : (Step--);

  if (Step > 7) {
    Step = 0;
  } else if (Step < 0) {
    Step = 7;
  }
}

動作確認

プログラムをArduinoにアップロード実行すると

ステップモーターが左右交替で回転します。

今回驚いたのは、このステップモーターが小型でとても静かなところです。

最初は、回転してもほとんど音がしませんから、「あれ?動かない」と勘違いするぐらいでした。笑。

これから、ステップモーターを複数組み合わせて組んでいけば

3Dプリンターなど、たくさんの応用が作れそうです。

私も徐々に知識が蓄積できましたら、次のステップにより複雑なものを作ってみたいと思います。

[amazonjs asin=”B06XCSCD8T” locale=”JP” title=”Longruner 5個セット arduino用 電圧DC 5V ステッピングモーター+28BYJ-48 ULN2003ドライバテストモジュールボード 電作キット LK67″]

[amazonjs asin=”B0044X2E5S” locale=”JP” title=”【永久保証付き】Arduino Uno”]

[amazonjs asin=”B06Y5TBNQX” locale=”JP” title=”ELEGOO UNO R3 ボード ATmega328P ATMEGA16U2 +USBケーブル Arduino用”]

モバイルバージョンを終了