Arduino-servo-motor
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位置を変更すると、サーボモーターの角度が変わります。