TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
部品と材料
| 部品 | 数量 |
|---|---|
| Arduino Nano 33 BLE Sense | 1 |
| PCA9685 8チャネルFETドライバー(I2Cインターフェース) | 1 |
| SG90マイクロサーボモーター | 3 |
| 9V電池クリップ | 1 |
必要な工具と機器
- 3Dプリンター(汎用)
- はんだごて(汎用)
アプリとオンラインサービス
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
プロジェクト概要
概要
Arduino Nano 33 BLE SenseとEdge Impulse Studioを用いて、TinyMLによる言語検出器を構築します。デバイスは継続的に音声を聴取し、イタリア語の「si」、フランス語の「oui」、英語の「yes」の3単語を検出すると、対応する国旗をサーボで動かして表示します。

ワークフロー
- データセットの作成とサンプリング
- モデル設計と学習
- 性能評価
- EON Tunerによるハードウェア固有の最適化
- デプロイとサーボ制御フラグとの統合
サンプリングとデータセット作成
データセットは計30分の録音で構成:ターゲット単語3つに各10分、環境雑音3分。各1秒クリップに単語1発話を収録し、Edge Impulseでラベル付け。背景サンプルにより、発話と非発話の区別を学習させます。


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

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

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

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


コード概要
ソースコード(GitHub)はEdge Impulseテンプレートにサーボ制御ロジックを拡張。主な追加点:
Adafruit_PWMServoDriver.hによるPCA9685 PWM制御の統合- モデルの信頼度に基づき正しいフラッグを作動させる
servos_selector関数 - 分類信頼度が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言語検出器がデプロイ可能になりました。
製造プロセス
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- Arduino Nanoで作る音声反応デスクライト:音楽に合わせて光るイルミネーション
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き