Arduino-サーボモーター
サーボモーターは、出力シャフトを備えた小さなデバイスです。このシャフトは、サーボにコード化された信号を送信することにより、特定の角度位置に配置できます。コード化された信号が入力ラインに存在する限り、サーボはシャフトの角度位置を維持します。コード化された信号が変化すると、シャフトの角度位置が変化します。実際には、サーボはラジコン飛行機でエレベーターやラダーなどの操縦翼面を配置するために使用されます。また、ラジコンカー、人形、そしてもちろんロボットにも使用されています。
サーボはロボット工学で非常に役立ちます。モーターは小型で、制御回路が内蔵されており、そのサイズの割には非常に強力です。Futaba S-148などの標準サーボは42オンス/インチのトルクを持ち、そのサイズに強いです。また、機械的負荷に比例した電力を消費します。したがって、負荷の軽いサーボは多くのエネルギーを消費しません。
サーボモーターの内臓を次の図に示します。あなたは制御回路、モーター、ギアのセット、そしてケースを見ることができます。外の世界につながる3本のワイヤーも見ることができます。1つは電源(+ 5ボルト)、アース用で、白い線は制御線です。
サーボモーターの働き
サーボモーターには、出力シャフトに接続されたいくつかの制御回路とポテンショメーター(可変抵抗器、別名ポット)があります。上の写真では、回路基板の右側にポットが見えます。このポットにより、制御回路はサーボモーターの現在の角度を監視できます。
シャフトが正しい角度にある場合、モーターは停止します。回路が角度が正しくないことを検出した場合、モーターは希望の角度になるまでモーターを回転させます。サーボの出力軸は約180度のどこかを移動することができます。通常は210度程度ですが、メーカーによって異なります。通常のサーボを使用して、0〜180度の角運動を制御します。メイン出力ギアに機械的ストップが組み込まれているため、機械的にそれ以上回転することはできません。
モーターに適用される電力は、モーターが移動する必要のある距離に比例します。そのため、シャフトを長距離回転させる必要がある場合、モーターは全速力で回転します。少しだけ回転させる必要がある場合、モーターは低速で動作します。これは呼ばれますproportional control。
サーボが回転する角度をどのように伝えますか?
制御線は角度を伝えるために使用されます。角度は、制御線に適用されるパルスの持続時間によって決定されます。これはPulse Coded Modulation。サーボは、20ミリ秒(.02秒)ごとにパルスを確認することを想定しています。パルスの長さによって、モーターがどれだけ回転するかが決まります。たとえば、1.5ミリ秒のパルスは、モーターを90度の位置(ニュートラル位置と呼ばれることが多い)に回転させます。パルスが1.5ミリ秒より短い場合、モーターはシャフトを0度に近づけます。パルスが1.5ミリ秒より長い場合、シャフトは180度近くに回転します。
必要なコンポーネント
次のコンポーネントが必要になります-
- 1×ArduinoUNOボード
- 1×サーボモーター
- 1×ULN2003駆動IC
- 1×10KΩ抵抗
手順
回路図に従って、下の画像に示すように接続します。
スケッチ
コンピューターでArduinoIDEソフトウェアを開きます。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が必要になります。ここでは、ULN2003ICを使用してサーボモーターを駆動しました。信号ピンは通常黄色またはオレンジ色であり、Arduinoのピン番号9に接続する必要があります。
ポテンショメータの接続
分圧器/分圧器は、印加された入力電圧の特定の比率に出力電圧をスケーリングする直列回路の抵抗器です。以下は回路図です-
$$ V_ {out} =(V_ {in} \ times R_ {2})/(R_ {1} + R_ {2})$$
Vのうちには、印加される入力電圧(Vに依存する出力電位、であるで)と抵抗(R 1及びR 2が直列に)。これは、Rに流れる電流を意味1はまた、Rを介して流れる2分割されず。上記の式では、R 2の値が変化すると、Voutは入力電圧Vinに応じてスケーリングします。
通常、ポテンショメータは分圧器であり、ノブを使用してスケーリングされる可変抵抗器の値に基づいて回路の出力電圧をスケーリングできます。下の図に示すように、GND、信号、および+ 5Vの3つのピンがあります。
結果
ポットのNOP位置を変更することにより、サーボモーターはその角度を変更します。