工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

部品と材料

部品数量
Arduino Nano 33 BLE Sense1
PCA9685 8チャネルFETドライバー(I2Cインターフェース)1
SG90マイクロサーボモーター3
9V電池クリップ1

必要な工具と機器

アプリとオンラインサービス

プロジェクト概要

概要

Arduino Nano 33 BLE SenseとEdge Impulse Studioを用いて、TinyMLによる言語検出器を構築します。デバイスは継続的に音声を聴取し、イタリア語の「si」、フランス語の「oui」、英語の「yes」の3単語を検出すると、対応する国旗をサーボで動かして表示します。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

ワークフロー

  1. データセットの作成とサンプリング
  2. モデル設計と学習
  3. 性能評価
  4. EON Tunerによるハードウェア固有の最適化
  5. デプロイとサーボ制御フラグとの統合

サンプリングとデータセット作成

データセットは計30分の録音で構成:ターゲット単語3つに各10分、環境雑音3分。各1秒クリップに単語1発話を収録し、Edge Impulseでラベル付け。背景サンプルにより、発話と非発話の区別を学習させます。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

モデル設計

Edge Impulseが前処理を自動化。音声を時系列データに変換し、ウィンドウ処理後、MFCC(メル周波数ケプストラム係数)で特徴抽出。軽量CNNが各ウィンドウを「si」「oui」「yes」「背景」の4クラスに分類します。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

学習とArduino最適化

EON Tunerが数十のモデル構成を自動探索し、精度、推論時間、RAM、フラッシュ使用量でスコアリング。本プロジェクトでは、上位5精度の中から最速モデルを採用しました。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

テスト

新規テストセットで堅牢な性能を確認。ターゲット単語の分類信頼度は一貫して80%を超えました。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

デプロイ

Edge Impulse Arduinoライブラリでストリームライン化。生成されたヘッダーファイルをArduino IDEに取り込み、3台のSG90サーボでフラッグを制御するようカスタマイズ。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

コード概要

ソースコード(GitHub)はEdge Impulseテンプレートにサーボ制御ロジックを拡張。主な追加点:

  1. Adafruit_PWMServoDriver.hによるPCA9685 PWM制御の統合
  2. モデルの信頼度に基づき正しいフラッグを作動させるservos_selector関数
  3. 分類信頼度が80%を超えたときにservos_selectorを発火する条件ロジック
void servos_selector(int iter){
  unsigned long time_now = millis();
  if (time_now - time_was > 2000){
    time_was = time_now;
    switch (iter){
      case 0: // イタリア語
        pwm.setPWM(0, 0, 350);
        delay(500);
        pwm.setPWM(0, 0, 200);
        pwm.setPWM(1, 0, 200);
        pwm.setPWM(2, 0, 200);
        break;
      case 1: // フランス語
        pwm.setPWM(1, 0, 350);
        Serial.println("2222");
        delay(500);
        pwm.setPWM(0, 0, 200);
        pwm.setPWM(1, 0, 200);
        pwm.setPWM(2, 0, 200);
        break;
      case 2: // 英語
        pwm.setPWM(2, 0, 350);
        Serial.println("333");
        delay(500);
        pwm.setPWM(0, 0, 200);
        pwm.setPWM(1, 0, 200);
        pwm.setPWM(2, 0, 200);
        break;
    }
  }
}

回路設計

9V電池でマイコンを駆動し、PCA9685ボードで3台のSG90サーボを制御。ボードの12Vピンを電池に接続し、PWM出力でI2C経由でサーボを駆動します。

TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別

ハードウェア、ソフトウェア、データパイプラインが揃い、TinyML言語検出器がデプロイ可能になりました。

製造プロセス

  1. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  2. Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
  3. Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
  4. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  5. DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
  6. Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
  7. MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
  8. Arduino Nanoで作る音声反応デスクライト:音楽に合わせて光るイルミネーション
  9. Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
  10. ゲーム用カスタムArduinoジョイスティックハンドルの製作
  11. Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き