[No.9]暗くなったら自動的に点灯!〜レインボーライトを作ろう

総合・探究

小さなものづくりコンピューター「SPACEBLOCK(スペースブロック)」は、いろいろなパーツを足してプログラムを工夫してさまざまな機能を作ることができます。今回は「明るさセンサモジュール(明るさセンサ)」を使って暗くなったら自動的に点灯するライトを作りましょう。前回[SPACEBLOCK-8]で覚えた「繰り返し」と、新たに「条件分岐」の技を使ってプログラミングしますよ。

小学校~ 初級 40分

必要なもの&準備

左上:SPACEBLOCK通常パッケージ、左下:明るさセンサ、右上:LEDパネル、右下:ジャンパーワイヤ

SPACEBLOCKに拡張パーツを接続する

まずは、今回使用するLEDパネル、明るさセンサをSPACEBLOCKに接続してみましょう。


接続の全体像

細かい部分は次の図を参考にしてください。明るさセンサからは3本のワイヤが出ていますので、黄色ピンソケットの図の通りの位置に接続してください。

ジャンパーワイヤの色とピンソケットの位置に注意して接続する

明るさセンサって何ができるの?

明るさセンサは、明るさを測定して数値化することができます。一番暗い状態が0で、明るくなるほど数値は大きくなります。このように、明るさなどの程度を測定し数値にしてプログラムに渡すことをアナログ入力と呼びます。

明るさセンサは、測定した明るさに応じてSPACEBLOCKに挿したピンヘッダの電圧を上げたり下げたりします。電圧の程度に応じて0から1023までの数値に置き換えてプログラムに値を渡しています。

明るさセンサは明るさを測定して数値化する

明るさセンサの値は、[入力]カテゴリーの[《A0》の電圧をアナログ読取]というブロックで取得します。まずは明るさセンサが測定した値を表示するプログラムを作りましょう。次の図の通り[基本]カテゴリーの[数字《0》を表示]ブロックと組み合わせてください。

明るさセンサの値を表示させるプログラム

[《A0》の電圧をアナログ読取]ブロックをクリックするとピンソケットの一覧が表示されるので、「B0」を選びます。同時に、明るさセンサを図の通り接続していることを確認してください。

明るさセンサの「S」から出るワイヤを挿したピンソケット名を指定する

明るさセンサの測定値を見てみよう!

作成したプログラムを実行してみましょう。プログラムを実行した瞬間の明るさセンサの値が、プログラム画面のコンソールに表示されます。
明るさセンサの値を確認するためのプログラム

昼間の自然光が入る室内で実行したところ、値は300でした。明るさセンサの向きや場所を変えてプログラムを実行すると、また違う値が表示されます

上の図のプログラムでは実行した瞬間の明るさセンサの値しかわかりません。常に値を表示させるようプログラムをアレンジしましょう。次の図の通り、[繰り返す]ブロックを追加してください。

明るさセンサの値を表示し続けるプログラム

上の図のプログラムを実行すると、値を繰り返し表示し続けるので、コンソールに値が次々に流れていきます。

明るさセンサに手をかざしたりライトをあてたりすると、リアルタイムで測定値が変化するのがわかるので試してみましょう。どのくらいの明るさでどのくらいの数値になるでしょうか? センサ部分を完全にふさぐと「0」になりますよ

暗くなったらLEDパネルが点灯する装置

それでは、明るさセンサを利用して、暗くなったらLEDパネルを点灯させて、明るくなったらLEDパネルを消灯する装置を作りましょう。[論理]カテゴリーの[もし《 》なら〜でなければ〜]ブロックと[《0》《=》《0》]を使って次の図の通りプログラムを作成してください。
暗ければLDEパネルを点灯し、明るければLEDパネルを消灯するプログラム

プログラムでは「なんとなく暗くなったら」「夕方くらいの暗さになったら」「適当に常識的に判断して」という指示はできません。「明るさセンサの値が○よりも小さいなら」と具体的な数字で表現します。

明るさセンサの値がいくつより小さい状態を「暗い」ということにするのかは、プログラマーである皆さん次第。置きたい場所の環境によって適正な値は違うので、自分でいろいろな値を試して決めてください。今回は、「玄関の電気を消したら点灯する」ことを目的として試し、50としました。

明るさセンサのどのくらいの値より下を「暗い」とするかはプログラムで自由に決められる
ポイント
「論理」カテゴリーのブロックを使うと、設定した条件が「はい」の状態のときと「いいえ」の状態のときで実行する命令を分けることができます。これを「条件分岐」と呼びます。何を条件にするかによって、さまざまな仕組みを作ることができます。
条件としてよく使うのが数値の比較です。記号の意味を確認しましょう。
なお、プログラムは特に指定しない限り1回実行したら先に進んでしまいます。今回の作例のように、明るさセンサなどの状態をチェックし続けて条件が「はい」になったり「いいえ」になったりするたびに何か別の命令を実行したい場合は、[繰り返す]ブロックを使います。
繰り返す度に毎回条件を判定して命令を実行しているのですが、猛スピードで繰り返しているので、常にチェックしているように感じられます。
作成したプログラムを実行してみましょう。部屋を暗くすると自動的にLEDライトが点灯し、明るくなると再び消えます。SPACEBLOCKにプログラムを転送してスタンドアローンモードにすれば、どこでも好きな場所に置いて自動点灯するライトとして使えます。
暗くなると自動で点灯し明るくなると自動で消灯する

動画でご覧ください。

箱の中に入れてセットすると、より装置らしくなりますね!
白いボックスの中に入れて明るさセンサとパネルを内側から固定するだけで簡単な装置になる

同じ場所に置いていても、明るさセンサをどんな位置や向きに設置するかによって、測定の値は変わりますから、設置の仕方に応じて条件の値を変えたり、センサの配置を変えたりして工夫してみましょう。

動画でご覧ください。

「繰り返し」は今回のプログラムのように見えないところで何かをチェックし続ける仕組みを作る時にも便利に使えます。プログラミングの技をひとつ覚えると作れる装置の幅がぐんと広がりますよ!