Arduinoでサーボモーターを制御する方法

Arduinodesabomotawo Zhi Yusuru Fang Fa



サーボモーター オブジェクトの位置を非常に正確に変更または回転できる電気装置の一種です。最初はRC飛行機の翼を制御するために使用されていましたが、その後、ロボット工学、ヒューマノイドロボット、および多くの自動化プロジェクトに進みました.ステッピング モーターとは異なり、その動きは 0° から 180° に制限されます。

通常、サーボ モーターには Arduino を使用して制御できるアームがあります。サーボ モーターは、以下を提供する制御システムで構成されています。 フィードバック モーター シャフトの現在位置については、このフィードバックにより非常に正確に移動できます。

サーボモーターのピン配列

通常、ほとんどのサーボ モーターには 3 つのピンがあります。







  • Vcc ピン (通常は赤 5V)
  • GND ピン (通常黒 0V)
  • 入力信号ピン (Arduino から PWM 信号を受信)



サーボモーターの働き

Vccピンを5Vに、GNDピンを0Vに接続することで、サーボモータを制御できます。黄色の端末では、 PWM サーボモータの回転角度を制御する信号です。 PWM 信号の幅は、モーターがアームを回転させる角度を示します。



サーボモーターのデータシートを調べると、次のパラメーターが得られます。





  • PWM 信号時間
  • PWM の最小幅
  • PWM の最大幅

これらのパラメータはすべて、Arduino サーボ ライブラリで事前定義されています。

Arduinoを使ったサーボモーター

サーボ モーターは、Arduino で非常に簡単に制御できます。 サーボライブラリ これにより、必要に応じてコードをカスタマイズし、サーボアームを希望の角度で回転させることができます。



上記の 3 つのパラメーターはすべて、サーボ ライブラリーで固定されています。これらのパラメータを使用して、次の方法でサーボ モーターの角度を制御できます。

  • PWM 信号幅 = WIDTH_MAX の場合、サーボは 180 度回転します。
  • PWM 信号幅 = WIDTH_MIIN の場合、サーボは 0o に回転します。
  • PWM 信号幅が中間にある場合 WIDTH_MAX と WIDTH_MIN 、サーボモーターは0°から180°の間で回転します

Arduino ピンのいくつかで、必要な PWM 信号を生成できます。サーボモータの入力信号端子にPWM信号を与えます。サーボの残り2ピンをArduinoの5vとGNDに接続。

Arduinoを使ってサーボモーターを制御する方法

ここでは、Arduino を使用してサーボ モーターを接続し、プログラムする方法を説明します。あなたに必要なのは:

  • Arduino UNO
  • USB B ケーブル
  • サーボモーター
  • ジャンパー線

Arduinoでサーボをプログラムする方法

以下にいくつかの簡単な手順を示します。

ステップ1: 定義済みのサーボ ライブラリを含める:

# 含む < Servo.h >

ステップ2: サーボ オブジェクトを作成します。

サーボマイサーボ;

ヒント: 複数のサーボ モーターを制御している場合は、さらにサーボ オブジェクトを作成する必要があります。

サーボ myservo1;
サーボ myservo2;

ステップ 3: PWM 信号をサーボの入力信号ポートに送信する Arduino Uno の制御ピン (9) を設定します。

myservo.attach ( 9 ) ;

ステップ 4: サーボ モーターの角度を目的の値 (例: 90°) に回転します。

myservo.write ( 位置 ) ;

Arduinoコード

からサーボモーターのサンプルプログラムを開く ファイル>サンプル>サーボ>スイープ 、新しいウィンドウが開き、サーボ スケッチが表示されます。

#include

サーボマイサーボ; /// サーボオブジェクトが作成されました 為に サーボモーターの制御
int 位置 = 0 ; /// サーボ位置を保存するために、新しい変数が作成されます
ボイド設定 ( ) {
myservo.attach ( 9 ) ; /// この意志 設定 Arduinoピン 9 為に PWM出力
}
ボイドループ ( ) {
為に ( 位置 = 0 ;位置 = 0 ;位置 -= 1 ) { /// から行く 180 0
myservo.write ( 位置 ) ; /// サーボに「pos」位置に移動するよう指示する
遅れ ( 5 ) ; /// 待つ 為に 5 サーボが位置に到達できるようにミリ秒
}
}

プログラムをコンパイルしてアップロードすると、サーボモーターは開始位置 0 度から 180 度まで、ステップのように 1 度ずつゆっくりと回転し始めます。モーターが 180 度の回転を完了すると、開始点、つまり 0 度に向かって反対方向に回転を開始します。

回路図

ポテンショメータを使用してサーボモータを制御する方法

サーボモーターの位置を手動で制御することもできます。これを行うには、 ポテンショメータ .ポテンショメータには 3 つのピンがあります。外側の 2 つのピンを Arduino の 5V Vcc と GND に接続し、真ん中のピンを Arduino ボードの A0 ピンに接続します。

ポテンショメータでサーボをプログラムする方法

ポテンショメータのスケッチのほとんどは、前の例と同じです。唯一の違いは新しい変数です サブピン コードのセットアップおよびループ セクションの前に定義されます。

int ポットピン = A0;
int 値;

ループ セクションでは、アナログ ピン A0 を使用して、機能付きポテンショメータの値を読み取ります。 analogRead() . Arduino ボードには 10 ビット ADC (アナログ - デジタル コンバーター) が含まれており、ポテンショメーターの位置に応じて 0 ~ 1023 の値を提供します。

val = アナログ読み取り ( サブピン ) ;

最後に、使用した 地図() サーボモーターは00から1800の間でしか回転できないことがわかっているため、サーボの角度に応じて0から1023の数値を再マッピングする機能。

val = マップ ( ヴァル、 0 1023 0 180 ) ;

Arduinoコード

Arduino IDE で利用可能なノブ スケッチを開きます。 ファイル>サンプル>サーボ>ノブ .新しいウィンドウが開き、サーボのノブ スケッチが表示されます。

#include
サーボマイサーボ; /// サーボ オブジェクト名 myservo の作成
int ポットピン = A0; /// アナログ ピンの定義 為に ポテンショメータ
int 値; /// 変数 どれの 意思 読んだ アナログピン値 為に ポテンショメータ

ボイド設定 ( ) {
myservo.attach ( 9 ) ; /// 定義されたピン 9 為に ArduinoのサーボのPWM入力信号
}
ボイドループ ( ) {
val = アナログ読み取り ( サブピン ) ; /// ポテンショメータから値を読み取る ( 間の値 0 1023 )
val = マップ ( ヴァル、 0 1023 0 180 ) ; /// サーボで使用する値をスケーリングします ( 間の値 0 180 )
myservo.write ( ) ; /// スケーリングされた値でサーボ位置を設定します
遅れ ( 15 ) ; /// 待つ 為に 位置に到達するためのサーボ
}

上記のコードは、ポテンショメータを使用してサーボ モーター シャフトを制御するのに役立ちます。シャフトは 0 ~ 180 度の間で回転します。それを使用して、サーボの方向に沿って速度を維持することもできます。

回路図

Arduinoに接続できるサーボモーターの数は?

Arduino UNOが扱えるサーボモーターの最大数は、サーボ用のArduinoライブラリで最大12個、最大で 48個のサーボ Mega などのボードと接続できます。

ヒント: Arduino の電流を使用してサーボを直接実行できますが、サーボ モーターが 500mA その後、Arduino ボードは自動的にリセットされ、電源が失われます。サーボモータ専用の電源を常に使用することをお勧めします。

結論

このチュートリアルでは、Arduino を使用したサーボ モーターの制御メカニズムについて説明しました。ポテンショメータを使用してサーボの位置と速度を制御する基本について説明しました。これで、サーボについてのアイデアが得られました。ロボット工学、RC プロジェクト、およびサーボを使用した自動化の可能性は無限大です。