Introduction: [2021] タブレット (iPadまたはiPhone) でマイクロビット搭載のラジコンカーを操作しよう!

About: スクール・クラブ活動に関わる皆様に楽しい教材を設計しています。自己学習と協力体験の両面から楽しさを追求します。

今回のプロジェクトでは、micro:bit が提供するアプリをお手持ちの iPhone (iPad) にダウンロードしてゲームパッドとして使ってみようと思います。App Store 内で micro:bit と検索すると無償でアプリがダウンロード可能です。iPhone (iPad) にアプリをインストールし micro:bit とブルートゥースでペアリングしたら、ゲームパッドを設定してワイヤレスで操作できる様にしてみましょう!

このチュートリアルでは、アプリの設定、ブルートゥースによるペアリング、ゲームパッドの準備などを解説していきます。マイクロソフト社の MakeCode エディターを使用してコーディングしてゆきます。難しいと感じる方の為にもサンプルコードをダウンロードできる様に用意していますのでご安心ください。

micro:bit で操作できるラジコンカーとして、ヴァレンタ・オフローダーを使用します。レゴ・テクニックの部品と互換性があります。後輪に2つのギアモーターがあり、車体前方にマイクロサーボを使用しロベルヴァル・メカニズム (機構) を用いて前輪のステアリングを操作します。

iPhone (iPad) アプリ内のゲームパッドを用いて前後左右に車を走らせたり、ステアリング調整やLED点灯、オプション装備のウィンチを巻いてみたり、と様々な機能をコーディングしてみたいと思います。

Supplies

今回のプロジェクトを始める前にヴァレンタ・オフローダーを組み立ててアプリを設定する必要があります。以下のプロジェクトを事前に確認して車を組み立ててください。

チュートリアル

ビデオ

micro:bit が提供するアプリをお手持ちの iPhone (iPad) にダウンロードする必要があります。お手持ちの iPhone (iPad) に micro:bit アプリをインストールし micro:bit とブルートゥースでペアリングが可能かご確認ください。

micro:bit で操作できるラジコンカーとして、ヴァレンタ・オフローダーを使用します。別途、micro:bit (1個)、単3電池 (4本) を使用します。はんだ付けしたり接着や塗装などの作業は必要ありません。ブロックの様にパチッと部品を取り付けて組み立てることができます。ヴァレンタ・オフローダーは英国 4Tronix 社と、Hummingworks 合同会社のパートナーシップにより共同開発いたしました。

The tutorial in English is available!

Step 1: サンプルコードをダウンロードしよう

このチュートリアル内では、マイクロソフト社 MakeCode エディターにて作成した micro:bit 用のサンプルコードを使用します。さっそくダウンロードしてみましょう。プログラミング済みですのですぐに遊べます。後のステップでサンプルコードの解説をします。サンプルコードが理解出来たら新しいコーディングに挑戦してみてください!

このステップ内にあるサンプルコードをお手元のコンピューターにダウンロードしてください。コンピューターと micro:bit を USB ケーブルで接続してファイルをドラッグアンドドロップして書き込んでください。

Receiver.hex サンプルファイル を受信側のマイクロビットに書き込みます。サンプルコードを書き込みましたか?受信側のマイクロビットを車(ヴァレンタ・オフローダー)に搭載してモーターコントローラーの電源をONにしましょう!

車に搭載されるモーターコントローラーの電源をONにすると受信側のマイクロビットに給電され遊ぶことができます。iPad または iPhone 内のゲームパッドアプリのボタンA, B, C, D を押してみてください。受信側のマイクロビットを搭載する車が前後左右に走り出します。

もし車の舵 (ステアリング) が真っすぐでない場合、ゲームパッドのボタン3または4を複数回押してみてください。 ステアリングがに右傾いていたら、ボタン3を押して左に修正できます。 ステアリングが左に傾いていたら、ボタン4を押して右に修正できます。

車にウィンチがオプション装備されている場合、ゲームパッドのボタン1または2を押すとウィンチの紐が緩んだり巻かれたりします。

Step 2: ウィンチ機構について

もし車がウィンチ機構をオプション装備している場合、モーターコントローラーに接続する事で一層楽しむことができます。

ウィンチ機構は360度の連続回転サーボを使用しており、モーターコントローラーのP1ピンに接続する事で紐を巻いたり緩めて伸ばしたりできます。主にオフロード走行する車の前部に取り付け、紐を巻くことにより悪路や急斜面を走破します。

このチュートリアルで使用するヴァレンタ・オフローダーはDRV8833チップを搭載するモーターコントローラーを使用しており、2つのDCモーター、4つの入出力ピン (P0, P1, P2, P8) を操作できます。各ピンは3本で構成され、信号を送るシグナル線 (黄)、ボルト (赤)、グランド (黒) で構成されます。 4つの入出力ピンはスイッチにより3.3Vまたは5Vを選択可能ですので、サーボを使用する場合は5Vを選択します。

Step 3: Micro:bit アプリを設定しよう (パート1)

App Store 内からお手持ちの iPhone (iPad) に micro:bit アプリをダウンロード、インストールできたでしょうか?アプリを開いたら Choose micro:bit (マイクロビットを選ぶ) ボタンを押してみましょう。

Step 4: Micro:bit アプリを設定しよう (パート2)

まだ micro:bit はお手持ちの iPhone (iPad) とはブルートゥースでペアリングできていません。Pair a micro:bit (マイクロビットをペアリングする) ボタンを押してみましょう。

Step 5: Micro:bit アプリを設定しよう (パート3)

次に micro:bit のボタン A、B を押しながら裏側の RESET ボタンも同時に押し micro:bit 前面の LED が全て点灯するのを確認しましょう。その後、全てのボタンから手を離して、アプリ内の Next (次へ) ボタンを押してみましょう。

Step 6: Micro:bit アプリを設定しよう (パート4)

micro:bit 前面の点灯している LED ドットと同様に、アプリ内に表示されているドットを一つ一つ正確にタップして入力してみましょう。その後、アプリ内の Next (次へ) ボタンを押してみましょう。

Step 7: Micro:bit アプリを設定しよう (パート5)

micro:bit とブルートゥースでペアリングを開始する準備ができたようです。アプリ内の Next (次へ) ボタンを押してみましょう。

Step 8: Micro:bit アプリを設定しよう (パート6)

micro:bit と iPad (iPhone) のペアリングまであともう少しです。Pair ボタンを押して進みましょう。

Step 9: Micro:bit アプリを設定しよう (パート7)

ペアリングが成功したら OK ボタンを押して最初のメニューの画面に戻りましょう。

Step 10: Micro:bit アプリを設定しよう (パート8)

アプリのトップ画面に戻り Monitor and Control (モニターとコントロール) ボタンを押して、ゲームパッドを設定する画面に進みましょう。画面下の Add + (追加) ボタンを押して、リスト内の Game Pad (ゲームパッド) を追加しましょう。ゲームパッド画面下の Start (開始) ボタンを押して車を運転する事ができます。

ボタン A を押す -> 車が前進する

ボタン B を押す -> 車が後進する

ボタン C を押す -> 車が左折する

ボタン D を押す -> 車が右折する

Step 11: アプリ内からペアリング済み Micro:bit を削除する場合

このアプリ内では複数の micro:bit をペアリングして遊ぶことができます。もし micro:bit を数多くペアリングしてしまい、後から特定の micro:bit を削除したい場合は、アプリのトップ画面に戻り Choose micro:bit (マイクロビットを選ぶ) ボタンを押して先ほどの画面に戻ります。 画面内で削除したい micro:bit を選び、ごみ箱 ボタンを押して削除します。

Step 12: ブルートゥース設定 (iPad, IPhone) から Micro:bit を削除する場合

複数の micro:bit をペアリングしてしまい、後に特定の micro:bit を削除したい場合は iPhone (iPad) 内のブルートゥース設定からも micro:bit を削除する事をお勧めします。お手持ちの iPhone (iPad) の「設定」から「ブルートゥース」に移動し、削除したい micro:bit を選択して削除します。

Step 13: MakeCode エディターに拡張機能を追加しよう

MakeCodeエディター左にあるメニュー内にこれらの拡張機能が追加されているか確認してください。もし追加されていない場合は、メニューの Extensions をクリックします。次の画面で追加したい拡張機能が表示されたら、一つづつクリックして追加して下さい。

Bluetooth拡張機能

ブルートゥースを経由して micro:bit のデジタル・アナログピンを操作できる様にします。

Devices拡張機能

アプリ内のゲームパッドの各ボタンの操作を設定します。

Servos 拡張機能

ステアリング用サーボの回転角度の範囲を設定したり、特定の角度に動かす事ができる様にします。

Valenta 拡張機能

LEDライトを点灯させるために使用してみたいと思います。メニューの Extensions をクリックします。上の写真の様に検索ボックス内に以下の情報を入力します。

https://github.com/4Tronix/Valenta

右側の「虫メガネ」のボタンをクリックします。Valenta 拡張機能が表示されたら選択して追加します。

Board_Model グループ内にある select board model Zero ブロックを on start ブロック内にドラッグアンドドロップします。ヴァレンタ・ゼロというタイプのモーターコントローラーを使用しているので、このブロックを指定します。

FireLed グループ内にある set LEDs to ブロックを使用して好きなLED色を選択します。clear all LEDs ブロックを使用して色をリセットします。

Step 14: MakeCode エディターからサンプルコードを確認しよう (パート1)

Receiver.hex サンプルファイルを確認してゆきましょう。MakeCodeエディターを開き Import ボタンをクリックします。受信側のマイクロビット内に保存されている Receiver.hex サンプルファイルを選択して開きます。

ここでは、車の操舵に使うステアリング用のサーボを P2 ピンで操作し、可動範囲を 0 から 180 度に設定し、中央角度を 90 度に設定する事にします。

on startブロック

このブロックはプログラム起動時に1度だけ呼び出されるブロックです。

bluetooth io pin service

bluetooth io pin service ブロックを使用します。このブロックを通じてブルートゥースを経由し micro:bit のデジタル・アナログピンを操作できる様にします。

select board model zero

Valenta 拡張機能の Board_Model グループ内にある select board model Zero ブロックをドラッグアンドドロップします。ヴァレンタ・ゼロというタイプのモーターコントローラーを使用しているのでこのブロックを指定します。

set center to 90

Variable 拡張機能内に center 変数を作成します。この変数の中に車の操舵に使うステアリング用のサーボの中央角度を保持させます。中央角度を 90 度に設定しておきましょう。

set servo P2 range from 0 to 180

Servos 拡張機能から set servo P2 range from 0 to 180 ブロックをドラッグアンドドロップします。ステアリングに使用するサーボを P2 ピンで操作しているので、P2 を選択し、可動範囲を 0 から180 度に設定しましょう。

set servo P2 angle to center

Servos 拡張機能から set servo P2 angle to center ブロックをドラッグアンドドロップします。center 変数に指定されている事を確認してください。

Step 15: MakeCode エディターからサンプルコードを確認しよう (パート2)

車の進行方向とスピードを定義するブロックについて見てゆきましょう。左後輪にM1モーター、右後輪にM2モーターが接続されています。

function goForward ブロック

Functions 拡張機能内に goForward ブロックを作成します。

digital write pin P13 to 0

P13ピンはM1モーターの進行方向を定義します。Pins 拡張機能から digital write pin P13 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM1モーターは前進します。

digital write pin P15 to 0

P15ピンはM2モーターの進行方向を定義します。Pins 拡張機能から digital write pin P15 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM2モーターは前進します。

analog write pin P12 to 1023

P12ピンはM1モーターのスピードを定義します。Pins 拡張機能から analog write pin P12 to 1023 をドラッグアンドドロップして作成します。1023 の値を選択する事でM1モーターは全速力のスピードで前進します。

analog write pin P14 to 1023

P14ピンはM2モーターのスピードを定義します。Pins 拡張機能から analog write pin P14 to 1023 をドラッグアンドドロップして作成します。1023 の値を選択する事でM2モーターは全速力のスピードで前進します。

function goBackward ブロック

Functions 拡張機能内に goBackward ブロックを作成します。

digital write pin P12 to 0

P12ピンはM1モーターの進行方向を定義します。Pins 拡張機能から digital write pin P12 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM1モーターは後進します。

digital write pin P14 to 0

P14ピンはM2モーターの進行方向を定義します。Pins 拡張機能から digital write pin P14 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM2モーターは後進します。

analog write pin P13 to 1023

P13ピンはM1モーターのスピードを定義します。Pins 拡張機能から analog write pin P13 to 1023 をドラッグアンドドロップして作成します。1023 の値を選択する事でM1モーターは全速力のスピードで後進します。

analog write pin P15 to 1023

P15ピンはM2モーターのスピードを定義します。Pins 拡張機能から analog write pin P15 to 1023 をドラッグアンドドロップして作成します。1023 の値を選択する事でM2モーターは全速力のスピードで後進します。

function stop ブロック

Functions 拡張機能内に stop ブロックを作成します。

digital write pin P13 to 0

P13ピンはM1モーターの進行方向を定義します。Pins 拡張機能から digital write pin P13 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM1モーターは前進に設定されます。

digital write pin P15 to 0

P15ピンはM2モーターの進行方向を定義します。Pins 拡張機能から digital write pin P15 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM2モーターは前進に設定されます。

analog write pin P12 to 0

P12ピンはM1モーターのスピードを定義します。Pins 拡張機能から analog write pin P12 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM1モーターは停止します。

analog write pin P14 to 0

P14ピンはM2モーターのスピードを定義します。Pins 拡張機能から analog write pin P14 to 0 をドラッグアンドドロップして作成します。0 の値を選択する事でM2モーターは停止します。

set servo P2 angle to center

Servos 拡張機能から set servo P2 angle to center ブロックをドラッグアンドドロップします。center 変数に指定されている事を確認してください。車が毎回停止した際にステアリングが真っすぐに向くためのブロックです。

Step 16: MakeCode エディターからサンプルコードを確認しよう (パート3)

ここではゲームパッドのボタンA, B, C, Dについて設定しましょう。

ゲームパッドのボタンAの操作を以下の様に設定してみましょう

ボタンAを押したままの状態にすると、車が前進する

ボタンAを離した状態にすると、車が停止する

on gamepad button A down ブロック

Devices 拡張機能から on gamepad button A down ブロックをドラッグアンドドロップします。その中にFunctions 拡張機能から call goForward ブロックをドラッグアンドドロップします。ボタンAを押すと車が前進します。

on gamepad button A up ブロック

Devices 拡張機能から on gamepad button A up ブロックをドラッグアンドドロップします。その中にFunctions 拡張機能から call stop ブロックをドラッグアンドドロップします。ボタンAをはなすと車が停止します。

ゲームパッドのボタンBの操作を以下の様に設定してみましょう

ボタンBを押したままの状態にすると、車が後進する

ボタンBを離した状態にすると、車が停止する

on gamepad button B down ブロック

Devices 拡張機能から on gamepad button B down ブロックをドラッグアンドドロップします。その中にFunctions 拡張機能から call goBackward ブロックをドラッグアンドドロップします。ボタンBを押すと車が後進します。

on gamepad button B up ブロック

Devices 拡張機能から on gamepad button B up ブロックをドラッグアンドドロップします。その中にFunctions 拡張機能から call stop ブロックをドラッグアンドドロップします。ボタンBをはなすと車が停止します。

ゲームパッドのボタンCの操作を以下の様に設定してみましょう。

ボタンCを押したままの状態にすると、車が左折する

ボタンCを離した状態にすると、車が停止する

on gamepad button C down ブロック

Devices 拡張機能から on gamepad button C down ブロックをドラッグアンドドロップします。その中に Servos 拡張機能から set servo P2 angle to center + 10 ブロックをドラッグアンドドロップします。ステアリング用のサーボが+10度だけ左に傾きます。Functions 拡張機能から call goForward ブロックをドラッグアンドドロップします。ボタンCを押すと車が左折しながら前進します。

on gamepad button C up ブロック

Devices 拡張機能から on gamepad button C up ブロックを使用します。Functions 拡張機能から call stop ブロックをドラッグアンドドロップします。ボタンCをはなすと車が停止します。

ゲームパッドのボタンDの操作を以下の様に設定してみましょう。

ボタンDを押したままの状態にすると、車が右折する

ボタンDを離した状態にすると、車が停止する

on gamepad button D down ブロック

Devices 拡張機能から on gamepad button D down ブロックをドラッグアンドドロップします。その中に Servos 拡張機能から set servo P2 angle to center - 10 ブロックをドラッグアンドドロップします。ステアリング用のサーボが-10度だけ右に傾きます。Functions 拡張機能から call goForward ブロックをドラッグアンドドロップします。ボタンDを押すと車が右折しながら前進します。

on gamepad button D up ブロック

Devices 拡張機能から on gamepad button D up ブロックを使用します。Functions 拡張機能から call stop ブロックをドラッグアンドドロップします。ボタンDをはなすと車が停止します。

Step 17: MakeCode エディターからサンプルコードを確認しよう (パート4)

ここではゲームパッドのボタン1, 2, 3, 4について設定しましょう。

ゲームパッドのボタン1の操作を以下の様に設定してみましょう。

ボタン1を押したままの状態にすると、ウィンチの紐が伸びLEDが青に点灯する

ボタン1を離した状態にすると、ウィンチが止まりLEDが消灯する

on gamepad button 1 down ブロック

Devices 拡張機能から on gamepad button 1 down ブロックをドラッグアンドドロップします。ボタン1を押したままの状態にした時にこのブロックが実行されます。Valenta 拡張機能から FireLed メニューに行き set LEDs to ブロックをドラッグアンドドロップします。好きな色を選択してください。ここでは色を blue に選択します。Servos 拡張機能から continuous servo P1 run at 50% をドラッグアンドドロップします。ウィンチを早く回したい場合は 100% に調整してみてください。

on gamepad button 1 up ブロック

Devices 拡張機能から on gamepad button 1 up ブロックをドラッグアンドドロップします。ボタン1を離した状態にした時にこのブロックが実行されます。Valenta 拡張機能から FireLed メニューに行き clear all LEDs ブロックをドラッグアンドドロップします。Servos 拡張機能から stop servo P1 をドラッグアンドドロップします。

ゲームパッドのボタン2の操作を以下の様に設定してみましょう。

ボタン2を押したままの状態にすると、ウィンチの紐が巻かれLEDがピンクに点灯する

ボタン2を離した状態にすると、ウィンチが止まりLEDが消灯する

on gamepad button 2 down ブロック

Devices 拡張機能から on gamepad button 2 down ブロックをドラッグアンドドロップします。ボタン2を押したままの状態にした時にこのブロックが実行されます。Valenta 拡張機能から FireLed メニューに行き set LEDs to ブロックをドラッグアンドドロップします。好きな色を選択してください。ここでは色を pink に選択します。Servos 拡張機能から continuous servo P1 run at -50% をドラッグアンドドロップします。ウィンチを早く回したい場合は -100% に調整してみてください。

on gamepad button 2 up ブロック

Devices 拡張機能から on gamepad button 2 up ブロックをドラッグアンドドロップします。ボタン2を離した状態にした時にこのブロックが実行されます。Valenta 拡張機能から FireLed メニューに行き clear all LEDs ブロックをドラッグアンドドロップします。Servos 拡張機能から stop servo P1 をドラッグアンドドロップします。

もし車のステアリングが真っすぐでない場合、ボタン3または4を複数回押してみてください。 ステアリングがに右に傾いていたら、ボタン3を押して左に修正できます。 ステアリングが左に傾いていたら、ボタン4を押して右に修正できます。

ゲームパッドのボタン3の操作を以下の様に設定してみましょう。

ボタン3を押すとステアリングが左に+2度修正される

on gamepad button 3 down ブロック

もし車のステアリングが右に傾きすぎている場合、ボタン3を必要なだけ押してステアリングを左に修正してください。Variable 拡張機能から set center to ブロックをドラッグアンドドロップします。このブロックを set center to center + 2 の様に修正します。これでボタン3を一回押すと右に傾きすぎているステアリングが左に+2度修正されます。Servos 拡張機能から set servo P2 angle to center をドラッグアンドドロップします。これでステアリングが修正、更新されました。

ゲームパッドのボタン4の操作を以下の様に設定してみましょう。

ボタン4を押すとステアリングが右に-2度修正される

on gamepad button 4 down ブロック

もし車のステアリングが左に傾きすぎている場合、ボタン4を必要なだけ押してステアリングを右に修正してください。Variable 拡張機能から set center to ブロックをドラッグアンドドロップします。このブロックを set center to center - 2 の様に修正します。これでボタン4を一回押すと左に傾きすぎているステアリングが右に-2度修正されます。Servos 拡張機能から set servo P2 angle to center をドラッグアンドドロップします。これでステアリングが修正、更新されました。