So-net無料ブログ作成

SG-90サーボの鳴きを止める [Arduino]

M-08761.jpg

サーボでスローアクションポイントをやる場合に、入手性や価格の安さから、定番の「SG-90」サーボを使うことが多いと思います。

このサーボには難点がありまして、角度を維持してる時に「ジリジリ」や「チリッ、チリッ」と鳴くのです。

Arduinoは、サーボの角度を維持するためにPWM信号を出し続けているのですが、SG-90サーボのポテンショメータの精度が悪いため不安定になっているのが原因と思っています。(出し続けなくても角度は維持します。)

注意深く観察するとほんの僅か角度が動くこともあります。

精神衛生上もよろしくないので、スケッチで鳴きを止めてみました。

ヤードポイント一括転換のスケッチを例にすると、

void setup()内で、

POINT_1.attach(40);
POINT_2.attach(41);
POINT_3.attach(42);

サーボ変数を各ピンに割り当ててますが、この3行を、

void loop()
{
POINT_1.attach(40);
POINT_2.attach(41);
POINT_3.attach(42);

void loop()内の先頭にも書き足します。

そして、void loop()の最終行手前には、detach()を書き加えます。

}
POINT_1.detach();
POINT_2.detach();
POINT_3.detach();
}  //最終行

こう書き加えると、SG-90の鳴きはピタリと鳴き止みます。


解説しますと、

初めにvoid setup()内で、サーボ変数を各ピンに割り当てます。

1週目のvoid loop()で再度サーボ変数を各ピンに割り当てますが、Arduinoはすでに割り当てているのに、文句も言わず律義に再度割り当てます。(なんの変化もありません)

いずれかの番線選択ボタンを押すと、該当ポイントを転換し、転換終了すると最終行手前の、

POINT_1.detach();
POINT_2.detach();
POINT_3.detach();
} 

detach()で各ピンを開放(切り離し)してサーボに送っていたPWM信号を遮断します。(ここで鳴きが止まります)

遮断してもサーボは角度を維持したままですが、Arduinoから各サーボは見えなくなってしまいます。

2週目のvoid loop()の最初に、サーボ変数を各ピンに割り当てますので、サーボはまた見えるようになりますが、他の番線選択ボタンを押さない限り、サーボにPWM信号は送らないので鳴きは止まったままです。

これで秋月に「SG-90」を数十個も注文した西の方も安心ですね。(笑)

以上です。















コメント(7) 
共通テーマ:趣味・カルチャー