Detector de idiomas TinyML con Edge Impulse en Arduino Nano 33 BLE Sense
Componentes y suministros
| Arduino Nano 33 BLE Sense | ×1 |
| Controlador PCA9685 8 canales 8W 12V FET para válvulas proporcionales con interfaz I2C (National Control Devices) | ×1 |
| Micro-servomotor SG90 | ×3 |
| Conector para pila 9V | ×1 |
Herramientas y máquinas necesarias
- Impresora 3D (genérica)
- Soldador (genérico)
Aplicaciones y servicios online
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
Sobre el proyecto
Resumen
Este proyecto demuestra cómo construir un detector de idiomas TinyML en el Arduino Nano 33 BLE Sense usando Edge Impulse Studio. El dispositivo escucha continuamente tres palabras habladas: "si" (italiano), "oui" (francés) y "yes" (inglés), y activa la bandera correspondiente cuando detecta una palabra.
El flujo de trabajo comprende:
- Creación y muestreo del conjunto de datos
- Diseño y entrenamiento del modelo
- Evaluación del rendimiento
- Optimización específica para hardware con EON Tuner
- Despliegue e integración con banderas controladas por servos

Muestreo y creación del dataset
El conjunto de datos contiene 30 minutos de grabaciones: 10 minutos por palabra objetivo más 3 minutos de ruido de fondo ambiental. Cada clip de 1 segundo captura una única emisión, y todos los archivos se etiquetan correspondientemente en Edge Impulse.

Las muestras de fondo ayudan al modelo a diferenciar el habla del no-habla.

Diseño del modelo
Edge Impulse automatiza la mayoría de los pasos de preprocesamiento. El audio se convierte en serie temporal, se ventanea y se transforma usando características MFCC. Una CNN ligera clasifica cada ventana en una de cuatro clases: "si", "oui", "yes" o fondo.

Los MFCCs de muestra y la arquitectura de la red se visualizan en el panel de entrenamiento.
Entrenamiento y optimización para Arduino Nano 33 BLE Sense
El EON Tuner explora automáticamente docenas de configuraciones de modelo, puntuando cada una por precisión, tiempo de inferencia, uso de RAM y flash. Para este proyecto, se seleccionó el modelo más rápido entre los 5 de mayor precisión.

Pruebas
Tras el entrenamiento, un conjunto de prueba fresco confirmó un rendimiento robusto. La confianza de clasificación superó consistentemente el 80% para las palabras objetivo.

Despliegue
El despliegue se agiliza mediante la librería Arduino de Edge Impulse. El archivo de cabecera generado se añade al Arduino IDE y se personaliza para controlar tres servos SG90 que muestran banderas.


Resumen del código
El código fuente (disponible en GitHub) extiende la plantilla de Edge Impulse con lógica de control de servos. Adiciones clave:
- Integración de
Adafruit_PWMServoDriver.hpara control PWM del PCA9685. - Función
servos_selectorque activa la bandera correcta según la confianza del modelo. - Lógica condicional que dispara
servos_selectorcuando una clasificación supera el 80% de confianza.
void servos_selector(int iter){
unsigned long time_now = millis();
if (time_now - time_was > 2000){
time_was = time_now;
switch (iter){
case 0: // Italiano
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: // Francés
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: // Inglés
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;
}
}
}
Diseño del circuito
El microcontrolador se alimenta con una pila de 9V y usa una placa PCA9685 para impulsar tres servos SG90. El pin de 12V de la placa se conecta a la pila, mientras que las salidas PWM impulsan los servos mediante la interfaz I2C del PCA9685.

Con el hardware, software y canal de datos en su lugar, el detector de idiomas TinyML está listo para desplegarse.
Código
Repositorio GitHub: Código completo del proyecto
Piezas personalizadas y envolventes
Diseños 3D disponibles en el repositorio del proyecto.
Esquemáticos
Archivo Fritzing: languagedetection_9RxXhRX5sj.fzz
Proceso de manufactura
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing
- MobBob: Robot Arduino Impreso en 3D, Controlado por Smartphone Android
- Construir una lámpara de escritorio reactiva al audio con Arduino Nano
- Pong Neón en Matriz NeoPixel con Arduino Nano
- Construye un volante joystick personalizado con Arduino para gaming
- Arduino 101: Construye un Podómetro con Sensor DHT11 y Pantalla LCD