第7回 IoT×プログラミング教育
光センサーで何ができるか?宝探しをやってみましょう。
部屋を暗くすると、宝のありかが分かるゲームです。
明るさを受け取る「ANALOG IN」
光センサーを使ってプログラミングをするには、明るさを数値で取得する必要があります。
そこで、今まで使ったことのない差込口「ANALOG IN」を使います。
「ANALOG IN」・・・アナログ入力のことですが、0Vから5Vの電圧を、0から1023の数値で受け取れるようです。
都合よくとなりの「POWER」に、GND(0V)と5Vがあるので、ここに光センサーと抵抗器をつなぎましょう。
光センサーの抵抗を変化させ、「ANALOG IN」にかかる電圧を変えると、明るさを数値として取得できるはずです。
たぶん。
・・・電圧は中学のとき、勉強したような気がしますが、ほぼ忘れています。
抵抗器を変えながら試行錯誤し、最終的に回路は以下のものにしました。
黄色のジャンパーワイヤーを「ANALOG IN」の0番、「A0」に差し込んでいます。
「A0」の数値が小さい、つまり暗いときに、音と光で宝の場所を知らせるという仕掛けです。
明るさを受け取るプログラミング
Arduino IDEにあるシリアルモニタを使えば、明るさの数値をパソコンで見ることができます。
#define PIN 10 int val = 0; //変数宣言 void setup(){ pinMode(PIN, OUTPUT); Serial.begin(9600); //シリアルモニタを使う } void loop() { val = analogRead(0); //アナログ入力0番の電圧を変数に代入 Serial.println(val); //シリアルモニタに表示 delay(500); }
これで、シリアルモニタに明るさの数値が表示されます。
IDEの右上の虫眼鏡みたいなボタンをクリックしてみましょう。
0.5秒おきに数値が表示されるはずです。
数値が出てきます!
部屋の蛍光灯の明るさで787くらいのようです。
光センサーを手のひらで覆てみると・・・
暗くするほど数値が低くなります!
電気を消して暗くすると、10くらいの小さな数値になりました。
今回やりたいことは、電気を消したら宝のありかが分かる、という仕掛けなので、宝箱設置場所の照明をつけたり、消したりして、判定基準にする数値を決めましょう。
暗いと判定する数値が決まったら、if文を使って暗い時に実行するプログラムを追記します。
#define PIN 10 int val = 0; void setup(){ pinMode(PIN, OUTPUT); Serial.begin(9600); } void loop() { val = analogRead(0); Serial.println(val); if(val < 300){ //暗いと判定する基準値 tone(PIN, 523, 500); //高いドの音が0.5秒置きに鳴り、光る delay(1000); } delay(500); }
これで、暗い時に音と光で知らせるプログラムの完成です。
宝箱と謎解きの用意
ホームセンターで、木と金具を買ってきて、宝箱を作りました。
段ボールなどの箱でも良いと思います。
宝箱の中に子供の欲しがるものを入れ、玄関の死角に隠しました。
Arduinoへの電気供給は、モバイルバッテリーで行っています。
子供には怪文書を渡します。
我が家の玄関マットが「ぞう」だったので、その下にもう一つの怪文書「くらく」を隠します。
これで、玄関に子供たちを誘導し、その場で電気を消すと、音と光で宝のありかが分かるというシナリオが完成しました。
謎解き宝探しはじめ!
字の読める長男は、ぞうの玄関マットの下に、次の怪文書があることに気が付きました。
次は「くらく」。
長男が謎を解いている間にハプニングが・・・。
字の読めない次男は、当たり前ですが謎解きなどする気はありません。
手あたり次第に宝箱を探し、先に発見してしまいました。
長男も駆け寄り、仕掛けを見て、暗くなると光ることを悟りました。
悲しい。
違う宝探しを提案して、いつかリベンジします。
とにかく・・・光センサーひとつで、電子工作の楽しみは倍増します。
次回は別の仕掛けを作ってみます。