第9回 IoT×プログラミング教育
成り行きで赤外線センサーを使った、おばけ探知機を作ることになりました。
トイレットペーパーの芯で探知機
次男(4歳)がトイレットペーパーの芯をガムテープでつなぎ合わせ、天井に向けていました。
何をしているか尋ねると、「点検してる」と教えてくれました。
きっと、保育園で火災報知機の点検する場面を見たのでしょう。
せっかくなので、この探知機を機械仕掛けにしてみます。
赤外線センサーって何?
探知機に赤外線距離センサーを付けることを提案すると、長男(6歳)から聞かれます。
長男「赤外線って何?」
お父さん「赤外線は・・・赤の外の光だ!」
長男「・・・」
お父さん「人間に見えない光をビー!って出して、跳ね返った光を受け取って距離を測るんだよ。」
長男は理解して、この赤外線センサーが気にいたようです。
後日、お母さんに赤外線センサーの仕組みを熱心に説明していました。
赤外線で距離計測は単純じゃない
今回使うのは、Arduino拡張キットに付属していた、シャープの赤外線距離センサー「GP2Y0A21YK0F」です。
測距範囲が10~80cm。
近すぎると測定できないようですし、受け取る値(電圧)は、距離に対して直線のグラフになっていません。
距離を正確に測りたいわけじゃないし、まあ気にしなくていいでしょう。
赤外線センサーを取り付けよう
回路を作ります。
光センサーを使った時と、基本的に変わっていないので簡単です。
一点だけ注意が必要なのは、赤外線「GP2Y0A21YK0F」の仕様。
黒コードがVcc、赤コードがGNDという、電子工作の常識?を打ち破っています。
それを知らずに、無駄にハマりました・・・。
赤外線センサーの値を取得しよう
プログラムは光センサーと同じものを、ベースに使えます。
#define PIN 10 int val = 0; void setup(){ pinMode(PIN, OUTPUT); Serial.begin(9600); } void loop() { val=analogRead(0); Serial.println(val); //赤外線距離センサーの値書き出し delay(100); }
0.1秒ごとに赤外線距離センサーの数字が、シリアルモニタに表示されます。
センサーにものを近づけたりして試しましょう。
100から750の間くらいで数字が変わりました。
近いほど早く大きな音で
探知機っぽくしたいので、ものが近いほど音の間隔が短く、大きな音が鳴るようにします。
LEDも同様に、近いほど早く点滅し、光が強くします。
analogWrite()が最大255だったので、最も近いと感知している750という入力をを250くらいで出力すれば良いはず。ざっくり3で割ります。
コードは、おおざっぱに下記のようになりました。
#define PIN 10 int val = 0; void setup(){ pinMode(PIN, OUTPUT); Serial.begin(9600); } void loop() { val=analogRead(0); Serial.println(val); if(val > 200){ // 200より大きいとき analogWrite(PIN,(val-200)/3); // 音を鳴らし、点灯 delay(300-val/3); // 距離が近いほど待ち時間が短い analogWrite(PIN,0); // 消音、消灯 delay(300-val/3); // 距離が近いほど待ち時間が短い }else{ analogWrite(PIN,0); // 距離が遠いとき消音、消灯 } delay(100); }
マスキングテープで取り付け
最後に組み立てです。
3Mのマスキングテープで、Arduino互換機とブレッドボードをぐるぐる巻きにしましょう。
美的センスの欠けらもない取り付けですが・・・
マスキングテープなら、べた付かずに後ではがせるので楽です。
先端のトイレットペーパーの芯には、距離センサーを突っ込みます。
うまい具合に固定されます。
芯の少し奥に設置することで、赤外線距離センサーで感知できない至近距離の間合いに入らせないことができます。
おばけ探知機
完成した赤外線センサー探知機で遊びましょう!
子供に渡すと、人に向けて遊ぶので、「おばけ探知機」ということにしました。
人間・・・赤外線が反射して音が鳴る
おばけ・・・赤外線が通り抜けて音が鳴らない
電子工作っぽくなってきました。
次回はさらに電子工作の王道、赤外線センサーで障害物を避ける車を作ります!
モーターの出番です。