Arduinoサーボモーター
サーボモーターは、指定された位置に回転できる優れたデバイスです。
通常、彼らは180度回転できるサーボアームを持っています。 Arduinoを使用すると、サーボに指定された位置に移動するように指示できます。 それと同じくらい簡単!
サーボモーターは、リモートコントロール(RC)の世界で最初に使用され、通常はRCカーの操縦またはRC飛行機のフラップを制御します。 時間が経つにつれて、彼らはロボット工学、自動化、そしてもちろんArduinoの世界での用途を見出しました。
ここでは、サーボモーターを接続する方法と、それを異なる位置に回す方法を説明します。
7年前にArduinoに接続した最初のモーターは、サーボモーターでした。 仕事に戻って、懐かしい瞬間が終わりました!
次のものが必要です。
- USB経由でコンピューターに接続されたArduinoボード
- サーボモーター
- ジャンパー線
サーボモーターの世界には大きな名前はほとんどありません。 HitecとFutabaは、主要なRCサーボメーカーです。 それらを購入するのに適した場所は、Servocity、Sparkfun、Hobbykingです。
この説明可能な多くの情報は、ここにある私のArduino開発クックブックにあります。 :Dステップ1:それらを接続する方法

サーボモーターには、モーター、フィードバック回路、そして最も重要なモータードライバーなど、すべてが組み込まれています。 必要なのは、1本の電力線、1本のアース、1本の制御ピンだけです。
サーボモーターをArduinoに接続する手順は次のとおりです。
- サーボモーターには、3つのピンを持つメスコネクタがあります。 最も暗いまたは黒いものでさえ、通常は地面です。 これをArduino GNDに接続します。
- すべての規格でArduinoの5Vに赤である必要がある電源ケーブルを接続します。
- サーボコネクタの残りのラインをArduinoのデジタルピンに接続します。
Arduinoに接続されたサーボのビューについては、画像を確認してください。
ステップ2:コード
次のコードは、サーボモーターを0度に回転させ、1秒間待機してから90回転させ、さらに1秒間待機させてから180回転させてから戻ります。
//サーボライブラリを含めるサーボモーターが別のデジタルピンに接続されている場合は、servoPinの値を使用されているデジタルピンの値に変更するだけです。
#include //サーボピンを宣言するintservoPin = 3; //サーボオブジェクトServo Servo1を作成します。 void setup(){//使用するピン番号にサーボを接続する必要がありますServo1.attach(servoPin); } void loop(){//サーボを0度にするServo1.write(0); delay(1000); //サーボを90度にするServo1.write(90); delay(1000); //サーボを180度に移動させるServo1.write(180); delay(1000); }
添付ファイル
Servo_motor.inoダウンロード
ステップ3:仕組み

サーボは賢いデバイスです。 1つの入力ピンを使用して、Arduinoから位置を受け取り、そこに行きます。 内部には、モータードライバーと、サーボアームが目的の位置に到達することを確認するフィードバック回路があります。 しかし、入力ピンでどのような信号を受信しますか?
PWMに似た方形波です。 信号の各サイクルは20ミリ秒続き、ほとんどの場合、値はLOWです。 各サイクルの開始時に、信号は1〜2ミリ秒の間HIGHです。 1ミリ秒では0度を表し、2ミリ秒では180度を表します。 中間では、0〜180の値を表します。 これは非常に優れた信頼できる方法です。 グラフィックを使用すると、少しわかりやすくなります。
Servoライブラリを使用すると、Arduino UNOおよび同様のボードのPWMピン9および10のPWM機能が自動的に無効になることに注意してください。
コードの内訳
このコードは、単純にサーボオブジェクトを宣言し、 servo.attach()関数を使用してサーボを初期化します。 サーボライブラリを含めることを忘れないでください。 loop()では、サーボを0度に設定し、待機してから90に設定し、その後180度に設定します。
ステップ4:サーボに関するその他の事項
サーボの制御は簡単で、使用できるトリックがいくつかあります。
正確なパルス時間の制御
Arduinoには、 servo.write(degrees)関数が組み込まれており、サーボの制御が簡単になります。 ただし、すべてのサーボがすべての位置で同じタイミングを尊重するわけではありません。 通常、1ミリ秒は0度を意味し、1.5ミリ秒は90度を意味し、もちろん2ミリ秒は180度を意味します。 一部のサーボには、より小さい範囲または大きい範囲があります。
より良い制御のために、 servo.writeMicroseconds(us)関数を使用できます。この関数は、パラメーターとして正確なマイクロ秒数を取ります。 1ミリ秒は1, 000マイクロ秒に等しいことに注意してください。
より多くのサーボ
複数のサーボを使用するには、複数のサーボオブジェクトを宣言し、それぞれに異なるピンを取り付けて、各サーボを個別にアドレス指定する必要があります。 最初に、必要な数のサーボオブジェクトを宣言する必要があります。
//サーボオブジェクトServo Servo1、Servo2、Servo3を作成します。
次に、各オブジェクトを1つのサーボモーターに取り付ける必要があります。 すべてのサーボモーターが個別のピンを使用することを忘れないでください。
Servo1.attach(servoPin1); Servo2.attach(servoPin2); Servo3.attach(servoPin3);
最後に、各サーボオブジェクトに個別に対処する必要があります。
Servo1.write(0); //サーボ1を0度に設定しますServo2.write(90); //サーボ2を90度に設定
接続に関しては、サーボからのアースはArduinoのGNDに移動し、サーボ電源は5VまたはVIN(電源入力に応じて)になり、最終的に各信号線は異なるデジタルピンに接続する必要があります。 一般的な考えに反して、サーボはPWMピンで制御する必要はありません。どのデジタルピンでも動作します。
連続回転サーボ
連続回転サーボと呼ばれる特別な種類のサーボがあります 。 通常のサーボは入力信号に応じて特定の位置に移動しますが、連続回転サーボは信号に比例した速度で時計回りまたは反時計回りに回転します。 たとえば、 Servo1.write(0)関数は、サーボモーターを最高速度で反時計回りに回転させます。 Servo1.write(90)関数はモーターを停止し、 Servo1.write(180)はモーターを時計回りに最高速度で回転させます。
このようなサーボには複数の用途があります。 しかし、彼らは本当に遅いです。 電子レンジを構築していて、食べ物を回転させるモーターが必要な場合、これがあなたの選択です。 しかし、注意してください、マイクロ波は危険です!
ステップ5:詳細を確認する
ブラシレス、トランジスタドライバー、モーター速度制御などのモーターに関するその他のトピックについては、こちらのArduino開発クックブックをご覧ください。 :D