1.はじめに
製造現場では、設備や部品の温度を確認したい場面が多くあります。
例えば
- モータや軸受の温度上昇を確認する
- 加工後のワークの温度を確認する
- ヒータや加熱部周辺の温度変化を調べる
- 設備の運転開始後に温度がどのように変化するか記録する
といった用途です。
温度測定には熱電対や測温抵抗体などを対象物に接触させる方法がありますが、赤外線を利用すると、対象物に触れずに表面温度を測定できます。
今回は、M5Stack Core2に非接触温度センサーを接続し、対象物の温度を測定してLCDに表示するとともに、microSDカードへCSV形式で記録してみます。
本記事では、高精度な温度計測システムを作ることを目的としていません。M5Stackと身近なセンサーを使って、「設備の温度データを非接触で取ってみる」 ことを目的とします。
2.今回行うこと
今回は、非接触温度センサーで対象物の表面温度を測定します。測定した温度をM5Stack Core2のLCDに表示し、一定時間ごとにmicroSDカードへCSV形式で保存します。
全体の流れは次のようになります。
設備・ワークなどの対象物
↓
非接触温度センサーで表面温度を測定
↓
M5Stack Core2で温度値を取得
↓
LCDに表示
↓
microSDカードにCSV形式で保存
第1回の温湿度測定と同じように、今回は「測る」「表示する」「保存する」という基本的なデータ計測の流れを、非接触温度測定で試します。
3.使用する機器
今回使用する主な機器を表1に示します。
| 機器 | 用途 |
|---|---|
| M5Stack Core2 | 温度データの取得・表示・保存 |
| NCIR2 Unit | 対象物の表面温度の非接触測定 |
| GROVEケーブル | M5Stack Core2とセンサーの接続 |
| microSDカード | 測定データの保存 |
| USB Type-Cケーブル | PCとの接続・電源供給 |
| パソコン | プログラムの作成・書き込み |
非接触温度センサーには、M5StackのNCIR2 Unit を使用します。
NCIR2 Unitは赤外線を利用して、対象物に接触せずに表面温度を測定するセンサーユニットです。GROVEケーブルでM5Stack Core2に接続できるため、ブレッドボードなどを使用せずに作成できます。
4.使用するライブラリのインストール
今回使用するNCIR2 Unitをプログラムから扱うため、次のライブラリを追加します。
| ライブラリ | バージョン | 用途 |
|---|---|---|
| M5Unit-THERMO | 0.3.1 | NCIR2 Unitから非接触温度を取得するためのライブラリ |
Arduino IDEの**「ライブラリマネージャ」**を開き、検索欄に M5Unit-THERMO と入力します。検索結果から バージョン0.3.1 を選択して「インストール」をクリックします。
第1回でインストールした M5UnitUnified 0.5.5 は、そのまま使用します。インストールが完了したら、Arduino IDEに次のプログラムを入力します。
#include <M5Unified.h>
#include <Wire.h>
#include <SD.h>
#include <M5UnitUnified.h>
#include <M5UnitUnifiedTHERMO.h>
m5::unit::UnitUnified Units;
// NCIR2 Unit
m5::unit::UnitNCIR2 thermo;
const char* CSV_FILE = "/object_temperature.csv";
// 記録間隔:10秒
const uint32_t INTERVAL_MS = 10000;
uint32_t startMs = 0;
uint32_t lastMs = 0;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setTextSize(2);
M5.Display.setTextColor(WHITE, BLACK);
M5.Display.fillScreen(BLACK);
// Core2 PORT.A
// SDA = 32, SCL = 33
Wire.begin(32, 33, 100000);
// NCIR2を登録
Units.add(thermo, Wire);
if (!Units.begin()) {
M5.Display.println("NCIR2 error");
while (true) {
delay(1000);
}
}
// microSDカード初期化
if (!SD.begin(4, SPI, 25000000)) {
M5.Display.println("microSD error");
while (true) {
delay(1000);
}
}
// CSVファイルがなければ作成
if (!SD.exists(CSV_FILE)) {
File f = SD.open(CSV_FILE, FILE_WRITE);
if (f) {
f.println("elapsed_s,object_temperature_C");
f.close();
}
}
startMs = millis();
// 起動直後にも1回表示・保存する
lastMs = millis() - INTERVAL_MS;
}
void loop() {
M5.update();
Units.update();
uint32_t now = millis();
// 10秒経過していなければ何もしない
if (now - lastMs < INTERVAL_MS) {
return;
}
lastMs = now;
// NCIR2から現在の温度を取得
float objectTemp = thermo.temperature();
uint32_t elapsed = (now - startMs) / 1000;
// -----------------------------
// 画面表示
// -----------------------------
M5.Display.fillScreen(BLACK);
M5.Display.setCursor(0, 30);
M5.Display.println("Object Temperature");
M5.Display.println();
M5.Display.printf("%.1f degC\n\n", objectTemp);
M5.Display.printf(
"Elapsed: %lu s",
elapsed
);
// -----------------------------
// microSDへCSV保存
// -----------------------------
File f = SD.open(CSV_FILE, FILE_APPEND);
if (f) {
f.printf(
"%lu,%.1f\n",
elapsed,
objectTemp
);
f.close();
}
}
5.非接触温度センサーの接続・スケッチの書き込み
M5Stack Core2のGROVEポートにNCIR2 Unitを接続します。接続するときは、M5Stack Core2の電源を切った状態で行います。接続後、USB Type-Cケーブルを使ってM5Stack Core2とパソコンを接続して、M5Stack Core2にスケッチを書き込みます。
6.温度を測る
プログラムが起動したら、センサーの測定面を温度を測定したい対象物の方向に向けます。非接触温度センサーは、対象物に触れなくても測定できますが、対象物との距離や測定範囲に注意する必要があります。
プログラムが起動すると、NCIR2 Unitで測定した対象物の温度がM5Stack Core2のLCDに表示されます。
例えば
Object Temperature
32.6 degC
のように表示されます。
センサーを手のひらなどに向けてみると、表示される温度が変化することを確認できます。次に、机や金属部品など、異なる対象物にセンサーを向けて温度の違いを確認してみます。
ここまでで、対象物 → 非接触温度センサー → M5Stack Core2 → LCD というデータの流れを確認できました。
非接触温度測定で注意すること
非接触温度センサーは便利ですが、表示された値が常に対象物の正確な温度を示すとは限りません。特に注意したいのが、測定距離、測定範囲、対象物の表面状態です。
6.1 測定距離と測定範囲
非接触温度センサーは、センサーの正面にある一点だけを測定しているわけではありません。ある範囲から放射される赤外線を受けて温度を求めています。そのため、対象物から離れすぎると、測定したい部分だけでなく、その周囲も測定範囲に含まれる場合があります。小さな部品を測定するときは、特に測定距離に注意します。
6.2 対象物の表面状態
赤外線による温度測定では、対象物表面の性質によって測定値が影響を受けます。例えば、光沢のある金属表面では、周囲からの赤外線が反射し、実際の表面温度との差が大きくなる場合があります。したがって、非接触温度測定では、「センサーを向ければ、どんな対象物でも正確な温度が測れるわけではない」 ことを理解して使用する必要があります。
7.microSDカードへの測定データの保存
M5Stack Core2のmicroSDカードスロットに挿入されたmicroSDカードに、一定時間ごとに測定した温度をCSV形式で保存されます。
例えば、10秒ごとに測定すると、保存されるデータは次のようになります。
elapsed_s,object_temperature_C
0,28.4
10,28.7
20,29.1
30,29.6
40,30.2
elapsed_sは測定開始からの経過時間、object_temperature_Cは非接触温度センサーで測定した対象物の温度です。
今回は、M5Stack Core2単体で簡単に記録できる構成を重視し、時刻ではなく測定開始からの経過時間を記録します。
8.設備の温度変化を記録する
非接触温度測定では、瞬間的な温度を確認するだけでなく、一定時間記録することで設備の温度変化を見ることができます。
例えば、モータなどの設備について
- 設備が停止している状態から測定を開始する
- 設備を運転する
- 一定時間ごとに温度を記録する
- 運転停止後も測定を続ける
という方法で記録すると、運転に伴う温度上昇や、停止後の温度低下を確認できます。
ただし、実際の設備を測定する場合は、安全を最優先し、回転部や可動部、高温部などに身体やセンサーを近づけないようにします。
9.CSVファイルをパソコンで確認
測定終了後、M5Stack Core2の電源を切ってからmicroSDカードを取り出します。microSDカードをパソコンで読み込み、保存されたCSVファイルを確認します。CSV形式で保存しておけば、Excelなどの表計算ソフトで読み込むことができます。
例えば
- 横軸:経過時間
- 縦軸:対象物温度
としてグラフを作成すると、設備の温度変化を確認できます。
単発で温度を測定するだけでは分からなかった
- 温度がどの程度まで上昇したか
- 温度上昇がいつ落ち着いたか
- 運転停止後にどの程度の速さで温度が低下したか
といったことも、連続して記録することで確認しやすくなります。
10.工場における活用方法
今回の装置は簡易的なものですが、製造現場ではさまざまな使い方が考えられます。
例えば
- モータ表面の温度変化の確認
- 軸受周辺の温度変化の確認
- 加工後のワーク温度の確認
- ヒータ周辺の温度変化の記録
- 設備の暖機運転時の温度変化の確認
- 異なる運転条件での温度比較
などです。
特に、温度を時間とともに記録することで、「通常時にはどの程度の温度になるのか」
を把握するための簡易的な予備調査に利用できます。
将来的に設備状態を監視する場合でも、まずは実際の温度データを取得し、どのように変化するのかを知ることが第一歩になります。
11.接触式温度測定との違い
温度を測定する方法には、今回のような非接触式のほか、熱電対などを対象物に取り付ける接触式があります。
非接触式には
- 対象物にセンサーを取り付けなくても測定できる
- 動いている対象物でも条件によっては測定できる
- センサーの取り付け作業を簡略化できる
といった利点があります。その一方で
- 対象物の表面状態の影響を受ける
- 測定距離や測定範囲に注意が必要
- 光沢のある金属などでは誤差が大きくなる場合がある
といった点には注意が必要です。
用途に応じて、非接触式と接触式を使い分けることが重要です。
12.今回のまとめ
今回は、M5Stack Core2と非接触温度センサーを使って、温度測定 → LCD表示 → CSV保存 → 温度変化の確認 という処理を試しました。
第1回の温湿度測定と同様に、センサーから取得した値を「表示する」「保存する」という基本的な流れを使っています。センサーの種類が変わっても、「測る → 表示する → 保存する → データを見る」 という考え方は共通しています。また、非接触温度測定では、単にセンサーの値を読むだけでなく、測定距離や対象物の表面状態などを考慮する必要があることも重要です。
次回は加速度センサーを使用して、「M5Stackでモータの振動を測ってみる」 ことに挑戦します。加速度の時間波形を測定し、振動の大きさをRMSで評価してみます。
注意事項
今回製作する装置は、M5Stackと市販センサーを利用した学習・簡易検証用の装置です。
測定値は、センサーの仕様、対象物との距離、測定範囲、対象物の材質・表面状態、周囲環境などの影響を受けます。
品質保証、製品検査、設備の安全監視など、測定値の信頼性が要求される用途では、用途に適した校正済みの測定機器を使用してください。
また、実際の設備を測定する場合は、回転部、可動部、高温部などに身体やセンサーを近づけないよう、安全を十分に確保してください。

