Introduction: [2020] LEDライトを照らして夜間走行してみよう
ヴァレンタ・オフローダー は micro:bit で操作できるラジコンカーです。レゴ・テクニックの部品と互換性があります。後輪に2つのギアモーターがあり、車体前方にマイクロサーボを使用しロベルヴァル・メカニズム (機構) を用いて前輪のステアリングを操作します。
今回のプロジェクトでは、ヴァレンタ・オフローダーに搭載されるLEDライトを点灯してみましょう!最新のモーターコントローラーには4つのLEDライトが搭載されています。マイクロソフト社の MakeCode エディターを使ってLEDライトの色を変更したり、点滅パターンをプログラミングしてみましょう。鮮やかなLEDライトを点灯させて夜間走行にチャレンジしてみましょう!
Supplies
今回のプロジェクトを始める前にヴァレンタ・オフローダーを組み立ててアプリを設定する必要があります。以下のプロジェクトを事前に確認してください。
ヴァレンタ・オフローダーを組み立てよう
Micro:bit ゲームパッドアプリでiPhone (iPad) からラジコンカーを操作してみよう!
ヴァレンタ・オフローダーには別途、micro:bit (1個)、単3電池 (4本) を使用します。はんだ付けしたり接着や塗装などの作業は必要ありません。ブロックの様にパチッと部品を取り付けて組み立てることができます。iPhone、iPad等は含まれておりません。ヴァレンタ・オフローダーは英国 4Tronix 社と、Hummingworks 合同会社のパートナーシップにより共同開発いたしました。
Step 1: サンプルコードをダウンロードしましょう
このチュートリアル内では、マイクロソフト社 MakeCode エディターにて作成した micro:bit 用のサンプルコードを使用します。さっそくダウンロードしてみましょう。全てプログラミング済みですのですぐに遊べます。後のステップでサンプルコードの解説をします。サンプルコードが理解出来たら新しいコーディングに挑戦してみてください!
このステップ内にあるサンプルコード (Receiver.hex ファイル) をお手元のコンピューターにダウンロードしてください。コンピューターと micro:bit を USB ケーブルで接続してファイルをドラッグアンドドロップして書き込んでください。
サンプルコードを書き込みましたか?USB ケーブルから取り外した micro:bit をヴァレンタ・オフローダーに搭載して車の電源を ON にしましょう!
Attachments
Step 2: Micro:bit アプリとゲームパッドを設定しましょう
お手持ちの iPhone (iPad) に micro:bit アプリをダウンロードしてインストールする方法、micro:bit と iPhone (iPad) をブルートゥースでペアリングする方法、アプリ内でゲームパッドを設定する方法については、下記のプロジェクトを再度ご確認ください。
Micro:bit ゲームパッドアプリでiPhone (iPad) からラジコンカーを操作してみよう!
上記のプロジェクト内で、ゲームパッドのボタンA、B、C、Dの操作を以下の様に設定しています。
- ボタン A を押す -> 車が前進する
- ボタン B を押す -> 車が後進する
- ボタン C を押す -> 車が左折する
- ボタン D を押す -> 車が右折する
今回の新しいプロジェクトでは、ゲームパッドのボタン1、2に以下の操作を設定してみましょう。
- ボタン1を押す -> LEDライトが点灯する
- ボタン2を押す -> LEDライトが消灯する
Step 3: MakeCode エディターを開いてサンプルコードを確認します
では、マイクロソフト社 MakeCode エディターを開いてサンプルコード (Receiver.hex ファイル) を開いてみましょう。
ステップ1でダウンロードしたサンプルコード (Receiver.hex ファイル) をエディターから開きます。
エディター内の Import (読み込む) ボタンを押してサンプルコード (Receiver.hex ファイル) を選択しファイルを開きましょう。
Step 4: 拡張機能を追加してみましょう
このプロジェクトでLEDライトを点灯させるために、マイクロソフト社 MakeCode エディター内に Valenta 拡張機能を追加します。
高度なブロックから拡張機能をクリックします。添付の写真の様に検索ボックス内に以下の情報を入力します。
https://github.com/4Tronix/Valenta
右側の「虫メガネ」のボタンをクリックします。Valenta 拡張機能が表示されたら選択して追加します。
Valenta 拡張機能の Board_Model グループ内にある select board model Zero ブロックを 最初だけ (on start) ブロック内にドラッグアンドドロップします。ヴァレンタ・オフローダーはヴァレンタ・ゼロというタイプのモーターコントローラーを使用しており、このブロックを用いてコントローラーを指定します。
Valenta 拡張機能の FireLed グループ内にある convert from red 0 green 0 blue 0 ブロックを使用して独自のRGBカラーを表現します。また set LED at 0 to ブロックを使用して4つのLEDライトにRGBカラーを指定します。最後に clear all LEDs ブロックを使用してRGBカラーをリセットします。
Step 5: 以前作成したブロックを再確認しましょう
以前学んだ下記のプロジェクトの中で作成したブロックを今回のプロジェクトでも再利用しています。下記のブロックがどの様な仕組みで作られているのかを再確認してください。
Micro:bit ゲームパッドアプリでiPhone (iPad) からラジコンカーを操作してみよう!
今回のプロジェクトで再利用しているブロック
- steer 関数 (function steer)ステップ 16 参照
- forward 関数 (function forward)ステップ 17 参照
- backward 関数 (function backward)ステップ 18 参照
- stop 関数 (function stop)ステップ 19 参照
- ゲームパッドのボタン [Aを押した、はなした] とき (on gamepad button A down, up)ステップ 20 参照
- ゲームパッドのボタン [Bを押した、はなした] とき (on gamepad button B down, up)ステップ 21 参照
- ゲームパッドのボタン [Cを押した、はなした] とき (on gamepad button C down, up)ステップ 22 参照
- ゲームパッドのボタン [Dを押した、はなした] とき (on gamepad button D down, up)ステップ 23 参照
Step 6: 新しいブロックを作成して追加しましょう
今回のプロジェクトでLEDライトを点灯させるために以下のブロックを新たに作成して追加します。1つ前のステップで確認したブロックと一緒に使いましょう。
- 最初だけ (on start)
- LED 関数 (function LED)
- ゲームパッドのボタン [1を押した] とき (on gamepad button 1 down)
- ゲームパッドのボタン [2を押した] とき (on gamepad button 2 down)
これらの新しいブロックについて詳しく学んでいきましょう。
Step 7: 最初だけ (On Start) ブロック の仕組みを学びましょう
最初だけ (on start) ブロックはサンプルコードを起動した時に一度だけ実行されます。
Bluetooth 入出力端子サービス (bluetooth io pin service) というブロックを使用します。このブロックを使ってブルートゥースを経由し micro:bit のデジタル・アナログピンを操作できる様にします。
車のステアリングを真っすぐにして直進できる様に steer 関数 (function steer) を呼び出します。関数 (Function) 拡張機能から call steer ブロックを 最初だけ (on start)ブロック内にドラッグアンドドロップします。
Valenta 拡張機能の Board_Model グループ内にある select board model Zero ブロックを 最初だけ (on start) ブロック内にドラッグアンドドロップします。ヴァレンタ・オフローダーはヴァレンタ・ゼロというタイプのモーターコントローラーを使用しており、このブロックを用いてコントローラーを指定します。
Step 8: LED 関数 (function LED) の仕組みを学びましょう
このステップでは4つあるLEDライトをどの様に点灯させるかについて学んでいきましょう。
サンプルコード (Receiver.hex ファイル) で以下の設定をしていますのでご参考ください。
LED 関数 (Function LED) ブロック
関数 (Function) 拡張機能を開き、関数を作成する (Make a Function) ボタンを押し LED 関数 (Function LED) ブロックを作成します。
ループ (Loops) 拡張機能を開き、もし真なら繰り返し (while do) ブロックをドラッグアンドドロップします。
変数 (Variables) 拡張機能を開き、変数を作成する (Make a Variable) ボタンを押し、変数 light を作成します。
論理 (Logic) 拡張機能を開き、0 = 0 ブロックをドラッグアンドドロップします。変数 (Variables) 拡張機能を開き、変数 light を左辺にドラッグアンドドロップして、light = 0 の様に変更します。右辺の値を 1 に変更して、light = 1 の様に変更します。この light = 1 ブロックを もし真なら繰り返し (while do) ブロック内の 真 (true) という部分にドラッグアンドドロップします。変数 light の値が 1 の場合のみ、LED 関数 (Function LED) ブロックを繰り返し実行するという仕組みです。
ここで簡単にRGBカラーについて学びましょう!RGBカラーとは赤 (R)、緑 (G)、青 (B) の3色を混合して色彩を表現する技術です。一つの色に 0 から 255 の範囲で数値を設定して色彩を調整でき、3色を混合してあらゆる色を表現できます。
0 から 255 の範囲で乱数を発生させ、1つ目の乱数を変数 n1、2つ目の乱数を変数 n2、3つ目の乱数を変数 n3 に挿入してみましょう。この変数 n1、n2、n3 を使って独自の赤、緑、青を作り、3色を混合して未知の色を表現してみましょう。LEDライトは4つ (番号 0、1、2、3) ありますので、4つのユニークな色を点灯させてみましょう!
変数 (Variables) 拡張機能を開き、変数を作成する (Make a Variable) ボタンを押し、変数 n1、n2、n3 を作成します。
計算 (Math) 拡張機能を開き、ランダムな数字を選択 (pick random) ブロックをドラッグアンドドロップして範囲を 0 から 255 までに設定します。
変数 (Variables) 拡張機能から、変数 n1 を 0 にする (set n1 to 0) ブロック内の 0 と置き換えて、変数 n1 をランダムな数字を選択:0 から 255 までにする (set n1 to pick random 0 to 255) ブロックを作成し、もし真なら繰り返し (while do) ブロック内にドラッグアンドドロップします。残りの変数も同様にブロックを作成しましょう。
Valenta 拡張機能にある FireLED グループの中から、convert from red 0 green 0 blue 0 ブロックをドラッグアンドドロップしましょう。変数 (Variables) 拡張機能にある変数 n1、n2、n3 と組み合わせて、convert from red n1 green n2 blue n3 ブロックを作成します。
Valenta 拡張機能にある FireLed グループの中から、set LED at 0 to ブロックと、上記のブロックを組み合わせて、set LED at 0 to convert from red n1 green n2 blue n3 ブロックを作成しましょう。このブロックはどの様な仕組みになっているのでしょうか?0 から 255 の範囲で生成された乱数を含む変数 n1、n2、n3 を使って独自の赤 (R)、緑 (G)、青 (B) を作り出し、この3色を混合してできた未知のRGBカラー4色をそれぞれLEDに点灯させていきます。LEDライトは4つ (番号 0、1、2、3) ありますので、残りのLEDも同様にブロックを作成しましょう。
最後に、LEDが点灯・消灯する時間を決めましょう。基本 (Basic) 拡張機能から、一時停止 (pause) をドラッグアンドドロップしましょう。1000ミリ秒は1秒です。ここでは一時停止 500ミリ秒 (pause 500ms) ごとに点滅するように設定しましょう。Valenta 拡張機能にある FireLed グループの中から、clear all LEDs ブロックを もし真なら繰り返し (while do) ブロック内にドラッグアンドドロップしましょう。
Step 9: ボタン1 とボタン2 の動作を設定しましょう
アプリ内のゲームパッドのボタン操作を設定してLEDライトを点灯、消灯させてみましょう。
ボタン1を押すとLEDライトが点灯、ボタン2を押すとLEDライトが消灯する様に設定したいと思います。
サンプルコード (Receiver.hex ファイル) で以下の設定をしていますのでご参考ください。
ゲームパッドのボタン [1を押した] とき (on gamepad button 1 down) ブロック
Bluetooth 接続機器 (Devices) から、ゲームパッドのボタン [1を押した] とき (on gamepad button 1 down) ブロックを使用します。
変数 (Variables) 拡張機能 から、変数 light の値を 1 に設定する 変数 light を 1 にする (set light to 1) ブロックをドラッグアンドドロップします。
関数 (Function) 拡張機能から、LED 関数 (function LED) を呼び出す 呼び出しLED (call LED) ブロックをドラッグアンドドロップします。
ボタン 1 を押すとLEDライトが点灯します。
ゲームパッドのボタン [2を押した] とき (on gamepad button 2 down) ブロック
Bluetooth 接続機器 (Devices) から、ゲームパッドのボタン [2を押した] とき (on gamepad button 2 down) ブロックを使用します。
変数 (Variables) 拡張機能 から、変数 light の値を 0 に設定する 変数 light を 0 にする (set light to 0) ブロックをドラッグアンドドロップします。
関数 (Function) 拡張機能から、LED 関数 (function LED) を呼び出す 呼び出しLED (call LED) ブロックをドラッグアンドドロップします。
ボタン2を押すとLEDライトが消灯します。
Participated in the
Robots Contest