Micro:bit、Micropythonで、マイクロサーボを動かす
マイクロサーボ
マイクロサーボは、受信したパルスのデューティ比で回転角度を制御するモーターです。マイコンがマイクロサーボを動かすとき、PWMを使うのが一般的です。
用意するマイクロサーボ
ここでは、KEYESTUDIO製のBBC Micro: bitのスターターキットにあるマイクロサーボを使用します。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
インターフェース
マイクロサーボは、アナログ信号(PWM)を入力します。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。
- Micro:bitの初期化
- サーボの初期化、1秒待ち
- 45°に移動、1秒待ち
- 90°に移動、1秒待ち
- 135°に移動、1秒待ち
- 180°に移動、1秒待ち
- 0°に移動、1秒待ち
- 3~7を繰り返す
接続
接続表と接続図(写真)を示します。
Micro:bit | リレー |
P0 | PWM(オレンジ色線) |
5V | +(赤色線) |
GND | -(茶色線) |
コード
MicroPythonのwrite_analogは、デューティ比に応じて1~1023の数値(write_analog入力値)を入力します。 ここでは、角度からwrite_analog入力値に変換する関数を使用しています。 この関数は、次のように求めます。
- マイクロサーボの仕様からPWMのパルス幅(ms)を確認
- PWMのパルス幅(ms)から、パルス幅÷20(周期)でデューティ比を求める
- デューティ比から、1023×デューティ比でwrite_analog入力値を求める
こうして以下の表ができます。さらに、角度とwrite_analog入力値で一次方程式関数を作成します。この一次方程式関数が、コードのconv1関数になります。
サーボの角度(°) | PWMのパルス幅(ms) | デューティ比 | write_analog入力値 |
0 | 0.5 | 0.025 | 26 |
180 | 2.5 | 0.125 | 128 |
from microbit import * def conv1(kakudo): k = 23 + 0.566666*kakudo return(k) # Micro:bitを初期化 pin0.set_analog_period(20) # PWMの周期を20 msに設定 # LEDディスプレイを初期化 display.clear() # サーボの初期化 up_kakudo = 0t pin0.write_analog(conv1(up_kakudo)) sleep(1000) while True: pin0.write_analog(conv1(45)) sleep(1000) pin0.write_analog(conv1(90)) sleep(1000) pin0.write_analog(conv1(135)) sleep(1000) pin0.write_analog(conv1(180)) sleep(1000) pin0.write_analog(conv1(0)) sleep(1000)
結果
サーボホーンが、0°を基準に45°、90°、135°、180°、0°の移動を繰り返しました。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。