STEM教育用マイコンボードのmicro:bitと、そのセンサーキットを試す

DFRobot(上海のハードウェアメーカー)に知人がいるのですが、彼女がBBC micro:bitとそのセンサーキットをくれました。キットの方がDFRobot製で、ちょっと試してみてほしいとのことでした。

僕はふだん何か作るときのマイコンとして、Arduinoまたは単体のAVRが最初の選択肢で、それで足りない場合はRaspberry Piを使っています。
今回は新たな選択肢として、micro:bit を試してみようと思います。教育用と聞いていますがよくできてるっぽいので実用でも行けるのではないか、というところの検証です。

BBC micro:bit (マイクロビット)

BBC micro:bit (マイクロビット)

もくじ

何それ?

micro:bitはBBCがSTEM教育用に作ったマイコンボードです。英国では11歳と12歳の小学生全員に配布されているらしいです。
詳しくはオフィシャルのドキュメントを見るとわかりますが、小さいボードの中に5×5のLEDマトリクスや二つのボタン、光、温度、加速度の各センサやコンパス、BluetoothLEまで入っています。Arduinoよりかなり充実していますね。すごい!

f:id:slideglide:20180802115342j:plain
上段中央がmicro:bit。他は大きさ比較用です。

デモ

開封して電源を挿すと、デモが起動します。LEDでのメッセージ表示やボタンの操作のほか、ジャイロを使った簡単なゲームまで入っていて、ボードの多機能さを見せつけるようなデモプログラムです。このボードかなりいろいろできるぞ!!という感じで胸が膨らみます。

youtu.be

プログラミングする

まずはプログラミング環境をチェックします。
micro:bitの開発環境はWeb上にあります。ここです。

2通りのやり方があり、一つはブロックエディタ、もう一つはMicroPythonです。

ブロックエディタ

Scratch風のブロックエディタを使ったプログラミング環境が用意されています。

f:id:slideglide:20180807221619j:plain

ループや条件分岐、変数などが書けるのは当然として、サーボモータを動かすブロック、入力した文字列をLEDマトリクスにスクロール表示させるブロック、バックグラウンド実行のブロックなど、かなり充実しています。

面白いのは左側のシミュレータです。右のコーディング画面で音に関するブロックを使用すると、勝手にシミュレータ上でオーディオ端子が接続されます。サーボのブロックを使うとサーボモータが接続されます。プログラムに合わせて配線図まで自動で生成してくれるのです。もちろんシミュレータですから、再生ボタンを押すとプログラムのとおりにLEDが光り、音が出て、モーターが動きます。これはすごい。


コーディング画面はワンタッチでソース表示に切り替えることができ、ブロックがどんなコードを生成しているか見ることができます。へー。
あまりちゃんと試していませんが、一応この画面で直接コードを編集することもできました。ちなみにこのコードはなぜかMicroPythonではなく、Javascriptです。

ブロックエディタで書いたプログラムをmicro:bitに書き込む方法ですが、画面下にある「ダウンロード」ボタンを押すとコンパイル済みの.hexファイルがダウンロードできます。
micro:bitをPCにつなぐとドライブとしてマウントされるので、そこにその.hexファイルをコピーすれば、書き込み完了です。

f:id:slideglide:20180807220956j:plain

あとは自動的にmicro:bitが再起動して、プログラムの実行が始まります。これは簡単。

MicroPythonで書く

今回は試してないのですがMicroPythonでも書けます。MicroPythonというのはマイコン向けのPythonです。

f:id:slideglide:20180807224008j:plain

こういうWebエディタがあるほか、手元で書いたソースコードをアップして.hexファイルにコンパイルすることもできるようです。

電子工作する

続いてハードウェアの方を見てみます。まず特徴的なのは接続端子で、
f:id:slideglide:20180809005421j:plain
こんな感じでワニ口クリップを使って接続します。穴の開いているピンは左から0、1、2番の各ピンと3V出力、GNDです。0~2のピンはデジタル/アナログの入出力に使えるほか、0番はスピーカーの接続にも使います。それらの間にある細いのも入出力ピンです。合わせて25本ありますが、この細いピンにジャンパ線を接続するのは無理だと思います。では何のためにあるのかというと、拡張ボードのためです。

SparkFun moto:bit

SparkFun moto:bit

これはモータドライバの拡張ボードですが、こういうののスロットにファミコンカセットみたいにガチャッと差し込むわけですね。

このままだと電子工作用途としてはちょっと使いにくい形状ですが、探してみたら細いピンを普通のピンヘッダに変換してくれる拡張ボードもありました。

これを使えばArduino風に使えるかも。

試しに動かす

さっきブロックエディタのキャプチャを撮るために適当に作ったプログラムがあるのですが、

f:id:slideglide:20180807221619j:plain
めちゃくちゃに置いたので意味のないブロックがたくさん混じってますが

これを動かしてみたいと思います。まず.hexファイルをダウンロードしてmicro:bitに書き込み。左の配線図のとおりに結線して、電源を挿します。

(動画)www.youtube.com


無事にLEDがアニメーションし音楽が流れ、サーボモータも動きました!*1

センサーキットBOSON

というわけで、なんとなく「動くぞ」という段階までは体験できました。
今度は実践編ということで、センサーキットと組み合わせて何か作ってみます。

f:id:slideglide:20180807225958j:plain

センサーキットはBOSONという商品名で、

f:id:slideglide:20180807230305j:plain

こんな感じでmicro:bitの拡張ボードと、スイッチや動体センサ、モータ類等がセットになっています。

f:id:slideglide:20180807231047j:plain

拡張ボードにはIOピンと電源がセットになったコネクタがついており、ケーブル1本でいろいろなモジュールを接続できます。楽!

f:id:slideglide:20180807230722j:plain

各モジュールには磁石がついているので金属にくっつけられますし、レゴにつけられる凹凸もついています。便利。

サイボーグ・キティを作る

BOSONの紹介はこのくらいでしょうか。問題はこれで何を作るかです。

f:id:slideglide:20180807225821j:plain

先日、夏祭りの輪投げの出店で子供がキティちゃんの貯金箱を取ったのですが、要らないというので改造していこうと思います。完成形は特に考えず、アドリブでやっていきます。

f:id:slideglide:20180807232214j:plain

頭のところにホットナイフで切り欠きを入れます。ホットナイフというのは樹脂を熱で溶かしながら切る工具です。

goot ホットナイフ HOT-60R

goot ホットナイフ HOT-60R

プラスチックがサクサク切れて大変便利ですが、加熱しすぎると溶けた樹脂が糸を引いてきれいに切れなくなるので、ほどほどの温度に調節するのがコツです。

f:id:slideglide:20180807233625j:plain

プロペラ付きのモーターを埋め込みました。次に

f:id:slideglide:20180807234441j:plain

目に穴をあけていきます。この手の素材(スチロール樹脂かな?)は普通にドリルを使うとすぐに割れるので、できるだけゆっくり回しつつビットの先で削り取るように掘削するのがコツです。

f:id:slideglide:20180807235902j:plain

目にLEDが入りました。みなさんふざけて何かの目を光らせる時に、つい赤色にしがちじゃないですか。最近気づいたのですが、緑の方が得体が知れない感じでより気味が悪いです。

f:id:slideglide:20180808021509j:plain

各パーツを配線します。プロペラのモジュールには付属のケーブル、LEDはミノムシクリップをつけました。

f:id:slideglide:20180808021357j:plain

それらを拡張ボードにつなぎ、追加でNeoPixelのモジュール、スイッチのモジュールも接続しました。
NeoPixelというのはマイコンから簡単に制御できるフルカラーLEDの製品名です。こういうの。

ハードウェアとしてはこれで完成です。では動きをプログラミングしていきましょう。

f:id:slideglide:20180808020004j:plain

こんな感じにしてみました。まず起動時に起動音が鳴り、それからボタンを押されると効果音とともに「Hello」というメッセージが流れ(キティだから)、そのあとキティちゃんが数秒間ライトアップされます。

ちなみにNeoPixelの制御ブロックは拡張ライブラリになっており、ブロックのカテゴリを選ぶところの一番下の「+」をクリックするとインストールできます。

これをコンパイルしてダウンロード、micro:bitに書き込みました。では動かしてみましょう。

youtu.be

なんかめっちゃ怖くなってしまいました。こんなにカラフルに光ってるのに!micro:bitのプリセットの音楽、妙に暗いのが多いんですよ。そのせいだと思います。キティは悪くない。

f:id:slideglide:20180808021311j:plain

作ったものが無意味すぎたので、次にスイッチを動体センサのモジュールに変えてみました。この動体センサは動くものを検知するとHIGHになるデジタルセンサなので、スイッチと挿しかえるだけで使えます。
たとえばこのキティちゃんをキッチンに置いておくと、夜中にのどが渇いて起きてきたときに自動で照明が付くはずです。

youtu.be

子供が起きてきたときに起動したら、次の日から3日くらい添い寝必須になりそうです。

所感

というわけでmicro:bitを軽く触ってみましたが、ここまでの感想です。

  • 小さくて多機能なのはすごく良い
  • LEDやボタンが内蔵されてるのも使いやすい
  • プログラミング環境は初心者向けには良さそう。自分はArduinoみたいにローカルに環境作れるやつのほうが楽かも
  • MicroPythonで書けるのは完全に〇
  • 独特のIOピンの形状は学校で使うには良さそうだけど電子工作には向いてない
  • サーボモータの使用には難あり。3Vピンは定格電流90mAしかない。そのわりにブロックエディタにはふつうにサーボモータの制御ブロックが出てきて、シミュレータ上では電源を3V端子から取るように指示される。そうするともちろん動かない。わかってる人なら別電源つないだりできるけど、子供はハマりそう。*2
  • ブロックエディタは手続き型の感覚で簡単にプログラミングできるけど、拡張ライブラリがそれに追いついてなくて急に難しくなる。
    • たとえば内蔵LEDは「LEDをつける」「LEDを消す」みたいなブロックで簡単に使えるけど、拡張ライブラリのNeoPixelは「変数neopixelにNeoPixelのインスタンスを代入」→「変数neopixelの色を指定」→「変数neopixelのアップデートメソッド呼び出し」みたいにしないといけなくて、急にオブジェクト指向っぽくなって面食らう

ボードの機能の範囲内でちょっとしたもの作るときの手軽さではArduinoとかより全然上で、そのあたりが本来の用途、教育用としてはすごくよくできてると思いました。ただそこを逸脱して電子工作でいろいろ作りこみたいときに、やっぱりピン形状が使いにくかったりとかして、Arduino感覚で常用する感じではないなと思いました。
思い切って、Arduinoにつないで、割り切ってセンサーとして/表示器として使う、みたいな用途はあるかも。

Bluetoothを使う

さいごに、せっかくBluetoothLEがついているので、スマホと連携させてみます。公式のアプリを入れれば、スマホ上でプログラミングをしてそのままBluetooth経由でmicro:bitに書き込むことができます。やり方はこちらの記事が分かりやすかったです。

ペアリング中
プログラミング画面はちょっと狭い

パソコンなしでプログラミングして書き込めるのはとてもいいですね。僕はArduinoの開発環境を持ち運ぶためだけにWindows10タブレットを買ったので、この身軽さはうらやましいです。
ただ、Android環境ではBluetoothの接続が不安定でした。プログラムを書き換えるとペアリングし直さないとつながらなかったり。いろいろやってもつながらなくて端末の再起動をしてようやくつながることも。ここがけっこう手間で、おかげでGoogle Play上での公式アプリの評価も低めです。

あと、iPhone版のアプリには「Monitor and Control」っていう機能があって、拡張ライブラリ「Bluetooth」と組み合わせると、スマホからセンサの値をモニタしたり、micro:bitの制御ができたりするみたいです。Android版にはないのですが、micro:bit Blueという別アプリで似たようなことができます。

ただこれが微妙で、例えばスマホの画面上にボタンなりフェーダーなりがあって、ブロックエディタで「スマホのボタンが押されたら」「スマホのフェーダーがn以上になったら」みたいなブロックが使えるとすごくいいと思うんですよ。スマホをコントローラーに、ラジコンのおもちゃとか簡単に作れます。
でも実際にはそれはなくて、連動できるのは「ボードのスイッチが押されているかスマホの画面で見られる」「スマホでオンボードのLEDの点灯状態を変えられる」みたいな「それ要る?」的な機能が多い。

ブロックエディタでBluetoothのブロックを見てみても、
f:id:slideglide:20180808234952j:plain
f:id:slideglide:20180808235038j:plain
こういう感じで全然抽象化されてないんですよね。これでラジコンつくるのはかなり難しい。

さっき

  • ブロックエディタは手続き型の感覚で簡単にプログラミングできるけど、拡張ライブラリがそれに追いついてなくて急に難しくなる。

ということを書きましたが、Bluetoothライブラリに関しても同じことが言えるなと思いました。

あとなぜかNeoPixelとBluetoothライブラリがコンフリクトするので、同時に使えないのも痛手でした。

まとめ

以上、micro:bit雑感でした。

繰り返しになりますが、とっつきやすさと手軽さはすごくて、初めての人が触るには最高。でも使い込もうと思うと、思いのほか洗練されてないところがあるなという印象を受けました。ただ英国の教育用ってことで、もしかしら現地のカリキュラムに沿ったところが重点的に整備されてるのかもとも思います(憶測)。
なんにしろ世に出てからまだ1年くらいしかたってないので、これからもっと良くなるかもしれないですね。

いずれにせよ、はじめて電子工作に触れる教材としての使い勝手は良いんだろうなと思います。なにせ教育用なので、そういうベーシックなところはちゃんとできている。僕も子供がもう少し大きくなったら使わせてみようと思っています。

BBC micro:bit (マイクロビット)

BBC micro:bit (マイクロビット)

余談:BOSONの別キットが面白そう

ちょっと話は逸れるのですが、上で使ったBOSONのキット、正確には「Boson Kit for micro:bit」というものです。ほかにシリーズでScience KitInventor Kitがあって、サイエンスの方にはpHセンサとか心拍センサとかがついてて、micro:bitと組み合わせて化学実験っぽいことができるようになってる。

f:id:slideglide:20180810005013p:plain
電動pHメーター。公式サイトより
あとインベンターの方はチルトスイッチとかボイスレコーダーみたいな追加モジュールのほか、ANDとかORとかの論理回路のモジュールも入っています。
f:id:slideglide:20180810005207g:plain
これも公式より
これはレゴCrazy Action Contraptionsとかと組み合わせるとかなりいろんなものが作れそうな気がします。
Lego Crazy Action Contraptions

Lego Crazy Action Contraptions

いま見たらスターターキットとサイエンスキットは秋月で買えるみたいです。
akizukidenshi.com
akizukidenshi.com
しかしそこそこ値は張るな…。

*1:サーボモータの駆動には実はちょっと難点があり、それは後述します

*2:上の方の動画でサーボモータを動かしてますが、5種類ほど試したうえで唯一動いたもので、かつかなり力ない動きです。そもそも大抵のサーボは5Vという問題もある