MicroPythonで360°サーボモータを動かしてみよう


マイクロビットと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で作成したコードと同じように動作します。