Голосовое управление ардуино без телефона
Модуль распознавания голоса - Voice Recognition Module V3.1 - это компактный и простой в управлении модуль распознавания речи. На базе данного модуля можно создавать проекты с голосовым управлением.
Для работы модуля его необходимо обучить - записать через микрофон собственные голосовые команды в энергонезависимое хранилище голосовых команд модуля. Вы можете записать до 80 голосовых команд (каждая команда не более 1,5 сек., примерно одно, максимум два слова) и все они будут храниться в модуле, даже после отключения питания. Стоит отметить, что записывать можно не только голос (слова), но и различные звуки.
У модуля есть два вида памяти: память хранилища (где голосовые команды просто хранятся) и память распознавателя (где голосовые команды участвуют в сравнении со звуком поступившем через микрофон).
Перед распознаванием голосовых команд их нужно загрузить из памяти хранилища в память распознавателя. Память распознавателя рассчитана на 7 голосовых команд, значит модуль способен одновременно сравнивать до 7 голосовых команд с поступающим звуковым сигналом.
Термины:
- Хранилище голосовых команд – энергонезависимая память состоящая из 80 ячеек, в каждую ячейку можно записать одну голосовую команду с текстовым комментарием.
- Распознаватель голосовых команд – основная часть модуля распознавания речи, блок содержащий ОЗУ из 7 ячеек, в каждую ячейку можно загрузить одну голосовую команду из хранилища голосовых команд модуля. Блок распознавателя сравнивает загруженные в него голосовые команды с поступающим звуковым сигналом.
- Номер ячейки – совпадает с номером записи. Память хранилища и память распознавателя разбита на ячейки. Одна ячейка может хранить одну запись (голосовую команду). Доступ к записям хранилища и записям распознавателя осуществляется по номерам ячеек.
- Обучение – процесс записи ваших голосовых команд в хранилище.
- Загрузка – копирование записанной голосовой команды из хранилища в распознаватель.
- Подпись – текстовый комментарий (до 10 символов) к голосовой команде записанной в хранилище.
- Группа – список содержащий 7 номеров ячеек хранилища. Поддерживаются, системные группы и пользовательские группы. Загрузка группы приводит к загрузке в распознаватель тех голосовых команд хранилища, номера которых указаны в группе.
Более подробно о группах читайте в разделе Группы.
Видео:
Спецификация:
- Точность распознавания речи: 99% (при идеальных условиях).
- Объем хранилища: до 80 голосовых команд длительностью не более 1,5 сек.
- Одновременное распознавание: до 7 голосовых команд.
- Напряжение питания: 4,5 … 5,5 В (постоянного тока).
- Потребляемый ток: до 40 мА.
- Цифровой Интерфейс: UART и GPIO уровень TTL 5В.
- Аналоговый интерфейс: разъем микрофона jack 3,5-мм моноканальный.
- Габариты платы: 31х50 мм.
Подключение:
- Колодка из 4 выводов (GND, VCC, RXD, TXD) используется для подключения модуля к аппаратной или программной шине UART Arduino.
В примерах библиотеки «VoiceRecognitionV3» используется программная шина UART, где вывод модуля RXD подключается к выводу 3 Arduino UNO, а вывод модуля TXD подключается к выводу 2 Arduino UNO (выводы можно переназначить в скетче). Вместо Arduino UNO можно использовать Piranha Uno.
- Колодка из 4 выводов (IN0, IN1, IN2, GND) может быть использована для загрузки требуемых групп голосовых команд из хранилища в распознаватель голосовых команд.
Более подробно о группах читайте в разделе Группы.
Все выводы IN-0. IN-2 внутрисхемно подтянуты до уровня Vcc.
По умолчанию, загрузка групп при помощи выводов IN-0. IN-2 отключена.
- Колодка из 8 выводов (OUT0-OUT6, GND) может быть использована для управления маломощными устройствами напрямую или мощными устройствами через реле, или силовые ключи.
Выходы OUT модуля, так же как и ячейки распознавателя, пронумерованы от 0 до 6. Опознание модулем голосовой команды приводит к соответствующей реакции выхода OUT модуля, номер которого совпадает с номером ячейки распознавателя содержащей опознанную голосовую команду.
По умолчанию выводы OUT реагируют на опознание голосовой команды отрицательным импульсом, но реакцию можно настроить так, что выводы будут менять, устанавливать, или сбрасывать логический уровень при каждом совпадении голосовой команды.
Питание:
Подробнее о модуле:
У модуля распознавания голоса - Voice Recognition Module V3.1 есть два вида памяти: память хранилища (где голосовые команды просто хранятся, даже после отключения питания) и память распознавателя (где голосовые команды участвуют в сравнении со звуком поступившем через микрофон).
Оба типа памяти состоят из ячеек, в одну ячейку записывается одна голосовая команда. Память хранилища голосовых команд состоит из 80 ячеек пронумерованных от 0 до 79, а память распознавателя голосовых команд состоит из 7 ячеек пронумерованных от 0 до 6. Значит модуль способен хранить до 80 голосовых команд, а одновременно сравнивать до 7 голосовых команд с поступающим звуковым сигналом.
Для работы модуля его необходимо обучить - записать столько голосовых команд в энергонезависимое хранилище, сколько требуется для Вашего проекта. В распознаватель, голосовые команды не записываются, а загружаются из памяти хранилища. Модуль позволяет указать номера ячеек хранилища, голосовые команды которых будут автоматически загружаться в распознаватель при подаче питания модуля.
Такая организации памяти позволяет разделить длинные голосовые команды (произношение которых занимает более 1,5 сек.) на две и более маленьких голосовых команд, которые будут подгружаться из хранилища в распознаватель по мере опознания модулем предыдущих частей длинной голосовой команды.
Пример:
- Предположим, мы желаем создать голосовое управление светом в коридоре, комнате и на кухне, а так же управление жалюзи в комнате и на кухне.
- Записываем в ячейки хранилища следующие голосовые команды: "свет", "жалюзи", "в коридоре", "в комнате" и "на кухне".
- Голосовые команды "свет" и "жалюзи" загружаем из хранилища в распознаватель изначально.
- При распознавании голосовой команды "свет", загружаем в распознаватель голосовые команды "в коридоре", "в комнате" и "на кухне".
- При распознавании голосовой команды "жалюзи", загружаем голосовые команды "в комнате" и "на кухне" (не загружая "в коридоре", если конечно у Вас там нет жалюзей).
- Таким образом Вы можете произнести "свет, в коридоре", "свет, в комнате", "свет, на кухне", "жалюзи, в комнате", "жалюзи, на кухне", а модуль сначала распознает первое слово ("свет" или "жалюзи"), а потом оставшуюся часть Вашей длинной голосовой команды.
- Осталось добавить в программу условие, что через определённое Вами время, после опознания команды "свет" или "жалюзи", они опять должны быть загружены в распознаватель. Так модуль перейдёт в состояние готовности принять следующую длинную голосовую команду, вне зависимости от того была ли корректно распознана предыдущая, или нет.
Еще одним плюсом наличия двух типов памяти модуля (хранилища и распознавателя), является возможность создания голосового управления несколькими людьми (до 7 человек) на одном модуле. Каждый человек записывает одинаковые слова голосовых команд в разные ячейки хранилища модуля, а так же записывает одно стартовое слово, например, "Окей дом". В таком случае в распознаватель изначально загружаем все голосовые команды "Окей дом" записанные разными людьми. Если кто то скажет "Окей дом, свет, в коридоре", то по номеру ячейки опознанной модулем голосовой команды "Окей дом", Вы сможете определить кем она была сказана и подгрузить в распознаватель следующие команды "свет" и "жалюзи" записанные именно этим человеком.
Управление модулем может осуществляться 2 способами:
Примеры:
В данном разделе содержатся примеры с использованием библиотеки VoiceRecognitionV3.
Пример обучения модуля:
Скетч примера поставляется вместе с библиотекой «VoiceRecognitionV3» и предназначен для записи голосовых команд в хранилище, загрузки голосовых команд из хранилища в распознаватель, удаления записанных голосовых команд, проверки состояния хранилища и распознавателя, получения комментариев к записям и проверки состояния модуля.
В мониторе последовательного порта появится таблица со списком команд, которые Вы можете вводить:
В ответ на команду «settings» (настройки) в мониторе последовательного порта появятся текущие настройки модуля:
Эти настройки означают следующее:
Baud rate | (скорость передачи данных по шине UART) | 9600 бит/сек. |
Output IO Mode | (режим работы выходов OUT) | Импульсный. |
Pulse Width | (ширина импульса) | 10 миллисекунд. |
Auto Load | (автозагрузка записей в распознаватель) | Отключена. |
Group control by external IO | (управление группами при помощи входов IN 0-2) | Отключено. |
6. Обучение модуля распознавания голоса. Введите строку «sigtrain 0 On».
Команда «sigtrain» указывает библиотеке что мы хотим записать голосовую команду, далее следует номер записи (ячейки) - «0» и завершает строку текстовое описание голосовой команды - «On». Вместо подписи «On» Вы можете ввести любое слово до 10 байт, например, «Вкл».
В ответ на команду «sigtrain 0 On» (sigtrain номер подпись) в мониторе последовательного порта появится надпись «Speak now» (говорите сейчас). Вам нужно произнести свою голосовую команду (это может быть любое слово, например «Включить»). Через пару секунд в мониторе последовательного порта появятся надпись «Speak again» (говорите снова) . Вам нужно повторно произнести свою голосовую команду.
Если обе произнесённые голосовые команды совпали, то в мониторе последовательного порта появятся надписи: «Record: 0 - Success» (Запись: 0 - Успех), «Record 0 - Trained» (Запись 0 - Обучена), «SIG: On» (Подпись: «On»).
Это означает что Ваша голосовая команда записана в хранилище голосовых команд.
Но если, по «мнению» модуля, голосовые команды не совпадают, то в мониторе последовательного порта появится надпись «Record: 0 - Cann’t matched» (Запись: 0 - не соответствует):
После чего опять появится надпись «Speak now» (говорите сейчас), а затем «Speak again» (говорите снова).
Вам нужно повторить голосовые команды пока запись не будет сохранена в хранилище.
Что такое подпись? Подпись - это текстовое описание голосовой команды. В нашем случае мы записали команду 0 с подписью «On». После завершения обучения модуль может отображать подпись произнесённой (распознанной) голосовой команды.
Во время обучения можно смотреть не в монитор последовательного порта, а на два светодиода расположенные рядом с разъёмом микрофона: SYS_LED (желтый) и STATUS_LED (красный).
- Желтый светодиод быстро мигает – приготовьтесь произнести голосовую команду.
- Красный светодиод горит – произнесите голосовую команду.
- Желтый светодиод мигает – приготовьтесь повторно произнести голосовую команду.
- Красный светодиод горит – произнесите голосовую команду.
- Оба светодиода мигают одновременно – голосовые команды совпали и записаны.
- Желтый светодиод медленно мигает – сравнение звукового сигнала с записями распознавателя.
7. Попробуйте обучить модуль следующей голосовой команде.
Ведите строку «sigtrain 1 Off». Эта строка указывает модулю что Вы собираетесь записать голосовую команду в 1 ячейку хранилища с подписью «Off». После появления надписей «Speak now» (говорите сейчас) и «Speak again» (говорите снова), произнесите слово «Отключить».
Таким образом Вы можете записать в хранилище до 80 голосовых команд (с номерами от 0 до 79). При записи голосовых команд не обязательно соблюдать очерёдность следования номеров ячеек памяти хранилища. Можно записать голосовую команду, сначала в 3 ячейку, потом в 0, а потом, например, в 27. Главное помнить, в какой ячейке какая команда, чтоб их случайно не затереть, вот для этого то мы и указываем подпись при записи голосовых команд. Но, если Вы уверены, что подпись Вам не нужна, то вводите строку «sigtrain номер» без подписи.
Для того что бы модуль, после обучения (записи голосовых команд), мог опознать голосовую команду, её нужно загрузить из хранилища в распознаватель. В распознаватель модуля можно загрузить до 7 из 80 записанных команд.
8. Загрузка голосовых команд из хранилища в распознаватель модуля. Введите строку «load 0 1» для загрузки записей из 0 и 1 ячеек хранилища в память распознавателя.
Процесс загрузки не удаляет записи из памяти хранилища, а копирует записи из указанных ячеек хранилища голосовых команд в память распознавателя по порядку.
В ответ на команду «load 0 1» (загрузить записи 0 и 1) в мониторе последовательного порта появятся надписи «Record 0 Loaded» (запись 0 загружена) и «Record 1 Loaded» (запись 1 загружена).
В память распознавателя можно загружать записи из любых ячеек хранилища голосовых команд, например, строка «load 3 21 17» приведёт к загрузке записей из ячеек 3, 21 и 17 хранилища голосовых команд, в память распознавателя, по порядку указания ячеек. То есть запись 3 хранилища скопируется в ячейку 0 распознавателя, запись 21 хранилища скопируется в ячейку 1 распознавателя, а запись 17 хранилища скопируется в ячейку 2 распознавателя. Но пока делать этого не стоит, ведь мы записали только 2 голосовые команды в память хранилища (ячейки 0 и 1) и загрузили их в в память распознавателя (так же ячейки 0 и 1).
- Распознана голосовая команда загруженная в ячейку распознавателя 0, запись загружена не группой, запись загружена из ячейки хранилища 0, голосовая команда имеет подпись «On».
- Распознана голосовая команда загруженная в ячейку распознавателя 1, запись загружена не группой, запись загружена из ячейки хранилища 1, голосовая команда имеет подпись «Off».
Пример управления светодиодом на плате Arduino:
Скетч примера поставляется вместе с библиотекой «VoiceRecognitionV3».
В мониторе последовательного порта появится следующий текст:
Так как в предыдущем примере Вы уже записали 2 команды в распознаватель, то произнесите их. Произнесение первой команды приведёт к включению светодиода на плате Arduino, а произнесение второй к выключению. При этом в мониторе последовательного порта будут отображаться те же сведения, что и при опознании голосовых команд в предыдущем примере:
- Распознана голосовая команда загруженная в ячейку распознавателя 0, запись загружена не группой, запись загружена из ячейки хранилища 0, голосовая команда имеет подпись «On».
- Распознана голосовая команда загруженная в ячейку распознавателя 1, запись загружена не группой, запись загружена из ячейки хранилища 1, голосовая команда имеет подпись «Off».
Остальные примеры включённые в библиотеку «VoiceRecognitionV3»:
Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_multi_cmd: раскрывает принцип работы с группами голосовых команд. Голосовая команда записанная в 0 ячейку хранилища (RECORD 0) используется для переключения между двумя группами голосовых команд. Первая группа содержит номера ячеек хранилища RECORD 0,1,2,3,4,5,6, а вторая группа содержит номера ячеек хранилища RECORD 0,7,8,9,10,11,12. Перед запуском данного примера необходимо обучить модуль (записать) голосовые команды от 0 до 12.
Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_check_baud_rate: позволяет узнать установленную скорость передачи данных по шине UART. Может пригодиться если Вы забыли пользовательские настройки.
Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_bridge: позволяет отправлять команды протокола VR3 без кода заголовка, длины кадра и кода конца кадра. Например, для отправки команды «Check Recognizer», вместо байтов «AA 02 01 0A», нужно ввести только 01. Протокол VR3 описан в разделе Wiki - Протокол VR3 для модуля распознавания голоса.
Группы:
Группы используются для удобства загрузки нескольких голосовых команд из хранилища в распознаватель. Каждая группа может включать до 7 номеров ячеек хранилища голосовых команд. Загрузка группы приводит к загрузке в распознаватель всех ячеек хранилища, номера которых указаны в группе. Группы можно загружать командами UART или при помощи входов модуля IN 0-2.
Существует два вида групп: системные группы и пользовательские группы.
Системные группы имеют жесткую структуру и включают в себя 7 номеров ячеек хранилища голосовых команд:
№ системной группы | № ячеек хранилища голосовых команд входящих в группу: |
---|---|
00 | 00, 01, 02, 03, 04, 05, 06 |
01 | 07, 08, 09, 0A, 0B, 0C, 0D |
02 | 0E, 0F, 10, 11, 12, 13, 14 |
03 | 15, 16, 17, 18, 19, 1A, 1B |
04 | 1C, 1D, 1E, 1F, 20, 21, 22 |
05 | 23, 24, 25, 26, 27, 28, 29 |
06 | 2A, 2B, 2C, 2D, 2E, 2F, 30 |
07 | 31, 32, 33, 34, 35, 36, 37 |
08 | 38, 39, 3A, 3B, 3C, 3D, 3E |
09 | 3F, 40, 41, 42, 43, 44, 45 |
0A | 46, 47, 48, 49, 4A, 4B, 4C |
Пользовательские группы Вы можете создавать по своему усмотрению (Вы сами решаете какие ячейки хранилища голосовых команд будут входить в группу). Допускается создание до 8 пользовательских групп с номерами от 00 до 07. Каждая пользовательская группа может содержать до 7 голосовых команд хранилища.
Управлять группами можно, как с использованием методов библиотеки VoiceRecognitionV3, так и при помощи команды протокола VR3.
Натыкался на разного рода статьи с применением BitVoicer в связке с Arduino, но вся проблема в том, что BitVoicer работает только на Windows, а это не позволяет использовать систему на простых устройствах типа Rasberry Pi под управлением Unix.
Arduino Voice Recognition
Так же Arduino можно управлять голосом благодаря модулю распознавания голоса, но пока у меня нет срадств на его приобретение и есть ряд неудобств при использовании этого модуля: ограниченное количество команд, нудное обучение, для новых команд требуется перепрошивка модуля, что уже является минусом, если система отлажена и установлена.
Решение
Для того, чтобы в дальнейшем было проще ориентироваться по тексту, я прикладываю все исходники, в которых уже прописаны голосовые команды, подключение к плате Arduino, скетч для платы Arduino, голосовое подтверждение фраз и все остальное, что сейчас уже есть и работает: исходники. После скачивание папку GoogleTTS помещаем в библиотеки Processing'a. Скетч для Arduino лежит в папке GoogleTTS/ArduinoSerial. Все писалось на Processing 3.0a4, доступный в пре-релизе на официальном сайте.
Реализация («Слушай мою команду!»):
С распознаванием определились. Теперь нужно отлавливать нужные нам команды и по ним принимать решения. За это отвечает секция:
Голосовой ответ
Теперь нам нужен инструмент, который будет нам отвечать человеческим голосом в случае найденного соответствия. В качестве инструмента реализации был выбран Google Translate, а вернее модуль, который конвертирует текст в голос. Текст оправляется запросом на сервер Google, преобразуется в звуковой файл и отправляется нам обратно в формате mp3. За это отвечает секция:
За обработку непосредственно текстовых фраз отвечает секция:
Пример реализации распознавания и голосового подтверждения:
He is alive!
Processing + Arduino
Ну вот вроде и заработало, но чего-то не хватает. Теперь «подружим» это все с Arduino.
Инициализируем serial подключение в Processing для отправки данных на Arduino (для пользователей Mac и Unix):
Для Windows пользователей:
И отправим туда команду при найденном голосовом соответствии:
Теперь займемся платой Arduino. Нам нужно слушать Serial порт и при нахождении команды из списка, выполнять требуемое действие согласно команде. Скетч очень прост:
Проблемы и планы:
Т.к. я не занимался программирование до этого времени, я не до конца понимаю некоторые вещи в процессе отладки. Буду признателен, если кто-нибудь подскажет как решить проблемы из перечня ниже:
— Самая основная проблема — голосовая фраза не проговаривается целиком. Пропадают последние буквы. Хотя звуковой файл приходит с сервера Google в нормальном виде. Как я понимаю ситуацию: проблема аудио-плеера, но где именно пока не ясно.
— Уже писал, что у Google Speech API есть ограничение на 50 запросов в сутки, но по факту получается больше. В любом случае этого мало. Планирую прописать локальное распознавание главной команды и только после ее распознавания, остальной текст отправлять на обработку Google'у. Ищу решение.
— Думаю не помешает отправка команд на Ethernet-шилд Arduino, т.к. некоторые системы могут находиться на приличном расстоянии от главного компьютера и Serial подключение тут уже не подойдет. Займусь этим решение на днях, т.к. нет у меня в наличии роутера для подключения к нему Arduino с Ethernet-шилдом.
Фразы "О'кей, Google" и "Привет, Siri" прочно вошли в обиход у пользователей смартфонов. Голосовое управления это удобно — не надо нажимать кнопки, двигать курсором мыши в нужную область и т.д. Просто произносишь команду и ждешь ее исполнения.
Наверное каждый человек хотел бы иметь у себя дома возможность включать\выключать свет в комнате по команде, чтобы не приходилось вставать и идти к выключателю. Вариантов применения у данной технологии неизмеримое множество.
В данной статье рассмотрим один из самых простых способов научить Arduino понимать голосовые команды — Elechouse Voice Recognition Module. В качестве примера будем управлять светодиодом. Голосовой командой мы сможем его включить, выключить или заставить мигать.
Для работы нам потребуется:
Устройство собиралось на макетной плате MB-102 с джамперами.
Подключение
Подключение модуля очень простое. Всего два пина: TX и RX. Их надо подключить к выходам Arduino 2 и 3 соответственно. Запитать модуль следует от 5V.
Обучение командам
Итак, первым делом надо наш модуль обучить командам. Как было сказано выше, всего у нас три команды:
Откройте проект vr_simple_train, поставляем в комплекте с библиотекой VoiceRecognitionV3.
Файл — Примеры — VoiceReocgnitionV3 — vr_simple_train
Залейте этот скетч в Arduino и откройте Монитор порта (Сервис — Монитор порта или нажмите Ctrl + Shift + M на клавиатуре)
Обязательно надо выставить скорость обмена (baud rate) 115200 и отправку по новой строке.
Перед нами интерфейс управления голосовыми командами. Введите в верхнее поле settings и нажмите кнопку "Послать".
Модуль ответит нам своими текущими настройками. Это значит, что все хорошо и можно приступать непосредственно к обучению команд.
За обучение командам отвечает функция sigtrain.
Введите в поле команду sigtrain 0 On и нажмите на кнопку "Послать". Команда означает, что в ячейку памяти 0 мы хотим записать команду с сигнатурой On. Сигнатура это некий уникальный ярлык, который описывает вашу команду.
Когда в окне появится фраза "Speak now", то следует проговорить в микрофон нашу команду "Зажгись".
После появления фразы "Speak again", проговорите фразу еще раз.
Если оба слова совпали, то модуль выдаст Success: 1, что означает, что мы только успешно записали команду On.
Если же модуль не смог сопоставить две голосовых команды (например, было шумно в помещении или вы произносили просто разные слова), то модуль ответит фразой "Cann't match" и предложит начать процесс записи команды еще раз до тех пор, пока не будут предоставлены верные данные.
То же самое надо проделать и с другими нашими командами "Выключись" и "Мигай", но использовать надо другие ячейки памяти (1 и 2) и другие сигнатуры (Off и Blink)
Делай, что я говорю!
Модуль настроен и знает целых три команды. Залейте в Arduino следующий скетч:
Как иногда хочется, приходя домой с работы или магазина, усталому или попросту, если заняты руки, – скомандовать «Свет!» или «Включить чайник», ну или «Поставить музыку». И запрошенные действия выполнятся. Так как у среднего класса давно уже нет живых слуг, остается надеяться в подобных ситуациях только на технику. Можно использовать голосовое управление посредством Ардуино.
Как работает управление голосом?
Сама схема достаточно проста, ее основой служит микроконтроллер Arduino, который и будет обрабатывать сигнал от сенсора, производя в зависимости от поступившей команды, посредством исполняющей части, необходимое действие. Выбор именно его – ориентированность и модульность. Он наиболее полно вписывается в понятие «умный дом», позволяя расширять свои возможности практически безграничным количеством внешних модулей, удобной системой программирования и интерфейсным взаимодействием с компьютером.
- использовать связь с online – службами обработки голоса, наподобие Google или Yandex, с последующей реакцией контроллера на переданные результаты, причем в таком случае будет использоваться более «умное» устройство – посредник, компьютер или смартфон;
Пример взаимодействия с сервисом Google
- распознавание голосовых фонем силами самого микроконтроллера;
- обработка звуковых сигналов дополнительным модулем, подключаемым к Arduino.
Понятно, что в первом случае наличие подключенного микрофона к самой плате контроллера не нужно. Достаточно будет или прямого присоединения интерфейсных проводов от компьютера, или использования дополнительного Bluetooth – модуля для обеспечения связи в случае смартфона. Последний вариант и будет рассмотрен.
Представленная схема голосового управления на базе Ардуино будет демонстративной, максимально быстрого изготовления. Но на ее основе уже можно создавать реальные системы обработки голосовых команд.
Что такое Arduino и для чего оно нужно?
Немного о контроллере «Arduino». В своей основе это специализированный компьютер, размещенный на чипе, который в свою очередь смонтирован на плате с удобным подключением внешних устройств, сенсоров и интерфейсной части.
Скорость работы процессора в такой системе относительно невелика, и редко в топовых модификациях превышает 16Мгц. Основное преимущество компоновки – на едином кристалле расположены все части полнофункционального компьютера: постоянная, перезаписываемая (flash) и оперативная память, контроллер ввода–вывода и сам процессор.
Инструкция по настройке голосового управления с помощью Arduino
Выбранная для демонстрации возможностей управления голосом при помощи Ардуино схема для изготовления своими руками будет зажигать, в зависимости от команды, светодиод определенного цвета. Полностью схема в сборе
Инструменты и материалы
- сама плата микроконтроллера Arduino UNO;
- мини – схема HC-05, на которой разведен модуль связи bluetooth для ардуино;
- три резистора на 300-350 Ом;
- светодиоды разных цветов – 3 шт.;
- смартфон.
Порядок подключения комплектующих
Вначале необходимо подключить модульную плату, обеспечивающую связь по bluetooth, к ардуино. Контакт RXD от HC-05 присоединяем к клемме TXD контроллера, аналогичную модуля, с RXD Arduino. То есть, производим перекрестное подключение разъемов. Питание +3.3В и GND на сборке bluetooth подводится к аналогичным на плате контроллера. Схема подключения HC-05 к Arduino UNO
Далее, подключаем исполнительный блок, управление голосом которым и будет осуществляться через ардуино. Общий контакт «земли» (GND) диодов соединяем с таким же на центральной плате. Потом каждый из светодиодов, второй ножкой, через резистор на 330 Ом с выходными цифровыми каналами контроллера (2-4). Присоединение светодиодов
Настройка параметров
Следующий скетч, основу контролирующей системы, необходимо загрузить в сам микроконтроллер:
SOFTWARESERIAL BLU ( 0, 1 );
DIGITALWRITE ( RLED, HIGH );
DIGITALWRITE ( YLED, HIGH );
DIGITALWRITE ( GLED, HIGH );
DIGITALWRITE ( RLED, LOW );
DIGITALWRITE ( YLED, LOW );
DIGITALWRITE ( GLED, LOW );
PINMODE ( RLED, OUTPUT );
PINMODE ( YLED, OUTPUT );
PINMODE ( GLED, OUTPUT );
WHILE ( SERIAL.AVAILABLE ( ) ) //Цикл чтения сигналов с bluetooth
DELAY ( 10 ); //Период ожидания чтения
CHAR A = SERIAL.READ ( ); //Читать из порта символ
IF ( VOICELONG.LENGTH ( ) > 0 )
DIGITALWRITE ( RLED, HIGH );
DIGITALWRITE ( YLED, HIGH );
DIGITALWRITE ( GLED, HIGH );
DIGITALWRITE ( RLED, LOW );
DIGITALWRITE ( YLED, LOW );
DIGITALWRITE ( GLED, LOW );
>
Сама диалоговая часть с пользователем – приложение на смартфоне. Его можно найти в гугл-маркет по «BT VOICE CONTROL для ARDUINO» (BT VOICE CONTROL FOR ARDUINO) от SIMPLELABSIN.
Коммуникация сделанной схемы и смартфона производится при поданном на нее питании и выборе в меню программы BT Voice Control (верхний правый угол) «подключить робота». Откроется окно со списком коммуникационного оборудования – в нем нужно найти и выбрать HC-05.
Вот и все. Можно работать. Команды используются те, которые прописаны в коде скетча. К примеру, сказанное голосом «POWER ON GREEN» – включит зеленый светодиод.
Особенности настройки Arduino для голосового управления
Так как мы русскоязычные, команды, отдаваемые на иностранном языке – не очень хорошая идея, даже для демонстрации. Можно заменить их на латиницу, где русский звук пишется английскими литерами. К примеру, если строку скетча
то можно будет использовать голосовую команду «включить желтый». К сожалению, звучание латинского алфавита немного отличается от русского, поэтому тут нужно поэкспериментировать.
Технология распознавания речи чрезвычайно полезна в различных системах автоматизации – она не только позволяет управлять устройствами не используя для этого руки (hands free), но также повышает безопасность системы. Также эта технология применяется во многих современных электронных гаджетах и оказывает неоценимую помощью людям с некоторыми тяжелыми заболеваниями.
Ранее на нашем сайте мы уже рассматривали преобразование текста в речь на основе Arduino, в этом же проекте мы будем использовать машинное обучение для тренировки (настройки) модели распознавания речи в Edge Impulse Studio. Мы будем тренировать нашу систему на три команды: ‘LIGHT ON’ (включить свет), ‘LIGHT OFF’ (выключить свет) и ‘NOISE’ (шум). Edge Impulse – это онлайн платформа машинного обучения, которая позволяет разработчикам создавать (проектировать) следующее поколение высоко интеллектуальных устройств со встроенным в них машинным обучением (Machine Learning).
Необходимые компоненты
Аппаратное обеспечение
- Плата Arduino Nano 33 BLE Sense.
- Светодиод (купить на AliExpress).
- Соединительные провода.
Программное обеспечение
Схема проекта
Схема проекта распознавания речи на основе платы Arduino Nano 33 BLE Sense представлена на следующем рисунке. К сожалению, в программе Fritzing, которую мы использовали для рисования схемы, нет платы Arduino 33 BLE Sense, поэтому вместо нее на схеме мы использовали плату Arduino Nano поскольку она имеет точно такую же распиновку.
Положительный контакт светодиода подключен к цифровому контакту 5 платы Arduino Nano 33 BLE sense, а отрицательный контакт светодиода подключен к контакту GND платы Arduino.
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Создание набора данных для системы распознавания речи
В нашем проекте мы будем использовать Edge Impulse Studio для тренировки (настройки) нашей модели распознавания речи. Тренировка (настройка) модели в Edge Impulse Studio очень похожа на тренировку моделей машинного обучения в других подобных системах. Для тренировки (настройки) модели машинного обучения первым шагом нам необходимо собрать набор данных (dataset), который будет содержать отсчеты/образцы (сэмплы) данных, которые мы хотим распознавать.
Поскольку цель нашего проекта будет состоять в том, чтобы управлять состоянием светодиода с помощью голосовых команд, нам необходимо собрать образцы звуков для всех наших команд и шума чтобы наше устройство могло отличать наши голосовые команды от шумов.
Мы создадим набор данных (dataset) с тремя классами - “LED ON”, “LED OFF” и “noise”. Для создания этого набора данных необходимо создать себе аккаунт в Edge Impulse, верифицировать его и затем создать в нем новый проект. Вы можете загрузить в него образцы (samples) звуков, используя ваш смартфон, плату Arduino или другое устройство, с помощью которого можно импортировать образцы звуков в ваш аккаунт на Edge Impulse. Самый простой способ загрузить образцы звуков в аккаунт Edge Impulse – это использовать мобильный телефон (смартфон). Для этого соедините ваш смартфон с Edge Impulse. Чтобы сделать это кликните в аккаунте Edge Impulse на ‘Devices’, а затем на ‘Connect a New Device’ (подключить новое устройство).
В окне, которое появится после этого, нажмите на ‘Use your Mobile Phone’ (использовать ваш мобильный телефон), после чего появится QR код. Отсканируйте этот QR код вашим мобильным телефоном или введите URL, показанный на этом QR коде.
После этого ваш телефон будет подключен к Edge Impulse studio.
Когда ваш телефон подключен к Edge Impulse Studio вы можете загружать в него ваши образцы звуков. Чтобы сделать это кликните на ‘Data acquisition’. После этого на странице получения данных (Data acquisition page) введите номер метки, выберите микрофон в качестве датчика и ведите длину образца звука (sample length). Затем нажмите на ‘Start sampling’ и ваше устройство запишет образец звука длительностью 2 секунды. Запишите от 10 до 12 образцов звука в различных условиях.
После загрузки образцов звука (samples) для первого класса измените метку и соберите также образцы звуков для классов ‘light off’ и ‘noise’
Собранные нами образцы звуков нужны для обучения (тренировки) модуля, далее нам необходимо еще собрать тестовые данные (Test Data). Эти данные должны составлять, по меньшей мере, 30% от тренировочных данных, поэтому нам нужно еще собрать 4 образца шума (‘noise’) и 4 или 5 образцов для звуков ‘light on’ и ‘light off’.
Тренировка (обучение) модели
Когда наш набор данных будет готов, мы можем создать импульс (impulse) для данных. Для этого вам нужно перейти на страницу ‘Create impulse’. Измените на ней настройки по умолчанию Window size (размер окна) с 1000 ms на 1200ms, а параметр Window increase измените с 500 ms до 58 ms. Эти настройки будут означать, что наши данные будут обрабатываться по времени 1,2 секунды, стартуя каждые 58ms.
После этого на странице ‘Create impulse’ нажмите на ‘Add a processing block’ (добавить блок обработки). В следующем окне выберите Audio (MFCC) block. После этого нажмите на ‘Add a learning block’ (добавить обучающий блок) и выберите в новом окне Neural Network (Keras) block (блок нейронной сети). Затем нажмите на ‘Save Impulse’ (сохранить импульс).
После этого перейдите на страницу MFCC и нажмите на ‘Generate Features’. В результате этого будут сгенерированы MFCC блоки для всех наших окон с аудио.
После этого перейдите на страницу ‘NN Classifier’ и нажмите там на три точки в правом верхнем углу напротив надписи ‘Neural Network settings’ (настройки нейронной сети), после чего выберите пункт ‘Switch to Keras (expert) mode’ как показано на следующем рисунке.
Замените оригинал следующим фрагментом кода и измените ‘Minimum confidence rating’ (минимальный доверительный интервал) на ‘0.70’. Затем нажмите на кнопку ‘Start training’ (начать обучение). После этого начнется обучение (тренировка) вашей модели.
Читайте также: