「Arduinoの基礎 - サーボモータ」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == ここでは、Arduinoを使用して、サーボモータを駆動させる方法を記載する。<br> <br> サーボモータは、模型の車や飛行…」)
 
(文字列「</source>」を「</syntaxhighlight>」に置換)
 
(同じ利用者による、間の1版が非表示)
35行目: 35行目:
サーボモータは<code>Servo</code>クラスで実装されており、サーボモータの切れ角は<code>Servo.write</code>メソッドに0から180で指定する。<br>
サーボモータは<code>Servo</code>クラスで実装されており、サーボモータの切れ角は<code>Servo.write</code>メソッドに0から180で指定する。<br>
中立位置は、90である。<br>
中立位置は、90である。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <Servo.h>
  #include <Servo.h>
   
   
55行目: 55行目:
     delay(15);
     delay(15);
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
実際に、サーボモータへの出力をオシロスコープで確認すると(下図を参照)、20.0[ms]周期のPWM信号が送信されている。<br>
実際に、サーボモータへの出力をオシロスコープで確認すると(下図を参照)、20.0[ms]周期のPWM信号が送信されている。<br>

2021年11月24日 (水) 18:08時点における最新版

概要

ここでは、Arduinoを使用して、サーボモータを駆動させる方法を記載する。

サーボモータは、模型の車や飛行機、あるいはロボット等の遠隔操作に使用される。

サーボモータは信号を受信すると、信号に応じた角度にスプライン軸が動く。
一般的に、軸にはサーボホーンと呼ばれる部品が取り付けられる。


サーボ制御信号

サーボモータには、ワイヤが3本接続されており、そのうち2本は駆動用の電源、残りの1本が信号を受信する。
一般的に、PWM信号を受信して、それに応じた切れ角に動作する。

(1) 基本となる周期は、20[ms](50[Hz])で約1.5[ms](1500[µs])のパルス信号を受信すると、軸は中立位置に動く。
(2) 2[ms]のパルス信号を受信すると、約90[度]時計回りに動く。
(3) 1[ms]のパルス信号を受信すると。約90[度]反時計回りに動く。

Arduino Servo 1.png


実際の製品において、周波数は50[Hz]から200[Hz]のものがあり、中立となるパルス幅は1520[µs]となるなど、製品によって仕様の違いがある。


サーボモータの制御

Arduinoでは、サーボモータ制御用ライブラリが使用できる。
そのため、設計者自身が特定のパルス幅の信号を生成する必要はない。

下図のように可変抵抗を接続して、実際に、ツマミの動作量とサーボモータの切れ角を同期させる。

Arduino Servo 2.png


Arduinoのサンプルコードを以下に記述する。

可変抵抗からの電圧を、アナログ信号の1番ピンで読み取る。
analogRead関数は、0から1023までの値を返すため、0を-90[度]、1023を+90[度]に対応させる。
ここでは、0から1023までの値を0から180に対応させるため、map関数を使用している。

サーボモータはServoクラスで実装されており、サーボモータの切れ角はServo.writeメソッドに0から180で指定する。
中立位置は、90である。

 #include <Servo.h>
 
 Servo servo;
 
 const int PIN_SERVO = 10;
 const int PIN_POT = 1;
 
 void setup()
 {
    servo.attach( PIN_SERVO );
 }
 
 void loop()
 {
    int i = analogRead( PIN_POT );
    int angle = map( i, 0, 1023, 0, 180 );
    servo.write( angle );
    delay(15);
 }


実際に、サーボモータへの出力をオシロスコープで確認すると(下図を参照)、20.0[ms]周期のPWM信号が送信されている。

Arduino Servo 3.png