[2021] 2個のmicro:bitを使って電車を走らせよう!

by ハミングワークス in Circuits > Remote Control

262 Views, 0 Favorites, 0 Comments

[2021] 2個のmicro:bitを使って電車を走らせよう!

Microbits Pic JP PNG.png

ヴァレンタ ロコ は micro:bit でリモート操作できるレゴトレイン互換の電車です。レゴテクニックの部品と互換性があります。各台車にギアモーターがあります。

今回のプロジェクトでは、2個の micro:bit を準備し、一方を送信機、もう一方を受信機として電車に搭載して操作してみたいと思います。マイクロソフト社のMakeCodeエディターを使用してコーディングしてゆきます。難しいと感じる方の為にもサンプルコードをダウンロードできる様に用意していますのでご安心ください。

今回のプロジェクトでは、送信側の micro:bit のボタンA、Bを用いて前後に電車を走らせたり、LED点灯など様々な機能に挑戦してみたいと思います。

なお、世界最大の3Dプリントモデルサイト Thingiverse からレゴトレイン互換レール (直線、曲線) をダウンロードできますので、3D印刷して自由にレイアウトを作成できます。レールをたくさん3D印刷して電車を走らせてみましょう!

Supplies

今回のプロジェクトを始める前にヴァレンタ ロコ を組み立て設定する必要があります。

以下を事前に確認してください。

チュートリアル 「ヴァレンタ ロコ 設定ガイド」

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

The tutorial in English is available!

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

Transmitter PNG.png
Transmitter and Battery PNG.png
Receiver PNG.png
Microbit Mount PNG.png
Control Device (x2 Microbits) PNG.png
Tutorial 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を同時に押してみてください。電車が停止します。

ケーブルの接続を確認しよう

Zero Anatomy PNG.png
Wiring Motor and LED PNG.png

このチュートリアルで使用するヴァレンタ ロコは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 サンプルファイルを確認しよう

MakeCode PNG.png
Transmitter snapshot PNG.png

では 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 サンプルファイルを確認しよう

MakeCode PNG.png
Receiver snapshot PNG.png

では 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モーターは停止します。