レゴロボットでマスター・スレーブシステム

スポンサーリンク


前回作ったレゴロボットを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)