TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
Komponenten und Zubehör
| Arduino Nano 33 BLE Sense | × | 1 |
| PCA9685 8-Kanal 8W 12V FET-Treiber Proportionalventil-Controller mit I2C-Schnittstelle | × | 1 |
| SG90 Mikro-Servomotor | × | 3 |
| 9V Batterieclip | × | 1 |
Benötigte Werkzeuge und Maschinen
- 3D-Drucker (generisch)
- Lötkolben (generisch)
Apps und Online-Dienste
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
Über das Projekt
Überblick
Dieses Projekt demonstriert, wie man einen TinyML-Spracherkennungs-Detektor auf dem Arduino Nano 33 BLE Sense mit Edge Impulse Studio erstellt. Das Gerät lauscht kontinuierlich nach drei gesprochenen Wörtern – „si“ (Italienisch), „oui“ (Französisch) und „yes“ (Englisch) – und aktiviert die entsprechende Flagge, sobald ein Wort erkannt wird.
Der Workflow umfasst:
- Datensatz-Erstellung und Sampling
- Modell-Design und Training
- Performance-Evaluierung
- Hardware-spezifische Optimierung mit dem EON Tuner
- Deployment und Integration mit servogesteuerten Flaggen
Sampling & Datensatz-Erstellung
Der Datensatz enthält 30 Minuten Aufnahmen: 10 Minuten pro Zielwort plus 3 Minuten Umgebungs-Hintergrundgeräusche. Jeder 1-Sekunden-Clip erfasst eine einzelne Äußerung, und alle Dateien werden in Edge Impulse entsprechend beschriftet.
Hintergrund-Samples helfen dem Modell, Sprache von Nicht-Sprache zu unterscheiden.
Modell-Design
Edge Impulse automatisiert die meisten Vorverarbeitungsschritte. Audio wird in eine Zeitreihe umgewandelt, fensterweise verarbeitet und mittels MFCC-Features (Mel-Frequency Cepstral Coefficients) transformiert. Ein leichtes CNN (Convolutional Neural Network) klassifiziert dann jedes Fenster in eine von vier Klassen: „si“, „oui“, „yes“ oder Hintergrund.
Training & Arduino-Optimierung
Der EON Tuner erkundet automatisch Dutzende Modellkonfigurationen und bewertet jede nach Genauigkeit, Inferenzzeit, RAM- und Flash-Verbrauch. Für dieses Projekt wurde das schnellste Modell unter den Top-5-Genauigkeiten ausgewählt.
Testen
Nach dem Training bestätigte ein frischer Testdatensatz robuste Leistung. Die Klassifikationskonfidenz lag durchgängig über 80 % für die Zielwörter.
Deployment
Das Deployment erfolgt vereinfacht über die Edge Impulse Arduino-Bibliothek. Die generierte Header-Datei wird in die Arduino IDE importiert und dann angepasst, um drei SG90-Servos anzusteuern, die Flaggen anzeigen.
Code-Übersicht
Der Quellcode (auf GitHub verfügbar) erweitert das Edge Impulse Template um Servo-Steuerlogik. Wichtige Ergänzungen:
- Integration von
Adafruit_PWMServoDriver.hfür PCA9685 PWM-Steuerung. - Eine
servos_selector-Funktion, die die korrekte Flagge basierend auf der Modellkonfidenz aktiviert. - Bedingte Logik, die
servos_selectorauslöst, wenn eine Klassifikation 80 % Konfidenz überschreitet.
void servos_selector(int iter){
unsigned long time_now = millis();
if (time_now - time_was > 2000){
time_was = time_now;
switch (iter){
case 0: // Italienisch
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: // Französisch
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: // Englisch
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;
}
}
}
Schaltungsdesign
Der Mikrocontroller wird von einer 9V-Batterie gespeist und nutzt ein PCA9685-Board, um drei SG90-Servos anzusteuern. Der 12V-Pin des Boards ist mit der Batterie verbunden, während die PWM-Ausgänge die Servos über die I2C-Schnittstelle des PCA9685 ansteuern.
Mit Hardware, Software und Datenpipeline ist der TinyML-Spracherkennungs-Detektor einsatzbereit.
Code
Vollständiger Code auf GitHub: Repository-Link
CAD-Modelle und Gehäuse
Keine benutzerdefinierten Teile erforderlich.
Schaltpläne
Fritzing-Datei: languagedetection_9RxXhRX5sj.fzz
Herstellungsprozess
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- MobBob: Eigenen Arduino-Roboter bauen, per Android-Smartphone steuern
- Audio-reaktive Schreibtischlampe mit Arduino Nano bauen
- NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
- DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau