Управление RGB-светом по голосовым командам с TinyML на Arduino Nano 33 BLE Sense
Компоненты и материалы
| Arduino Nano 33 BLE Sense | ×1 |
Программное обеспечение и сервисы
- Edge Impulse Studio (обучение модели)
О проекте
Проект демонстрирует встраиваемое машинное обучение (TinyML) для распознавания ключевых слов на микроконтроллере. Arduino Nano 33 BLE Sense оснащен микрофоном, IMU, датчиками среды и жестами. Микроконтроллер nRF52840 (64 МГц, 1 МБ Flash, 256 КБ ОЗУ) позволяет запускать нейросеть локально. Встроенный RGB-светодиод показывает распознанный цвет.
Подготовка Edge Impulse
- Создать проект в Edge Impulse, установить CLI.
- Прошить фирмварь Edge Impulse на плату (двойной клик по Reset → bootloader →
flash_windows.bat). - Запустить
edge-impulse-daemon, привязать устройство к проекту.
Сбор датасета
Классы: «on», «off», «red», «green», «blue». Записано по ~1 минуте каждого слова с интервалом 1–2 сек. Добавлены фоновый шум и неизвестные слова из готовых наборов Edge Impulse. Датасет сбалансирован 80/20 (train/test).
Обучение модели
- Вход: аудио 1 сек, шаг 500 мс.
- Блок MFCC (мел-частотные кепстральные коэффициенты) для признаков.
- Keras-нейросеть: порог уверенности 0.70, аугментация (шум, маскирование полос).
Развертывание на плате
Модель экспортируется как Arduino-библиотека, добавляется в IDE, компилируется и загружается. Плата непрерывно сэмплирует звук, классифицирует и при уверенности > 0.7 выполняет действие: включает/выключает LED или меняет цвет.
Основной скетч (RGBLEDKeywordDetection)
#include <PDM.h>
#include <keyword_detection_inference.h>
#include <map>
#define CONFIDENCE_THRESHOLD 0.7
#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3
static const uint32_t colors[] = {0x00ff0000, 0x0000ff00, 0x000000ff}; // R,G,B
enum Actions { LED_ON=1, LED_OFF=0, LED_RED=2, LED_GREEN=3, LED_BLUE=4, NONE=5 };
enum Functions { CHANGE_LED_ON_OFF=0, CHANGE_LED_COLOR=1, CHANGE_LED_NONE=2 };
static const uint8_t redPin=22, greenPin=23, bluePin=24;
const std::map<Actions, Functions> actionToFunctionMap = { ... };
const std::map<const char*, Actions> labelToActionMap = {
{"on", LED_ON}, {"off", LED_OFF}, {"red", LED_RED},
{"green", LED_GREEN}, {"blue", LED_BLUE}, {"unknown", NONE}, {"noise", NONE}
};
// PDM callback, inference loop, performAction(), setPixelColor()...
Код использует PDM для аудио, двойную буферизацию, непрерывный вывод классификатора. Функция performAction маппит метку класса на действие с LED. Полный код в репозитории.
Производственный процесс
- Безопасность промышленного IoT: ключевые тренды и лучшие практики на 2020 год
- Edge & Cloud Computing в IoT: краткий эволюционный обзор
- Почему Edge Computing критичен для успеха IoT
- Kontron KBox A‑150‑WKL: высокопроизводительный низкоэнергетический IoT Edge PC для промышленной автоматизации
- Edge-вычисления: ускорение внедрения AI на периферии сети
- Четыре проверенных шага к успеху пограничных вычислений в умных фабриках
- Microsoft анонсирует Azure Edge Zones для питания 5G IoT и ИИ нагрузок
- Почему открытый исходный код движет инновациями на периферии — важная электронная книга
- Ультрачувствительная система обнаружения химического оружия для низкоуровневых угроз
- Почему газоанализаторы должны быть в идеальном состоянии: 3 критические причины