[Nefry BTとGrove接続実験] サーボモータ

サーボモータモジュール

私が購入したGROVEスターターキットV3に入っていたサーボモータモジュールには、型番や定格が記載されていませんでした。しかし、形状や付属品はスイッチサイエンスさんの単体販売ページに掲載されているものと同じに見えます。

Groveサーボモータモジュール

サーボモータの動作

サーボモーターはPWMで指定された値に応じて軸の角度が変わる特殊なモーターです。通常180度程度の可動域があります。PWMについては別記事に解説を記載しているので参照してください。

サーボモータの可動域の例

サーボモータのPWMパラメータは、一般的には、周期は10〜20msでパルス幅は0.5ms〜2.5msぐらいのようですが、機種による差が大きく、また個体による差もあるようです。

筆者が持っているサーボモーターでは、次のようなパラメーターで動作するようです。

筆者が持っているサーボモータのPWMパラメータ

プログラム

Nefry BTに装備されているスイッチを押す度に、0°、90°、180°の位置へ移動を繰り返すプログラムです。

//Groveケーブルを接続するGroveコネクターを1つ選んで#define文に記載してください。
// Nefry BT無印の場合: D2, A0, A2 (注:D0は使えません)
// Nefry BT R2の場合: D0, D2, D5, A1  (注:A0を使うときはA1を記載します)
#define PIN D2

// LEDCのパラメータ設定
//   LEDC_CHANNEL        : チャンネル : 0
//   LEDC_RESOLUTION_BITS: 目盛数    : 10bit (0〜1023)
//   LEDC_FREQUENCY  : 周波数    : 50Hz (= 20ms周期)
#define LEDC_CHANNEL 0
#define LEDC_RESOLUTION_BITS 10
#define LEDC_FREQUENCY 50

//  30/1024*20ms = 0.59ms
//  77/1024*20ms = 1.50ms
// 122/1024*20ms = 2.38ms
uint32_t pulse[3] = {30, 77, 122};
int n = 0;

void setup() {
  ledcSetup(LEDC_CHANNEL, LEDC_FREQUENCY, LEDC_RESOLUTION_BITS);
  ledcAttachPin(PIN, LEDC_CHANNEL);
  Serial.println(pulse[n]);
  ledcWrite(0, pulse[n]);
  Nefry.enableSW();
}

void loop() {
  if (Nefry.readSW()) {
    n = (n+1) % 3;
    Serial.println(pulse[n]);
    ledcWrite(0, pulse[n]);
  }
}

配列宣言 pulse[3]で、0°、90°、180°のパルス幅を覚える配列を定義しています。
setup( )ルーチン内で ledcSetup(…) を実行して、チャンネル、周波数、目盛数を設定し、ledcAttachPin( )でGPIOピンとチャンネルを結びつけます。ledcWrite( )で0°のパルス幅をサーボモーターに設定しています。

次に、loop( )}ルーチン内では、スイッチが押される度に90°、180°、0°のパルス幅を順に設定しています。

諸元

名称Servo
サーボモータ
バージョン不明
Seeed社 Wikihttp://wiki.seeedstudio.com/Grove-Servo/
スイッチサイエンス商品ページhttps://www.switch-science.com/catalog/1858/
Nefry BT無印 動作ソケットD2, A0, A2
Nefry BT R2 動作ソケットD0, D2, D5, A0(プログラム上はA1)

「Nefry BTとGroveモジュール接続実験」 トップページ

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください