【Arduino】 ステッピングモータ & サーボモータ

LESSON 012  013 014

  ステッピングモータ & サーボモータを動かす

 マイコンボードで制御可能で安価で手に入りやすいモーターは
         ①​ DCモータ
         ② ステッピングモータ
         ③​ サーボモータ
 等がありますが、今回は② ステッピングモータ と ③​ サーボモータ の制御方法について説明します。原理や用途についてはこちらをご覧下さい。

LESSON 012
  ステッピングモータを動かす

構成部品

マイコンボード  Arduino
USBケーブル
ステッピングモータ 28BYJ-48   
       主な仕様    ・ギア比:1/64
                         ・励磁方式:2相ユニポーラ
                         ・ステップ角:5.625°
                         ・出力軸1回転のステップ数:2048(2相励磁)
                         ・定格電圧:5V
                         ・直流抵抗:約22Ω
ドライバーボード ULN2003
電源モジュール  5.0V使用
ジャンパーケーブル
ブレッドボード
配線図

   

  GPIO 8  ⇒ IN1 (ドライバモジュール)​
  GPIO 9  ⇒ IN2 (ドライバモジュール)​
  GPIO  10  ⇒ IN3 (ドライバモジュール)​
  GPIO  11  ⇒ IN4 (ドライバモジュール)
  GPIO  5V    ⇒ +     (電源モジュール)   
  GPIO GND ⇒ GND(電源モジュール)
    
    
スケッチ《 test010 》
#include <Stepper.h>
const int in1=8;
const int in2=10;
const int in3=9;
const int in4=11;
const int STEPS = 2048;
const int STEPS_C = 512;
Stepper myStepper(STEPS,in1,in2,in3,in4);
void setup() { 
myStepper.setSpeed(10);
} 
void loop() { 
myStepper.step(STEPS_C);
delay(500);
}

解説

90度毎に回転するスケッチです。

  • 設定
    #include <Stepper.h>​
     ステッピングモータを制御をするためのライブラリです。
     ※ 標準ライブラリ
     ※ モータやセンサーを使用する場合、必要に応じてライブラリを​組み込む必要があります。
      
    Stepper 変数(steps, pin1, pin2, pin3, pin4)​
     steps:1回転あたりのステップ数 ​
     pin1, pin2, pin3, pin4:モータに接続ピンの番号​

    PIN配置
    正転のみ pin1, pin2, pin3, pin4
    正転逆転 pin1, pin3, pin2, pin4

      

  • void setup() 内
    変数.setSpeed(rpms)​
      モータの速さを毎分の回転数(RPM)で設定​
      rpms:1分間あたりの回転数 正の数 ​
  • void loop() 内
    変数. step(steps)​
      setSpeed()で設定した速さで、指定したステップ数だけモータを回す。​
      steps:モーターが回転するステップ数。​
      逆回転は負を設定​
       ※ 1回転は 2048step なので 
           45度 なら 256step
           90度 なら 512 step になります。
実行

LESSON 013 

サーボモータの速度変えて動かす

構成部品

マイコンボード  Arduino
USBケーブル
サーボモータ SG-90
ジャンパーケーブル
ブレッドボード
配線図
 
  
サーボモータの配線の色表

橙色 制御信号
Vcc
焦茶 GND

    
    
 

スケッチ《 test011 》
#include <Servo.h> 
Servo myservo;
const int SV_PIN = 6;
void setup(){
myservo.attach(SV_PIN, 500, 2400);
}
void loop(){
myservo.write(20);
delay(1000);
myservo.write(90);
delay(1000);
myservo.write(160);
delay(1000);
myservo.write(90);
delay(1000);
}
〇 解説
  

20 ー 90 ー 160 度回転するスケッチです。

  • 設定
    #include <servo.h>​
     サーボモータを制御をするためのライブラリです。
     ※ 標準ライブラリ
     ※ モータやセンサーを使用する場合、必要に応じてライブラリを​組み込む必要があります。
      
    Servo 変数​
     サーボモータ の 変数

    変数​.attach(PIN, min, max);
     min: サーボの角度が0度のときのパルス幅[us]。デフォルトは544。
     max: サーボの角度が180度のときのパルス幅[us]。デフォルトは2400。  

  • void setup() 内
    変数.write(angle)
   analog: 移動させたい角度(0~180)
    
   ※ 変数.writeMicroseconds
      サーボモータに与える出力をマイクロ秒単位で角度指定する方法です。
      サーボモータに与えられるパルスは20ms周期で
                            1周期中のHigh時間を直接指定

反時計回り 原点 時計回り
0 90 180
0.5[ms] 1.45[ms] 2.4[ms]
90° 90°

実行    

LESSON 014 

サーボモータの速度変えて動かす

構成部品

マイコンボード  Arduino
USBケーブル
サーボモータ  SG-90
ジャンパーケーブル
ブレッドボード
配線図           
 
スケッチ《 test012 》
#include <VarSpeedServo.h>
VarSpeedServo myservo1;
VarSpeedServo myservo2;
VarSpeedServo myservo3;
VarSpeedServo myservo4;
void setup() {
myservo1.attach(3);
myservo2.attach(4);
myservo3.attach(5);
myservo4.attach(6);
}
void loop() {
myservo1.write(180, 10, true);
myservo2.write(180, 30, true);
myservo3.write(180, 100, true);
myservo4.write(180, 255, true);
delay(1000);
myservo1.write(0, 10);
myservo2.write(0, 30);
myservo3.write(0, 100);
myservo4.write(0, 0);
delay(10000);
}
〇 解説
  

0 ー 180 度の往復運動の回転速度を替えて回転するスケッチです。

  • 設定
    ​#include <VarSpeedServo.h>
      サーボモータを回転速度を制御をするためのライブラリです。
      ※ 外部ライブラリ
      ※ モータやセンサーを使用する場合、必要に応じてライブラリを​組み込む必要があります。

    VarSpeedServo.hがインクルードされていない場合は
    のメッセージが表示されます。
    GitHub の VarSpeedServo.h サイトに移動し、

  
  [code]をクリックし Download ZIP  を選択しダウンロードして下さい。
    arduino IDE のソフトに先程ダウンロードしたライブラリをインストールします。
   スケッチ → ライブラリをインクルード ← .ZIP形式のライブラリをインストール をクリック
      VarSpeedServo-master ZIP を選択しインクルードします。 

 

    • 設定
      変数​.attach(PIN) ;
            使用するGPIOのピン番号  
    • void setup() 内   
      変数.write(angle, speed, wait)
        angle 移動したい角度 0 ~ 180 度
        speed 1 ~ 255 段階 0 は 最高速度
             wait       動作が完了するまで関数の呼び出しをブロック
                            true    同期
             true無 非同期  
      ※ 同期 サーボモータが指定された角度に到達するまではサーボモータと同期している状態になります。

      実行

まとめ

 
○ Servo.h はサーボモータは非同期なので、次から次と動作が始まるため待ち時間を設ける必要がある場合もありますが、同期出来れば、この角度まで移動したら次の動作になります。
     
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

目次