Ring:bit Carとは?

 Ring:bit Carはマイクロビットで制御できるロボットカーです。ロボットには段ボール系、アクリル系、プラスティック系などいろいろありますが、このRig:bit Carはアクリル板で組み立てるタイプです。マイクロビット単体ではモーターを駆動するパワーがないので、専用のモーターを駆動するボードが同梱されています。また、組み立てに必要なドライバーも同梱されています。なお、モーターを駆動するために単4電池3本が別途必要になります。

Ring:bit Car
・製造元 Elecfreaks
・Amazon内販売ページhttps://www.amazon.co.jp/gp/product/B07GQZHQXK/

 新しいバージョンのロボットカーもあります。今回は旧バージョンのロボットカーを使います。新しいバージョン(V2)では、若干動作が異なる可能性もあります。

・ring:bit car v2 for micro:bit  https://www.elecfreaks.com/estore/elecfreaks-ring-bit-car-v2-for-micro-bit-without-micro-bit.html

 ロボットカーに搭載するマイクロビットは電池で駆動しますので、特にモバイルバッテリーなどを用意する必要はありません。電源のオン、オフはモーターボード上のスイッチで行います。
 なお、ロボットカーを遠隔操作する場合は、ロボットに搭載するマイクロビットとは別にコントロール用のマイクロビットを用意してください。ジョイスティック/ゲームコントローラーを装着すると、よりロボットを操作しやすくなります。

ロボットカーを組み立てる

 まず、ロボットカーを組み立てないと始まりません。ロボットカーは完成型で入っているわけではないので、自分で組み立てる必要があります。まず、箱から部品を取り出します。

 最初に底面を組み立てます。金属球と底面板をリベットを使って固定します。

 側面の板にモーターを取り付けます。左右対称になるように組み立てます。モーターはネジでしっかりと固定します。

 前面と背面のパネルを側面パネルに差し込んで取り付けます。モーターからの線は底面板の中央の穴に通しておきます。

 次にマイクロビットとモーターボードを取り付けます。5つのネジで固定します。

 モーターの線をボードに差し込みます。左右それぞれボードに左右にあるG,V,P1、G,V,P2に差し込みます。なお、黒の線がG、赤い線がV、残りの線をP1またはP2に差し込みます。

 左右のタイヤを取り付けます。

 マイクロビットとモーターボードを固定するリベットを側面の板に差し込みます。

 単4電池3本を入れます。

 これで完成です。ボード上にある[ON|OFF]と書かれたスイッチをONにして電源が入るかどうか確認してください。無事にマイクロビットの電源が入ればOKです。もし、電源が入らない場合は新しい乾電池にしてみてください。それでも駄目な場合はモーターボードとマイクロビットを取り付けるネジ部分がしっかり接触しているか確認してください。どうしても、電源が入らない場合は不良品の可能性があるので購入元に問い合わせてみてください。

ロボットを制御する拡張機能を読み込む

 ロボットカーの制御は標準のブロックだけではできません。ロボットカーを制御するには拡張機能を読み込ませる必要があります。まず、「拡張機能」の項目をクリックします。

拡張機能一覧が表示されます。拡張機能のページを下にスクロールしていくとRingbitCarという項目が表示されている場合は、それをクリックします。

RingbitCarの項目が見つからない場合は検索ボックスにringbitと入力して検索ボタン(虫眼鏡)をクリックします。

するとRingbitCarの拡張機能が読み込まれます。RingbitCar以外にも拡張機能が読み込まれることがありますが問題はありません。

ロボットカーを制御する(前進、後退)

 それではロボットカーを制御してみましょう。もっとも簡単な前進と後退を交互に繰り返してみます。0.5秒前進して0.5秒後退するだけです。
 最初にモーターの接続端子を設定するブロックを配置します。ロボットを制御するモーターは左の車輪がP1端子に、右の車輪がP2端子に接続されています。もし、P0端子など他の端子に接続している場合は変更してください。
 前進は「急速な前進」、後退は「急速な後ろ向き」ブロックを使います。これらのブロックと「一時停止(ミリ秒)」のブロックを組み合わせることで、一定時間ロボットの動きを制御することができます。
 実際には以下のようにブロックを組みます。

 JavaScriptコードの場合は以下のようになります。

RingbitCar.init_wheel(AnalogPin.P1, AnalogPin.P2)
basic.forever(function () {
    RingbitCar.forward()
    basic.pause(500)
    RingbitCar.back()
    basic.pause(500)
})

プログラムをダウンロードしマイクロビットに転送して動作を確認します。なお、電池で駆動するのでUSBケーブルを外した後、モーターボードにある電源スイッチをONにすればロボットカーが動作します。

ロボットカーを制御する(転回)

 それでは次に左右の車輪を別々に制御してロボットカーを転回させてみます。ロボットカーを制御するブロックの中に「左へ曲がる」「右へ曲がる」を使うと転回できます。
 以下のようにブロックを組みます。

 JavaScriptコードの場合は以下のようになります。

RingbitCar.init_wheel(AnalogPin.P1, AnalogPin.P2)
basic.forever(function () {
    RingbitCar.turnright()
})

プログラムをダウンロードしマイクロビットに転送して動作を確認します。ロボットカーが右にくるくると回る動きをします。ロボットの動きを止めるにはモーターボード上にある電源スイッチをOFFにします。

 あらかじめ用意されている「右へ曲がる」「左へ曲がる」を使うと、かなり早くロボットの車輪がまわってしまいます。このロボットカーでは「左の速度を設置する(0) 右の速度を設置する(0)」ブロックを使うと左右の車輪の回転方向と速度を-100〜100の範囲で指定することができます。
 負数を指定すると前進、正数を指定すると後退になります。また、値が大きいほど車輪が早く回転します。
 今度はロボットカーをゆっくりと(最も遅い速度で)左に転回させてみます。
 以下のようにブロックを組みます。

 JavaScriptコードの場合は以下のようになります。

RingbitCar.init_wheel(AnalogPin.P1, AnalogPin.P2)
basic.forever(function () {
    RingbitCar.freestyle(-1, 1)
})

プログラムをダウンロードしマイクロビットに転送して動作を確認します。今度はゆっくりと左に転回します。

ロボットカーをリモート制御する

 あらかじめ決められた動作だけを行うのもロボットの利点ですが、手動で操作したいこともあります。最後にもう1つマイクロビットを使って、リモートで制御してみます。マイクロビットにはBluetoothを使って無線通信ができるので、これを利用します。
 ロボット制御の動作は以下の3種類とします。なお、左側にある番号が無線通信で送信する値になります。

0 停止
1 右車輪を前に回転
2 左車輪を前に回転

 まず、受信側のプログラムを作成します。無線グループ番号を設定し、ロボットカーの初期設定を行います。
 あとは無線データを受信したら条件分岐でロボットの車輪制御を行います。
 以下のようにブロックを組みます。

 JavaScriptコードの場合は以下のようになります。

radio.onReceivedNumber(function (receivedNumber) {
    if (receivedNumber == 0) {
        RingbitCar.brake()
    }
    if (receivedNumber == 1) {
        RingbitCar.freestyle(-1, 0)
    }
    if (receivedNumber == 2) {
        RingbitCar.freestyle(0, -1)
    }
})
radio.setGroup(15)
RingbitCar.init_wheel(AnalogPin.P1, AnalogPin.P2)

 プログラムをダウンロードしマイクロビットに転送しておきます。

 次に送信側のプログラムを作成します。無線グループ番号を受信側と同じに設定します。
 あとはボタン入力に応じて数値を送信します。その際、何を送信したか分かるようにLEDに数値を表示します。マイクロビットにはAボタンとBボタンしかないので、ロボットカーを停止させる場合に送る数値はAボタンとBボタンを押すことにします。
 送信側は以下のようにブロックを組みます。

 JavaScriptコードの場合は以下のようになります。

input.onButtonPressed(Button.A, function () {
    radio.sendNumber(1)
    basic.showNumber(1)
})
input.onButtonPressed(Button.B, function () {
    radio.sendNumber(2)
    basic.showNumber(2)
})
input.onButtonPressed(Button.AB, function () {
    radio.sendNumber(0)
    basic.showNumber(0)
})
radio.setGroup(15)

プログラムをダウンロードしマイクロビットに転送します。送信側のマイクロビットのボタンを押すとリモートでロボットを制御することができます。

ロボット制御はデジタルとは違いアナログなので思い通りにいかないこともあります。マイクロビットは無線で複数のロボットをまとめて制御することもできますので資金的余裕があれば、複数台のロボット制御に挑戦してみるのも面白いでしょう。

著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。最近は30年前に移植したゲーム(mz-700版 SPACE HARRIER)の話などを書いたりしています。
著者サイト:http://www.openspc2.org/