第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℃!
意外と遠くからでも、温度を測れます。
体温を測る目的でしたが、いろんなものの温度を測る実験をしても楽しいです。