光で謎解き!宝探し

第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への電気供給は、モバイルバッテリーで行っています。

 

子供には怪文書を渡します。

ぞうのした

我が家の玄関マットが「ぞう」だったので、その下にもう一つの怪文書「くらく」を隠します。

写真:玄関マットの下に「くらく」の文字

これで、玄関に子供たちを誘導し、その場で電気を消すと、音と光で宝のありかが分かるというシナリオが完成しました。

謎解き宝探しはじめ!

字の読める長男は、ぞうの玄関マットの下に、次の怪文書があることに気が付きました。

次は「くらく」。

長男が謎を解いている間にハプニングが・・・。

字の読めない次男は、当たり前ですが謎解きなどする気はありません。

手あたり次第に宝箱を探し、先に発見してしまいました。

 

長男も駆け寄り、仕掛けを見て、暗くなると光ることを悟りました。

悲しい。

違う宝探しを提案して、いつかリベンジします。

 

とにかく・・・光センサーひとつで、電子工作の楽しみは倍増します。

次回は別の仕掛けを作ってみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)