スポンサーリンク

サーボモータ SG90

s_servo.png
  • マイコンなどから制御可能な小型サーボモータ
    • PWMサイクル:20 ms
    • 制御パルス:0.5~2.4 ms
    • 制御角:±約90度(180度)
    • トルク:1.8 kgf・cm
    • 動作速度:0.1 秒/60度
    • 動作電圧:4.8 V(~5V)
    • 重量:9 g
  • データシート

Arduinoとの接続

  • サーボモータとArduinoを以下のように接続する。
    サーボモータ信号名Arduino備考
    GND(茶色)GND
    Vcc(赤)5V
    制御(オレンジ)任意のPWM出力(デジタルの3、5、6、9、10、11)シルクの「~」マークが目印

    servo-setsuzoku.png

リファレンス

サンプルコード1

  • 「ファイル」→「スケッチの例」→「Servo」→「Sweep」
/*
・サーボモータ SG90 のサンプルプログラムです。
・右回転、左回転を繰り返します。
・Arduinoとの接続
    GND(茶色)      GND
    Vcc(赤)        5V
    制御(オレンジ) 任意のPWM出力(デジタルの3、5、6、9、10、11)
*/

#include <Servo.h> 

const int servoPin = 3;    // サーボの接続ピン(定数)
Servo myservo;             // サーボオブジェクトを生成
int pos = 0;               // サーボのポジション(変数)

void setup() 
{ 
  myservo.attach(servoPin);  // サーボ変数をピンに割り当て
} 

void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1){   // pos変数を0から180まで変化させる
    myservo.write(pos);                // サーボの角度をpos変数の値にする
    delay(15);                         // 回転するまで待つ
  } 
  for(pos = 180; pos>=1; pos-=1){      // pos変数を180から0まで変化させる
    myservo.write(pos);                // サーボの角度をpos変数の値にする
    delay(15);                         // 回転するまで待つ
  } 
}

サンプルコード2

  • 「ファイル」→「スケッチの例」→「Servo」→「SerialControl」
/*
・サーボモータ SG90 のサンプルプログラムです。
・シリアルモニタから角度(1~180)を指定してサーボモータを制御します。
・マイコンボードに書き込み後、「ツール」→「シリアルモニタ」を起動してください。
・シリアルモニタの改行の設定を「LFのみ」にしてください。
・Arduinoとの接続
    GND(茶色)      GND
    Vcc(赤)        5V
    制御(オレンジ) 任意のPWM出力(デジタルの3、5、6、9、10、11)
*/

#include <Servo.h> 
 
const int servoPin = 3;        // サーボの接続ピン(定数)
Servo myservo;                 // サーボオブジェクトを生成
int pos = 0;                   // サーボのポジション(変数)
String inString = "";          // 受信文字列用のバッファ

void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(servoPin);   // サーボ変数をピンに割り当て
  myservo.write(pos);         // ポジションを0に設定
  delay(15);                  // 回転するまで待つ
} 
 
void loop() 
{
  while (Serial.available() > 0) {  // 受信データがあったら…
    int inChar = Serial.read();     // 1バイト読み込む 
    if (isDigit(inChar)) {           // 数値だったら…
      inString += (char)inChar;      // 文字列を連結する
    }
    if (inChar == '\n') {            // 改行コードLFが来たら…
      pos = inString.toInt();        // 文字列を数値に変換する
      if (pos < 1 || pos > 180) {    // 数値が範囲外なら…
        Serial.println("Parameter Error");// エラー表示   
      }else{
        myservo.write(pos);          // 範囲内ならサーボモータを回転
        delay(15);                   // 回転するまで待つ
        Serial.print("OK:");        // OK
        Serial.println(pos);
      }
      inString = "";                 // バッファクリア
    }
  }
}

参考資料


Total:21366 / Today:2 / Yesterday:6

スポンサーリンク


添付ファイル: fileservo-setsuzoku.png 1948件 [詳細] fileSG90_a.pdf 3507件 [詳細] files_servo.png 1531件 [詳細]

トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-10-10 (土) 22:14:20