ワークショップ

micro:bit でペンライトを光らせよう
大阪公立大学 稲川孝司
1. はじめに

最近、コンサートで観客が曲に合わせてペンライトを振ることが多くなっている。当初
は、観客が 1 色で光るものを複数個持参し、曲に合わせて各自が選択した色で振っていた。
その後、１本で複数の色で光るペンライトができ、曲に合わせて手元で色を選択して、ペンライトを振っている。しかし、初心者にとっては、どの場面でどの色のペンライトを選び、それを使ってどのように振舞えばよいかよくわからない。
そこで、micro:bit と NeoPixel を使って、様々な色で光るペンライトプログラムを工夫して作成し、その後、管理者が全体を制御して、統一感のあるライティングができるペンラ
イト制御を行う無線での送・受信プログラムを作成し、実際に演奏に参加する。
なお、シミュレータが良くできており、本物がなくても同等に動作する。

2. ｍicro:bit で NeoPixel を動かす
2.1 micro:bit と NeoPixel の接続
NeoPixel の DIN 端子に micro:bit の P0 信号線、５ VDC 端 子 に micro:bit の ３ V 、 GND 端 子 にmicro:bit の GND を接続します（図１）。
なお、micro:bit の基板上の 3V 端子から流せる電流は V1＜90mA V2＜200mA なので、直接駆動する場合は、NeoPixel の数の上限に注意すること。

図１

NeoPixel と micro:bit の接続

2.2 NeoPixel ライブラリの追加
micro:bit で NeoPixel を利用するにはライブラリの追加が必要で、まず（MakeCode formicro:bit）に行き、ツールボックスの下にある「拡張機能」(図２)をクリックして、表示されたネット上の拡張機能から「NeoPixel」(図３)を探して、クリックしてライブラリを追加する。ライブラリが追加されると、図４に示す NeoPixel の命令が使えるようになる。

クリッククリック

図２

拡張機能

図３ NeoPixel ライブラリ

図４追加された命令群

3 基本的な NeoPixel プログラムの作成【例 1】NeoPixel 全体を赤色で光らせてみよう。(rei-1)
1) 新しいプロジェクト⇒名前を「rei1」と入力し、作成ボタンをクリックする。
2)「NeoPixel」ブロックから「変数を NeoPixel モードにする」を「最初だけ」の中に追加する。
3) NeoPixel を接続している端子は P0 なので、P0 であることを確認する。
4) NeoPixel の数は８個なので、ブロック内の 24 を８に変更する。
5) 「NeoPixel」ブロックから「strip を赤色に点灯する」ブロックを「最初だけ」に追加する
6) 作成したプログラムを micro:bit に書き込み、赤色で点灯することを確認する。
NeoPixel を接続している端子名

ここを押すと色を変えられる

デフォルトで定義される変数

図５

搭載されているLED チップ数
24 を 8 に変更

転送データのカラー順番
WS2812 の場合は GRB 順

例 1 のプログラム【例 2】NeoPixel 全体を好きな色で 500 ミリ秒ごとに点滅させてみよう。（rei-２）
1) ファイル名を「rei-2」と入力する。
2) 「最初だけ」ブロックの中に「変数を NeoPixel モードにする」ブロックを追加する
3) NeoPixel を接続している端子は P0 なので、P0 であることを確認する。
4) NeoPixel の数は 8 個なので、ブロック内の 24 を 8 に変更する。
5) 「ずっと」ブロックの中に「strip を赤色に点灯する」ブロックを追加する。
6) 基本から「一時停止（ミリ秒）500」ブロックを追加する
7) 「strip を赤色に点灯する」ブロックを追加し、消灯するために色を black に変更する。
8) 再度、基本から「一時停止（ミリ秒）500」ブロックを追加する
9) 作成したプログラムを micro:bit に書き込み、正しく点滅することを確認する。

搭載されているLED チップ数
24 を 8 に変更

図６

例 2 のプログラム原色大辞典リンク

【例３】NeoPixel の 8 個の LED を、個別に様々な色で点灯させてみよう。（rei-３）

図７

例 3 のプログラム※「strip の”０”番目の LED を”赤色”に設定する」ブロックでは、何番目にある LED を何色に点灯させるかを設定する。この時、「●番目」の値は、１ではなく０から始まることに注意！
micro:bit と接続してある側が「０番目」です。

【例 4】NeoPixel で光らせる色を自分で作ってみよう。（rei-４）
RGB の値はボタンを押して作ります。
A ボタンで R(赤)、B ボタンで G(緑)、A+B ボタンで B(緑)の値を変えて、好きな色で光らせてみます。
動作は、各ボタンを押すと、RGB の数値が 10 ずつ増えて、micro:bit の画面にグラフ表示され、そのRGB の 値 で 、
NeoPixel が 光 り ます。

図８

例 4 のプログラム

【例 5】配列を利用して NeoPixel の 8 個をすべて同じ色で光らせる。
最初は赤色で、A ボタンを押すごとに、赤、だいだい、黄、緑、青、あい、紫、白、黒、緑、の順に点灯させ、また、Ｂボタンを押すと逆順で色を光らせることもできるように設定する。プログラムは、最初だけのブロック内で色のデータを配列に記録させておき、変数
S を使って A ボタンを押すと値が１増えて次の色に、B ボタンを押すと値が１減って前の色に戻るように、配列の場所を指定して色のデータを取り出し、その色で NeoPixel を発光させている。（rei-５）
なお、配列の要素を RGB（赤、青、緑）にして、フルカラーから選ぶこともできる。

Microbit の配列の添字は０から始まる

配列の要素はLED の色
図９

例 5 のプログラム

【例 6】NeoPixel のライブラリに「レインボーパターンに点灯する」という命令がある。
その命令を使って、ボタン A を押したら下向きに、ボタン B を押したら上向きに、レインボーパターンで移動させながら光らせてみよう。（rei-６）

図 10

例 6 のプログラム【例７】例 6 で、8 個の LED をそのままレインボーパターンで点灯させると色相を単調なので、レインボーパターンの色相をｎから n+180 に細かく分割して光らせ、滑らかなレインボーカラ（rei-７）
ーで点灯させてみよう。

図１１ 例 7 のプログラム

４．ペンライト受信機のプログラム(receive)
様々な色で点灯可能なペンライトを、コンサート会場で観客が好き勝手に使用されると会場の雰囲気も白けるため、最近では管理者が無線でデータを送り、統一したライティングをするようになってきた。ここでは、無線を使ったペンライト受信機を作成する。
事前準備：無線のグループと NeoPixel の設定をする。
動作１：管理者から無線で送られてきた数値（０～９）を画面に表示する。
動作２：送られてきた数値ごとの処理（機能）プログラムを作成する。
動作３：ユーザに拡張機能（A ボタン、B ボタン）が使えるようにする。
（例：変数:time を 900 に設定し、A ボタンが押されている間は time を 300 にする）
（例：変数:dir を 1 に設定し、B ボタンが押されている間は dir を-1 にする）
グループ毎に異なる番号を割り振る

動作チェック用

ここに、各自が作成したプログラムを書く

拡張機能例
図１２

受信プログラム（microbit-penlight-recieve）

【s=０の例】NeoPixel 全体をレインボーパターンで点灯する。（動作チェック用）

図１３

S=0 のプログラム例【s=１の例】NeoPixel 全体を赤、だいだい、黄、緑、青の順に、色を指定して time で定義された時間点灯し、色を１つずつ変更する。
拡張機能で変数 time を定義しているので、一時停止の時間がそのままでは 900ms、A ボタンを押すと 300ms と短くなり、A ボタンを押している間は色の変化が早くなる【s=２の例】レインボーパターンで点灯し、色を１つずつずらす。
8 個の LED をレインボーパターン命令そのもので点灯すると色が単調になってしまうので、レインボーパターンの色相をｎから n+180で定義して光らせ、360 まで繰り返して光らせることで、滑らかなレインボーカラーで順に点灯させている。

図１５

図１４ S＝１のプログラム例

S=2 のプログラム例※グループ内で相談して、S=３から S=９までのプログラムを分担して作成する。

5．ペンライト送信機のプログラム(send)
設定：無線のグループを他のグループとは異なる数値（0～255）に設定する。
動作：機能の数値(０～９)を画面に表示し、A ボタンで手前に,B ボタンで次に移動。A+Bボタン（両方同時押し）で決定して、機能の数値を無線でグループ内の相手に送信する。
micro:bit の画面表示は、２文字以上になると文字列をスクロールして見にくくなるので、機能の数値は１桁のみに制限している。

図１６

送信プログラム１(microbit-penlight-send)

６．ペンライト演奏参加
１． みんなで、曲を決める２． どのタイミングで、どのような動作のライティングをするかを皆で相談して決める。
３． ペンライトソフトを動かしてリハーサルを行う。
４． 実際に演奏に参加する（１名は操作）