小型リニアアクチュエータをArduino+A4988+CNCシールドで駆動させる

#小型リニアアクチュエータをArduino+A4988+CNCシールドで駆動させる

2相ステッピングモータ搭載、小型リニアアクチュエータ(D8-MOTOR80形搭載)を手に入れ、駆動させることに成功したのでそのメモ

また、CNCシールドを使って複数のリニアアクチュエータを動かした

こんなに小さいのに想像以上のトルクでびっくりでした

![リニアアクチュエータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110060/2a157880-8705-b202-9e76-45e1f56d704e.png)


#リニアアクチュエータ(D8-MOTOR80形搭載)仕様
駆動電圧DC 12V
1相あたり800アンペア/相
コイル抵抗15 10％Ω/相
ステップ角18。 / step
励磁法1-2相励磁
ドライブモードバイポーラドライバ
125pps
1600 ppsを超える最大応答周波数
最大開始周波数が1100 ppsを超える
モーター表面温度80°C
ねじ棒径3mm
ねじ棒の長さ90 mm
スライダストローク80mm
ねじ棒ピッチ±0.5mm
長さ10.3 cm / 4.1インチ
重さ50グラム（約）
***

↑これはAmazonの説明書きだが、この情報以外に、製品の詳しい日本語の情報は全く見当たらず、中国語の情報を参考にした。
（百度でD8-MOTOR80と検索すれば色々と情報が得られる。）

![スクリーンショット 2020-11-06 20.47.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110060/70823151-a288-f8f6-7356-7321482e4190.png)


A4988の1A1B2A2Bには上記の図を参考に色を合わせてつなげば良い。

翻訳↓

注意点：　モーターは全てドライバによる駆動が必須です、直接電源を接続できません!ドライバーA4988を手配すること。
以下はドライバーのリンク。

製品参考データ：
製品型番: D8-MOTOR80 
（ステッピング）モーター類型：2相4線
定格電圧: 9V-12V (電圧を上げていくと、トルクも上がります、ただしそれに伴って、発熱も大きくなります)
電流: 800mA/phase
スクリュー(ネジ棒)長さ: 90mm
レール長さ: 80mm
モーター直径: 15mm 
スクリュー直径: 3mm
スクリューピッチ: ±0.5mm ※一歩の移動は0.25mm,もしさらに小さくしたい場合は、マイクロステップを採用できます。
歩角度: 18度
駆動方式：　2段階駆動
全体長さ: 15x105mm
重量: 46g
直線走行の速度は毎秒25mm

![スクリーンショット 2020-11-06 21.07.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110060/b5711cec-b248-2ec6-1056-2cf4b53930e0.png)

赤 → A+
黄 → A-
青 → B+
黒 → B-

A+ A- B+ B- はA4988ドライバに対して
1A 1B 2A 2Bとする

A+ → 1A
A- → 1B
B+ → 2A
B- → 2B


赤 → A+ → 1A
黄 → A- → 1B
青 → B+ → 2A
黒 → B- → 2B


#Arduino UNO+CNCシールドを使用
Arduino UNOにCNCシールドを接続する。
これはピンに差し込むだけである。
また準備したA4988ドライバをそれぞれのソケットに接続する。

![IMG_1907.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110060/9d402eb8-6b99-4726-f292-b2cd125ec5bc.jpeg)


CNCシールドとArduinoUNOのピンの対応は以下の通りである。

![CNCシールド対応リスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110060/0eb01457-770d-c6ab-596e-dab09e7241b3.png)

今回はxとzを使用しました

以下はリニアアクチュエータを二機同時に動かすArduinoのスケッチ。
CNCシールド

```c

int Speed = 900;
int Step = 20;

const int xstep = 2;
const int xdir = 5;
const int zstep = 4;
const int zdir = 7;

void setup(){
  Serial.begin(9600);

  pinMode(xstep,OUTPUT);
  pinMode(xdir,OUTPUT);

  pinMode(zstep,OUTPUT);
  pinMode(zdir,OUTPUT);

  digitalWrite(zdir,HIGH);
  digitalWrite(xdir,HIGH);
}

void loop() {
  if(Serial.available()){
    byte buf;
    while (1) {
      if(Serial.available()){
        buf = Serial.read();
       }
       if(buf == 'A'){ 
        digitalWrite(zdir,HIGH);
        digitalWrite(xdir,HIGH);
        for (int u=0; u <=Step; u++){
           digitalWrite(xstep,HIGH);
           digitalWrite(zstep,HIGH);
           delayMicroseconds(Speed);
           digitalWrite(xstep,LOW);
           digitalWrite(zstep,LOW);
           delayMicroseconds(Speed);
        }
       } else if(buf == 'B'){
        digitalWrite(zdir,LOW);
        digitalWrite(xdir,LOW);
         for (int d=0; d <=Step; d++){
           digitalWrite(xstep,HIGH);
           digitalWrite(zstep,HIGH);
           delayMicroseconds(Speed);
           digitalWrite(xstep,LOW);
           digitalWrite(zstep,LOW);
           delayMicroseconds(Speed);
        }
       }
    }
  }
}
```
パルス間隔（周期）:Speed は適切な値を設定すること。
確認はしていないが上述の情報でおそらく毎秒25mmが最大速度だと思われる。

18deg/stepのモーターなので、1回転は20STEP。
1回転で0.5mm進む。

このスケッチでは、シリアルモニターにコマンドA Bを送信すると設定したステップ数まで進みます。

今後時間があるとき、性能評価をしたいと思います。


※12Vで使用すると結構発熱します、そのまま使用すると火傷しますので、必ず強制冷却処理してください。
私はステッピングモーターの後面から冷却するようにファンを取り付けています。

性能評価もしました↓
https://zenn.dev/_kazuya/articles/7b8a421b1b1b4f