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