0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stackで工場の温湿度を記録してみる― センサー値の取得、画面表示、CSV保存 ―

0
Posted at

1.はじめに

製造現場では、温度や湿度を記録したい場面が多くあります。例えば

  • 工場内の温度が時間とともにどのように変化しているか
  • 加工機周辺の温度が上昇していないか
  • 製品や材料の保管環境が適切か
  • 空調の運転によって温湿度がどのように変化するか

といったことを調べる場合です。市販の温湿度データロガーを使用する方法もありますが、M5Stackに温湿度センサーを接続すると、比較的簡単に温湿度を測定して記録できます。

今回は、M5Stack Core2に温湿度センサーを接続し、温湿度を測る → 画面に表示する → microSDカードにCSV形式で保存する という一連の流れを試してみます。
本記事では、高精度な温湿度計測システムを作ることを目的としていません。M5Stackと身近なセンサーを使って、 「現場のデータを取ってみる」 ことを目的とします。

2.今回行うこと

今回のシステムでは、温湿度センサーで取得した温度と湿度をM5Stack Core2のLCDに表示します。さらに、測定した値を一定時間ごとにmicroSDカードへ保存します。全体の流れは次のようになります。

温湿度センサー

M5Stack Core2で温度・湿度を取得

LCDに表示

microSDカードにCSV形式で保存

保存したCSVファイルをパソコンに取り込めば、Excelなどを使って温度・湿度の時間変化をグラフにすることもできます。

3.使用する機器

今回使用する主な機器を表1に示します。

機器 用途
M5Stack Core2 データ取得・表示・保存
温湿度センサー 温度・湿度の測定
microSDカード 測定データの保存
USB Type-Cケーブル PCとの接続・電源供給
パソコン プログラムの作成・書き込み

温湿度センサーには、M5Stackから販売されているGROVE接続タイプのセンサーユニットなどを使用すると、配線が簡単です。今回は、温湿度センサーとしてM5StackのENV-III Unitを使用します。ENV-IIIでは温度、湿度、気圧を測定できますが、今回の実習ではセンサーによるデータ取得の基本を学ぶため、温度と湿度のみを使用します。

4.使用するライブラリのインストール

今回使用するENV-IIIをプログラムから扱うため、Arduino IDEに次のライブラリをインストールします。

ライブラリ バージョン 用途
M5UnitUnified 0.5.5 M5Stackの各種Unitを共通的に扱うためのライブラリ
M5Unit-ENV 1.7.1 ENV-IIIから温度・湿度などを取得するためのライブラリ

Arduino IDEの画面左側にある**「ライブラリマネージャ」**のアイコンをクリックします。検索欄に M5UnitUnified と入力し、検索結果から バージョン0.5.5 を選択して「インストール」をクリックします。

続いて、検索欄に M5Unit-ENV と入力し、バージョン1.7.1 を選択して「インストール」をクリックします。

5.温湿度センサーの接続

M5Stack Core2のGROVEポートに温湿度センサーを接続します。GROVE対応センサーの場合、4本の信号線が1本のケーブルにまとめられているため、ブレッドボードなどを使わずに接続できます。

接続するには、まず、M5Stack Core2の電源を切ります。そして、microSDカードスロットにmicroSDカードを挿入し、温湿度センサーをGROVEケーブルで接続します。

PXL_20260829_011435828.jpg
図1 M5Stack Core2と温湿度センサー

接続後、USB Type-Cケーブルを使ってM5Stack Core2とパソコンを接続します。

6.Arduino IDEへのプログラム入力

Arduino IDEを起動します。前回の記事 「M5Stackで工場のデータを測ってみる ― 0.PC環境・M5Stack動作確認」 で設定したM5Stack Core2の開発環境を使用します。

Arduino IDEに次のプログラムを入力します。

#include <M5Unified.h>
#include <Wire.h>
#include <SD.h>
#include <M5UnitUnified.h>
#include <M5UnitUnifiedENV.h>

m5::unit::UnitUnified Units;
m5::unit::UnitSHT30 sht30;

const char* CSV_FILE = "/temp_humidity.csv";
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);

  Wire.begin(32, 33, 400000);
  Units.add(sht30, Wire);
  if (!Units.begin()) {
    M5.Display.println("ENV sensor error");
    while (true) delay(1000);
  }

  if (!SD.begin(4, SPI, 25000000)) {
    M5.Display.println("microSD error");
    while (true) delay(1000);
  }

  if (!SD.exists(CSV_FILE)) {
    File f = SD.open(CSV_FILE, FILE_WRITE);
    if (f) {
      f.println("elapsed_s,temperature_C,humidity_percent");
      f.close();
    }
  }

  startMs = millis();
  lastMs = millis() - INTERVAL_MS;
}

void loop() {

  M5.update();
  Units.update();

  uint32_t now = millis();

  // 10秒経過していなければ何もしない
  if (now - lastMs < INTERVAL_MS) {
    return;
  }

  lastMs = now;

  // 現在の温湿度を取得
  float temp = sht30.temperature();
  float hum  = sht30.humidity();

  uint32_t elapsed = (now - startMs) / 1000;

  // 画面表示
  M5.Display.fillScreen(BLACK);
  M5.Display.setCursor(0, 30);

  M5.Display.printf("Temperature\n%.1f degC\n\n", temp);
  M5.Display.printf("Humidity\n%.1f %%\n\n", hum);
  M5.Display.printf("Elapsed: %lu s", elapsed);

  // microSDへ保存
  File f = SD.open(CSV_FILE, FILE_APPEND);

  if (f) {
    f.printf("%lu,%.1f,%.1f\n", elapsed, temp, hum);
    f.close();
  }
}

image.png
図2 Arduino IDEでスケッチを開いた画面

今回のプログラムでは、大きく分けて次の処理を行います。

  1. M5Stack Core2を初期化する
  2. 温湿度センサーを初期化する
  3. 温度と湿度を取得する
  4. LCDに測定値を表示する
  5. microSDカードに測定値を保存する
  6. 一定時間後に再び測定する

最初からプログラムをすべて理解する必要はありません。

まずはプログラムを書き込み、**「センサーから値を取得して表示できる」**ことを確認してみます。

7.M5Stack Core2へのプログラム書き込み

M5Stack Core2をUSBケーブルでパソコンに接続します。Arduino IDEで、使用するボードとポートを確認します。ボードにはM5Stack Core2を選択します。

続いて、Arduino IDEの「書き込み」ボタンをクリックします。プログラムのコンパイルと書き込みが始まります。書き込みが正常に終了すると、Arduino IDEの画面下部に書き込み完了を示すメッセージが表示されます。

うまく書き込めない場合

次のことを確認します。

  • M5Stack Core2とPCがUSBケーブルで接続されているか
  • データ通信に対応したUSBケーブルを使用しているか
  • M5Stack Core2がボードとして選択されているか
  • 正しいCOMポートが選択されているか

8.温度と湿度を表示

プログラムのコンパイルと書き込みが終わると、M5Stack Core2に書き込まれたプログラムが自動的に起動して、温湿度センサーから取得した温度と湿度がM5Stack Core2のLCDに表示されます。

例えば

Temperature
25.3 degC

Humidity
48.2 %

のように表示されます。M5Stack Core2にはバッテリーが内蔵されているため、パソコンからUSBケーブルを抜いても動作します。

PXL_20260829_013423910.jpg
図3 温湿度の表示例

センサー部分を手で軽く覆うなどすると、温度や湿度の値が変化することを確認できます。

ここまでで、 センサー → M5Stack Core2 → LCD というデータの流れを確認しました。

9.microSDカードに保存される測定データ

M5Stack Core2をパソコンとUSBケーブルで接続していると、M5Stack Core2を電源オフできません。このため、M5Stack Core2からUSBケーブルを抜いてから電源オフし、microSDカードスロットからmicroSDカードを取り出します。

microSDカードには、一定時間ごとに測定した温度と湿度がCSV形式で記録されます。保存されたファイルをパソコンで開くと、例えば次のようなデータが得られます。

elapsed_s,temperature_C,humidity_percent
0,25.3,48.2
10,25.4,48.3
20,25.4,48.5
30,25.5,48.6

elapsed_sは測定開始からの経過時間、temperature_Cは温度、humidity_percentは相対湿度です。

今回は、M5Stack Core2単体で簡単に記録できる構成を重視し、時刻ではなく測定開始からの経過時間を記録する方法とします。ファイルはCSV形式で保存されているため、Excelなどの表計算ソフトで読み込み、グラフ化するなどのデータ処理ができます。

10.工場における活用方法

今回の装置は簡易的なものですが、製造現場ではさまざまな使い方が考えられます。例えば

  • 工場内の温湿度変化の確認
  • 加工機周辺の環境温度の記録
  • 材料保管場所の温湿度確認
  • 空調運転前後の温湿度比較
  • 昼夜の温度変化の確認

などです。まず、簡易的にデータを取得してみることで、 「本格的な計測を行う必要があるか」 を判断するための予備調査にも利用できます。

11.今回のまとめ

今回は、M5Stack Core2と温湿度センサーを使って、センサー値の取得 → LCD表示 → CSV保存 という基本的なデータ計測の流れを試しました。M5Stackを使うと、センサーから取得した値をその場で確認できるだけでなく、microSDカードに保存して、後からパソコンで解析することもできます。今回行った 「測る」「表示する」「保存する」 という流れは、温湿度以外のセンサーでも基本的には同じです。

次回は距離センサーを使用して、 「M5Stackでワークの有無を検出してみる」 ことに挑戦します。距離を測るだけでなく、設定したしきい値を使って、ワークが「ある/ない」を判定してみます。

注意事項

今回製作する装置は、M5Stackと市販センサーを利用した簡易的な測定装置です。

測定値は、使用するセンサーの精度、設置位置、周囲環境などの影響を受けます。品質保証や製品検査、安全管理など、測定値の信頼性が要求される用途では、用途に適した校正済みの測定機器を使用してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?