前回作ったレゴロボットを2体用意して、一つのロボットを動かすと、もう一つも全く同じ動きをする仕組みを作ってみました。この仕組みをマスター・スレーブシステムというらしい。名前ダサカッコいい。
手順はレゴモーターの各角度を取得して、もう一体のロボットのスマートハブにBluetooth通信するだけ。Pybrickの機能を使えば簡単簡単。
前回のロボットとの違いは、スマートハブに書き込むプログラムだけ。送信側と受信側それぞれ異なるプログラムを用意し、それをレゴのスマートハブに書き込んでます。
そのプログラムもほぼChatGPTまかせ。楽な世の中になりました。
ロボットの組み立て方
前回と一緒です。
www.sato-susumu.com
2体用意
送信側プログラム
from pybricks.hubs import PrimeHub from pybricks.pupdevices import Motor from pybricks.parameters import Port from pybricks.tools import wait hub = PrimeHub(broadcast_channel=1, observe_channels=[2]) motors = [Motor(Port.B), Motor(Port.C), Motor(Port.D), Motor(Port.E), Motor(Port.F)] while True: angles = [motor.angle() for motor in motors] hub.ble.broadcast(tuple(angles)) wait(10)
受信側プログラム
from pybricks.hubs import PrimeHub from pybricks.pupdevices import Motor from pybricks.parameters import Port, Stop from pybricks.tools import wait hub = PrimeHub(broadcast_channel=2, observe_channels=[1]) motors = [Motor(Port.B), Motor(Port.C), Motor(Port.D), Motor(Port.E), Motor(Port.F)] last_angles = [999, 999, 999, 999, 999] while True: data = hub.ble.observe(1) if data is not None: for i in range(len(motors)): if abs(data[i] - last_angles[i]) >= 1: motors[i].run_target(500, data[i], then=Stop.HOLD, wait=False) last_angles[i] = data[i] wait(10)