Running:bit【無線操縦編】
micro:bitの無線機能を使って「Running:bit」を無線操縦するプログラムを紹介します。micro:bitに搭載された加速度センサーのみで、前進・後進・左右への旋回・その場回転の動作と移動速度を制御します。また、ボタンAで荷台の上下、ボタンBで通常モードと緊急モード(サイレン音あり)を切り替えます。
5-10-1.Running:bit
Yahboom(中国名:亚博)のRunning:bitは、LEGO互換のブロックで組み立てるキットで、2種類のモーター(DCモーター・サーボモーター)と、同社の多機能・低価格なmicro:bit用の拡張ボード「Super:bit expansion board」を使って、動きの異なる5種類のロボットカーを作ることができます。Running:bitは「付録3-15.Running:bit」で詳しく紹介しています。
Running:bit(Proficient Carrier)
本記事で、無線操縦するのは、前方に荷台のある「Proficient Carrier」です。荷台を上下に動かすことができます。
2個のDCモーター(Red motor)を使って、左右の後輪を別々に駆動します。タイヤの回転する方向(正転・逆転)と回転速度を組み合わせることで、前進・後進・左右への旋回・その場回転などが行えます。
前輪は、金属製のボールキャスターです。後輪の動きに合わせて、あらゆる方向へ自在に進みます。
荷台は、回転角270度のサーボモーター(Gray servo)と二つのギアを組み合わせることによって、上下に動きます。
Proficient Carrierの組み立て
Proficient Carrierを組み立てましょう。組立説明書は、同社のウェブサイト「Running:bitのチュートリアル」で公開されています。
組み立てが完了したら、DCモーター(Red motor)とサーボモーター(Gray servo)のリード線を、拡張ボード「Super:bit expansion board」の端子へ接続します。進行方向に対して左側のDCモーターをM1、右側のDCモーターをM3へ接続します。サーボモーターをS1へ接続します。コネクターの向きが決まっているので、写真を見ながらリード線の色を合わせて、端子へ差し込みましょう。
micro:bitとバッテリー(18650型充電池)も忘れずに取り付けましょう。バッテリーは、Super:bit expansion boardに取り付けたまま、USBケーブルを使って充電することができます。詳しくは「付録3-14.Super:bit expansion board」をご覧ください。
組み立て後は、荷台に取り付けられたグレーのギアを外しておきます。Running:bit側へプログラムを書き込み、スイッチをオンにすると、サーボモーター(Gray servo)の位置が初期化されます。この位置が、荷台の最下部になるので、調節してギアを取り付けてください。
5-10-2.デモ
コントローラー側のmicro:bitを前後左右へ傾けることにより、Running:bitが移動します。前後左右の傾きの検出には、micro:bitにあらかじめ搭載されている加速度センサーを使っています。傾きの向きと大きさによって、Running:bitの左右に取り付けられたモーターの回転する方向(正転・逆転)と回転速度を変化させ、前進・後進・左右への旋回・その場回転といった動作と、それぞれの移動速度を調節しています。
ボタンAを押すと、荷台を上下します。ボタンBを押すと、走行モードが変化します。走行モードには、通常モードと緊急モードの2種類があります。通常モードは、緑と黄のランプが点灯します。緊急モードは、赤と白のランプが点灯して、サイレン音が鳴り響きます。
Running:bitのスイッチをオンにした直後は、ブレーキがかかっています。ボタンA+Bでブレーキを解除して走行を楽しんでください。
5-10-3.このプログラムの動作に必要なもの
このプログラムの動作には次のものが必要です。
- micro:bit本体×2台(Running:bit用・コントローラー用)
- Running:bit(Super:bit expansion boardを含む)
- 電池ボックスと電池(コントローラー用)
- パソコン(*1)
- USBケーブル(*1)
(*1):パソコン・USBケーブルは、プログラミングに必要なものです。
5-10-4.コントローラー側のサンプルプログラム(ブロック)
コントローラー側のサンプルプログラム(ブロック)です。
最初だけ実行されるプログラム
無線のグループ設定と変数の初期化を行っています。グループの番号は、コントローラーとRunning:bitで一致していれば36以外でもかまいません。
ずっと実行されるプログラム
micro:bitに搭載されている加速度センサーで、前後(加速度Y)と左右(加速度X)の傾きを測定しています。前後の傾きに応じて、モーターの速度が変化するように、-255(後進の最大速度)~255(前進の最大速度)の範囲でマッピングしています。さらに、左右の傾きに応じて旋回(または回転)するように、旋回(または回転)の内側にあるモーターの速度を-100%(逆回転の最大速度)~100%(順回転の最大速度)の範囲で変化するように計算しています。最後に求めたモーターの速度を無線で送信します。この動作は、変数「動作中」が真の場合のみ行います。
ボタンAが押されたときに実行されるプログラム
変数「荷台の位置が上」が真なら「DOWN=0」、偽なら「UP=0」を無線で送信します。そのあと、変数の値を反転(真偽を入れ替え)します。
ボタンBが押されたときに実行されるプログラム
変数「緊急」が真なら「EMER=0」、偽なら「NONEMER=0」を無線で送信します。そのあと、変数の値を反転(真偽を入れ替え)します。
ボタンA+Bが押されたときに実行されるプログラム
変数「動作中」の値を反転(真偽を入れ替え)します。
5-10-5.コントローラー側のサンプルプログラム(JavaScript)
コントローラー側のサンプルプログラム(JavaScript)です。
5-10-6.Running:bit側のサンプルプログラム(ブロック)
Running:bit側のサンプルプログラム(ブロック)です。拡張機能「https://github.com/lzty634158/SuperBit」の追加が必要です。
最初だけ実行されるプログラム
無線のグループ設定と変数の初期化を行っています。グループの番号は、コントローラーとRunning:bitで一致していれば36以外でもかまいません。また、通常モードのライト点灯と荷台を一番下へセットしています。
ずっと実行されるプログラム
ライト(NeoPixel)をひとつずつずらして点灯します。通常モードと緊急モードで点灯時間が異なります。
無線で受信したときに実行されるプログラム
コントローラーから送信される値によって、モーターの回転速度の設定・荷台の上下・ライトの点灯(通常モード・緊急モード)を行います。
関数:ライト点灯
走行モードに応じた色(通常モード:緑と黄、緊急モード:赤と白)でライト(NeoPixel)を点灯します。
バックグラウンドで実行されるプログラム
緊急モード時にサイレン音を鳴らします。
5-10-7.Running:bit側のサンプルプログラム(JavaScript)
Running:bit側のサンプルプログラム(JavaScript)です。拡張機能「https://github.com/lzty634158/SuperBit」の追加が必要です。