micro:bitで差動二輪ロボットのラジコンを作ってみた

スポンサーリンク

micro:bitで差動二輪ロボットのラジコンを作ってみた

差動二輪ロボットを作ってみたかったので、作ってみた。

目次 (クリックで展開)

結果

こんな感じ。
500mlペットボトル程度なら、カゴと一緒に載せて移動できた。

f:id:sato_susumu:20201003100018j:plainf:id:sato_susumu:20201003100014j:plain

差動二輪ぐらい簡単、簡単と思っていたら、意外と失敗した。
最初に作ったロボットは車高が高めだったので、荷物を乗せるとキャスターがあっても急減速時にコケた。
キャスターの高さが微妙に低いとブレーキの役割になって、移動速度が落ちた。
キャスターの高さが微妙に高くて、減速時にガタついた。
モーターの軸が短いため、直接車輪をつけると軸への負担が大きくて車輪が取れやすかった。

なんか色々失敗してるけど、考えずに作って、失敗して、また組み直せるのもレゴのいいところ。

材料

本体側

リモコン側

レゴの組み立てメモ

f:id:sato_susumu:20201003100024j:plainf:id:sato_susumu:20201003100029j:plainf:id:sato_susumu:20201003100032j:plainf:id:sato_susumu:20201003100036j:plain

配線メモ

f:id:sato_susumu:20201003100020j:plain:w200

プログラム

ロボット側のMakeCode用プログラム(python)

Super:bitを扱うので、予め拡張機能 https://github.com/lzty634158/SuperBit の追加が必要。

プログラム (クリックで展開)

joy_ry = 0
joy_rx = 0
joy_ly = 0
joy_lx = 0
joy_a = 0
joy_b = 0

radio_ch = 9
radio.set_group(radio_ch)
basic.show_string(str(radio_ch))

def on_received_value(name, value):
    global joy_lx, joy_ly, joy_rx, joy_ry, joy_a, joy_b
    if name == "LX":
        joy_lx = value
    if name == "LY":
        joy_ly = value
    if name == "RX":
        joy_rx = value
    if name == "RY":
        joy_ry = value
    if name == "A":
        joy_a = value
    if name == "B":
        joy_b = value
    update_servo_value()
radio.on_received_value(on_received_value)

def update_servo_value():
    # left
    SuperBit.motor_run(SuperBit.enMotors.M1, joy_ly / 100.0 * 255)
    # right
    SuperBit.motor_run(SuperBit.enMotors.M3, joy_ry / 100.0 * 255)

    # おまけでM2, M4も制御
    # left
    SuperBit.motor_run(SuperBit.enMotors.M2, joy_ly / 100.0 * 255)
    # right
    SuperBit.motor_run(SuperBit.enMotors.M4, joy_ry / 100.0 * 255)

リモコン側のMakeCode用プログラム(python)

コントローラー側プログラムはこちらと一緒。

コントローラーの操作方法

左右スティックの上下で、ロボットの左右タイヤを前後に動かす。手抜き。

参考リンク

追記:作成中に失敗したこと以外にも、様々な考慮するべき点について記載されているサイトがあったのでメモ。
タイヤにかかる荷重の計算
レスコン設計まとめ