人が光を好む理由

電子工作をしていてLEDの光を見ていると、楽しくなります。

なぜ、人が光を好むのでしょうか?

毎年イルミネーションを見ても飽きない

LEDで彩られた街。
冬になると、イルミネーションを当たり前に目にするようになりました。

妻(女性)はイルミネーションを好む傾向がありますが、それはカブトムシが光を好んで飛んでくるような、本能的なものなのでしょうか?
・・・怒られます。

光ではなく、色鮮やかな美しさに、本能が反応するのだと思います。

人間の本能的な行動心理は、原始時代から変わらないといいますので、きっと鮮やかな果物を効率化に採取するため、女性の方が色鮮やかなものに反応しやすいのでしょう。
・・・夢のない理屈です。

 

なお、私個人は青色のみで統一されたイルミネーションが落ち着いて好きです。

一応、色彩心理で青は精神を落ち着かせる効果があるといいます。

奇跡の復活「光の王国」

経営難のハウステンボスが、奇跡の復活を遂げたのは、経営者にとっては伝説的な出来事です。

復活に貢献した一つの施策が、イルミネーション「光の王国」集客でしょう。
12月の来場者数が、前年の1.5倍くらいになったといいます。

光を(うまく)使った集客は、安定した効果を発揮し、費用対効果が高いです。

逆に、プロジェクションマッピングや、3D映画など、インパクトが大きいものは、同時に飽きられやすく、しかも制作コストが高い・・・。悪いわけではないですが、ハードルが高いです。

その点、イルミネーションなら、50年先も集客効果を期待できる!そんな安定感を感じます。

この安定感は、色鮮やかな光が人間(特に女性)の本能的な部分に訴えかけているからなのでしょう。

光と色は、行動心理や色彩心理を理解し、効果的に使っていきたいです。

スポーツ普及による医療削減効果

ボッチャのような年齢を問わない、誰でもできるスポーツは、普及する可能性を秘めていると思います。

そして高齢者に普及した場合、ボッチャは頭を使うスポーツなので、認知症予防に効果を発揮しそうです。

スポーツ普及による医療削減効果は?

具体的にスポーツ普及による医療削減効果を調べました。

文部科学省の「スポーツの経済効果に関する調査研究(平成26年度)」の4章に、三重県いなべ市の研究結果が掲載されています。

1人当たり 医療費削減効果は、78,246 円 / 年という報告です。

仮に、2025年を想定してみると、65歳以上高齢者が3,500万人と言われるので、5%の高齢者人口にスポーツ普及を促すことができれば、1,370億円 の医療費削減効果となります。

・・・予想より小さい金額。

総務省の資料では、2025年の後期高齢者医療費だけでも24兆円という、とんでもない数字がでています。

焼け石に水とは言わず・・・ITを活用して普及率を上げるなど、なんとか削減していきたいものです。

 

 

ジャイロスコープ・加速度センサーを使ってみる

ボッチャの指示版(ラケット)を作る際、「ジャイロスコープ・加速度センサー」というパーツを初めて使いました。

ラケットの向きを取得したかったからです。

安価なMPU-6050

Amazonで「MPU-6050 使用 3軸ジャイロスコープ・3軸加速度センサー モジュール」を280円で購入しました。

スマホ普及のおかげで、ジャイロ、加速度センサーが安く手に入るようになったと聞きます。ありがたい話です。

しかし、ジャイロや角速度について、実はあまり理解していません。

 

立てた状態か知りたかった

ラケットを立てている状態を判断したかっただけなので、本当はジャイロ+加速度の6軸はいらなかったような気がしますが・・・

とりあえず加速度のY軸のみで、ラケットを立てている状態を判断できました。

立てると重力で加速度Yの値が大きくなります。

 

 

単純なことしかできないので・・・もう少し、ジャイロ+加速度の6軸を使いこなせるよう、勉強します。

ボッチャ 結果を全ての人へ

ボッチャ観戦で、盛り上がりのタイミングがずれる問題を以前取り上げましたが、審判の判定結果の出し方も、盛り上がりにマイナス影響があるかもしれません。

判定結果を一度に会場全ての人に共有できず、歓喜、歓声がばらつくからです。

ラケットで伝えるボッチャの判定

ボッチャは3投目以降、白いボールから遠い色のチーム(人)が、次の球を投げます。

赤、青、どちらが投げるかを、審判が卓球のようなラケットで、選手たちに伝えます。

例えば次の投球が赤の場合、ラケットの赤面の方を選手たちに見せます。

赤面が見せたということは、青ボールの方が白ボールの近くにあるということで、審判の判定で初めて結果が分かることが、多々あります。

判定の見えない死角がある

問題は審判の提示する判定の見えない、死角があることです。

審判は、真後ろまで判定結果を提示しません。

次の投球が始まるまで、結果を知ることのできない観客がいます。

また厳密には、ラケットを最初は選手側に向けるので、逆サイド側は少し遅れてラケットがかざされます。

このように、判定を知るタイミングが段階的になってしまいます。

リオで感じた、まとまりのない歓声の原因は、ボッチャの判定提示方法が少なからず影響していると思われます。

同時に全ての人に結果を知らせるには?

この問題は、全方位から見える光(照明)で解決できるのではないでしょうか。

試作品なので小さいですが、結果を瞬時に光の色で知らせます。

ラケットと連動して、LEDが光ります。

ただラケットを持っているだけでは光っていません。

判定結果を伝えるときに、リアルタイムでLEDが連動して光ります。

 

まずは・・・赤が白いボールの近くに来ました。次は青チームです。

青面を見せると(今は有線ですが)、青いLEDが光ります。

青面は、ジャイロセンサー、赤外線センサー、配線がむき出しで、すごいことになっていますが、小型化してラケットに埋め込むこともできるでしょう。

 

今度は赤チームの番です。

ラケットの赤面を見せれば、赤いLEDが光ります。

 

まだまだ試作ですが、観客が判定結果を同時に知る仕組みを作り、一斉に歓声が上がる状態になればと願います。

ボッチャ ミリ単位の戦いを計測

ボッチャのハイレベルな選手たちは、ミリ単位の戦いを繰り広げます。

あまりにボールの隙間が小さいと、以前作ったコンパス型IoT定規では測ることができません。

そこで開発したのが、隙間差し込み型定規です。

ミリ単位の戦いの場面

隙間数ミリの戦いになる場面は、よくあります。

角度によって、隙間の見え方が変わったりするので、慎重に測る必要があります。

隙間を計測してみよう!

尖った三角形を隙間に差し込んでいき、ボールと触れたら差込むのをやめます。

白と青の隙間は・・・6.88mm!
(試作品なので、全然正確ではありません。)

一方、赤と白の隙間は・・・

6.01mm!

赤の勝ちです!!

 

この試作定規は、中国製の数百円のマイコンボードを使いましたが、入力電圧が安定せず、数字がブレまくるので、実用レベルでは全くありません。

次の段階では、もっとコストかけて安定したものを作りたいと思います。

安くて手軽な7セグメントディスプレイを求め

今まで、いくつかの7セグメントディスプレイを試してきましたが、ついに、安くて手軽な「TM1637 4桁7セグメントLEDディスプレイ」に出会えました。

はんだ付け不要・配線4本・145円

「TM1637 4桁7セグメントLEDディスプレイ」は、はんだ付け不要で、配線4本つないで簡単に使えます。

しかも145円!

互換品らしいので、正規品もあるようですが、とりあえず動けば問題ありません。

回路は、前回の「スライドポテンショメータ」とあわせて使ってみましょう。

 

スライドのつまみを操作すると、7セグメントの数字が変わるようにします。

ライブラリをインストール

Arduino公式サイトにTM1637の説明が載っています。

ページ下部にあるGitHubから、ライブラリをダウンロードできます。

ライブラリのインストールは、以前やった手順で問題ありませんでした。

 

ライブラリを使って、Analog入力の数値を7セグメントディスプレイに表示するプログラムを作ります。

#include <Arduino.h>
#include <TM1637Display.h>

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);
int i = 0;

void setup(){
 display.setBrightness(0x0f);//明るさ 0x01←暗い 明るい→ 0x0f
}

void loop()
{
 i = analogRead(0);
 display.showNumberDec(i, false);//数字を表示
 delay(10);
}

11行目のように、明るさを設定しないと7セグメントディスプレイには、何も表示されないので注意が必要です。

0x01、0x03、0x07、0x0fというような16進マスク?を設定すると、表示する数字の明るさが変わります。

とりあえず0x0fで不満はないので、これでいいです。

動かしてみる

スライドのつまみを操作すると、7セグメントの数字が変わりました。

値段の割に、十分な満足度を得られる7セグメントディスプレイでした!

スライド式調光ライトを作ろう

スライド式のつまみを入手しました。

「スライドポテンショメータ」というらしく、可変抵抗器の一種です。

これを使い、調光式のライトを作ってみましょう。

同時に、格安Arduino Nano互換機のAnalog入力が、まともに動作するか確認します。

スライドポテンショメータ接続

今回入手した「Grove スライドポテンショメータ ボリューム モジュール」は、ピンが4本あります。

ピンの1つに「LED」と書かれていますが、何を挿せば良いのか分からないので、無視します。

光の強さが変わるプログラム

スライドポテンショメータを動かすと、光の強さが変わるようにします。

#define PIN 10
int val = 0;
 
void setup(){ 
 pinMode(PIN, OUTPUT);
 Serial.begin(9600);
}
 
void loop() {
 val=analogRead(0);
 Serial.println(val);
 analogWrite(PIN,val/4);
 delay(100);
}

Analog入力値が0から1023なのに対し、Analog出力が0から255なので、出力時は4分の1にしています。

シリアルモニタでも見られるよう、Serial.begin(9600);とSerial.println(val);も入れておきます。

 

とりあえず、このプログラムを書き込み、調光式ライトは完成です。

思惑通りスライド操作で、光を調整できました。

 

心配していた格安Arduino Nano互換機ですが、Analog入力も動作するようです。

これは、お買い得です。

動くのか?Arduino Nano互換機

サイズの小さい「Arduino Nano」互換機を購入しました。

Amazonで「Mini USB Arduino Nano V3.0 改造バージョン 互換ボード ATmega328P搭載」という商品名で売られているものです。

はんだ付け不要で、480円の安価なマイコンボードです。

動くのか?

安いArduino互換機は、動くかどうか、ワクワクします。

商品の見た目は、なかなか雑で、ピンが豪快に曲がっていたり、白い曇りのようなもので、基盤の文字が読めなかったり・・・。

IDEで認識させる

USBで繋ぎますが、アンドロイドスマホなどの「Micro-B」タイプではなく、「Mini-B」タイプという、少し形状が特殊なUSBとなります。

USBで接続すると、Windows10の場合、ドライバ無しで認識してくれました。

IDEの
ツール > ボード > Arduino Nano
を選択し、プログラムの書き込みも問題なく行われます。

Lチカさせてみよう

単純なLチカ回路を作ります。

はたして動くのか・・・

光る!

チカチカする!

安くて、雑な作りだからこそ、光ったときの喜びが倍増します。

引き続き、Analog入力も動作するか試していこうと思います。

感圧センサーで楽器を作ろう

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

感圧センサーで楽器を作ります。

感圧センサーの触る位置によって音の高さを変え、音楽を奏でる予定です。

接触位置センサーを使う

感圧センサーにもいろいろあるのですが、今回はたまたま手元にある「SoftPot接触位置センサ100mm」を使います。

押す位置で抵抗が変わるセンサー、つまり押す位置を数値化できるので、楽器制作と相性が抜群と思われます。

 

さっそく回路を組み立てましょう。

ジャンパーワイヤーのオス-メスを持っていれば、接触位置センサーの取り付けは簡単です。

押した位置を音に変えるプログラム

単純です。

接触位置センサーのAnalog入力値(0~1023)を、tone()の第2引数に入れるだけです。

#define PIN 10
int val = 0;

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

void loop(){
 val=analogRead(0);
 Serial.println(val);
 if(val > 10){
  tone(PIN,val,100);
 }
 delay(100);
}

接触位置センサーは、触れてないときAnalog入力値は0となります。

一応、10以下の時は触れてないと判定し、10より大きい場合は音を出すようにしています。

また、音感に自信がない私は、シリアルモニタでAnalog入力値を確認できるようにしています。

基準の「ド」が262となり、この接触位置センサーが100mmなので、だいたい4分の1くらいの25.6mm (100mm × 262 ÷ 1024)の位置が、基準の「ド」なのでしょう。

楽器を演奏してみよう

鍵盤を書けば、もっと楽器らしいですが、まずは試しに演奏します。

・・・。

思惑通り、押す位置によって音の高さは変わりますが、音の高さの調整が難しいです。

「ドレミ」がひけない。

「かえるのうた」すらひけない。

 

子供たちも頑張って演奏(?)してくれました。

これで遊んでいると、音痴になりそうです。

多分、250から270の間は、262(ド)を出すというように、しっかり鍵盤を意識してプログラミングをしなければ、いけなかったのでしょう。

あと、音も安定して流れていないので、その調整も必要そうです。

まだまだ楽器と呼べるものを作るには、道のりが長い気がしました。

離れた場所から温度を測ろう

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

新学期が始まり、四男が保育園に入園しました。

毎朝、保育園に通う3人(次男、三男、四男)の体温を測るのは、なかなか大変です。

非接触体温計を使って、パパッと測れたらなんと素敵でしょう。

非接触温度センサーを探す

体温計の定番、オムロン社が非接触温度センサーを出していました。

性能的には信頼できるかな・・・と、思ったのですが、7,000円くらいして断念しました。

代わりに1,200円くらいの「MLX90614ESF」を購入します。

離れたところの温度を赤外線で測るようです。

まずは試作回路

実用性を考えると、Arduino miniを使ってコンパクトにした方が良さそうですが、まずは試作でサイズは気にしません。

前回の人感センサー回路の7セグメントディスプレイをそのまま流用し、新たに赤外線温度測定センサー(非接触温度センサー)を組み込みます。

赤外線温度測定センサーには、10KΩ抵抗器が2つ必要なようです。

ライブラリを読み込もう

次にプログラムです。

Adafruit社のライブラリを使って、簡単に温度を取得できます。

Arduino IDEのメニューで、
スケッチ>ライブラリをインクルード>ライブラリを管理
を選択し、「MLX90614」で検索すると、「Adafruit-MLX90614-Library」が見つかります。

これをインストールします。

そして、ライブラリを読み込み、温度を取得しましょう。

#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

#define led_1 9
#define led_10 10
#define led_100 11 
#define led_1000 12 
 
int val = 0; // 表示する数字
int val_1 =0; // 数字の1の位 
int val_10 =0; // 数字の10の位 
int val_100 =0; // 数字の100の位 
int val_1000 =0; // 数字の1000の位 
 
void setup(){
 mlx.begin();
 for (int i=1; i<=8; i++){
 pinMode(i,OUTPUT);
 }
 pinMode(led_1, OUTPUT);
 pinMode(led_10, OUTPUT);
 pinMode(led_100, OUTPUT); 
 pinMode(led_1000, OUTPUT);
}
 
//7セグの数字
boolean Num_Array[10][8]={
 {1,1,1,0,1,0,1,1}, // 0
 {0,0,1,0,1,0,0,0}, // 1
 {1,0,1,1,0,0,1,1}, // 2
 {1,0,1,1,1,0,1,0}, // 3
 {0,1,1,1,1,0,0,0}, // 4
 {1,1,0,1,1,0,1,0}, // 5
 {1,1,0,1,1,0,1,1}, // 6
 {1,1,1,0,1,0,0,0}, // 7
 {1,1,1,1,1,0,1,1}, // 8
 {1,1,1,1,1,0,1,0} // 9
};
void NumPrint(int Number){
 for (int w=0; w<=7; w++){
 digitalWrite(w+1,Num_Array[Number][w]);
 }
}
 
void loop(){
 val = mlx.readObjectTempC()*10;
 val_1 = val % 10; 
 val_10 = val /10 % 10;
 val_100 = val /100 % 10;
 val_1000 = val /1000 % 10;
 
 digitalWrite(led_1000,1);
 digitalWrite(led_100,1);
 digitalWrite(led_10,1);
 digitalWrite(led_1,0);
 NumPrint(val_1);
 delay(3);
 digitalWrite(led_1000,1);
 digitalWrite(led_100,1);
 if(val < 10){ //10未満なら非表示
  digitalWrite(led_10,1);
 }else{
  digitalWrite(led_10,0);
 }
 digitalWrite(led_1,1);
 NumPrint(val_10);
 delay(3);
 digitalWrite(led_1000,1);
 if(val < 100){ //100未満なら非表示
  digitalWrite(led_100,1);
 }else{
  digitalWrite(led_100,0);
 }
 digitalWrite(led_10,1);
 digitalWrite(led_1,1);
 NumPrint(val_100);
 delay(3);
 if(val < 1000){ //1000未満なら非表示
  digitalWrite(led_1000,1);
 }else{
  digitalWrite(led_1000,0);
 }
 digitalWrite(led_100,1);
 digitalWrite(led_10,1);
 digitalWrite(led_1,1);
 NumPrint(val_1000);
 delay(3);
}

前回から変わったのは、ハイライトした3行目のみ。

小数点を表示しないで、10倍する手抜きを行っています。

温度を測ってみよう!

電源を入れると、数字が早速でてきます。

天井?もしくは室温が21.5℃。
小数点がないので、215と表示されます。

それでは、手をかざしてみましょう。

30.3℃!体温低い。

表面温度なので、低く出てしまいます。

体温計にするには、足し算か掛け算で補正したほうがよさそうです。

 

今回は試しに、冷たい物も測ってみましょう。

氷水です。

0.4℃!

意外と遠くからでも、温度を測れます。

体温を測る目的でしたが、いろんなものの温度を測る実験をしても楽しいです。