micro:bitと人感センサーでセンサーライト作ってみた

人感センサーとLEDで何か作りたい

現在フリーランスのITエンジニアとして仕事をしていますが、今のところ客先常駐という形での仕事をしています。
ただ、せっかくフリーランスとして仕事をしているので、何か他にもできることはないかと日々考えております。

そんな中で、地域の子供向けプログラミング教育に自分が一役買えないか、という事は常々考えておりまして、Scratchであったりmicro:bitであったり、子供が楽しみながらプログラミングの学習が出来るようになるためのアイデアを検討しています。

で、気が付くと家にmicro:bitが3台もある状態です(V1:2台、V2:1台)。
あと、おそらく衝動買いしたmicro:bit用人感センサーも1つあり、これらがなかなか使えずにおりました。まさにタンスの肥やし状態ですね。

また、最近はLEDの制御もやってみたいと思い、先日micro:bit用のLEDボードをちょうど購入していました。
「これでセンサーライトを自作出来るんじゃ?」と考えまして、どうせなら自宅の階段で使えそうなセンサーライトを作ることにしました。

なぜ自宅の階段?というと、階段が非常に暗いんですウチ。
もちろんスイッチ式の照明はあるのですが、今の時代センサーで勝手に点灯してくれたほうが便利ですよね。
実は1台、市販のセンサーライトを階段に設置してあるものの、ちょっと光量が足りなくて、じゃあ自作ライトをその足しにしようかと。

自作センサーライトの機器構成と仕組み解説

では今回作成する、センサーライトの構成機器について紹介します。

micro:bit(V1)

micro:bit

今回はバージョン1を用意しました。
色々なセンサーが内蔵されていますが、今回は明るさセンサーを使用します。

micro:bit用人感センサーモジュール(コネクタータイプ)

micro:bit用人感センサーモジュール(コネクタータイプ)

後述のワークショップモジュールに接続して使うタイプのセンサーです。

micro:bit用ワークショップモジュール

micro:bit用ワークショップモジュール

micro:bitと外部センサーとの接続が手軽にできるモジュールです。
単4電池3本で動きます。
子供向けプログラミング教室などのワークショップでの利用に向いています。

micro:bit用フルカラーLEDボード(サークル型)

micro:bit用フルカラーLEDボード(サークル型)

フルカラーLEDが円形に12個並んでいます。
前述のワークショップモジュールに接続して使用します。

micro:bitで使えるLEDボード。形状違いの商品もチェック!

単4電池x3本

念のため、充電式の電池を用意しました。
これなら、いくら電池が切れても充電して繰り返しトライできますね。

気が付くと、充電器と電池以外は全てスイッチエデュケーションの製品となっておりました。
こちらの会社では、他にも面白い製品が沢山あるので、ぜひチェックしてみてください。

スイッチエデュケーションはすべての子供に STEM 教育を実践することを目的に活動する会社です。

で、上記の機器を以下の画像のように接続します。
micro:bit本体に隠れて見えていませんが、LEDボードはワークショップモジュールのP0端子に、人感センサーはP1端子に接続されています。

microbit, 人感センサー,LEDボード接続状態の画像

さて、こららの機器を制御するための、micro:bitのプログラムをご紹介します。MakeCodeで作成したプログラムの画面キャプチャとなります。
ちなみに、MakeCodeとは、Microsoftが無償で提供している、micro:bitのプログラムを作成するためのコードエディターです。

MakeCode

まず、LEDボードの制御をするためにMakeCodeの拡張機能で「neopixel」を追加します。この拡張機能が無いとLEDの制御が出来ません。

MakeCode拡張機能

次に、「最初だけ」ブロックの中で、LEDの設定をします。
追加した拡張機能「neopixel」のブロックからそのまま持ってきて、LEDの個数と接続端子を実際のLEDボードの状態に合わせて変更するだけです。

「ずっと」ブロックの中では、人感センサーが人を検知した時の処理を作成します。最初の「もし デジタルで読み取る 端子 P1 = 0 なら」というブロックは、人感センサーが人を検知した事を差しています。
この人感センサーは人を検知した時に0を返します。

あとは、LEDライトをどのような設定で点灯させるかを以下の処理で制御させています。

センサーライトを動かしてみた結果と問題点

今回考慮した点としては、センサーライトなので人を検知して無条件にLEDを光らせるのではなく、周囲が暗い時のみ人を検知したらLEDを光らせる、という事です。

まあ当たり前の事ですが、ここで問題なのは、何をもって「周囲が暗い」と判定するか、という事でした。

幸い、micro:bitには明るさセンサーが内蔵されていますので、これを使えば良いかと。ただ、具体的な数値は実際に明るさを検知してみないと分からない。
micro:bitでは明るさセンサーの値が0~225の範囲で返されるのですが、実際の階段が暗いと感じるところがどの値なのか、LEDを点灯させる閾値を変更しながら調べました。

最初は、薄暗い状態と真っ暗な状態で光量を調整できたらいいかなと思い、上記のコーディングブロックでは明るさが0の場合は真っ暗闇と想定して強い光、明るさ2の場合は薄暗い状態を想定して弱めの光にしました。

以下の画像は明るさ0の場合の強い光(変数strip=200)で点灯中の状態です。
正直言って、相当強い光で目が眩むほどでした。

人感センサーライト点灯

試してみた結果、「階段が薄暗いと感じる時点で、すでに明るさセンサーの値は0」となりました。上記のような2段階で暗さを判定するコードは意味がありませんでした。

つまり、薄暗いと感じる状態も、真っ暗闇な状態も、どちらも値は0という事です。うーん、もうちょっと暗さを刻んでLEDの明るさを制御したかったが、これは搭載されているセンサーの限界という事か。

それでも、昼間はいくら人を検知しても消灯、夕方少しずつ階段が薄暗くなってくるとLED点灯、というところまでは実現できたので、とりあえず自作センサーライトの機能としてはOK、と思っていました。

しかし、2日ほど経ってから、何やらセンサーライトの様子がおかしい
点灯色を「白」にしていたはずなのに、いつの間にか暗めの「赤」でしか点灯しない。

やがて、まったく点灯しなくなってしまいました。

調べた結果、どうやら原因は単なる電力不足のようでした。
そもそも、12個ものフルカラーLEDをほぼフルパワーで白色で光らせようとするのは無理があるようで。巷の白色LEDは青色LEDに黄色のフィルターをかけているのが殆ど、という内容の記事も目にしました。

単に階段を最低限の明るさで照らすことが目的なら、フルカラーLED12個を白色で光らせる必要はないわけです。LEDに関してあまりに無知でしたね。

LEDを半分の6個での点灯(青3,白3,変数strip = 100)で試してみることにします。さずがに裸のLEDでは電池の無駄遣いになるので、ランプシェード代わりになるものを探してみました。

ちょうど使ってないタンブラーが薄い青の半透明だったので、それをかぶせてみるといい感じに光が拡散します。

人感センサーライト
人感センサーライト

この状態で試してみました。階段の明るさは問題無し。ですが、一週間ほどで電池がなくなりました。さらに減らして青3のみで試してみましたが、やはり一週間で電池切れ。ここまで減らしてもダメか?

ここまでくると、家にある市販のセンサーライトも良く出来ているなと今更感心しました。おそらく白色のLEDが1個なのですが、筒型で白の半透明のランプシェードがいい感じに光を拡散します。LEDの光量も相当抑えられているようで、改めて世に出す製品の難しさを知りました。
やってみないと分からないものですね。

これって何に使える?

今回、センサーライトを自作してみましたが、既製品と肩を並べて長時間使用できるセンサーライトを作るのはさすがに難しそう(当たり前か)。

ただ、階段よりも使用頻度が低くて、既製品よりもっと明るさが必要な場所なら使い道があるかも。

例えば、家の物置とか。
実はうちの物置、照明が無いので暗くて整理整頓しづらいんです。
100円ショップで買ったボタン式のLEDライトは壊れてしまい困っていました。
毎日のように開け閉めする場所でもないので、今回自作したセンサーライトでもある程度電池が持ちそうな気がします。

今回は人感センサーでLEDを光らせましたが、このセンサーで何かリアクションを起こすという仕組みは、子供向けプログラミング教室などでも応用の余地があるかと思います。

例えば、最近発売されたmicro:bit V2なら、人を感知したらブザー音を鳴らすようにして、防犯アラームを自作するとか。
旅行など長期間の外出中に電源オンにしておけば、防犯対策にも一役買えそうです。

電源オンにした直後に、自分が感知されてブザーが鳴るのは避けたいので、それをどうするかなど、色々考える余地がありそうで面白いと思います。

あとは、子供たちの発想なら、部屋のドアにセンサーを仕掛けて、お母さんが近づいたら小さく「ピッピッ」と音を鳴らして、しれっと宿題をやっているフリをするのに使うとか。
これでは悪知恵になってしまいますね。。。

最近、子供向けプログラミング教育でよくあるパターンは、Scratchを使って画面内のネコをただ上下左右に動かしたり回転させたりで終わってしまうやつ。
初めてプログラミングに触れる子供達にとって、導入としてはいいと思うんですが、これだけだと子供たちも早々に飽きてしまうし、将来のIT人材を担う子供を発掘するには、もうちょっと「スゲー」と言わせるような面白さがないとダメだと思うんです。

その点、micro:bitのような安価なマイコンボードと、色々なセンサーを組み合わせて、実生活にも使えそうな仕組みを作ってみることは、子供たちにとっても良い経験になると思っています。
もちろん大人もですけどね。

こんな発想を色々繰り返して、私もいずれ地域の子供たちに楽しんでもらえるプログラミング教室をやってみたいですね。

micro:bitに興味のある方は、以下の記事もぜひご参考にしていただければ幸いです。今後もmicro:bitを使った面白い仕掛けを試して、このブログでご紹介していきます。

明るさセンサーのデータをもう1台のmicro:bitに送信 前回、TFabConnectというmicro:bitからインターネットへ...
私は現在フリーランスエンジニアとして客先常駐で案件に携わっていますが、今後どうしてもIoT関連の案件に携わってみたいという希望があ...
TFabConnectとはそもそも何か? 以前このブログでもご紹介したmicro:bitですが、低コストな教育用デバイスということで...