この記事では、Edge AI → クラウドML → LLM というNarrative IoTの3層アーキテクチャの第1層にあたるエッジAIの実装とデモを紹介します。XIAO ESP32-S3 + MPU6050加速度センサを使い、サーキュレータの振動の変化をリアルタイムに検知します。
ハードウェア構成
- マイコン: Seeed XIAO ESP32-S3
- センサ: MPU6050(加速度、I2C接続)
- 取り付け: サーキュレーター上部にセンサを固定
MPU6050はX/Y/Z軸の加速度・角速度を取得できます。今回は加速度からサーキュレーターの振動パターンを学習対象とします。
システムアーキテクチャ(3層構造)
Narrative IoTは、センサから人間の言葉まで、役割が明確に分離された3層のアーキテクチャで設計されています。
[第1層:Edge AI]
・センサ生データを収集
→ ハイパスフィルタ・時間平均(ノイズ除去)
→ Welford学習 → Z-score推論 → M-of-Nフィルタ
→ 「意味のある異常」だけをクラウドへ送信
[第2層:クラウドML (機械学習)]
・Isolation Forest等の教師なしモデルで分析
・どんな異常がまとめて「異常シグネチャ(JSON)」を生成
[第3層:LLM (言語モデル)]
・シグネチャを受け取り言語化
今回のデモでは第1層(Edge AI)のみを対象とし、「エッジで何ができるか」にフォーカスします。
実験結果
以下は、実験シナリオと結果グラフです。
| イベント | 内容 | 検知結果 |
|---|---|---|
| ① 一瞬たたく | 強い衝撃を与えてすぐ戻す | 異常判定なし |
| ② 風量を増やす | 振動が大きい状態が継続 | ✅ 異常アラート × 1回送信 |
| ③ 風量を減らす | 振動が小さい状態が継続 | ✅ 異常アラート × 1回送信 |


ただのセンサは衝撃で誤報を出しますが、このエッジは一瞬のノイズを捨てて継続する異常だけを通知します。第2・第3層との連携が加われば、エッジで「圧縮」された意味のある情報が、クラウドMLで「分類」され、LLMで「言語化」されるという完全なパイプラインが完成します。
以降の章で、第1層(Edge AI)の学習と推論の処理方式を簡単に説明します。
学習フェーズ
学習条件
- 動作状態: 風量「中」で定常運転
- サンプルレート: 1Hz(100msで10回読み取り → 平均化)
- 学習サンプル数: 100点
Welfordオンラインアルゴリズム
Welfordのオンラインアルゴリズムを採用しています。組み込み環境ではメモリが限られていますが、Welfordは1サンプルずつ逐次更新するため、O(1)のメモリで平均と分散を計算できます。対象サンプル取得後、各特徴量の 平均(μ)と標準偏差(σ) が確定しモデルが完成します。完成したモデルはLittleFS(内蔵フラッシュ)に保存されます。
特徴量
前処理パイプラインが生データから以下の特徴量を生成します。また、ハイパスフィルタで指数移動平均(EMA)を引いて重力・傾きのDC成分を除去し、純粋な振動成分だけを抽出します。
| 特徴量 | 計算内容 | 意味 |
|---|---|---|
vibration_rms | √(vib_x² + vib_y² + vib_z²) | 振動の大きさ(合力) |
推論フェーズ
Z-Scoreで偏差を数値化
学習済みモデルの μ・σ を使い、現在値がどれだけ「正常から外れているか」をZ-scoreで表現します。
z = (現在値 - μ) / σ
シグモイド関数で0〜1のスコアに変換
以下のシグモイド関数で偏差を 0.0 ~ 1.0 のスコアに変換(正規化)します。
score = 1 / (1 + exp(-(maxZ - 2.5)))
誤検知防止:M-of-N フィルタリング
直近10回の推論結果を保持。そのうち7回以上が異常時のみ正式な「異常イベント」として処理します。これが、「一瞬たたく」だけでは異常判定されない理由です。
重複送信の抑制:アラートクールダウン
異常状態が長く続いても、クラウドへの送信は1回で十分です。アラート送信後は一定のクールダウン時間が経過するまで再送信しません。
異常継続中でも:
├── クールダウン中 → スキップ
└── クールダウン終了 → 再送信
まとめ:第1層(Edge AI)が果たす役割
この実験では、Narrative IoTの3層アーキテクチャの第1層(Edge AI)の役割を示しました。Edge AIは、一瞬のノイズを捨てて、真に継続する異常だけを通知します。また、クラウドもGPUも使わずにESP32単体でモデルの学習から推論まで完結します。設置してスイッチを入れれば、自動でその環境に適応したモデルが完成し異常監視を開始します。
次のブログで、異常検知する様子をTFT画面に表示するデモを掲載しています。



コメント