【Arduino】DS3218(サーボモータ)をArduinoで使う方法

モジュール紹介

この記事はサーボモータDS3218の使い方および品質に関する記事です。

どうもメガネです。

今回はAmazonでよく販売されている少し大きめのサーボモータであるDS3218を購入しました。

今回購入したのは以下のメーカーのものです。

使い方や品質についていくつか注意点もあるのでそれについても解説しました。

制御角が270°のモデルはライブラリが使えない

これが最大の問題ですね。

DS3218は270°のモデルは普通のライブラリのだと制御角がバグります。

今回は参考になるデータシートがあったのでライブラリを使わずに制御する方法で行きたいと思います。

Arduinoでライブラリを使わずにサーボモータを制御する方法は公式ページのフォーラムからコードを手に入れることができました。

今回はこのコードを利用させてもらうことにします。

ライブラリを使うのは簡単ですが、パルス制御も少し精密に制御できるなどの利点があるので悪いことばっかじゃないですよ。

それではやっていきましょう。

パルス幅を書き換える

まずサーボモータをパルス幅で制御するためにDS3218のパルス幅を調べることにします

データシートは以下のサイトで手に入りました

このサイトによれば、DS3218では180°または270°の角度を500µsから2500µsの範囲のパルス幅で制御するようになっているようです。

今回は270°のモデルなので、500µsの時に0°で270°の時に2500µsであると言えます

180°と270°のモデルでパルス幅が同じように分割されるとするとして、ここで角度1°を変更するのに必要なパルス幅を求めてみます。

最大制御パルス幅ー最小制御パルス幅を制御角度で割ると、(2500-500)/270≒7.41µsとなります。

よって500µsのパルス幅から7.41µsずつ広げていくことで角度が1°ずつ変わることになります

詳しいサーボモータの制御原理などについて調べてみると分かると思いますが、基本的にはこのようにサーボモータに送る信号のパルス幅を変えることで制御しています。

気になる人は詳しく調べてみるといいかと思います。

プログラム

ではこれを用いて先ほどのフォーラムから手に入れたコードをもとにやっていきたいと思います。

説明用にコメントを加えておいたので参考にしてください。

int servo = 10;    //サーボモータの制御用に10番ピンを使用

int angle;    //角度用の変数
int pwm;     //与えるパルス幅を指定する変数

void setup()
{
  pinMode(servo, OUTPUT);    //サーボモータのPWM信号用の線にあたるもの
}

void loop ()
{
  for (angle = 0; angle <= 180; angle += 5)  {   //角度を0°から140°まで変える
    servoPulse(servo, angle);  }
  for (angle = 180; angle >= 0; angle -= 5)  {   //角度を140°から0°まで変える
    servoPulse(servo, angle);  }
}
  
void servoPulse (int servo, int angle)
{
  pwm = (angle*11) + 500;       //パルス幅"PWM"を与える式
  digitalWrite(servo, HIGH);  //制御信号オン
  delayMicroseconds(pwm);       //先ほどのPW信号だけonの時間を保つ
  digitalWrite(servo, LOW);     //信号をオフにする。
  delay(50);                    // Refresh cycle of servo
}

先ほどの計算式を参考にこの部分を変更していきます。

pwm = (angle*7.41) + 500;       //パルス幅"PWM"を与える式
digitalWrite(servo, HIGH);  //制御信号オン
delayMicroseconds(pwm);       //先ほどのPW信号だけonの時間を保つ
digitalWrite(servo, LOW);     //信号をオフにする。
delay(50);                    // Refresh cycle of servo
pwm = (angle*7.41) + 500;       //パルス幅"PWM"を与える式

パルス幅の基準点である0°のときのパルス幅は500µsなので、1行目の500は変わりません。

ただし指定パルス幅は7.41µsとなったので、11から7.41に変更します。

以降の部分は変わりません。delayMicrosecondsで指定しているので500+7.41*xµs待機することで指定の時間パルスを出していることになります。

変更作業の確認する。

最後にサーボモータが正しく動作するかを確認してみたいと思います。

プログラムのコード変更前後の動作を見てみます

0°から180°の範囲で動かすようにしていしているのですが、
左のものは明らかに180°を超えているのがわかるかと思います。

一方コード変更後の右の画像は
しっかり0°から180°の範囲で動いていることが分かります。

商品説明

使い方の注意点は以上で終わりです。

購入前の方もいるかと思いますので、商品の内容物等についても確認しておきます。

中華製電子部品あるあるの、黒みがかった透明な袋に入れられてきました。外側は普通のアマゾンの袋に入っていました。

開けてみると以下のように4つ個包装で入っています

一つ取り出して開けてみます。

内容物は以下の写真の通りでした。リストアップしてみます。

  • サーボモータDS3218本体
  • ゴムブッシュ4つ
  • ハトメ4つ
  • 木ネジ4つ
  • 金属サーボホーン用止めネジ(プラス)2つ
  • プラスチック製サーボホーン4種
  • 金属製サーボホーン1つ

これでひとセットです。4つとも同じ感じで個包装で丁寧に入っています。

メーカー純正だったりするとここまでサービスはしてくれないのでかなりコスパはいい感じがします

サーボモータの線の長さは次の写真くらいです。

サラサクリップ2本分といったところです。RCカーに使うには少し長めかもしれません。

金属製サーボホーンを見てみます。

結構高級感があっていい感じです。

表面はつやのある加工になってます。非常によくできている印象をうけます。

付属品のおまけ程度にしか考えていなかったのですが、単体でメーカー品を買ったら一つ500円くらいはしそうな高級感があります。

すこしボケてしまってますが、サーボホーン固定用のねじは横に2か所あり、しめるには六角ボルトが必要です。

分解してみる

さて、使い方と内容物については以上です。

まぁでもサーボモータなんてそこら中に使い方が転がっていますし、

ただ単に紹介するだけでは面白くないので分解して品質を確認してみることにします

背面に4つネジがあるのでこれを外していきます。

ネジ穴部分にゴムブッシュが付いているので一応防滴程度の性能はありそうですね。

分解整備もとりあえず行えそうです。

外れました。裏のケースとアルミのケース、それと上のプラケースから構成されています。

写真だと伝わりにくいかもしれませんが、結構しっかり作られている感じはあります。

上部のギア部分を外してみます。

ギアは商品説明通りちゃんと金属製です。箇所によって材質は異なるようです。

すごいなと思ったのは軸受け部分ですね。

ちゃんとボールベアリングが使われています

この短い軸によこから強い力が加わることはそうそうないとは思いますが、やはりあるとしっかりしたつくりである印象を受けますね。

あと説明通りギアは全て金属製です。

SG90とは比較にならないくらい鋼製が高いことは言うまでもないことだと思います。

さらに上部のモータの止めネジを外してみます。上のふただと思っていた部分は二部構成になってるみたいですね。アルミカウル内はモータの他に制御基板しか入っていないので結構スカスカでした。

1立方cmくらいの余裕はあると思います。

さらにモータのロータリーエンコーダを見るためにモータ止めネジを外して分解してみました。

小型のエンコーダが入って手いました。手で回してみましたがカクカクするような感じはありません。

動作させると分かりますがSG90よりははるかにノイズが少ないです。

回していて思ったんですが、270°が動作角のはずなのにストッパーが見当たらないんですよね

もしかしたら制御回路で270°を指定しているのかもしれません。(物理的に壊れないように。)

最後です。

オレンジ色のリングは防滴用のゴムパッキンだと思われます。上下にありますが、あまり全体を覆うようなものではないので気休め程度に考えていた方が長く使えそうです。

分解は以上になります。

出品者やデータシートの説明通りでこれといって異なる点などは見受けられませんでした。

まとめ

簡単にですが、DS3218をArduinoで使う方法についてまとめてみました。

ライブラリを使えればよいのですが、SG90を1°制御するのに必要なパルス幅が11µsで今回のように他のサーボモータに当てはまらないこともあるので、自分でコードを改変しなければいけないこともあります。

データシート等で検索をするとヒントがあるかもしれないので迷ったときはまず

「商品型番 detasheet」で検索するといいですね。

「でかいサーボモータを買ってみたけど指定通りうごかねぇぞ、、、、、」

という人の参考になれれば幸いです。

また品質については分解画像の通り、金属製で鋼製も高いです。

力がかかる作業にも問題なく使えそうです。

それでは。

タイトルとURLをコピーしました