TinyML Taaldetector met Edge Impulse op Arduino Nano 33 BLE Sense
Onderdelen en benodigdheden
| Arduino Nano 33 BLE Sense | × | 1 |
| National Control Devices PCA9685 8-kanaals 8W 12V FET Driver Proportionele Klep Controller met I2C-interface | × | 1 |
| SG90 Micro-servomotor | × | 3 |
| 9V Batterijclip | × | 1 |
Benodigde tools en machines
- 3D-printer (generiek)
- Solderbout (generiek)
Apps en online diensten
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
Over dit project
Overzicht
Dit project demonstreert hoe je een TinyML-taaldetector bouwt op de Arduino Nano 33 BLE Sense met Edge Impulse Studio. Het apparaat luistert continu naar drie gesproken woorden — "si" (Italiaans), "oui" (Frans) en "yes" (Engels) — en activeert de bijbehorende vlag wanneer een woord wordt gedetecteerd.
De workflow omvat:
- Datasetcreatie en sampling
- Modelontwerp en training
- Prestatie-evaluatie
- Hardware-specifieke optimalisatie met de EON Tuner
- Implementatie en integratie met servogestuurde vlaggen
Sampling & Datasetcreatie
De dataset bevat 30 minuten opnames: 10 minuten per doelwoord plus 3 minuten omgevingsgeluid. Elke 1-seconde clip vangt een enkele uiting op, en alle bestanden zijn gelabeld in Edge Impulse.
Achtergrondmonsters helpen het model om spraak van niet-spraak te onderscheiden.
Modelontwerp
Edge Impulse automatiseert de meeste voorafverwerkingsstappen. Audio wordt omgezet naar een tijdreeks, in vensters verdeeld en getransformeerd met MFCC-karakteristieken. Een lichtgewicht CNN classificeert vervolgens elk venster in een van vier klassen: "si", "oui", "yes" of achtergrond.
Voorbeeld-MFCCs en de netwerkarchitectuur worden gevisualiseerd in het trainingsdashboard.
Training & Arduino-optimalisatie
De EON Tuner verkent automatisch tientallen modelconfiguraties, waarbij elke configuratie wordt beoordeeld op nauwkeurigheid, inferentietijd, RAM- en flash-gebruik. Voor dit project werd het snelste model geselecteerd onder de top-5 nauwkeurigheden.
Testen
Na training bevestigde een verse testset robuuste prestaties. Classificatievertrouwen overschreed consistent 80% voor de doelwoorden.
Implementatie
Implementatie is gestroomlijnd via de Edge Impulse Arduino-bibliotheek. Het gegenereerde header-bestand wordt in de Arduino IDE geplaatst en vervolgens aangepast om drie SG90-servos te besturen die vlaggen tonen.
Code-overzicht
De broncode (beschikbaar op GitHub) breidt de Edge Impulse-sjabloon uit met servo-besturingslogica. Belangrijke toevoegingen zijn:
- Integratie van
Adafruit_PWMServoDriver.hvoor PCA9685 PWM-besturing. - Een
servos_selectorfunctie die de juiste vlag activeert op basis van de vertrouwen van het model. - Conditionele logica die
servos_selectoractiveert wanneer een classificatie 80% vertrouwen overschrijdt.
void servos_selector(int iter){
unsigned long time_now = millis();
if (time_now - time_was > 2000){
time_was = time_now;
switch (iter){
case 0: // Italiaans
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: // Frans
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: // Engels
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;
}
}
}
Elektrisch schema
De microcontroller wordt gevoed door een 9V-batterij en gebruikt een PCA9685-bord om drie SG90-servos aan te sturen. De 12V-pin van het bord is verbonden met de batterij, terwijl de PWM-uitgangen de servos via de I2C-interface van de PCA9685 aansturen.
Met de hardware, software en datapipeline op zijn plaats is de TinyML-taaldetector klaar voor implementatie.
Code
Aangepaste onderdelen en behuizingen
Geen aangepaste onderdelen gespecificeerd.
Schema's
Fritzing-bestand: languagedetection_9RxXhRX5sj.fzz
Productieproces
- Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Een Arduino Iron Man bouwen: onderdelen, sensoren en stapsgewijze handleiding
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- DIY Arduino Luchtbevochtiger Controller met Relais – Veilige Hoogspanningsopstelling
- Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
- MobBob: Bouw Je Eigen Arduino Robot, Naadloos Bestuurd via Android Smartphone
- Een audio-reactieve bureaulamp bouwen met Arduino Nano
- NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
- Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
- Arduino 101: Bouw een teller met DHT11 sensor & LCD display