概要
Arduinoと赤外線温度センサーで安価な非接触体温計を作りました
測定温度を自動的にPCに記録するので、毎日手軽に体調管理できます
きっかけ
Covid-19の感染拡大により,毎朝学校に入るために家で検温した結果を報告しなくてはいけなったのですが,これが非常に面倒くさい!
朝の忙しい時間に,もっと手軽に体温を測定できればもっと便利になるのではないかと思い,これを製作しました。
製作目標
- 安価な部品で作れるコスパに優れたデバイス
普通に非接触の体温計を買うと高い! - 手をかざすだけで体温が測れる
毎朝手軽にできるように!
開発環境
- MacBookPro 2020 (M1)
- Node.js (v15.10.0)
- Arduino IDE
- Visual Studio Code
部品
- Arduino UNO互換機 - ¥500
- 赤外線温度センサーモジュール - ¥2145
- ブレッドボード - ¥100
ジャンパワイヤ - ¥60 - LED(赤) - ¥10
合計金額: ¥2815
※市販の温度計が3000円ちょいだから少し安いかな?
接続図
今回使用したモジュールに搭載されているセンサは、MLX90614というものでi2cによる値を読み出すことができます。
Arduino UNOには、i2cで使うSDAとSCLというピンがアナログのA5,A4と共通なのでそこに接続します。
注意点として、接続するときに10kΩほどのプルアップ抵抗を挟んでください。
ソースコード
温度センサを制御するにあたって便利なライブラリがすでに公開されていたので、そちらを使用させていただきました。
導入する際は、Arduino IDEの[ツール]-[ライブラリを管理]からMLX90614と検索してAdafruit MLX90614 Libraryという名前のライブラリを選択すれば大丈夫です。
また、今回は温度をシリアル通信を用いてPCへ測定した温度を送信し、PCで記録するためにPC側のソフトウェアも作成しました。PC側のソフトの詳細はGitHubに載せたので、そちらを御覧ください。
ハードウェア側
/*
Smart Termometer
*/
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
#define N 5 //測定する回数
#define STATUS A0
void setup() {
mlx.begin();
Serial.begin(115200);
pinMode(STATUS, OUTPUT);
}
void loop() {
static float temp_bak = -1;
static int count = 0;
static float sum = 0;
float temp = mlx.readObjectTempC();
if (count) {
sum += temp;
if (count > N) {
digitalWrite(STATUS, LOW);
Serial.println(sum / N);
count = 0;
sum = 0;
} else {
count++;
}
} else if (temp_bak != -1 && temp - temp_bak > 2.0) {
digitalWrite(STATUS, HIGH);
Serial.println("Found");
count++;
}
temp_bak = temp;
delay(500);
}
PC側
'use strict';
require('date-utils');
const SerialPort = require('serialport');
const player = require('node-wav-player');
const { Readline } = SerialPort.parsers;
const fs = require('fs');
//シリアルポートは適宜変更してください
const port = new SerialPort('/dev/cu.usbserial-1120', { baudRate: 115200 });
const parser = port.pipe(new Readline({ delimiter: '\n' }));
function sound(path) {
player.play({
path: './sound/' + path
})
}
let temp_bak = -1;
let count = 0;
let sum = 0;
let N = 5;
parser.on('data', data => {
data = data.replace('\r', '');
switch (data) {
case "Found":
console.log("そのままお待ち下さい...");
sound("wait.mp3");
break;
default:
console.log(data + "℃");
sound("ok.mp3");
const now = new Date();
const timeStamp = now.toFormat('DDD MMM DD YYYY HH24:MI:SS');
fs.appendFile('data.csv', timeStamp + "," + data + "℃\n", (err) => {
if (err) throw err;
console.log('data.csvに追記されました');
});
}
});
工夫したところ
- 手がかざされたことを温度センサのみで検知
部品点数を減らすため、手をかざした際の急激な変化を検知して体温を自動測定します
機能
- 体温測定
デバイスに手を3秒程度かざすと体温を測定できます - 体温を記録
毎日の体温をPC側でCSVとして記録できます - 動作中はLEDとサウンドで通知
手をかざすと測定中はLEDが点灯するとともに、PC側でサウンドが再生されるのでいつまで手をかざすかが分かりやすい
外観
試作品なのでブレッドボードで作り、外観はダンボールを切って作りました。
外観はちょっとひどいですが、動作はしっかりとしています。
デモ
測定値を見てみると、やはり手の平だと少し体温と差があるように感じますね。
+2度ぐらい補正をかけてあげると良い感じかな?
今後の改良
- ESP32などを使って単体でクラウドへ体温をアップする
- ハードウェアをプラスチックケースで作り直す
- ユニバーサル基板にATMEGA328PUとかで小型化する
投稿者の人気記事
-
kou
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
Opening
Sk
2021/05/24 -
kou
さんが
2021/12/22
に
編集
をしました。
ログインしてコメントを投稿するはじめましてよろしくお願いします。非接触型体温計を作成しようとしています。色々教えていただけませんか?