人間のあるべき姿の探索

思索・人形・エンジニアリング

DS3218サーボをArduinoで制御する

初めに

 Arduinoサーボモータを動かしたい場合、一般的に販売されているSG92RやMG996R等を使用されると思います。そして、それらの可動域は0~180°となっています。しかし、DS3218はそれらとは異なり、270°のものも存在します。

 DS3218を制御する場合他のサーボモータと同様に制御できるか?と気になったのですが、ネットで情報を見つけられなかったので、他のサーボの基本的な扱いは理解した方向けのメモとして残しておきます。

 結論から述べると、可能でした。

SG92R等のArduinoのコードを確認する

以下のサイトを参考にします。

zenn.dev

記事中ではSG90を使用されています。そして、コードは以下の通りです。

#include <Servo.h>

Servo myservo;
const int SV_PIN = 7;

void setup() {
  myservo.attach(SV_PIN, 500, 2400);
}

void loop() {
  myservo.write(0);  // サーボモーターを0度の位置まで動かす
  delay(4000);

  myservo.write(90);  // サーボモーターを90度の位置まで動かす
  delay(4000);

  myservo.write(180);  // サーボモーターを180度の位置まで動かす
  delay(4000);
}

Servo.hでの制御を前提としますが、ポイントとしてはmyservo.attachで指定している500, 2400の数字で、これがパルス幅になります。アタッチ後は論理的に角度を指定すればその通り動作するため、サーボモータごとのパルス幅の仕様を確認します。

データシートを見る

ありました。

https://images-na.ssl-images-amazon.com/images/I/81Lbgu+nG6L.pdf

4-3より、パルス幅は500~2500μsecなので、こちらの値をattachメソッドで適用すれば良さそうです。

動作確認

可動域目いっぱいまで使用せず、ひとまず120~150°の範囲で動作させてみました。というのも、サーボモータを使用したいユースケースとして、値域の中心角度から上下にn度回転させたいケースが多く、90°から135°に変更して動作するか確認したかったためです。

youtu.be

目視での確認にはなりますが、15°ずつ回転しているのが分かります。

余談

PCA9685を使用する場合も同様に扱うことができます。PCA9685の場合は角度ではなくpwmにパルスを直接書き込みますが、map関数で変換した値をセットすれば動作します。結局仕組みはこういう話ですね。

angle = map(angle,0, 180, SERVOMIN, SERVOMAX);   // ここを500~2500にする

pwm.writeMicroseconds(Servo_pin, angle);