マイクロビットを使ってみる 〜ワークショップ講師が自作したマイクロビットコントローラー

センサ・電子回路との接続

私は、小中学生にプログラミングなどを教えるボランティアグループのメンバーになっています。

このグループでは、小学生に電子回路とマイクロビットプログラミングを教える通年制のワークショップを実施しています。月1回のペースで合計8〜9回程度実施し、「電子回路」や「プログラミング」についてそれぞれ数回の講義を行い、そこで得られた知識を使って、各参加者に自分で考えた作品をつくってもらおうという活動です。

このワークショップでは、「マイクロビット」「KEYESTUDIOモータードライバー拡張ボード(KS4033)」「電池ボックス(単四×4本)」の組み合わせを基本の構成とし、これにいろいろな部品を取り付けて、講義をしたり、作品をつくってもらったりしています。



今回、一緒に活動をしているボランティアグループのメンバーが、マイクロビットをつかったゲームなどをつくりやすくするための「マイクロビットコントローラー」を自作してくれました。
マイクロビットにはボタンがふたつしかないため、プログラムでなんらかの制御をしようとしても、その指示の仕方にいろいろと制約がありますが、その問題に対応するための作品です。

こちらがそのコントローラーです。

大きなボタンが4つと、小さなボタンがふたつのっている基板です。大きなボタンには色が付いており、見た目もキャッチーです。
各ボタンの信号とグランドがジャンパーピンで取り出せるようになっており、それらをマイクロビットにつなぐことになります。ボタンを押すと各信号とグランドがつながるという、とてもシンプルなしくみです。
なかなか使いやすそうです。

さっそくゲームをつくってみることにしました。フルカラーLEDも組み合わせて「早おしゲーム」をつくります。
以下のような仕様です。

  • Aボタンをおしたらゲーム開始です。
  • 少しまつと、フルカラーLEDが「緑」「青」「黄」「赤」のどれかの色でひかります。
  • LEDがひかったら、できるだけ早く、同じ色のボタンをおします。
  • LEDがひかってからボタンをおすまでの時間をはかります。
  • これを5回くりかえし、ボタンをおすまでの時間の合計から成績を計算します。
  • 成績によって、フルカラーLEDをちがう色で点滅させます。

フルカラーLEDの3つの端子「GND」「VCC」「IN」を、拡張ボードの「G」「5V」「2」につなぎます。

コントローラーの5つの端子「GR」「BL」「YE」「RE」「GND」を、拡張ボードの「13」「14」「15」「16」「GND」につなぎます。

プログラムはこちらです。

「最初だけ」では以下を行います。

  • 入出力端子の2番につながっているフルカラーLED(LEDは7つ)を、「strip」という名前の変数に設定します。
  • 「配列」をつかって、ひとつの変数にたくさんの値を設定します。ここでは「色のセット」という変数の0番目に、Neopixelの「緑」を、1番目に「青」を、2番目に「黄」を、3番目に「赤」を設定しています。
  • 入出力端子の13番(デジタルピン)を「緑ボタン」という名前の変数に設定します(ほかの端子も同じ)。最初にこのように設定しておくことで、このあとのプログラムで、入出力端子への処理をするときに、変数名で処理することができるようになり、プログラムがわかりやすくなります。
  • ボタンは、そのままだと「マイナス(0)につながっているか?」それとも「はなれているか?」をよみとりますが、「プルアップ」にしておくことで、「マイナス(0)につながっているか?」それとも「プラス(1)につながっているか?」として(つまりデジタル信号として)あつかうことができるようになります。

「Aボタンがおされたとき」には「ゲームをする」関数を実行します。

「ゲームをする」関数では以下を行います。

  • さいしょに「こたえるまでのスピード」という変数の値をゼロにしておきます。
  • フルカラーLEDをけします。
  • 「LEDをひからせる」関数を実行します。また、そのときの時間を覚えておきます。
  • 「ボタンをおす」関数を実行します。また、LEDをひからせてからボタンをおすまでの時間を計算します。
  • これを5回くりかえします。
  • 5回分の計算結果を「こたえるまでのスピード」にたしていきます。
  • 5回のくりかえしがおわったら、「成績を表示する」関数を実行します。

「LEDをひからせる」関数では以下を行います。

  • 0~5秒のあいだのランダムな時間だけまちます。
  • ひからせる色の番号(0~3)をランダムにきめます。
  • きめた色でフルカラーLEDをひからせます(「最初だけ」で設定しておいた「色のセット」という変数の配列をつかっています)。

「ボタンをおす」関数では以下を行います。

  • 最初に「おした色の番号」という変数の値を「99」にしておきます。
  • 緑ボタンをよみとった結果が「0」だったら(つまり緑ボタンがおされていたら)、「おした色の番号」という変数の値を「0」にします。
  • 他のボタンについても同じように、ボタンが押されていたら、「おした色の番号」という変数の値を設定します。
  • どのボタンもおされていなかったら、「おした色の番号」という変数の値を「99」にします。
  • これを、先ほどLEDをひからせたときの色の番号と、「おした色の番号」がおなじになるまでくりかえします。

「成績を表示する」関数では以下を行います。

  • フルカラーLEDをけして、0.5秒まちます。
  • 「こたえるまでのスピード」が2.5秒よりはやかったら2.5秒に、5秒よりおそかったら5秒にして、「成績」という名前の変数に設定します。これにより「成績」は2.5秒~5秒の範囲の値になります。
  • 「成績」の値(2.5秒~5秒の範囲)が「0~300」の範囲になるように変換します。
  • フルカラーLEDを、「成績」の色で3回点滅させます。はやかったら「赤」、ややはやかったら「黄」、中間ぐらいなら「緑」、ややおそかったら「青」、おそかったら「紫」あたりの色になります。

プログラム自体はかなり大きなものになりましたが、動かしているしくみとしてはとてもシンプルです。
このコントローラーを活用することで、子供にも楽しめるいろいろなプログラムがつくれそうです。

 

なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。