[2021] 2個のmicro:bitを使って電車を走らせよう!
by ハミングワークス in Circuits > Remote Control
262 Views, 0 Favorites, 0 Comments
[2021] 2個のmicro:bitを使って電車を走らせよう!

ヴァレンタ ロコ は micro:bit でリモート操作できるレゴトレイン互換の電車です。レゴテクニックの部品と互換性があります。各台車にギアモーターがあります。
今回のプロジェクトでは、2個の micro:bit を準備し、一方を送信機、もう一方を受信機として電車に搭載して操作してみたいと思います。マイクロソフト社のMakeCodeエディターを使用してコーディングしてゆきます。難しいと感じる方の為にもサンプルコードをダウンロードできる様に用意していますのでご安心ください。
今回のプロジェクトでは、送信側の micro:bit のボタンA、Bを用いて前後に電車を走らせたり、LED点灯など様々な機能に挑戦してみたいと思います。
なお、世界最大の3Dプリントモデルサイト Thingiverse からレゴトレイン互換レール (直線、曲線) をダウンロードできますので、3D印刷して自由にレイアウトを作成できます。レールをたくさん3D印刷して電車を走らせてみましょう!
Supplies
今回のプロジェクトを始める前にヴァレンタ ロコ を組み立て設定する必要があります。
以下を事前に確認してください。
別途、micro:bit (2個)、単3電池 (6本) を使用します。はんだ付けしたり接着や塗装などの作業は必要ありません。簡単な作業で部品を取り付けて組み立てることができます。ヴァレンタ ロコ は英国 4Tronix 社と、Hummingworks 合同会社のパートナーシップにより共同開発いたしました。
サンプルコードをダウンロードしよう




 PNG.png)

このチュートリアル内では、マイクロソフト社 MakeCode エディターにて作成した micro:bit 用のサンプルコードを使用します。さっそくダウンロードしてみましょう。全てプログラミング済みですのですぐに遊べます。後のステップでサンプルコードの解説をします。サンプルコードが理解出来たら新しいコーディングに挑戦してみてください!
このステップ内にあるサンプルコードをお手元のコンピューターにダウンロードしてください。コンピューターと micro:bit を USB ケーブルで接続してファイルをドラッグアンドドロップして書き込んでください。
先ず Transmitter.hex サンプルファイル を送信側の micro:bit に書き込みます。サンプルコードを書き込みましたか?送信側の micro:bit に電池ボックスを取り付ける事で給電されます。
次に Receiver.hex サンプルファイル を受信側の micro:bit に書き込みます。サンプルコードを書き込みましたか?受信側の micro:bit を電車に搭載してモーターコントローラーの電源をONにしましょう!
送信側の micro:bit と受信側の micro:bit 両方の電源をONにするとすぐに遊ぶことができます。送信側の micro:bit のボタンAまたはBを押してみてください。電車が前後に走ります。送信側の micro:bit のボタンAとBを同時に押してみてください。電車が停止します。
ケーブルの接続を確認しよう


このチュートリアルで使用するヴァレンタ ロコはDRV8833チップを搭載するモーターコントローラーを使用しており、2つのDCモーター、4つのGPIO汎用入出力ピン(P0, P1, P2, P8)を操作できます。各ピンは3本で構成され、信号を送る (S) シグナル線 (黄ケーブル)、(V) ボルト (赤ケーブル)、(G) グランド (黒ケーブル)で構成されます。 4つのGPIO汎用入出力ピンはスイッチにより3.3Vまたは5Vを選択可能ですので、LEDを接続する場合は5Vを選択します。
台車からモーターのケーブルが伸びていますのでモーターコントローラーに接続します。
- 一方の台車のモーターケーブルの赤いケーブルをM1の左側ピンに接続します。黒いケーブルをM1の右側ピンに接続します。
- もう一方の台車のモーターケーブルの赤いケーブルをM2の左側ピンに接続します。黒いケーブルをM2の右側ピンに接続します。
LEDヘッドライト搭載の電車ボディーをお持ちの場合、GPIO汎用出入力を使用して点灯させることができます。その場合は P0, P1, P2, P8ピンのいずれかを選択します。ここではP8ピンを例に説明します。一方のヘッドライトの赤いケーブルをP8の (V) ボルトのピンに接続します。黒いケーブルをP8の (G) グランドのピンに接続します。ヴァレンタ ロコのモーターコントローラーの電源をONにするとヘッドライトが点灯します。
Transmitter.hex サンプルファイルを確認しよう


では Transmitter.hex サンプルファイルを確認してゆきましょう。MakeCodeエディターを開き Import ボタンをクリックします。送信側の micro:bit 内に保存されている Transmitter.hex サンプルファイルを選択して開きます。
on start ブロック
このブロックはプログラム起動時に1度だけ呼び出されるブロックです。
radio set group 1
Radio 拡張機能から radio set group 1 ブロックをドラッグアンドドロップして 1 に設定します。数字は任意で構いませんが、受信側の micro:bit と送信側の micro:bit を同じ数字に設定しないと双方向通信できませんのでご注意下さい。
on button A pressed ブロック
radio send string "goForward"
Input 拡張機能から on button A pressed ブロックをドラッグアンドドロップします。このブロック内に radio send string "goForward" ブロックをドラッグアンドドロップします。 送信側の micro:bit のボタンAを押すと goForward 文字列を受信側の micro:bit に送信して電車が前進する様にコードを作成します。
on button B pressed ブロック
radio send string "goBackward"
Input 拡張機能から on button B pressed ブロックをドラッグアンドドロップします。このブロック内に radio send string "goBackward" ブロックをドラッグアンドドロップします。 送信側の micro:bit のボタンBを押すと goBackward 文字列を受信側の micro:bit に送信して電車が後進する様にコードを作成します。
on button A+B pressed ブロック
radio send string "stop"
Input 拡張機能から on button A+B pressed ブロックをドラッグアンドドロップします。このブロック内に radio send string "stop" ブロックをドラッグアンドドロップします。 送信側の micro:bit のボタンAとボタンBを同時に押すと stop 文字列を受信側の micro:bit に送信して電車が停止する様にコードを作成します。
Receiver.hex サンプルファイルを確認しよう


では Receiver.hex サンプルファイルを確認してゆきましょう。MakeCodeエディターを開き Import ボタンをクリックします。受信側の micro:bit 内に保存されている Receiver.hex サンプルファイルを選択して開きます。
on start ブロック
このブロックはプログラム起動時に1度だけ呼び出されるブロックです。
radio set group 1
Radio 拡張機能から radio set group 1 ブロックをドラッグアンドドロップして 1 に設定します。数字は任意で構いませんが、受信側の micro:bit と送信側の micro:bit を同じ数字に設定しないと双方向通信できませんのでご注意下さい。
送信側の micro:bit から送られてきた文字列を受信側の micro:bit が受け取った時、文字列の内容に基づいて条件分岐されて関数を実施します。
on radio received receivedString ブロック
Radio 拡張機能内にある on radio received receivedString ブロックを使用します。Logic 拡張機能内にある if then ブロックも使用します。+ サインを複数回クリックして必要な分の条件分岐を作成してください。
if receivedString = goForward then
call goForward
受け取った文字列が goForward の場合、Functions 拡張機能から call goForward ブロックを呼びだすためにドラッグアンドドロップします。
else if receivedString = goBackward then
call goBackward
受け取った文字列が goBackward の場合、Functions 拡張機能から call goBackward ブロックを呼びだすためにドラッグアンドドロップします。
else if receivedString = stop then
call stop
受け取った文字列が stop の場合、Functions 拡張機能から call stop ブロックを呼びだすためにドラッグアンドドロップします。
電車の進行方向とスピードを定義するブロックについて見てゆきましょう。各台車にモーター(M1、M2)が接続されています。
function goForward ブロック
Functions 拡張機能内に goForward 関数を作成します。
call stop
pause (ms) 200
電車が前進する以前に安全に停止している事を確認します。Functions 拡張機能から call stop ブロックを呼びだし、200ミリ秒ほど出発準備の為に時間を置きます。
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 関数を作成します。
call stop
pause (ms) 200
電車が前進する以前に安全に停止している事を確認します。Functions 拡張機能から call stop ブロックを呼びだし、200ミリ秒ほど出発準備の為に時間を置きます。
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モーターは停止します。