ボッチャを楽しむために必要なこと

今月は2度、ボッチャの体験会に行きました。

ボッチャは障害者、健常者、子供、お年寄り、男性、女性を問わず、誰でも楽しめるところが魅力です。

白いボールの近くに、自分のボールを投げるのですが、思った以上に戦略のスポーツです。

認知度上昇中

非常にマイナースポーツだったボッチャですが、日本代表がリオパラリンピックで銀メダルを獲得し、さらに小池知事のPR活動が功を奏し、3年前2.4%だったボッチャの認知度が、今年2017年1月には、39%まで上昇しているそうです。

これからも東京パラリンピックに向け、ますます認知度が上がっていくと思います。

たくさんの人が、東京大会で見に来てくれることを期待していますが、同時に懸念もあります・・・。

観戦を楽しめるかが懸念

ボッチャは、戦術・戦略のスポーツです。

相手の投球の邪魔になるところに球を投げたり、柔らかいボールと硬いボールを使い分けたり、ボールをコネコネほぐして転がりにくくしたり・・・

テレビで見る分には、その戦術・戦略を解説付きで楽しめると思います。

ただ、会場で観戦すると、なかなか楽しむための必要条件がそろっていないことを感じました。

リオパラリンピックで観戦した中では、個人的に、馬術の次に観戦難易度が高かったです。

1回戦、2回戦は観客が多かったものの、明らかに飽きて席を立つ人もいて、決勝の観客席は閑散としていました。

自国ブラジルが金メダルを獲得した表彰式でさえ、空席がだらけで寂しかったです。

いくらボッチャの認知度が上がっても「白いボールに近ければ勝ち」という知識程度では、東京大会の会場に足を運んだ人たちに、物足りない体験をしてしまうかもしれません。

ボッチャを楽しむための仕組みを作れるか・・・

引き続き、解決すべき課題を考えていきます。

価格が見つからない?ユーザビリティの原則

マニアックな電子部品をECサイトで探す際、Amazon、楽天以外を使うことがあります。

特に「秋月電子通商」は、部品のデータシートがあり、お世話になっています。

ただ重要なところで、迷うことが・・・。

価格が見つからない!

なぜか、商品の価格が見つかりません。

キャプチャ:秋月電子通商2017年2月

しばらく売り切れと勘違いして、ページを離脱していました。

そのうち違和感に気づき、よく見たら価格が掲載されていたことに気づきました。

関連商品のテキストリンク一覧の下に、価格があります。

気づかなかった理由

なんと、注意力がないのでしょう!

・・・と、思わずに、気づかなかった理由を考えました。

 

たぶん、ユーザビリティの第一人者ヤコブ・ニールセン博士が言う「学習のしやすさ」の原則に則してないからだと思います。

大手ECサイトでは、商品価格が商品名の下に目立つように記載してあるのが一般的です。

私も「そこに記載しているはずだ!」と、無意識に学習しています。

 

具体的に見ていくと、Amazonであれば、商品名の下に目立つ赤字で価格を掲載。

キャプチャ:Amazon(2017年2月)

 

楽天も同様です。

キャプチャ:楽天(2017年2月)

 

Yahoo!ショッピングも商品名の下に、赤字ではないですが、大きく目立つ価格表示を行っています。

キャプチャ:Yahoo!ショッピング(2017年2月)

 

やはり、商品名の下に、目立つように価格を掲載するのが、一般的(利用者数の多いサイト)になっています。

 

独自レイアウトで、使い方や見方を学習しないと利用できないサイトでは、ユーザビリティが低下して、売り上げを落とすかもしれません。

 

とはいえ、Amazonなどの強豪や、無数のECサイトが乱立する中で、私は「秋月電子通商」のECサイトに何度もたどり着き、データシートを参考にさせてもらいました。

学習しやすさのユーザビリティ云々とは別次元で、「秋月電子通商」サイトに価値があることは間違いありません。

 

温度センサーでやけどするぞ

IoT×プログラミング教育 失敗談です。

温度センサーに生えている3つの足を、てきとうにつないだら、すごい熱になりました。

 正しい回路(温度センサーLM35DZの場合)

温度センサー「LM35DZ」の説明書をネットで読むと、平らな面を正面として、左からVS、VOUT、GNDと書いてありました。

これが正しい回路だと思います。

VSとGNDを逆にすると

説明書を読むのが面倒で、とりあえずつないでみたとき、VSとGNDを逆にしていたようです。

給電するとすぐ、Arduino本体のLEDの光が消えました。

どうしたのかな?と、思ってもう一度給電しても、やっぱりすぐにArduinoが落ちるようです。

温度センサーの向きを変えてみようと、つまんだとき・・・

「あちっ!」

温度センサーがすごい熱になっていて、やけどしそうになりました。

熱がるお父さんに、子供たちもびっくりです。

それでも生きている

冷えてから温度センサーを正しくつなぎ直し、温度を測ってみると・・・

正しそうな温度が取得できています。生きています。

意外とタフですね。

 

  • センサーのピンは、事前に調べて正しくつなぐ
  • Arduinoが落ちたら、何度も給電しない
  • パーツが熱かったら、すぐ手をはなす

いい勉強になりました。

GIFアニメを90%圧縮

ちょっとした動きを記事に載せたいとき、GIFアニメという選択肢があります。

音声がいらず、短い動画であれば、ユーザーがクリック、タップ不要なGIFアニメが有効な場合が多いです。

特にループ再生の動画には、もってこいです。

ただ、思った以上に容量が重く、質を落とさず圧縮するのに試行錯誤しました。

動画をGIFアニメへ変換

2秒の動画(mp4形式)をGIFアニメに変換します。

変換は手軽にできるオンラインツールを使います。

3つのオンラインツールを試したのですが、なぜかうまく変換できたのはGirafというツールだけでした。

Girafは日本語の上、丁寧なUIなので、迷わず使えます。

GIFアニメの出力設定は

サイズ:480×270ピクセル
フレーム数:25
フレームレート:12fps

動きを見せたいので、フレームレートは高く設定しています。

これで出力されたGIFアニメの容量は・・・2.12Mバイト。

重いです。

GIFアニメを圧縮

GIFアニメの軽量化のため、圧縮ツールを探していると、ezgif.comが提供しているオンラインツールに出会いました。

英語だったのでGoogleサイト翻訳の力を借ります。

重複するフレームを削除する(Remove duplicate frames)

画像変化のほぼないフレームがあるので、削除しましょう。
度合いは 50%としています。

ファイルサイズ:1.02M(-51.79%)

これだけで半減します。

透明性を最適化する(Optimize Transparency)

アニメーションしていないところは透明にして、前のフレームの画像を表示させる軽量化です。
度合いは4%としています。

ファイルサイズ:413.77K(-60.49%)

これも効果絶大で、一気に軽量化しました。

カラーリダクション+ディザ(Color Reduction + dithe)

色数を減らします。
256色から128色に半減させつつ、色の境界をぼかすディザを使います。

ファイルサイズ:326.65K(-21.06%)

色数を半減してましたが、思ったより軽くなりませんでした。

もっと色数を減らしても良いですが、別のことを試しましょう。

損失のあるGIF(Lossy GIF compression)

直訳で「損失のあるGIF」でしたが、劣化だと思います。
思い切って150%の度合いで適用します。

ファイルサイズ:218.62K(-33.07%)

ガサガサした感じになりました。

ここまでで、90%カットの圧縮となりました。

動画の取り直しで質の高い圧縮

  • 重複するフレームを削除する
  • 透明性を最適化する

この2つで、相当な削減効果がありました。

なので、必要な場所以外は動かないよう、しっかり三脚で固定しで動画をとることが、GIFアニメ変換時の軽量化につながります。

 

撮りなおして、重複するフレーム削除と、透明性の最適化をすると・・・

ファイルサイズ:146.15K

画質の低下もほとんどなく、重さを93%削減できたようです。

サーボモーターで舵取り!障害物を避ける車

第10回 IoT×プログラミング教育

赤外線で障害物を避ける車を作ります。

モーターを使い、車体はレゴで組み立てます。

180度しか回らない!?サーボモーター

動力として手元にモーターが2つあります。

モーターの一つで車輪を回し、もう一つを舵取りに使うつもりです。

「よし!車作ろう!」

子供たちも期待しています。

 

手元にあるサーボモーター「SG90」の説明を読むと・・・

え?

180度しか回らない!?

それじゃ、車輪が回らないじゃん。

 

どうやらサーボモーターと、私の知っているミニ四駆で見たモーターとは、別物のようです。360度回りません。

・・・仕方ないので舵取りだけ作りましょう。

サーボモーターで舵の回転角度

サーボモーターの回転角度を制御するには、パルス信号を送る必要があるようです。

パルス信号の波の形で、回転角度が変わるようですが、深く追求しません。

デジタル出力3番ピンから、パルス信号を送る回路を作りましょう。

早くも小学レベルの理科知識では、厳しくなってきました。

回路が正しいのか分かりません。

もはやパーツが壊れても仕方ない・・・失敗から学びます。

サーボ制御のプログラム

パルス信号を作れということだったら、大変なことになりそうですが、ありがたいことにArduinoには、サーボモーターを動かすためのライブラリがあるようです。

#include <Servo.h> // サーボライブラリ読み込み 
Servo myservo; // サーボオブジェクト作成

void setup(){ 
 myservo.attach(3); // サーボにパルスを送るピン
} 

void loop(){
 myservo.write(0); // 0度に回転
 delay(1000); 
 myservo.write(180); // 180度に回転
 delay(1000); 
}

ありがたいほど、簡単に制御できます。

 

少し車の舵取りとしては、回転速度が早すぎでしょうか?

「1度ずつ回転→数ミリ秒遅延」の繰り返しで、回転速度を調整できるようにした方が良いかもしれません。

あとは、赤外線距離センサーで、障害物が近づいたときに舵をとるプログラミングを追加します。

#include <Servo.h>
Servo myservo;
int val = 0; // 距離センサーの変数
int pos = 0; // サーボの角度変数

void setup(){ 
 myservo.attach(3);
} 

void loop(){
 val = analogRead(0); // 距離センサーの値取得
 if(val > 300){ // 近くなったら
  for(pos = 0; pos < 45; ++pos){ // 45度になるまで
   myservo.write(pos); // 1度ずつ回転
   delay(5); // 回転速度調整
  }
  delay(1000); // 45度を1秒維持
  for(pos = 45; pos > 0; --pos){ // 0度に戻す
   myservo.write(pos);
   delay(5);
  } 
 }else{
  myservo.write(0); // 遠いときはサーボを0度
 }
 delay(100); 
}

これで、右か左か分かりませんが、45度舵をきって避けてくれるはずです。

レゴで車体組み立て

車体の組み立てにはレゴを使います。

Arduino本体と、ブレッドボードを載せる台は、てきとうに作れば大丈夫でしょう。

サーボモーターと赤外線センサーの固定は、レゴのジョイントパーツとかを駆使して作りました。

これに、車体と車輪を結合して・・・

全体像は、こうなりました。

自走することができないので、手押しです!

やってみましょう。

ハイテクそうで、ハイテクではない。

手で押しているのなら、手で向きを変えればいいので、微妙です。

長男「・・・」

お父さん「避けたの分かった?」

長男「うん。」

 

ちくしょう。驚きも何もない。

360度回転するモーターを買って、自走するようにします。

赤外線・おばけ探知機

第9回 IoT×プログラミング教育

成り行きで赤外線センサーを使った、おばけ探知機を作ることになりました。

トイレットペーパーの芯で探知機

次男(4歳)がトイレットペーパーの芯をガムテープでつなぎ合わせ、天井に向けていました。

何をしているか尋ねると、「点検してる」と教えてくれました。

きっと、保育園で火災報知機の点検する場面を見たのでしょう。

せっかくなので、この探知機を機械仕掛けにしてみます。

赤外線センサーって何?

探知機に赤外線距離センサーを付けることを提案すると、長男(6歳)から聞かれます。

長男「赤外線って何?」

お父さん「赤外線は・・・赤の外の光だ!」

長男「・・・」

お父さん「人間に見えない光をビー!って出して、跳ね返った光を受け取って距離を測るんだよ。」

長男は理解して、この赤外線センサーが気にいたようです。

後日、お母さんに赤外線センサーの仕組みを熱心に説明していました。

赤外線で距離計測は単純じゃない

今回使うのは、Arduino拡張キットに付属していた、シャープの赤外線距離センサー「GP2Y0A21YK0F」です。

測距範囲が10~80cm。

近すぎると測定できないようですし、受け取る値(電圧)は、距離に対して直線のグラフになっていません。

秋月電子通商Webサイト 商品ページのPDFより引用

距離を正確に測りたいわけじゃないし、まあ気にしなくていいでしょう。

赤外線センサーを取り付けよう

回路を作ります。

光センサーを使った時と、基本的に変わっていないので簡単です。

一点だけ注意が必要なのは、赤外線「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互換機とブレッドボードをぐるぐる巻きにしましょう。

美的センスの欠けらもない取り付けですが・・・

マスキングテープなら、べた付かずに後ではがせるので楽です。

 

先端のトイレットペーパーの芯には、距離センサーを突っ込みます。

うまい具合に固定されます。

芯の少し奥に設置することで、赤外線距離センサーで感知できない至近距離の間合いに入らせないことができます。

おばけ探知機

完成した赤外線センサー探知機で遊びましょう!

子供に渡すと、人に向けて遊ぶので、「おばけ探知機」ということにしました。

人間・・・赤外線が反射して音が鳴る
おばけ・・・赤外線が通り抜けて音が鳴らない

電子工作っぽくなってきました。

次回はさらに電子工作の王道、赤外線センサーで障害物を避ける車を作ります!

モーターの出番です。

復習、回路は作れる?

IoT×プログラミング教育

ここでいったん振り返り、子供の理解レベルを把握しつつ、次の準備をします。

回路を自力で作れる

長男(6歳)は、毎日「機械作る?」と、たずねてくるくらい熱中しています。

回路を理解しているようで、LED、抵抗器、タクトスイッチ、光センサーを使って、自力で回路を作れます。

部品と、ブレッドボード(小さいやつ)を渡すと・・・

回路が出来上がっていました。

タクトスイッチを押すとLEDが光り、その光の強さは、暗い場所ほど弱わまる回路です。

知識の吸収力が、大人とは比べ物になりません。

親子共同で学ぶ

プログラミングの方も、いずれ「Scratch(スクラッチ)」で自力で作るようになるのかもしれませんが、しばらくは親が頑張ります。

子供たちに現時点で感じてもらいたいのは

  • 勉強すると、できることが増える感覚
  • ものづくりの楽しさ

成長と楽しさの体験を提供(UXデザイン)するため、親も電子回路とプログラミングを学び、試行錯誤します。

Arduino エントリーキットではものたりない

電子工作入門に、とても役立つ「Arduino エントリーキット」でしたが、距離センサーやモーターがなく、やりたいことを実現するにはものたりなくなってきました。

そこで次の段階、「Arduino拡張キット」をAmazonで購入してあります。

内容物は
– 距離センサー(GP2Y0A21YK0F) x 1
– 電解コンデンサー(100μF 25V) x 1
– サーボモーターセット  x 1
– 小型LCD(SD1602 VBWB-XA)  x 1
– ヘッドピン x 2、タクトスイッチ x 1
– ミニブレッドボード x 1
– ジャンパーワイヤー(14cmx15,18cmx5、23cmx5)

距離センサーとモーターは、電子工作の鉄板、障害物を避ける車を作れそうですし、小型LCDディスプレイがあれば、パソコンをのぞかなくても、情報を見ることができるようになるでしょう。

余談ですが、私の仕事でもソナー探知機のようなものを作りたく、超音波センサーとサーボモーターのセットも追加購入しています。

 

部品が増え、ますます子供・・・特に長男のテンションが上がっています。

引き続き、子供たちと一緒に電子工作を学んでいきます。

光センサーでオルゴール

第8回 IoT×プログラミング教育

光センサーで今度はオルゴールを作りましょう。

回路は前回のものから、LEDを取り除いただけです。

明るいときに曲を流す

オルゴールの箱の中に、光センサーを付けたArduinoを格納します。

箱を開けたら明るくなるので、前回(暗くしたら処理実行)とは不等式が逆の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){ //明るいと判定する基準値
  //ここに曲を書く
 }
 delay(500);
}

次に「tone()」を使って曲を書きますが・・・以前のような書き方だと、記述量が多くてけっこう疲れてしまいます。

ひとつの音を出すのに、2つの関数「tone()」と「delay()」が必要なので、かえるのうたでも58行となってしまいました。

なので、記述量を減らすために、新たな関数「runTone() 」を作りました。

#define PIN 10
#define BEAT 600 //音の長さ
int val = 0;

void setup(){ 
 pinMode(PIN, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 val = analogRead(0);
 Serial.println(val);
 if(val > 300){
  runMusic(); //曲を流す
 }
 delay(500);
}

void runTone(int n, double len){
 tone(PIN, n, BEAT * len); //音を出す
 delay(BEAT * len); //音が出ている間待つ
}

void runMusic(){
 runTone(392,0.5); //ソ
 runTone(440,0.5); //ラ
 runTone(392,0.5); //ソ
 // ・・・曲は続く   
}

「runTone() 」で、以前より曲を書きやすくなりました。

「runTone(ドレミ番号, 音の長さ) 」となっており、第2引数の音の長さは、1が四分音符、0.5なら八分音符、2なら二分音符となります。

この数と、前もって記述した定数「BEET」のミリ秒をかけた数字が、音の長さとなります。

 

ここまでできたら、あとは仕上げです。

「runTone() 」 の中で、光センサーから明るさを取得して、一音ずつ鳴らすかどうかの判断をさせましょう。

箱を閉じて暗くなったら、次の音を出ないようにするためです。

最終的なコードです。

#define PIN 10
#define BEAT 600
int val = 0;

void setup(){ 
 pinMode(PIN, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 val = analogRead(0);
 Serial.println(val);
 if(val > 300){
  runMusic();
 }
 delay(500);
}

void runTone(int n, double len){
 val=analogRead(0); //明るさを取得
 if(val > 300){ //明るいとき
  tone(PIN, n, BEAT * len);
  delay(BEAT * len);
 }
}

void runMusic(){
 runTone(392,0.5); //ソ
 runTone(440,0.5); //ラ
 runTone(392,0.5); //ソ
 runTone(330,0.5); //ミ
 runTone(392,0.5); //ソ
 runTone(440,0.5); //ラ
 runTone(392,0.5); //ソ
 runTone(330,0.5); //ミ
 runTone(262,0.5); //ド
 runTone(294,0.5); //レ
 runTone(330,0.5); //ミ
 runTone(330,0.5); //ミ
 runTone(294,2); //レ
 runTone(330,0.5); //ミ
 runTone(392,0.5); //ソ
 runTone(392,0.5); //ソ
 runTone(392,0.5); //ソ
 runTone(440,0.5); //ラ
 runTone(523,0.5); //ド
 runTone(523,0.5); //ド
 runTone(523,0.5); //ド
 runTone(392,0.5); //ソ
 runTone(440,0.5); //ラ
 runTone(330,0.5); //ミ
 runTone(294,0.5); //レ
 runTone(262,2); //ド
}

なんとか組みあがりました。

引数にも型が必要なんだ・・・とか、intって整数しか入らないんだ・・・とか、そんなレベルのC言語プログラミングでしたが、とりあえず思惑通りの動作をしています。

きっとポイントは20~24行目。
明るい時にしか音を鳴らす待ち時間「delay()」が実行されないので、暗くなると一瞬で曲の処理「runMusic()」が終了します。

終了しているので、再び明かるくなったとき、最初から曲が流れます。

いままではループで曲が流れっぱなしで制御できてなかったので、一歩前進した気がします。

箱詰めしてプレゼント

ふたつきの箱に、Arduino、ブレッドボード、モバイルバッテリーを格納します。

子供(三男)にプレゼントしてみます。

曲は「たき火」です。

なんだか、おもしろいようです。

 

箱を開けたら○○をする・・・という仕掛けは、まだまだアイデアが出てきそうです。

しかし、先に進みましょう。

次回は赤外線距離センサーを使います。

光で謎解き!宝探し

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

 

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

ぞうのした

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

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

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

謎解き宝探しはじめ!

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

次は「くらく」。

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

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

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

 

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

悲しい。

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

 

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

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

カエルは明るいときに歌う

第6回 IoT×プログラミング教育

ついにセンサーの登場です。
光センサーを使って、明るいときに曲が流れる仕組みを作ってみたいと思います。

拍子抜けするくらい簡単です。

光センサーを挿すだけ

プログラムは前回作ったものを、まったく変えません。
「かえるのうた」が流れるプログラムです。

光で操作するので、回路からはボタン(タクトスイッチ)を取り除きました。

配線を整理するため、ジャンパーワイヤーの挿す場所を変えていますが、基本的には、光センサーを追加しただけの、単純な回路です。

LEDは、音と連動して光ると楽しいので、つけておきます。
今回はカエルっぽい緑色にしています。

光センサーは暗いときに抵抗が大きくなる

光センサーはCdS(硫化カドミウム)でできていて、この物質は暗くなるほど抵抗が大きくなる性質があるようです。

とりあえず、抵抗が大きくなるほど電気の流れは小さくなっていくので、暗くなるほど音は小さくなり、LEDの光は弱くなります。

 

では、電気を消してみます。

真っ暗だと、LEDも光らず、音も聞こません。

懐中電灯を近づけると・・・

歌いだしました。

カエルの粘土細工の方に気が取られて、子供たちはあまり集中していませんでしたが、実験は成功です。

光センサーを使えば、明るいときに光り、暗いときに消えるライトとかも、簡単に作れそうです。まったく役に立ちませんが。

 

次回はArduinoの「ANALOG IN」を使って、光センサーをもっと有効に活用したいと思います。