Arduino UNO Q App Labのサンプルプログラムの活用

下記のYouTube動画には、Arduino、Python、AIを組み合わせた低コストな5つの実用的なプロジェクトを通じて、就職に有利な技術を習得する方法が提案されていた。つまり、それらの技術を習得し、就職の面接時に、Arduino、Python、AIを使って実際に動作する産業用プロジェクトを構築した経験があることを主張すれば、他の候補者との差別化が図れるとのこと。
また、「手を動かして作る者こそが、採用される時代です」と主張されていた。

それらのプロジェクトの1つに、下記の「機械学習による予知保全」があり、このプロジェクトを実行することで得られるスキルや、どのような職種に有効なポートフォリオを構築できるかが説明されていた。

YouTube動画:Arduino + Python + AI: Land Jobs with These Low-Cost Top 5 Industrial Projects – Honest Pro Tips
https://www.youtube.com/watch?v=L-KkxfDRqZU&t=2s

Arduino UNO QのApp Labのサンプルプログラムにも加速度センターを利用するプログラム「Real Time Accelerometer Data」があったので、そのサンプルプログラムをこのプロジェクトに流用できないかを調べた。

まずは、プログラム「Real Time Accelerometer Data」について調べた。

(注)本記事の内容は正確性を保証するものではない。

(2025年12月28日 追記)YouTube動画を追加しました。 https://youtu.be/7DEsYe7xaJQ

目次

サンプルプログラム「Real Time Accelerometer Data」調査

Real Time Accelerometer Dataについて説明してください

Gemini 3 Proの回答

Arduino UNO App Labの「Real Time Accelerometer Data(リアルタイム加速度データ)」は、センサーから取得した動きのデータ(加速度)をリアルタイムで可視化し、さらにAIを使って「どんな動きをしているか」を判定するアプリです。

このアプリの仕組み、技術的な構成要素、そして何ができるのかを詳しく解説します。

1. アプリの概要と目的

このアプリの主な目的は、「動き(Motion)」をデータとして扱い、AIで解析するデモンストレーションです。

単に「揺れている」ことを数字で表示するだけでなく、その揺れ方が「横振り(Wave)」なのか「上下(Up-Down)」なのか、あるいは「静止(Idle)」しているのかを、AIが瞬時に判断します。

2. 仕組みとデータフロー

このアプリは、以下の流れで処理を行っています。

  1. データ取得 (Sensing):
    • 外部接続した加速度センサー(MPU6050など)が、X軸(左右)、Y軸(前後)、Z軸(上下)にかかる力を毎秒数十回〜数百回計測します。
  2. 信号処理 (DSP):
    • 取得した生のデータからノイズを取り除き、AIが理解しやすい形(スペクトログラムや特徴量)に変換します。
  3. AI推論 (Inference):
    • motion_detection というBrick(機能ブロック)が働きます。ここには事前に「手の振り方」などを学習させたモデルが組み込まれており、現在の動きがどのパターンに当てはまるかを判定します。
  4. 可視化 (Visualization):
    • web_ui Brickを使用し、ブラウザ上に「3軸の波形グラフ」と「判定結果(今の動きの名称)」を表示します。

3. 使われている技術要素 (Bricks)

このアプリを構成している主要なBricksは以下の通りです。

Bricks名役割解説
motion_detection動きの判定 (AI)このアプリの核となる部分です。加速度データを入力として受け取り、学習済みモデル(TensorFlow Lite形式)に基づいて、「Wave」「Idle」などのクラス(種類)を出力します。
web_uiユーザーインターフェースデータの波形をリアルタイムでグラフ描画し、AIの判定結果を表示するためのWebサーバー機能を提供します。

4. 必要なハードウェア

Arduino UNO Q自体には加速度センサーが内蔵されていないため、外付けセンサーが必須です。

  • 加速度センサー (IMU): 一般的に MPU6050 (6軸) や LSM6DS3 などのI2C接続対応センサーが使われます。
  • 接続: I2C通信(SDAピンとSCLピン)を使ってArduinoと高速にデータをやり取りします。

5. AIは何を「見て」いるのか?

人間は目で見て「手が振られている」と分かりますが、AIは「波形の形とリズム」を見ています。

  • Idle (静止): 全ての線が平らで、Z軸だけが重力(1G)を示している状態。
  • Wave (横振り): X軸のグラフだけが、大きくサイン波(波打つ形)を描いている状態。
  • Circle (円を描く): X軸とY軸が、少しずれたタイミングで波打っている状態(位相差)。

このアプリに含まれるAIモデルは、これらの「波形の特徴」を事前に学習しています。

6. このアプリの応用例(何に使えるか)

この技術(加速度データ+AI判定)は、産業やホビーで広く応用可能です。

  • ジェスチャーコントローラー:
    • 「魔法の杖」のように、杖を振って照明をつけたり、特定の動きでPCを操作したりするデバイス。
  • 産業機械の予知保全:
    • モーターにセンサーを貼り付け、「正常な振動」と「故障の前兆となる異常な振動」をAIに学習させ、故障する前にアラートを出すシステム。
  • ウェアラブルデバイス:
    • 「歩いている」「走っている」「転倒した」などの人間の動作を認識する活動量計や見守りシステム。

まとめ

「Real Time Accelerometer Data」は、単なるグラフ表示アプリではなく、「物理的な動きをデジタル情報に変え、AIで意味を見出す」という、IoTとEdge AI(エッジAI)の基礎を体験するための重要なサンプルアプリです。

サンプルプログラム「Real Time Accelerometer Data」を流用できるか?

サンプルプログラム「Real Time Accelerometer Data」を下記の用途に応用する方法、具体的な手順について教えてください。用途に関する資料(上記スライド)を添付資料として追加しました。この資料も考慮して、方法・手順を回答してください。

産業機械の予知保全:
モーターにセンサーを貼り付け、「正常な振動」と「故障の前兆となる異常な振動」をAIに学習させ、故障する前にアラートを出すシステム。

Gemini 3 Proの回答

添付いただいたスライド資料(Project 3: 機械学習による予知保全)の内容を拝見しました。資料にある「Core Concept(時系列分析)」や「Skills Unlocked(TensorFlow Lite)」は、まさにArduino UNO QのApp Labを使って実現可能な内容です。

資料の要件(コスト2,200円以下、Arduino Uno使用、MPU-6050使用)を踏まえ、サンプルアプリ「Real Time Accelerometer Data」をベースにした、より具体的な予知保全システムの構築手順を構成しました。


「Project 3: 機械学習による予知保全」実現へのロードマップ

このプロジェクトの核心は、資料にある通り「いつもの動き(正常)」と「違う動き(異常)」を時系列データとして分析することにあります。

手順1:ハードウェアの選定と設置(The Build)

資料には「MPU-6050 or ADXL335」とありますが、サンプルアプリ「Real Time Accelerometer Data」をそのまま活用するなら、選択肢は1つです。

  • 推奨センサー:MPU-6050 (I2C接続のデジタル加速度センサー)
    • 理由: サンプルアプリのプログラムはI2C通信(SDA/SCLピン)でデータを取得するように書かれています。ADXL335(アナログ出力)を選ぶと、プログラムを大幅に書き換える必要が生じます。
  • 設置の重要性(Portfolio Powerを高めるために):
    • スライドにある「産業データサイエンティスト」レベルの精度を出すには、センサーの固定が命です。ブレッドボード上のグラグラした状態では、モーターの微細な「予兆振動」が吸収されて検知できません。
    • アクション: センサー基板をモーターの筐体にネジ止めするか、強力な両面テープで完全に密着させてください。

手順2:データ収集(時系列データ分析の準備)

資料の「Core Concept」にある「時系列で分析」を行うためのデータ収集フェーズです。

  1. 正常データの収集 (Normal Operation):
    • モーターが快調に回っている状態の振動データを、Edge Impulse等を使って収集します。
    • 時系列のポイント: 「一瞬の値」ではなく、「1秒〜2秒間の波形の連続(ウィンドウ)」を1つのデータとして扱います。これにより「カタカタカタ」というリズムの変化を捉えられるようになります。
  2. (テスト用)異常データの収集:
    • 本物の故障を待つわけにはいかないため、「擬似的な異常」を作ります。
    • 例:モーターの固定を少し緩める、ファンにテープを貼ってバランスを崩す、指で負荷をかける。
    • これらを「テスト用データ」として録音しておきます。

手順3:AIモデルの構築(TensorFlow Lite / 異常検知)

ここが「Skills Unlocked」にある「機械学習モデルの構築」に該当します。サンプルアプリの「ジェスチャー分類(Classification)」を「予知保全(Anomaly Detection)」に変更します。

  • ツールの使用: Edge Impulse(Arduinoと親和性が高いMLツール)を使用します。
  • アルゴリズムの変更:
    • 変更前: Neural Network (Classification) → 「Aの動き」か「Bの動き」かを分類する。
    • 変更後: K-means Anomaly Detection または GMM → 「正常なデータ群」からの距離(外れ具合)を測定する。
  • 学習のゴール:
    • AIに「これが正常な振動の範囲(クラスター)だ」と覚えさせます。
    • TensorFlow Lite形式(.tflite)でモデルをエクスポートします。

手順4:アプリへの実装と動作確認

作成したTensorFlow LiteモデルをArduino UNO Qに実装します。

  1. モデルの入れ替え:
    • サンプルアプリ内の既存の .tflite ファイルを、自分で作った「予知保全用モデル」に置き換えます。
  2. コードの微修正(判定ロジック):
    • アプリが画面に表示する内容を以下のように読み替えます(あるいはコードを修正します)。
      • これまで: 「Wave(手を振っている)」と表示。
      • これから: 「Anomaly Score(異常スコア)」が数値を出す。
  3. アラート設定(ダウンタイム未然防止):
    • スライドの目標である「ダウンタイムを防ぐ」ために、しきい値を設けます。
    • 例:「異常スコアが 0.5以上 になったら、画面を赤くする、またはリレー経由でパトライトを回す」

まとめ:このプロジェクトで得られるもの

この手順で進めることで、スライド資料にある以下のスキルセットが確実に身につきます。

  • 時系列データ分析: 振動の波形(周波数成分)を理解する能力。
  • 組込みシステムとMLの連携: Arduino UNO Qというエッジデバイス上で、クラウドに頼らずリアルタイムでAIを動かす技術(TinyML)。

まずは「MPU-6050」を入手し、ご自身のデスクにある扇風機やPCファンなどで「正常データ」を集めることから始めてみてはいかがでしょうか。

次のステップ

異常時の故障モードが複数あり、それらのモードの振動波形データが収集できている場合、どのように正常時の波形、異常時の波形を学習させればいいですか

Gemini 3 Proの回答

異常時のデータ(故障モードごとのデータ)がすでに収集できている場合、これまでの「異常検知(正常データのみ学習)」からステップアップし、「多クラス分類(Multi-class Classification)」という手法を使うのがベストです。

これにより、単に「何かがおかしい」だけでなく、「どこが、どのように悪いのか(例:ベアリングの摩耗、アンバランス、軸ズレなど)」まで具体的に診断できるようになります。

具体的な学習のアプローチとして、「分類モデル」をメインにしつつ、未知の故障に備えて「異常検知」を組み合わせるハイブリッドな構成をお勧めします。


アプローチ1:多クラス分類(Classifier)の導入

これがメインの手法になります。AIに「正常」と「故障A」「故障B」の違いを教え込みます。

1. データのラベル付け(Labeling)

収集したデータをアップロードする際、それぞれの状態に合わせて明確な名前(ラベル)を付けます。

  • 正常データ: normal
  • 故障モードA: bearing_fault (例:ベアリング傷)
  • 故障モードB: unbalance (例:回転の偏り)
  • 故障モードC: misalignment (例:軸ズレ)

2. 学習ブロックの構成(Impulse Design)

Edge Impulseなどのツール上で、以下の構成にします。

  • Input: 時系列データ(Time series data)
  • Processing (DSP):Spectral Analysis (FFT)
    • これまで通り、振動の周波数成分を特徴量として抽出します。
  • Learning:Classification (Keras / Neural Network)
    • ここで「Neural Network」を選びます(前回のアノマリ検知ではなく、分類器に戻します)。
    • 出力層(Output)の数(クラス数)は、上記ラベルの数(例:4つ)になります。

3. 判定の仕組み

AIは入力された振動に対して、確率で答えを出します。

  • 「Normal: 5%, Bearing Fault: 90%, Unbalance: 5%」
    • → 判定:「ベアリング故障」

アプローチ2:ハイブリッド構成(分類 + 異常検知)

「収集済みの故障モード」は分類器で特定しつつ、「まだ経験したことのない未知の故障」が起きた場合に備える、最も堅牢なシステムです。

Edge Impulseでは、1つのプロジェクトの中に「分類(Classification)」と「異常検知(Anomaly Detection)」の両方のブロックを同時に組み込むことができます。

構成手順

  1. Learningブロックを2つ配置する:
    • ブロック1: Classification (Neural Network)normal, bearing, unbalance を学習。
    • ブロック2: Anomaly Detection (K-means) → すべてのクラス(またはnormalのみ)の特徴分布を学習。
  2. 判定ロジック(プログラム側):Arduinoのプログラムで、以下のように判断させます。
    • ステップ1: 異常検知スコアを見る。
      • スコアが高い → 「未知の異常(見たことのない波形)」
    • ステップ2: 分類(Classification)の結果を見る。
      • bearing_fault の確率が高い → 「ベアリング故障」
      • unbalance の確率が高い → 「アンバランス発生」
      • normal の確率が高い → 「正常」

注意点:データのバランス(Data Balancing)

「分類(Classification)」を行う場合、各モードのデータ量が均等であることが望ましいです。

  • 良い例: 正常 10分、故障A 10分、故障B 10分
  • 悪い例: 正常 60分、故障A 1分、故障B 1分
    • データが極端に少ないと、AIは「めったに起きないから無視しよう」と学習してしまい、その故障を検知できなくなります。
    • もし故障データが少ない場合は、録音データを分割して数を増やしたり(Data Augmentation)、Edge Impulseの機能でノイズを加えて水増しするなどの工夫が必要です。

結論

すでに複数の故障データをお持ちとのことですので、「Neural Network (Classification)」ブロックを使用して、各故障モードをクラスとして学習させるのが正解です。これにより、単なるアラートだけでなく「故障の原因診断」まで行える高度な予知保全システムになります。

実務レベルに必要なスキルの基本的な部分がサンプルプログラムでも習得できそうなことが確認できた。

現場で必要な精度がわからなくても、目標とする職種をAIに提示することにより、『「産業データサイエンティスト」レベルの精度を出すには、センサーの固定が命です』というような回答や、現場での注意点などを返してくれるので、目標・背景・設置場所・到達したいレベルなどをAIに具体的に伝えることによって、それらに対応した回答を得ることができる。
各作業は、どのようなスキルの習得に役立つのかを明確に示してくれるのも分かりやすい。
データ収集のノウハウとか、現場よりの情報も回答してくれるのが有効。

サンプルプログラムでも、レベルを高め、それに現場の知識・スキル・工夫を加えることによって、有効なポートフォリを構築できるのではないか。

目次