Arduino-servo-motor

提供:Dev Guides
移動先:案内検索

Arduino-サーボモーター

サーボモーターは、出力軸を備えた小さなデバイスです。 このシャフトは、サーボにコード化された信号を送信することにより、特定の角度位置に配置できます。 コード化された信号が入力ラインに存在する限り、サーボはシャフトの角度位置を維持します。 コード化された信号が変化すると、シャフトの角度位置が変化します。 実際には、ラジコン飛行機でサーボを使用して、エレベーターや舵などの操縦翼面を配置します。 また、ラジコンカー、パペット、そしてもちろんロボットにも使用されています。

サーボモーター

サーボはロボット工学に非常に役立ちます。 モーターは小さく、制御回路が内蔵されており、サイズが非常に強力です。 Futaba S-148などの標準的なサーボは42オンス/インチのトルクを持ち、そのサイズに強いです。 また、機械的負荷に比例して電力を消費します。 したがって、軽負荷のサーボは多くのエネルギーを消費しません。

サーボモーターの内部構造を次の図に示します。 制御回路、モーター、ギアのセット、およびケースを見ることができます。 また、外界に接続する3本のワイヤを見ることができます。 1つは電源(+5ボルト)、接地用で、白い線は制御線です。

サーボモーター制御回路

サーボモーターの働き

サーボモーターには、出力軸に接続されたいくつかの制御回路とポテンショメーター(可変抵抗器、別名ポット)があります。 上の写真では、ポットは回路基板の右側にあります。 このポットにより、制御回路はサーボモーターの現在の角度を監視できます。

シャフトが正しい角度にある場合、モーターは停止します。 回路が角度が正しくないと判断した場合、モーターは目的の角度になるまで回転します。 サーボの出力軸は、約180度のどこかに移動できます。 通常、それは210度の範囲内のどこかにありますが、メーカーによって異なります。 通常のサーボを使用して、0〜180度の角運動を制御します。 メイン出力ギアに機械式ストップが組み込まれているため、機械的にそれ以上回転することはできません。

モーターに加えられる電力は、移動に必要な距離に比例します。 したがって、シャフトが長い距離を回転する必要がある場合、モーターは最高速度で動作します。 ほんの少しだけ回す必要がある場合、モーターはより遅い速度で動作します。 これは*比例制御*と呼ばれます。

サーボが回転する角度をどのように伝えますか?

制御ワイヤは、角度を伝えるために使用されます。 角度は、制御ワイヤに適用されるパルスの持続時間によって決まります。 これは「パルス符号化変調」と呼ばれます。 サーボは、20ミリ秒(.02秒)ごとにパルスを検出することを想定しています。 パルスの長さは、モーターの回転距離を決定します。 たとえば、1.5ミリ秒のパルスは、モーターを90度の位置(通常、ニュートラル位置と呼ばれます)に回転させます。 パルスが1.5ミリ秒より短い場合、モーターはシャフトを0度に近づけます。 パルスが1.5ミリ秒より長い場合、シャフトは180度近くに回転します。

アングルターン

必要なコンポーネント

次のコンポーネントが必要になります-

  • 1×Arduino UNOボード
  • 1×サーボモーター
  • 1×ULN2003駆動IC
  • 1×10KΩ抵抗

手順

回路図に従って、以下の画像に示すように接続します。

サーボモーター接続

スケッチ

コンピューターでArduino IDEソフトウェアを開きます。 Arduino言語でコーディングすると、回路が制御されます。 [新規]をクリックして、新しいスケッチファイルを開きます。

スケッチ

Arduinoコード

/*Controlling a servo position using a potentiometer (variable resistor)*/

#include <Servo.h>
   Servo myservo;//create servo object to control a servo
   int potpin = 0;//analog pin used to connect the potentiometer
   int val;//variable to read the value from the analog pin

void setup() {
   myservo.attach(9);//attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
  //reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
  //scale it to use it with the servo (value between 0 and 180)
   myservo.write(val);//sets the servo position according to the scaled value
   delay(15);
}

注意すべきコード

サーボモーターには、電源、アース、信号の3つの端子があります。 電源線は通常赤であり、Arduinoの5Vピンに接続する必要があります。 アース線は通常黒または茶色で、ULN2003 ICの1つの端子(10 -16)に接続する必要があります。 Arduinoボードを損傷から保護するには、そのためのドライバーICが必要です。 ここでは、サーボモーターを駆動するためにULN2003 ICを使用しました。 信号ピンは通常黄色またはオレンジ色であり、Arduinoピン番号9に接続する必要があります。

ポテンショメーターの接続

分圧器/電位分割器は、出力電圧を入力電圧の特定の比率にスケーリングする直列回路の抵抗器です。 以下は回路図です-

ポテンショメーターの接続

V _ \ {out} =(V _ \ {in} \ times R _ \ {2})/(R _ \ {1} + R _ \ {2})

V〜out〜は出力電位であり、直列の印加入力電圧(V〜in〜)および抵抗器(R〜1〜およびR〜2〜)に依存します。 これは、R〜1〜を流れる電流が分割されずにR〜2〜にも流れることを意味します。 上記の式では、R〜2〜の値が変化すると、V〜out〜は入力電圧V〜in〜に応じてスケーリングします。

通常、ポテンショメータは分圧器であり、ノブを使用してスケーリングされる可変抵抗器の値に基づいて回路の出力電圧をスケーリングできます。 次の図に示すように、GND、信号、+ 5Vの3つのピンがあります-

ポテンショメーターと説明

結果

ポットのNOP位置を変更すると、サーボモーターの角度が変わります。