t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Arduinoでリニアアクチュエーター(D8-MOTOR80)を動かす

現在、自動コイルワインダーを作ろうと思って色々と試作中である。

一応、巻き自体は自動化できてすこぶる快適だが、巻き線カウンターはまだ非稼働で、巻き位置の調整も手動である。

ということで、こんなものを買ってみた。

※厳密にいえばCNCシールドは私が買ったものと違うが、類似品というか完コピ品なのでどれでも同じ。
 ただしドライバーはA4988のものを選択する。DRV8255という上位互換もあるけど結線がA4988と異なり情報も少ないので私からはおススメしない。

それで買ったはいいんだけど最初上手く動かせなくて仕方ないので自分で作ろうと思い試作してみた。

同じサイズの3枚の木片の同じ位置に穴を空け、タミヤのミニ四駆シャフト2本とM3寸切りボルトを差し込だ構造。
両サイドの木片は土台に固定し、真ん中の木片にはナットを埋め込んで瞬間接着剤で固定。土台には固定せず浮かせておく。
そうすると寸切りボルトを回転させたときにナットの付いた真ん中の木片が左右にスライドするという仕組み。
あとはシャフトカプラ(3mm-5mm)という部品で寸切りボルトとステッピングモーターの軸を固定すれば完成。

で、できたのはいいけどこれのために準備していた28BYJ-48というステッピングモーターが減速ギア入りのものだったらしく、あまりに遅すぎたのでボツ。

ちょうどそのころ購入したリニアアクチュエーターのモーターが型番D8-MOTOR80というものであることが判明し、作例が見つかったので再チャレンジすることになった。

参考にさせていただいたサイト↓
zenn.dev

結線はこんな感じで、Arduinoと結合したときにUSB端子が左に向く方角からみて、左上がX軸用なのでここにドライバを差し込んで、そのすぐ右隣りの4つの端子にリニアアクチュエーターのケーブルを上から黒・青・赤・黄の順で繋ぐ。(追記:リセットボタン付近にあるEN/GNDはジャンパーで導通させておく。ちなみにここがHIGHだとモーターへの電源供給が止まり、LOWだと供給される仕組みのようだ。後述の放熱はEnableピンの電圧操作で使うときだけ通電させることで解決できた。)

※モーターに付いているケーブルは恐らくEH端子かXH端子かPH端子だと思われるけど判別できなかったので切り落としてデュポンコネクタを圧着した。

左下の青い端子台はモーター用の電源を繋ぐところで、逆説すると恐らくドライバが壊れるので注意。

あとはArduinoでコードを記載。
前述のサイトのコードを参考に書いてみた。

int Speed = 500;

const int step_pin = 2;
const int direction_pin = 5;

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

  pinMode(step_pin,OUTPUT);
  pinMode(direction_pin,OUTPUT);

  digitalWrite(direction_pin,HIGH);
}

void slide(double millimeter) {
  int steps = 4 * millimeter * 10;
    for (int s=1; s <=steps; s++){
       digitalWrite(step_pin,HIGH);
       delayMicroseconds(Speed);
       digitalWrite(step_pin,LOW);
       delayMicroseconds(Speed);
    }
}

void loop() {
  if(Serial.available()){
    byte buf;
    while (1) {
      if(Serial.available()){
         buf = Serial.read();
      }
      if(buf == 'A'){ 
        digitalWrite(direction_pin,HIGH);
        slide(1);
      } else if(buf == 'B'){
        digitalWrite(direction_pin,LOW);
        slide(1);
      }
    }
  }
}

whileループの中でslide関数にミリメートル指定、0.1mm単位で値を渡すとその距離スライドする仕組み。
計算としては、ステップ角18°なので、360°/18°=1周あたり20ステップ。ネジ山のピッチが0.5mmなので1周0.5mm/20ステップ = 1ステップあたり0.025mm移動。ということで4ステップで0.1ミリの移動。引数がミリメートル単位なので10を掛けて1が指定されると1ミリ進むようにして、実際slide関数の利用時に0.1mm単位で指定可能になっている。

検証で使うときはArduinoエディタからシリアルモニタを起動して、AやBを入力するとその分進む。
たとえばAAAAAAAAAABBBBBBBBBBと入れると左に1センチ動いた後、右に1センチ戻るという動作になる。

0.1ミリ単位で正確に動作しているのでさすがステッピングモーター。
本当は0.025ミリ単位で動けるけどどのみち機構の方がそんな精度でない気がするのでやめておいた。

さて、実際に動かしてみて気づいたのが発熱が結構すごいということ。
9Vで動作中に触ってしまい指に軽微な火傷を負ってしまった。

一応放射温度計で計ってみたが35℃と表示される。金属表面だからそのままでは放射率が低すぎてまともに計測できないのだ。

そこでこんなものを調達。

到着。

塗装。くせぇ。。

1個のために塗装ブース引っ張りだすのも面倒なのでベランダに段ボールを置いて塗装したんだけどベランダで防毒マスク着けるのも不審者感丸出しなので自重した。通報されたらいやだし。

割と綺麗に仕上がった。

そんで計測してみると5.5V時は約60℃、9V時は約100℃に達することが分かった。

動作温度80℃って書いてたので100℃はちょっとヤバめ。
どうやら稼働中よりも停止中の保持トルクの方が電流が強いように見えるので、この後の課題として待機中はモーターへの給電を止めるような制御を考えたいと思う。

まぁとりあえずコイルワインダー作りの役者は揃った。
いつも見通しが立ったら満足してしまうのでいつ作るかは不明だけど興味関心が維持できれば近々作るやもしれない。

まぁ作ったあと使う予定もノープランなんだけども。

以上。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。