Найти в Дзене
Электроника, ESP32, Arduino

ОБУЧАЕМЫЙ автономный модуль голосового управления

Данный модуль может не только распознавать 121 встроенную команду на английском языке, но и дает возможность использовать 17 пользовательских командных слов, в качестве которых можно использовать любые звуки: свист, щелчки, кошачье мяуканье. Распознавание происходит полностью в автономном режиме - подключение к сети Интернет не требуется. Модуль выпускается компанией DFROBOT. Спецификация: Совместимость с контроллерами Arduino: Arduino UNO, Arduino Leonardo, Arduino MEGA, контроллерами серии FireBeetle, Raspberry Pi, ESP32 (логика с уровнями 3,3В/5В) Модуль оснащен 2 микрофонами, что делает процесс распознавания относительно точным и надежным даже в шумных условиях. На плате есть встроенный динамик (SPK1) и возможность подключения внешнего динамика (разъем SPK1). Для связи в внешним миром и подключения питания в комплекте есть кабель. Перед началом работы необходимо скачать библиотеку DFRobot_DF2301Q Открываем среду Arduino IDE Скетч -> Подключить библиотеку -> Добавить .ZIP библиотек
Оглавление

Данный модуль может не только распознавать 121 встроенную команду на английском языке, но и дает возможность использовать 17 пользовательских командных слов, в качестве которых можно использовать любые звуки: свист, щелчки, кошачье мяуканье. Распознавание происходит полностью в автономном режиме - подключение к сети Интернет не требуется.

Модуль выпускается компанией DFROBOT.

-2

Спецификация:

  • Рабочее напряжение: 3,3 - 5В;
  • Максимальный рабочий ток: ≤370 мА (5В);
  • Связь: I2C/UART;
  • Адрес I2C: 0x64;
  • Фиксированная команда: 121;
  • Фиксированная команда пробуждения: 1;
  • Пользовательская команда: 17;
  • Команда активации обучения: 1;
  • Чувствительность встроенного микрофона: -28 дБ;
  • Размер модуля: 49×32мм.

Совместимость с контроллерами Arduino: Arduino UNO, Arduino Leonardo, Arduino MEGA, контроллерами серии FireBeetle, Raspberry Pi, ESP32 (логика с уровнями 3,3В/5В)

https://wiki.dfrobot.com/SKU_SEN0539-EN_Gravity_Voice_Recognition_Module_I2C_UART
https://wiki.dfrobot.com/SKU_SEN0539-EN_Gravity_Voice_Recognition_Module_I2C_UART

Модуль оснащен 2 микрофонами, что делает процесс распознавания относительно точным и надежным даже в шумных условиях. На плате есть встроенный динамик (SPK1) и возможность подключения внешнего динамика (разъем SPK1). Для связи в внешним миром и подключения питания в комплекте есть кабель.

-4

Установка библиотеки:

Перед началом работы необходимо скачать библиотеку DFRobot_DF2301Q

GitHub - DFRobot/DFRobot_DF2301Q
-5

Открываем среду Arduino IDE

Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку

-6

Указываем путь к скачанному с GitHub архиву.

Схема подключения:

Протестируем модуль совместно с платой Arduino NANO. Взаимодействовать с платой будем по протоколу I2C. Перед подключением переключатель интерфейсов на плате переводим в левое положение. Для голосовых ответов будем использовать встроенный динамик, соответственно переключатель выхода динамика переводим в правое положение.

-7

В плате Arduino NANO (UNO) интерфейс I2C находится на контактах:

  • A4 (SDA) <-> контакт D/T
  • A5 (SCL) <-> контакт C/R

питание:

  • +5V <-> VCC
  • GND <-> GND
-8
-9

Заливка тестового примера:

-10

Открываем монитор порта на скорости 115200 и будим плату фразой

  • "Hello robot"

Плата нам отвечает: "Yes Im here" (Да, я здесь), выходит из спящего режима, и на ней загорается синий светодиод.

-11

В монитор порта вываливается ID принятой команды.

-12

Пока горит этот светодиод, плата слушает окружающие звуки и пытается уловить в них голосовые сообщения. Комментарии в тестовом примере я перевел на русский язык.

Все примеры кода будут доступны по ссылке в описании в конце статьи.

-13

Модуль имеет возможность изменить уровень громкости ответа(строка_16), отключить ответ(строка_18), изменить время перехода в спящий режим(строка_20). В режиме работы по протоколу I2C можно разбудить модуль не командой пробуждения, а непосредственно из программы(строка_23).

В основном цикле состояние модуля вычитывается методом: .getCMDID();

-14

На выходе однобайтовое число (без знака, тип uint8_t).

После пробуждения можно использовать 121 встроенную команду.

-15
-16
-17

Список весьма внушительный - на все случаи жизни. Подойдет как для робота, так и для умного дома. Единственный минус: произносить все фразы нужно на английском языке. Впрочем, если вы занимаетесь программированием, не думаю, что это большая проблема, тем более, что фразы можно прослушать в любом онлайн-переводчике, а изучение иностранного языка вреда еще никому не приносило.

Джентльмены удачи. А зачем нам английский?
Джентльмены удачи. А зачем нам английский?

"Ломаный" английский язык плата также отлично понимает, так что уровня Крамарова хватит за глаза и за уши.

Управление светодиодом с помощью встроенных голосовых команд

Светодиод через токоограничивающий резистор номиналом 220 Om подключаем к ноге D2.

-19

Поскольку модуль возвращает однобайтовое число, написание программы сводится к уверенному знанию единственной конструкции "switch - case".

Разберем пример программы, которая по встроенной голосовой команде

  • "Turn on the light" включает светодиод;
  • "Turn off the light" выключает светодиод.

Ищем в табличке ID этих команд:

-20

Код будет выглядеть следующим образом:

-21

Если потребуется управлять еще чем-нибудь, добавляем нужное количество GPIO и конструкций "case".

Голосовой ассистент, который хочется именно тебе, а не тот, который купил.

Встроенная в плату возможность обучения позволяет сделать голосового ассистента, который может отвечать на любые команды.

Например:

  • будить плату будет слово "Афина";
  • команда "Включи свет" - будет включать светодиод;
  • команда "Выключи свет" - будет выключать светодиод.

Для корректного распознавания голосовой команды она должна иметь достаточную длительность: если будете подбирать красивое женское имя типа "Ася" или "Дуся", лучше добавить "Привет Ася", "Привет Дуся". Можно использовать и другие слова, но плата отвечает женским голосом, поэтому обозвать её например "Д.Ж.А.Р.В.И.С" ну.... такое себе....

Что-либо кодить не придется, достаточно пообщаться с платой на английском языке. Скетч для отладки подойдет из предыдущего примера со светодиодом.

Какие ID будет возвращать плата при реакции на пользовательские команды, смотрим в этой таблице:

-22

Пользовательское слово пробуждения вернет 1, остальные пользовательские команды числа 5...21.

В процессе обучения плата также будет возвращать ответы. Их ID указаны в этой таблице:

-23

Разучиваем пользовательское слово пробуждения

Все, что выделено жирным шрифтом в этом разделе, нужно будет произносить вслух. Плата отвечает на английском языке через динамик.

  • будим плату с помощью встроенной команды "Hello robot";
  • произносим фразу "Learning wake word";
  • плата ответит: " Learning now, be quiet, please say the wake word to be learned!" (нужна тишина, и сейчас начнётся обучение);
  • произносим "Афина";
  • плата ответит: "Learning successful, please say it again!" (я усё поняла, повторите фразу снова)
  • произносим "Афина";
  • плата ответит: "Learning successful, please say it again!" (я усё поняла, повторите фразу снова);
  • произносим "Афина";
  • плата сообщит: "Ok, learning completed!" (обучение завершено).

Ждем 15 секунд, пока плата уснет, и пробуем разбудить её командой "Афина".

-24

Плата возвращает 1. Теперь плату можно будить пользовательской командой "Афина" (ID=1) и встроенной командой "Hello robot" (ID=2).

Изучение пользовательских команд

Изучение пользовательских команд идет подряд от первой до семнадцатой. Если все 17 команд не нужны, можно в любой момент прекратить обучение командой "Exit learning". Нам нужно всего две, поэтому алгоритм обучения будет такой:

  • будим плату любой командой встроенной "Hello robot" или той, которую уже выучили: "Афина";
  • произносим фразу "Learning command word";
  • плата ответит: "Learning now, be quiet, please learn the command word according to the prompt! Please say the first command to be learned!" (обучение запущено, назовите первую команду);
  • произносим "Включи свет";
  • плата ответит: "Learning successful, please say it again!" (Обучение прошло успешно, повторите, пожалуйста!);
  • произносим "Включи свет";
  • плата ответит: "Learning successful, please say it again!" (Обучение прошло успешно, повторите, пожалуйста!)
  • произносим "Включи свет";
  • плата ответит: "OK, learned the first command successfully! Please say the second command to be learned!" (ОК, первая команда успешно изучена! Пожалуйста, произнесите вторую команду, которую нужно изучить!)
  • аналогично повторяем три раза вторую команду "Выключи свет"
  • поскольку больше команд использовать не планируется, произносим "Exit learning"

Открываем монитор порта в среде Arduino IDE и тестируем:

  • "Афина";
  • "Включи свет";
  • "Выключи свет";
-25

Осталось подправить скетч и "умная колонка" с поддержкой русского языка для управления светодиодом готова:

-26

Ходят слухи, что обученные таким образом модули голосового управления могут распознавать только голос человека, который её обучал, но по факту это оказалась не совсем так. Результаты эксперимента: "Учил один человек, а управлял другой" можете посмотреть в видео в конце этой статьи. Распознавать голос посторонних людей этому модулю вполне по силам (достаточно сохранять скорость произношения и интонацию).

Удаление пользовательских команд

Если потребуется изменить набор пользовательских команд или слово пробуждения, пользуемся следующим голосовым алгоритмом:

  • будим плату встроенной "Hello robot" или пользовательской командой;
  • произносим "I want to delete";
  • плата ответит: "Do you want to delete the learned wake word or command word?"

Далее возможны следующие голосовые варианты управления:

  • "Delete command word" - Удаляет все пользовательские команды.
  • "Delete wake word" - Удаляет слово пробуждения.
  • "Delete all" - Удаляет и слово пробуждения, и пользовательские команды.
  • "Exit deleting" - выйти из режима удаления.

Теперь плату можно обучать новым голосовым сообщениям.

Резюме:

Возможность изменять набор голосовых команд делает данный модуль голосового управления достаточно универсальным для применения. Он подойдет не только для кружков робототехники, но и для умного дома. В помещении может находиться разное количество источников освещения, кондиционер (может быть, а может и не быть), телевизор, вентилятор и.т.д. и.т.п. 17 настраиваемых голосовых команд в кипе со 121 встроенной могут решить практически любую задачу голосового управления. Два микрофона обеспечивают хорошую чувствительность: c расстояния 4-х метров даже настраиваемые команды распознавались у меня без каких-либо проблем. Естественно, что не нужно заталкивать в каждую лампочку такой модуль. Можно подключить его к ESP8266/ESP32 и отсылать команды через домашнюю сеть Wi-Fi (подключение к сети Интернет при этом не потребуется).

Краткую инструкцию по настройке и результаты тестирования можно посмотреть в этом видео:

Коды примеров из статьи можно скачать тут

Code_DF2301Q.zip

Ссылка на документацию (английский) DF2301Q

SKU_SEN0539-EN_Gravity_Voice_Recognition_Module_I2C_UART-DFRobot

Купить модуль можно тут:

Модуль распознавания голоса оффлайн (tinyML) для micro:bit / Arduino / ESP32 - I2C & UART erid: 2VtzqvBgBaA
Модуль распознавания голоса оффлайн (tinyML) для micro:bit / Arduino / ESP32 - I2C & UART erid: 2VtzqvBgBaA

https://ozon.onelink.me/SNMZ/s8s8lhjb

Модуль распознавания голоса оффлайн (tinyML) для micro:bit / Arduino / ESP32 - I2C & UART купить на OZON по низкой цене (1726168752)

Реклама. ИП Семëнова ИНН 780518548815

Оглавление канала доступно по этой ссылке:

Всем удачи!