「Arduinoの基礎 - ステッピングモータ」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
(ページの作成:「== 概要 == ここでは、2相4ワイヤの小さなステッピングモータを、Arduinoから制御する方法について記載する。<br> <br> 一般的なモ…」)
 
編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
ここでは、2相4ワイヤの小さなステッピングモータを、Arduinoから制御する方法について記載する。<br>
ここでは、2相4ワイヤの小さなステッピングモータとを、Arduinoから制御する方法について記載する。<br>
<br>
<br>
一般的なモータは連続回転するのを期待する時に使用するが、ステッピングモータは特定の角度だけ回って止まるような動作をしたい場合に使用する。<br>
一般的なモータは連続回転するのを期待する時に使用するが、ステッピングモータは特定の角度だけ回って止まるような動作をしたい場合に使用する。<br>
6行目: 6行目:
<br><br>
<br><br>


== ステッピングモータの使用 ==
== ステッピングモータ(バイポーラ)の使用 ==
ここで使用する小さなステッピングモータは、1ステップで18[度]回転するモータで、20ステップで1回転する。<br>
ここで使用する小さなステッピングモータは、1ステップで18[度]回転するモータで、20ステップで1回転する。<br>
また、使用するステッピングモータの種類は、バイポーラステッピングモータといい、内部にコイルが2つあり、その極性を切り替えることでモータの回転角を操作する。<br>
また、使用するステッピングモータの種類は、バイポーラステッピングモータといい、内部にコイルが2つあり、その極性を切り替えることでモータの回転角を操作する。<br>
23行目: 23行目:
<br>
<br>
Arduinoのサンプルコードを以下に記述する。<br>
Arduinoのサンプルコードを以下に記述する。<br>
Arduinoの<code>Stepper</code>ライブラリが使用できる。<br>
<br>
<br>
<code>Stepper</code>クラスの<code>setSpeed</code>メソッドでモータの回転速度をRPMで指定する。<br>
<code>Stepper</code>クラスの<code>setSpeed</code>メソッドでモータの回転速度をRPMで指定する。<br>
48行目: 49行目:
     stepper.step(-10);
     stepper.step(-10);
     delay(1000);   
     delay(1000);   
}
</source>
<br><br>
== ステッピングモータ(ユニポーラ)の使用 ==
このセクションでは、ユニポーラ型のステッピングモータである28BYJ-48を使用する。<br>
<br>
ここでは、ステッピングモータドライバICとしてULN2003搭載ドライバボードを使用している。<br>
このドライバボードの詳細が確認できなかったので少し曖昧な点がある。<br>
そのため、実験的なスタンスで見ること。<br>
<br>
ステッピングモータ28BYJ-48のデータシートは下図の通りである。<br>
モータの出力軸は5[mm]径である。<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 1.png|フレームなし|中央]]
<br>
また、配線図は下図の通りである。<br>
ここでは、ULN2003搭載ドライバボードの電源電圧に9[V]電池を使用しているが、5[V]の方がよい可能性がある)<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 2.png|フレームなし|中央]]
<br>
Arudinoのサンプルコードを以下に記述する。<br>
Arduinoの<code>Stepper</code>ライブラリが使用できる。<br>
<br>
ここでは、電動スライダとしては使用している。28BYJ-48は、内部で1/64のギア比があるため、小さいながらもトルクがあって使いやすい。<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 3.png|フレームなし|中央]]
<source lang="c++">
#include <Stepper.h>
const int number_of_steps = 32;
const int steps_output_rev = 32 * 64; // 2048
const int CW = 1;
const int CCW = -1;
Stepper stepper(number_of_steps, 8, 10, 9, 11);
void setup()
{
    stepper.setSpeed(300);
}
void loop()
{
    int steps;
    steps = get_step_by_rev(CW, 1);
    stepper.step(steps);
    delay(3000);
    steps = get_step_by_rev(CCW, 1);
    stepper.step(steps);
    delay(3000); 
}
int get_step_by_rev(int dir, float rev)
{
    return dir * (steps_output_rev * rev); 
  }
  }
  </source>
  </source>

案内メニュー