micro:bit(マイクロビット)用のビジュアルプログラミング環境でGroveモジュールを使う 〜マイクロビット用Grove Inventor キット〜

Seeedさん社内の人ではなくユーザという立場ですが、本ブログで記事を書かせていただくことになりました豊田(@youtoy)です。

今回、プライベートの活動(技術系コミュニティの活動や子ども向けのプログラミングサポートの活動)でよく利用している、下記の製品「マイクロビット用Grove Inventor キット【SKU 110060762】」を紹介させていただきます。

f:id:youtoy:20170616141604j:plain

wiki.seeedstudio.com

製品の概要など

ご紹介する「マイクロビット用Grove Inventor キット」は、センサー等を搭載したマイコンボードである micro:bit(マイクロビット) と組み合わせて利用する製品です。

このキットには、以下のシールド・モジュールが同梱されており、キットに含まれた Groveモジュールをマイクロビットと組み合わせて利用することができます。

上記の 8つのモジュールとマイクロビットの接続は、シールドを介して簡単に行えます。 また、プログラミング環境として Microsoft MakeCode for micro:bit (以下、単に MakeCode と記載)を用いることができ、PC のブラウザからアクセスした MakeCode のウェブサイト上でビジュアルプログラミングによる開発を行うことが可能です。

今回の記事の内容についてですが、キット付属のモジュールの細かな仕様を見ていくと内容が長くなりすぎるため使い方の事例紹介を主に書くことにします。

モジュールを実際に使ってみる

今回試す内容

この記事では、公式の Wiki に書かれたサンプルのうちの 1つを実際に試してみます。具体的には、以下の画像(公式の Wiki より引用)にあるとおり「超音波距離測定センサー」と「7セグ4桁ディスプレイ」の 2つを組み合わせた作例です。

f:id:youtoy:20200510192711p:plain

「超音波距離測定センサー」は、センサーから直線上の一定範囲に物などが近づいたかどうか超音波を使って検出することができ、その距離の値も取得することができます(公式の Wiki の情報では 2〜350cm の範囲、1cm 単位の数値を取得可能)。 用途として、例えばロボットカーに搭載すれば、壁に近接しすぎて衝突しそうな状況を検出して、衝突を回避するための動作をさせることができます。
また、特定の場所に人や物が近づいたことを検出することができます。最近の事例では、店で売っている手動ポンプ式のハンドソープとモーターと一緒に組み合わせて、ハンドソープの容器に手を近づけるだけでハンドソープが自動で出てくる仕組みを DIY で作る、というものもありました。

「7セグ4桁ディスプレイ」は見た目通り、4桁の数字をディスプレイ上に表示できるモジュールで、今回の作例では上記の超音波距離測定センサーで取得した距離の値を分かりやすく表示するために利用します。

モジュールの接続とMakeCode用拡張機能

シールド上で Groveモジュールを接続可能な箇所は全部で 4つあり、それら Grove のインタフェースは「P0/P14、P1/P15、P2/P16、I2C」が割り当てられています。その割り当てはシールド上の記載で確認することが可能です(以下の写真の緑色の枠で囲まれた部分を参照)。

f:id:youtoy:20200510203025j:plain

モジュールによって接続する箇所が決まっていますので、詳細は各モジュールの情報が書かれた公式の Wiki をご確認ください。
今回の場合は以下の画像のとおり、超音波距離測定センサーを「P0/P14」に、 7セグ4桁ディスプレイを「P1/P15」に接続します(※以下の緑矢印で示した部分)。また、PC からプログラムを行うため、USBケーブルも接続してください(※以下の赤矢印で示した部分)。 f:id:youtoy:20200510220227j:plain

また、MakeCode によるプログラミングで、超音波距離測定センサーと 7セグ4桁ディスプレイを使う場合、これらのモジュールの利用をサポートしてくれる拡張機能があります。
以下では、その拡張機能を使った開発を進めていきます。

MakeCodeを使ったプログラミングの手順

まずは、Microsoft MakeCode for micro:bit( https://makecode.microbit.org/ )にアクセスしてください。以下、Microsoft MakeCode for micro:bitは単にMakeCodeと記載します。
MakeCode のページにアクセスすると、以下の画像のような画面になると思います。この中で、左側の中ごろにある「新しいプロジェクト」をクリックして開発を始めます。 f:id:youtoy:20200426212217j:plain

「新しいプロジェクト」をクリックした後は、以下のような画面が表示されます。
この画面の右半分の部分で、ブロックのプログラムを組み立てていきます。 f:id:youtoy:20200426212454j:plain

ここで、キットを使った開発を助けてくれる拡張機能を導入しておきます。
以下の画像中で赤い矢印で示した「高度なブロック」を選択してください。 f:id:youtoy:20200426213118j:plain そして、展開されたメニューの一番下までたどっていくと、以下の画像中で赤い矢印で示した「拡張機能」という項目があるので、それを選択してください。 f:id:youtoy:20200426213349j:plain その後の画面で、以下の画像中で赤い矢印で示したテキストボックスに文字を入力して、拡張機能を検索します。 f:id:youtoy:20200426213723j:plain 以下の画像中で赤い矢印で示した部分のように「grove」という文字列を入力して、エンターキーを押してください。
そうすると、いくつかの拡張機能が検索結果として表示されるので、以下の画像中で緑色の矢印で示したものを選択してください。 f:id:youtoy:20200426213839j:plain その後、MakeCodeの以下の画面に戻ってきます。
その画面中では、以下の画像中で赤い矢印で示した部分のように「Grove」という項目が増えているので、これを選択してみましょう。 f:id:youtoy:20200426214214j:plain

以下の画像のように、今回利用するキット用のブロックを選ぶことができます。
また、以下の画像中で赤い矢印で示した部分「その他」も選択してみてください。 f:id:youtoy:20200426214241j:plain 先ほどは表示しきれていなかった、別のブロックも選択することが可能です。 f:id:youtoy:20200426214406j:plain

拡張機能で増えたブロックを簡単に確認してみたところで、いよいよプログラムの作成に入っていきます。
それでは、変数の項目で「変数を追加する...」を選びましょう。

f:id:youtoy:20200426220443j:plain

ここで変数の名前を設定するのですが、今回「Display」という名前にします。
名前を入力したら、入力欄から右下あたりの位置にある OKボタンを押してください。

f:id:youtoy:20200426220458j:plain

変数の作成が終わったら、変数の項目に増えた「変数 Display を0 にする」を右の方へドラッグ&ドロップしましょう。

f:id:youtoy:20200426220619j:plain

ドラッグ&ドロップしてきた「変数 Display を0 にする」は、以下のとおり「最初だけ」のブロックの中に移動させてください。

f:id:youtoy:20200426220631j:plain

今度は Grove の項目を選択し、その中にある「[Grove - 4桁ディスプレイ]端子 P0 と端子 P0」を右へドラッグ&ドロップします。

f:id:youtoy:20200426220751j:plain

そして、「[Grove - 4桁ディスプレイ]端子 P0 と端子 P0」のブロックは、先ほど「最初だけ」のブロックの中に配置した「変数 Display を0 にする」のブロックの「0」の部分にドラッグ&ドロップします。
さらに、以下の赤矢印で示した 2箇所の「端子 P0」をクリックし、1つ名は「P1」に、2つ目は「P15」へと変更してください。

f:id:youtoy:20200426220802j:plain

2箇所の「端子 P0」を変更した後の状態は以下のとおりです。

f:id:youtoy:20200426220813j:plain

再度、Grove の項目を開いてください。
「strip [Grove - 4桁ディスプレイ] 0 を表示する」のブロックと「[Grove - 超音波距離センサー] 距離(cm)を読み取る 端子 P0」の 2つのブロックを右のほうへドラッグ&ドロップしましょう。

f:id:youtoy:20200426220928j:plain

「[Grove - 超音波距離センサー] 距離(cm)を読み取る 端子 P0」のブロックは「strip [Grove - 4桁ディスプレイ] 0 を表示する」のブロックの「0」の部分にドラッグ&ドロップします。
そして、2つのブロックが一緒になったものを、以下の画像のように「ずっと」のブロックの中に移動させてください。さらに、「strip [Grove - 4桁ディスプレイ] 0 を表示する」のブロックの「strip」の部分をクリックして「Display」に変更しましょう。

f:id:youtoy:20200426220944j:plain

プログラムの内容が以下の画像のとおりになったら、以下の赤矢印で示した「基本」の項目を選びます。

f:id:youtoy:20200426220955j:plain

以下の画像のとおりになったら「基本」の項目の中の「一時停止(ミリ秒) 100」のブロックを右のほうへドラッグ&ドロップして、「ずっと」のブロックの中へ移動させ、以下の画像と同じプログラムになるようにしてください。

f:id:youtoy:20200426221004j:plain

プログラムの書き込みと実行

プログラムの準備は整ったので、これをマイクロビットに書き込んでプログラムを実行してみます。
マイクロビットとPCをUSBケーブルを接続し、作成したプログラムの書き込みを行ってください。手順が不明な場合は、マイクロビットの公式のクイックスタートを参照してみてください。

プログラムの書き込みが終わったら、自動的に今回作ったプログラムが実行されます。うまくできていれば、以下の動画のように超音波距離測定センサーの前に物を置いたりしてそれを動かすと、リアルタイムに 7セグ4桁ディスプレイに超音波距離測定センサーで取得した値が表示され変化すると思います。

www.youtube.com

なお、この記事の執筆時点(2020年5月10日時点)では、公式の Wiki や公式のマニュアルに書かれたキット用のサンプルプログラムが、古いバージョンの MakeCode用のプログラムになっています。そのため、公式のプログラムを見ると MakeCode のプログラム用のブロックと見た目が一致していない状況となります。
公式の情報を手がかりとして現在の MakeCode の最新のブロックを探すことはできますが、見た目の違いについてはご注意ください。

おわりに

今回、「マイクロビット用Grove Inventor キット」のサンプルの 1つを試しに作ってみました。
以下の 3つとマイクロビットを組み合わせて、超音波距離測定センサーで取得した値をリアルタイムに 7セグ4桁ディスプレイに表示させることができました。

  • micro:bit用Groveシールド
  • 超音波距離測定センサー
  • 7セグ4桁ディスプレイ

MakeCode でブロックを組み合わせてプログラムを作成しましたが、例えば他の Arduino IDE などを使ったテキストでのプログラミングで開発環境の準備やライブラリの利用、プログラミングを行うのに比べると、簡単に作例を作ることができます。
もちろん、複雑な仕組みを作る場合などはテキストプログラミングのほうが便利な場合もありますし、今回のような開発方法のメリット・デメリットはありますが、用途が合えば便利に活用できると思います。

MakeCode とマイクロビットを組み合わせた開発は、拡張用のモジュールやキットなどを組み合わせると複雑な作品も作ることができ、自身の事例で言うとスマートスピーカーとロボットカーを組み合わせたプロトタイプを作ってみたり、過去に参加したハッカソンでの作品に活用したこともあります。

今回の記事で取り扱った「マイクロビット用Grove Inventor キット」に関して、今回の記事では使っていない光センサーやLED テープ、ジェスチャーを検出するセンサーなどもあり、様々なことが行えます。なおキットに含まれるシールドやモジュールはそれぞれを個別に購入することもでき、必要なものだけを揃えることも可能です。

ぜひ、今回の記事を見て興味をもたれた方は試してみていただければと思います。

変更履歴

日付 変更者 変更内容
2020/5/10 豊田 作成