TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Компоненты и материалы
| Arduino Nano 33 BLE Sense | ×1 |
| PCA9685 8-канальный драйвер пропорциональных клапанов I2C (National Control Devices) | ×1 |
| Микросервопривод SG90 | ×3 |
| Клемма для батареи 9 В (кронка) | ×1 |
Необходимые инструменты
- 3D-принтер (любой)
- Паяльная станция
Программное обеспечение и сервисы
- Edge Impulse Studio
- Arduino IDE
- Autodesk Fusion 360
О проекте
Обзор
Этот проект демонстрирует создание TinyML-детектора языка на Arduino Nano 33 BLE Sense с использованием Edge Impulse Studio. Устройство непрерывно слушает три слова — «si» (итальянский), «oui» (французский) и «yes» (английский) — и поднимает соответствующий флаг при распознавании.
Рабочий процесс включает:
- Сбор и разметку датасета
- Проектирование и обучение модели
- Оценку качества
- Оптимизацию под железо с помощью EON Tuner
- Развёртывание и интеграцию с сервоконтролируемыми флагами
Сбор датасета
Датасет содержит 30 минут записей: по 10 минут на каждое целевое слово плюс 3 минуты фонового шума. Каждый 1-секундный клип фиксирует одно произношение, все файлы размечены в Edge Impulse.
Фоновые семплы помогают модели отличать речь от безречевых звуков.
Архитектура модели
Edge Impulse автоматизирует большинство этапов предобработки. Аудио преобразуется в временной ряд, окнамируется и трансформируется в MFCC-признаки. Лёгкая CNN классифицирует каждое окно на один из четырёх классов: «si», «oui», «yes» или фон.
Обучение и оптимизация под Arduino
EON Tuner автоматически перебирает десятки конфигураций модели, оценивая каждую по точности, времени инференса, потреблению RAM и Flash. Для проекта выбрана самая быстрая модель среди топ-5 по точности.
Тестирование
После обучения на свежей тестовой выборке подтверждена высокая производительность. Уверенность классификации стабильно превышала 80% для целевых слов.
Развёртывание
Развёртывание упрощено через библиотеку Edge Impulse для Arduino. Сгенерированный заголовочный файл добавляется в Arduino IDE, затем дорабатывается для управления тремя сервоприводами SG90, поднимающими флаги.
Обзор кода
Исходный код (доступен на GitHub) расширяет шаблон Edge Impulse логикой управления сервоприводами. Ключевые дополнения:
- Интеграция
Adafruit_PWMServoDriver.hдля PWM-управления через PCA9685. - Функция
servos_selector, активирующая нужный флаг на основе уверенности модели. - Условная логика, вызывающая
servos_selectorпри уверенности > 80%.
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;
}
}
}
Электрическая схема
Микроконтроллер питан от кронки 9 В и использует плату PCA9685 для управления тремя сервоприводами SG90. Вывод 12 В платы подключён к батарее, PWM-выходы управляют сервоприводами через I2C-интерфейс PCA9685.
С готовым железом, ПО и конвейером данных TinyML-детектор языка готов к работе.
Исходный код
Печатные платы и корпуса
Кастомные детали для 3D-печати доступны в репозитории проекта.
Схемы
Файл схемы: languagedetection_9RxXhRX5sj.fzz (Fritzing)
Производственный процесс
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
- Сборка аудиореактивной настольной лампы на Arduino Nano
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Своё рулевое управление (джойстик) для игр на Arduino