Yuichiron のすべての投稿

スタンドアロン4人同時皮膚温計

教育用に、4人同時に皮膚温が計測できる装置を作成しました。USBバスパワーで動作し、4人分の皮膚温が液晶ディスプレイに表示されます。測定値は10倍で表示されます。
IMG_2871-0

構成部品は以下のとおりです。

(1)ArduinoUNO x1
(2)ブレッドボード x1
(3)温度センサー x4
(4)液晶ディスプレイ x1
(5)サーボケーブル(80cm) x4
(6)単芯ケーブル 各色適宜
(7)収縮チューブ 各色適宜

部品リスト:standalone_temp4

主要な部品は秋月電子通商で入手できます。サーボケーブルは、ラジコン部品ショップで、単芯ケーブル(ジャンプワイヤーでも良い)と収縮チューブは秋葉原で入手しています。

測定・表示ソフトウェアは、Arduino開発環境(1.0.5)で作成しました。液晶ディスプレイ制御ライブラリは、オレ工房様から頂きました。

ソフトウェア:temp4_150302

下記は、安静3分→スピーチ課題3分→安静3分のスケジュールで、30秒おきに皮膚温を測定し、プロットした事例です。精神負荷による皮膚温低下が検出できています。

temp

 

皮膚温測定プログラム

ここではArduinoで皮膚温を測る基本的なプログラムを紹介していきます。センサーはLM35DZをA0へ入れることを想定しています。

ファイル:temp1
内容:とりあえずアナログチャンネルから皮膚温を読む

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int analogValue = 0; // アナログ値を格納する変数

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
analogValue = analogRead(0); // アナログピン0から読み取る
float temp;

temp=(double)analogValue/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

ファイル:temp2
内容:10回サンプルし、その平均を表示する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int v = 0; // アナログ値を格納する変数
float sum;
float average;

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
sum=0;
for(int i=0;i<10;i++){
sum = sum+analogRead(0); // アナログピン0から読み取る
}
average=sum/10.0;
float temp;
temp=(double)average/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

ファイル:temp3
内容:100回サンプルし、その平均を表示する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int v = 0; // アナログ値を格納する変数
float sum;
float average;

void setup(){
Serial.begin(9600); // シリアルポートを9600bpsで開く
}

void loop(){
sum=0;
for(int i=0;i<100;i++){
sum = sum+analogRead(0); // アナログピン0から読み取る
}
average=sum/100.0;
float temp;
temp=(double)average/1024*500.0;

Serial.print(temp); //読んだ値をPCへ送る
Serial.println(); // 改行を送信
delay(100); // 100ミリ秒停止
}

実際に動作させてみると、サンプル数が多いほど皮膚温の変化が安定していることがわかります。Arduinoはそこそこのサンプル速度が出るので、なるべく多くサンプルし、その平均を求めることで、より正確な温度を求めることができます。