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

第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℃!

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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)