×

ずらいらと姫の挑戦日記(第59回)~モータを動かそう ステッピングモータ編~

2019-10-28

こんにちは、らずらいと姫です。

 

いままで、サーボモータとDCモータを回転させましたが、今回はステッピングモータを動かしてみたいと思います。

こちらがステッピングモータを動かした動画になります。どうぞご覧ください。

 

今回使用した部品の紹介

今回使用した部品になります。

  • スッテピングモータ  型番 28byj-48
  • モータドライバー     型番 ULN2003
  • Lazurite Sub-GHz
  • Lazurite Pi Gateway
  • Paspberry Pi

 

ステッピングモータを動かそう

ステッピングモータは角度調整と速度調節のできるモータみたいです。今回はステッピングモータをNode-Redから無線を飛ばし、Lazurite Sub-Ghzが無線を受信したらモータを1回転させたいと思います。

 

ではさっそくLazurite Sub-Ghzにステッピングモータを繋いでいきたいと思います。

 

モータドライバ Laureate Sub-Ghz ステッピングモータ
コネクタ部分 コネクタ部分接続
VCC 5V
GND GND
IN4 8端子
IN3 9端子
IN2 10端子
IN1 11端子

 

上の表をもとに下の写真のように繋ぎ合わせてください。

 

 

 

 

プログラムの作成

AccelSteperのライブラリを使用してLazurite Sub-Ghzが無線を受信したらモータが1回転するというプログラムを読み込みたいと思いますが、その前にLazurite IDEにはAccelSteperのライブラリがないのでライブラリにAccelSteperを入れます。

はじめにAccelsteperのファイルをこちら こちらからダウンロードしてください。ダウンロードして展開したファイルを(C:)に入っているLazurite IDE の中のlibrariesのファイルに移すとLazurite IDEでAccelsteperのライブラリを使用することができるようになります。

 

 

さっそくAccelsteperのライブラリを使用してプログラムを書きたいと思います。ここで使用したプログラムは下のようになります。

 


#include "stepingmoter_try2_ide.h" // Additional Header

#define HALFSTEP 8

#define FULLSTEP 4

#define blue 8

#define pink 9

#define yellow 10

#define orange 11

#define SUBGHZ_CH ( 36 )

#define SUBGHZ_PANID ( 0x0000)

#define BLUE_LED ( 26 )

#define BUF_SIZE ( 128 )

uint8_t rx_data[BUF_SIZE];

//Keeps track of the current direction

//Relative to the face of the motor.

//Clockwise (true) or Counterclockwise(false)

//We'll default to clockwise

bool clockwise = true;

// How many steps to go before reversing

// int targetPosition = 2048; //2049 steps per rotation when wave or full stepping

int targetPosition = 4096; //4096 steps per rotation when half stepping

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48

// Notice, I'm passing them as Blue, Yellow, Pink, Orange (coil ends order) not

// Blue, Pink, Yellow, Orange (firing order).

st_AccelStepper_v stepper;

bool revolution = false;

void setup() {

// put your setup code here, to run once:

pinMode(BLUE_LED,OUTPUT);

digitalWrite(BLUE_LED,HIGH);

AccelStepper.init(&stepper, HALFSTEP, blue, yellow, pink, orange, true);

//Set the initial speed (read the AccelStepper docs on what "speed" means

AccelStepper.setSpeed(&stepper, 0.0);

//Tell it how fast to accelerate

AccelStepper.setAcceleration(&stepper, 100.0);

//Set a maximum speed it should exceed

AccelStepper.setMaxSpeed(&stepper, 1000.0);

//Tell it to move to the target position

AccelStepper.moveTo(&stepper, targetPosition);

Serial.begin(115200);

SubGHz.init();

SubGHz.begin(SUBGHZ_CH,SUBGHZ_PANID,SUBGHZ_100KBPS,SUBGHZ_PWR_1MW);

SubGHz.setBroadcastEnb(false);

SubGHz.rxEnable(NULL);

revolution = true;

}

void loop() {

// put your main code here, to run repeatedly:

SUBGHZ_MAC_PARAM mac;

short rx_len;

uint8_t buf[BUF_SIZE];

rx_len = SubGHz.readData(rx_data,BUF_SIZE);

if(rx_len>0)

{

digitalWrite(BLUE_LED, LOW);

AccelStepper.enableOutputs(&stepper); // Enable GPIO

AccelStepper.setCurrentPosition(&stepper, 0); // reset the current position

AccelStepper.moveTo(&stepper, targetPosition); // Go to the target position

revolution = true;

}

if (revolution) {

//Check to see if the stepper has reached the target:

if(AccelStepper.distanceToGo(&stepper) == 0) {

AccelStepper.disableOutputs(&stepper); // Disable GPIO

revolution = false;

delay(100);

digitalWrite(BLUE_LED, HIGH);

}

//If the stepper still needs to move (distanceToGo() != 0)

//continue to advance (step) the motor

AccelStepper.run(&stepper);

}

}

 

このプログラムをLazurite Sub-Ghzに書き込みます。

 

Nodo-Redの設定

次にNode-Redの設定を行いたいと思います。下の写真のようにノードを設定してください。使用したノードはinjectノードとLazurite Txノードです。

各ノードの設定は下の写真のように設定を行います。

 

 

これでNode-Redの設定が終わりました。

これでhelloのノードをクリックするとhalloの文字列がSub-Ghzに送られるようになります。

 

ステッピングモータを動かす用意が整いました。ではさっそく動かしてみたいと思います。

N0de-Redで先ほどかいたhelloのノードの先をクリックしてみます。そうすると動画のようにステッピングモータが回転します。

 

お疲れ様です。スッテピングモータを無事に動かせたでしょうか。お付き合い頂きありがとうございました。