Detector de Idiomas TinyML com Edge Impulse no Arduino Nano 33 BLE Sense
Componentes e Materiais
| Arduino Nano 33 BLE Sense | ×1 |
| Controlador Proporcional de Válvula PCA9685 8 Canais 8W 12V FET Driver com Interface I2C (National Control Devices) | ×1 |
| Micro-servo SG90 | ×3 |
| Conector de Bateria 9V | ×1 |
Ferramentas e Máquinas Necessárias
- Impressora 3D (genérica)
- Ferro de Solda (genérico)
Aplicativos e Serviços Online
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
Sobre o Projeto
Visão Geral
Este projeto demonstra como construir um detector de idiomas TinyML no Arduino Nano 33 BLE Sense usando o Edge Impulse Studio. O dispositivo escuta continuamente três palavras faladas — "sim" (italiano), "oui" (francês) e "yes" (inglês) — e aciona a bandeira correspondente quando uma palavra é detectada.
O fluxo de trabalho compreende:
- Criação e amostragem do conjunto de dados
- Design e treinamento do modelo
- Avaliação de desempenho
- Otimização específica para hardware com o EON Tuner
- Implantação e integração com bandeiras controladas por servos
Amostragem e Criação do Conjunto de Dados
O conjunto de dados contém 30 minutos de gravações: 10 minutos por palavra-alvo mais 3 minutos de ruído de fundo ambiente. Cada clipe de 1 segundo captura uma única fala, e todos os arquivos são rotulados adequadamente no Edge Impulse.
Amostras de fundo ajudam o modelo a diferenciar fala de não-fala.
Design do Modelo
O Edge Impulse automatiza a maioria das etapas de pré-processamento. O áudio é convertido em série temporal, janelado e transformado usando características MFCC. Uma CNN leve então classifica cada janela em uma de quatro classes: "sim", "oui", "yes" ou fundo.
MFCCs de amostra e a arquitetura da rede são visualizados no painel de treinamento.
Treinamento e Otimização para Arduino Nano 33 BLE Sense
O EON Tuner explora automaticamente dezenas de configurações de modelo, pontuando cada uma por precisão, tempo de inferência, uso de RAM e flash. Para este projeto, o modelo mais rápido entre os 5 melhores em precisão foi selecionado.
Testes
Após o treinamento, um novo conjunto de teste confirmou desempenho robusto. A confiança de classificação consistentemente excedeu 80% para as palavras-alvo.
Implantação
A implantação é simplificada via biblioteca Arduino do Edge Impulse. O arquivo de cabeçalho gerado é importado na Arduino IDE, então personalizado para controlar três servos SG90 que exibem bandeiras.
Visão Geral do Código
O código-fonte (disponível no GitHub) estende o template do Edge Impulse com lógica de controle de servo. Adições principais incluem:
- Integração de
Adafruit_PWMServoDriver.hpara controle PWM do PCA9685. - Função
servos_selectorque aciona a bandeira correta baseada na confiança do modelo. - Lógica condicional que dispara
servos_selectorquando uma classificação excede 80% de confiança.
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;
}
}
}
Design do Circuito
O microcontrolador é alimentado por uma bateria de 9V e usa uma placa PCA9685 para acionar três servos SG90. O pino de 12V da placa é conectado à bateria, enquanto as saídas PWM acionam os servos via interface I2C do PCA9685.
Com o hardware, software e pipeline de dados em ordem, o detector de idiomas TinyML está pronto para implantação.
Código
Repositório GitHub: Código completo do projeto
Peças Personalizadas e Gabinetes
Arquivos de impressão 3D disponíveis no repositório do projeto.
Esquemáticos
Arquivo Fritzing: languagedetection_9RxXhRX5sj.fzz
Processo de manufatura
- Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
- Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
- Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
- Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
- MobBob: Construa Seu Próprio Robô Arduino, Controlado via Smartphone Android
- Lâmpada de Mesa Reativa a Áudio com Arduino Nano
- Jogo Pong Neon em Matriz NeoPixel com Arduino Nano
- Volante Joystick Arduino Personalizado para Jogos