初めに
Arduinoでサーボモータを動かしたい場合、一般的に販売されているSG92RやMG996R等を使用されると思います。そして、それらの可動域は0~180°となっています。しかし、DS3218はそれらとは異なり、270°のものも存在します。
DS3218を制御する場合他のサーボモータと同様に制御できるか?と気になったのですが、ネットで情報を見つけられなかったので、他のサーボの基本的な扱いは理解した方向けのメモとして残しておきます。
結論から述べると、可能でした。
SG92R等のArduinoのコードを確認する
以下のサイトを参考にします。
記事中では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°に変更して動作するか確認したかったためです。
目視での確認にはなりますが、15°ずつ回転しているのが分かります。
余談
PCA9685を使用する場合も同様に扱うことができます。PCA9685の場合は角度ではなくpwmにパルスを直接書き込みますが、map関数で変換した値をセットすれば動作します。結局仕組みはこういう話ですね。
angle = map(angle,0, 180, SERVOMIN, SERVOMAX); // ここを500~2500にする
pwm.writeMicroseconds(Servo_pin, angle);