micro:bit Makecodeでサーボモータ(FT90B)の動作テスト

2021.10.07 Coskx Lab  

1 はじめに

micro:bitにサーボモータ(FT90B 3V駆動)を接続して動作させます。





サーボモータは指定した角度に軸角度が追従するモータです。0から180度の範囲で動作します。
ブロックプログラムでは角度(単位は度)を指令値として直接与えることができます。
舞台裏で,角度指定にはPWM信号が用いられ,PWM周期20msecで,正のパルス幅で角度指令を与えます。
パルス幅-角度の関係は一次関数で表されます。
パルス幅0.5msecのとき0度,パルス幅2.4msecのとき180度となります。

注意 動作範囲が360度となっているサーボモータは,同じサーボモータという名前ですが,指令値に応じた角速度で回転しますので,全く別の種類のモータです。
注意 一般的に「サーボモータ」という言葉は,もっと広い意味で使われています。
   ここではラジオコントロール模型用サーボモータ(RCサーボ)のことを「サーボモータ」と呼んでいます。

2 使用環境

3 端子の割り付け

サーボモータはPWM信号のみで制御するのでmicro:bitの端子を1つだけ使用します。 ここではP0を使うことにします。これ以外でも他のセンサなどに使用されていない端子であればどこでもよい(例えばP2など)です。この段階でどの端子を使うか決めておき,ケーブル接続においても,プログラムにおいてもP0を使うことで一貫している必要があります。 参考 micro:bit端子一覧

4 接続

サーボモータFT90Bは電源電圧3or4.8Vが指定されていますが,ここでは3Vを使います。(電池駆動では消耗によって電源電圧が落ちてくることが考えられますが実測では2.5Vまで動作しました)信号レベルについては何も指定されていませんが,電源電圧と考えるのが妥当でしょう。micro:bitの信号レベルは3.3Vですので,すこしオーバーしています。(実測では3.3V信号で動作しています。駆動電源が2.5Vになっても3.3V信号で動作できていました。)
そのため,次のようにつなげることを目指せばよいことになります。
複数の電圧の電源が出てくる回路では,グランドを共通にするため,必ず全てのグランドどうしを接続します。(ここでは電池のグランドとmicro:bitのグランドとサーボモータのグランド)


micro:bit端子に直接はんだ付けしてしまってもよいのですが,そのようなことはしたくないため,FT90Bにメス-オスタイプのジャンプワイアを付けます。


また,micro:bitの端子を引き出して扱いやすくなっているブレイクアウトボードを使います。Sparkfunのブレイクアウトボードを使った場合には次のような配線になります。



実際にテスト用に組み立てると次のようになります。


5 プログラム

MakeCodeを使います。
最初に簡単なデモをします。60度と120度の指令を500msごとに交互に与えます。指令を与える端子はP0です。
(PWM周期は20000μsec=20msecですが,micro:bitのPWM周期のデフォルトが20msecなので初期化でPWM周期を設定する必要はありません。)
  簡単なデモプログラム



次のプログラムでは,無限ループにてパルス幅(Hを出力する時間)0.5,1.0,1.5,2.0,2.5msecをそれぞれ2000msec出力します。
サーボモータは,2秒ごとに,角度が変化する動きをするはずです。

  動作テスト用プログラム



コピペする場合は,次のソースコードをPythonソースとして貼り付ければ完了です。

durations = [500, 1000, 1500, 2000, 2500]
index = 0

def on_forever():
    global index
    pins.servo_set_pulse(AnalogPin.P0, durations[index])
    index += 1
    if index == 5:
        index = 0
    basic.pause(2000)
basic.forever(on_forever)

6 micro:bit P0での信号をオシロスコープで観察

PWM周期20msecで,パルス幅が0.5msecのときと2.5msecの時を示します。
これらの信号は,生のP0の信号で,レベルシフタを通す前の段階ですので3.3V信号です。

(1) パルス幅 0.5msecのときの端子P0(測定パルス長は0.488msecでした)


(2) パルス幅 2.5msecのときの端子P0(測定パルス長は2.480msecでした)


パルス幅の指定は,パルス幅を時間で直接指示する方法と,角度で指示する方法があります。
比較してみました。
時間で指示[μs]角度で指示[deg]測定パルス幅[μs]
 0488
 1802480
500 488
2500 2480

180度指示は2500μsec指示と同じになります。FT90Bの仕様では2500μsecが180度になるので,どちらを使っても構いません。


7 動作の様子

2秒間隔で回転角が0,45,90,135,180度に変化します。



8 まとめ

サーボモータFT90Bの動作を確認しました。


9 サーボモータの応用

サーボモータにレーザ距離センサを載せて周囲をスキャンして物体認識 
サーボモータに超音波距離センサを載せて周囲をスキャンして物体認識