マイクロビットと360°サーボモータを繋いで、マイクロビットからモータを制御してみます。
サーボモータについてはMakeCodeで270°サーボモータを動かしてみようで角度指定を行える270°サーボモータに付いて触れましたが、
今回のサーボモータはラジコンのタイヤのように回すものになります。
今回のモータはGeekServo 9G 360° Motor-Orangeを使っています。
GeekServo 9G 360° Motor-Orange — スイッチサイエンス
マイクロビットとサーボモータの繋ぎ方はMakeCodeで270°サーボモータを動かしてみようと同じようにします。
※左がマイクロビット、右がサーボモータ
GPIOピン0 → オレンジ
3V → 赤
0V(GND) → 茶色
先にサーボモータの仕様を確認します。
今回のサーボモータではPWMを用い、周波数50Hzに対して、デューティ比が2.5〜12.5%まで受け付けます。
PWMやデューティ比に関してはMakeCodeのPWMで270°サーボモータを動かしてみようをご覧ください。
デューティ比が7.5%の時がモータの停止になります。
2.5〜7.5%までがモータが時計回りになり、デューティ比が小さい程、モータは速く回転します。
7.5〜12.5%までがモータが半時計回りになり、デューティ比が大きい程、モータは速く回転します。
上記の内容を踏まえ、Aボタンを押したら時計回り、Bボタンを押したら半時計周りになるようにコードを作成します。
MicroPythonの
pin0.write_analog(duty)
は0〜1023の値の範囲になりますので、最小のデューティ比 2.5%の場合、アナログ値は1023 * 0.025 ≒ 26になります。
この内容を踏まえた上で、下記のコードを作成します。
from microbit import * # 50Hz(20ms) pin0.set_analog_period(20) while True: if button_a.is_pressed() and button_b.is_pressed(): # モータの停止 pin0.write_analog(76) sleep(1000) elif button_a.is_pressed(): # 時計回り pin0.write_analog(26) elif button_b.is_pressed(): # 半時計回り pin0.write_analog(126)
マイクロビットにフラッシングして、動作を確認してみますと、
のようにモータが回転します。
MakeCodeで今回のサーボモータを使う時、
にすれば、MicroPythonで作成したコードと同じように動作します。