マイクロビットとFaBoのセンサーの組み合わせ
簡単なセンサーであればマイクロビットと組み合わせて使うことができます。数多くのセンサーがあれば、それだけ応用範囲も広がります。今回は以下のFaBo(ファボ)という商品を使います。特にハンダ付けなどを行う必要はなく、3本の線を繋げば使うことができます。3本の線で制御できる点は以前取り上げたPIECEと同じです。(I2Cのセンサーを使う場合は4本の線を繋ぐ必要があります)
・FaBo
http://fabo.io/
このようなセンサーを購入する際に気になるのが、他の機器(ラズベリーパイ、Arduino等)で使えるかという点です。センサー類を複数購入すると結構な金額になることがあります。できれば、様々な機器に流用できると安心です。その点、FaBoはラズベリーパイ(ZEROにも対応)やArduino、IchigoJam/IchigoLatteなどでも使用することができます。これらの機器には専用の接続ボード(シールド)が用意されており、ハンダ付けなしで使用することができます。残念ながらマイクロビット用の接続ボードはありませんが、単純に線で接続すれば使うことは可能です。今回は直接センサーとマイクロビットを接続することにします。
FaBoのセンサーはブリックという名称になっています。以後、センサーは「LEDブリック」のように表記することにします。
ブリックの種類
FaBoには数多くのブリックが用意されています。カテゴリとしては以下の4つがあります。
・シリアル
・アナログ
・I2C
・カラーLED
マイクロビットではすべてのブリックを利用できるわけではありません。アナログとI2Cブリックであればマイクロビットでも扱うことができます。特に手軽に扱えるのがアナログブリックです。3本の線で簡単に接続できデジタル/アナログ入出力だけですので制御も簡単です。
すべてのブリックを取り上げるのは大変なので、今回は以下のブリックを扱います。
・LED(赤、黄色、緑)
・ボタン
・照度(明るさ)
・タッチ
・IR(赤外線)
ブリックとマイクロビットの配線ですが、アナログブリックはI/O、VCC、GNDの3つのピンがあります。これをマイクロビットの3V、GND、P0端子に接続します。複数のアナログブリックを接続する場合はP1端子やP2端子に接続します。
LEDの制御
まず、LEDを制御してみましょう。LEDを点灯するにはデジタル信号で1を出力します。0を出力すると消えます。ここでは3秒ごとに点滅を繰り返すプログラムを作成しましょう。
JavaScriptブロックを以下のように組み合わせます。
JavaScriptコードだと以下のようになります。
basic.forever(() => {
pins.digitalWritePin(DigitalPin.P0, 1)
basic.pause(3000)
pins.digitalWritePin(DigitalPin.P0, 0)
basic.pause(3000)
})
プログラムができたらマイクロビットに転送して動作を確認してみましょう。3秒ごとにLEDが点灯と消灯を繰り返します。
FaBoには様々な色のLEDブリックが用意されています。せっかくなので、信号機の色(赤、黄色、緑)のLEDを3つ接続して制御してみましょう。赤色のLEDブリックをP0端子に、黄色のLEDブリックをP1端子に、緑色のLEDブリックをP2端子に接続します。
接続したら以下のようにプログラムを組み合わせます。LEDの色によって出力する端子が異なるので間違えないようにしてください。今度は1秒ごとに表示するLEDブリックを変えていきます。
JavaScriptコードだと以下のようになります。
basic.forever(() => {
pins.digitalWritePin(DigitalPin.P0, 1)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P2, 0)
basic.pause(1000)
pins.digitalWritePin(DigitalPin.P0, 0)
pins.digitalWritePin(DigitalPin.P1, 1)
pins.digitalWritePin(DigitalPin.P2, 0)
basic.pause(1000)
pins.digitalWritePin(DigitalPin.P0, 0)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P2, 1)
basic.pause(1000)
})
プログラムができたらマイクロビットに転送して動作を確認してみましょう。1秒ごとに赤、黄、緑のLEDが順番に点灯していきます。
ボタン
次にボタンからの入力を行ってみましょう。FaBoのボタンは押すと1の信号が送られます。押されていなければ0です。この値を、そのままマイクロビットのLEDに表示してみます。
ボタンはP0端子に接続します。プログラムは以下のように組み合わせます。
JavaScriptコードだと以下のようになります。
basic.forever(() => {
basic.showNumber(pins.digitalReadPin(DigitalPin.P0))
})
プログラムができたらマイクロビットに転送して動作を確認してみましょう。ボタンを押すとマイクロビットのLEDに1が表示されます。
複数のボタンを接続して早押しゲームのボタンとして使ってみるのもよいでしょう。
照度(明るさ)とタッチ
次に照度とタッチブリックを使ってみます。これまではデジタル入力でしたが、これらのブリックはアナログ値を返すことができます。これらのセンサーで得られた値を、そのままマイクロビットのLEDに表示してみます。
アナログブリックは、どれも同じ配線で使うことができます。ブリックを差し替えるだけなので、とても簡単に扱うことができます。プログラムは以下のように組み合わせます。デジタル入力ではなくアナログ入力ブロックになりますので、間違えないようにしてください。
JavaScriptコードだと以下のようになります。
basic.forever(() => {
basic.showNumber(pins.analogReadPin(AnalogPin.P0))
})
プログラムができたらマイクロビットに転送して動作を確認してみましょう。照度ブリックの場合は手をかざしたりして明るさを変えてみましょう。タッチブリックの場合は押した強さで値が変わります。
IR(赤外線)
最後に赤外線ブリックを使ってみましょう。この赤外線ブリックの使い道ですが、リモコンが機能しているかどうかの確認に使う事ができます。また、ブリックとリモコンからの距離によっても強さが変わります。
赤外線ブリックはP0端子に接続します。赤外線ブリックの値は数値で表示するのではなく、マイクロビットのLED全体の明るさで示してみます。アナログの値は0〜1023なので4で割った値をLEDの明るさにします。
プログラムは以下のように組み合わせます。
JavaScriptコードだと以下のようになります。
basic.showLeds(`
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
`)
basic.forever(() => {
led.setBrightness(pins.analogReadPin(AnalogPin.P0))
})
プログラムができたらマイクロビットに転送して動作を確認してみましょう。赤外線リモコンをブリックに近づけてからリモコンのボタンを押してみてください。LEDが高速に点滅します。リモコンのボタンによって点滅パターンが異なるのがわかるでしょうか。
点滅パターンではなく1つずつLEDの明るさを変えてパターンを表示することもできます。見た目としてはこちらの方が面白いかもしれません。
プログラムは以下のように組み合わせます。
JavaScriptコードだと以下のようになります。
let 変数 = 0
basic.forever(() => {
led.plotBrightness(変数 % 5, 変数 / 5, pins.analogReadPin(AnalogPin.P0) / 4)
変数 += 1
変数 = 変数 % 25
})
FaBoのブリックには他にもいろいろなものがあるので、いろいろ接続して動かしてみると面白いでしょう。
著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。最近は30年前に移植したゲーム(mz-700版 SPACE HARRIER)の話などを書いたりしています。
著者サイト:http://www.openspc2.org/