Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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

Необходимые инструменты

Программное обеспечение и сервисы

О проекте

Обзор

Этот проект демонстрирует создание TinyML-детектора языка на Arduino Nano 33 BLE Sense с использованием Edge Impulse Studio. Устройство непрерывно слушает три слова — «si» (итальянский), «oui» (французский) и «yes» (английский) — и поднимает соответствующий флаг при распознавании.

Рабочий процесс включает:

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Итоговый стенд: три сервопривода с флагами стран

Сбор датасета

Датасет содержит 30 минут записей: по 10 минут на каждое целевое слово плюс 3 минуты фонового шума. Каждый 1-секундный клип фиксирует одно произношение, все файлы размечены в Edge Impulse.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Размеченные семплы в Edge Impulse Studio

Фоновые семплы помогают модели отличать речь от безречевых звуков.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Примеры фоновых записей

Архитектура модели

Edge Impulse автоматизирует большинство этапов предобработки. Аудио преобразуется в временной ряд, окнамируется и трансформируется в MFCC-признаки. Лёгкая CNN классифицирует каждое окно на один из четырёх классов: «si», «oui», «yes» или фон.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Визуализация MFCC и архитектура сети

Обучение и оптимизация под Arduino

EON Tuner автоматически перебирает десятки конфигураций модели, оценивая каждую по точности, времени инференса, потреблению RAM и Flash. Для проекта выбрана самая быстрая модель среди топ-5 по точности.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Результаты подбора модели EON Tuner

Тестирование

После обучения на свежей тестовой выборке подтверждена высокая производительность. Уверенность классификации стабильно превышала 80% для целевых слов.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Результаты тестирования на независимой выборке

Развёртывание

Развёртывание упрощено через библиотеку Edge Impulse для Arduino. Сгенерированный заголовочный файл добавляется в Arduino IDE, затем дорабатывается для управления тремя сервоприводами SG90, поднимающими флаги.

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Плата с PCA9685 и тремя SG90
TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Устройство в напечатанном корпусе

Обзор кода

Исходный код (доступен на GitHub) расширяет шаблон Edge Impulse логикой управления сервоприводами. Ключевые дополнения:

  1. Интеграция Adafruit_PWMServoDriver.h для PWM-управления через PCA9685.
  2. Функция servos_selector, активирующая нужный флаг на основе уверенности модели.
  3. Условная логика, вызывающая 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-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
Схема подключения: Nano 33 BLE Sense, PCA9685, 3×SG90, батарея 9 В

С готовым железом, ПО и конвейером данных TinyML-детектор языка готов к работе.

Исходный код

Репозиторий на GitHub

Печатные платы и корпуса

Кастомные детали для 3D-печати доступны в репозитории проекта.

Схемы

Файл схемы: languagedetection_9RxXhRX5sj.fzz (Fritzing)

TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse

Производственный процесс

  1. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  2. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  3. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  4. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  5. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  6. Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
  7. MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
  8. Сборка аудиореактивной настольной лампы на Arduino Nano
  9. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
  10. Своё рулевое управление (джойстик) для игр на Arduino