""

Устройство вокальных звуковых эффектов на arduino

Голосовое управление посредством Arduino

Как иногда хочется, приходя домой с работы или магазина, усталому или попросту, если заняты руки, – скомандовать «Свет!» или «Включить чайник», ну или «Поставить музыку». И запрошенные действия выполнятся. Так как у среднего класса давно уже нет живых слуг, остается надеяться в подобных ситуациях только на технику. Можно использовать голосовое управление посредством Ардуино.

Как работает управление голосом?

Сама схема достаточно проста, ее основой служит микроконтроллер Arduino, который и будет обрабатывать сигнал от сенсора, производя в зависимости от поступившей команды, посредством исполняющей части, необходимое действие. Выбор именно его – ориентированность и модульность. Он наиболее полно вписывается в понятие «умный дом», позволяя расширять свои возможности практически безграничным количеством внешних модулей, удобной системой программирования и интерфейсным взаимодействием с компьютером.

С основой разобрались, осталось выбрать принцип функционирования самого распознавания голоса, а соответственно и вид сенсора. Их несколько:

  • использовать связь с online – службами обработки голоса, наподобие Google или Yandex, с последующей реакцией контроллера на переданные результаты, причем в таком случае будет использоваться более «умное» устройство – посредник, компьютер или смартфон;
    Пример взаимодействия с сервисом Google
  • распознавание голосовых фонем силами самого микроконтроллера;
  • обработка звуковых сигналов дополнительным модулем, подключаемым к Arduino.

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

Представленная схема голосового управления на базе Ардуино будет демонстративной, максимально быстрого изготовления. Но на ее основе уже можно создавать реальные системы обработки голосовых команд.

Что такое Arduino и для чего оно нужно?

Немного о контроллере «Arduino». В своей основе это специализированный компьютер, размещенный на чипе, который в свою очередь смонтирован на плате с удобным подключением внешних устройств, сенсоров и интерфейсной части.

Основное предназначение Arduino — создание достаточно сложного высокоинтеллектуального оборудования силами непрофессионалов. Микроконтроллер в таких системах выполняет функцию обработки поступающих сигналов от сенсоров, разбор управляющих последовательностей, приходящих через интерфейсы и контролирующим узлом для подключаемых устройств. Arduino UNO лицом

Скорость работы процессора в такой системе относительно невелика, и редко в топовых модификациях превышает 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). Присоединение светодиодов

Настройка параметров

Следующий скетч, основу контролирующей системы, необходимо загрузить в сам микроконтроллер:

#INCLUDE ‘SoftwareSerial.h’ //возможно понадобится заменить одинарные кавычки ‘ на « »

SOFTWARESERIAL BLU ( 0, 1 );

INT GLED = 2; //Присоединен к контакту #2

INT YLED = 3; //Присоединен к контакту #3

INT RLED = 4; //Присоединен к контакту #4

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 ( ); //Читать из порта символ

BREAK; //Выйти из цикла, если обнаружено «#»

IF ( VOICELONG.LENGTH ( ) > 0 )

IF ( VOICE == «*POWER ON ALL LED» )

ELSE IF ( VOICE == «*POWER OFF ALL LED» )

ELSE IF ( VOICE == «*POWER ON RED» )

DIGITALWRITE ( RLED, HIGH );

ELSE IF ( VOICE == «*POWER ON YELLOW»)

DIGITALWRITE ( YLED, HIGH );

ELSE IF ( VOICE == «*POWER ON GREEN» )

DIGITALWRITE ( GLED, HIGH );

ELSE IF ( VOICE == «*POWER OFF RED» )

DIGITALWRITE ( RLED, LOW );

ELSE IF ( VOICE == «*POWER OFF YELLOW»)

DIGITALWRITE ( YLED, LOW );

ELSE IF ( VOICE == «*POWER OFF GREEN»)

DIGITALWRITE ( GLED, LOW );

VOICELONG=»»; //Сбросить переменную

>
Сама диалоговая часть с пользователем – приложение на смартфоне. Его можно найти в гугл-маркет по «BT VOICE CONTROL для ARDUINO» (BT VOICE CONTROL FOR ARDUINO) от SIMPLELABSIN.

Коммуникация сделанной схемы и смартфона производится при поданном на нее питании и выборе в меню программы BT Voice Control (верхний правый угол) «подключить робота». Откроется окно со списком коммуникационного оборудования – в нем нужно найти и выбрать HC-05.

Вот и все. Можно работать. Команды используются те, которые прописаны в коде скетча. К примеру, сказанное голосом «POWER ON GREEN» – включит зеленый светодиод.

Особенности настройки Arduino для голосового управления

Так как мы русскоязычные, команды, отдаваемые на иностранном языке – не очень хорошая идея, даже для демонстрации. Можно заменить их на латиницу, где русский звук пишется английскими литерами. К примеру, если строку скетча

Else if (voice == «*power on yellow»)

Else if (voice == «*vkluchit geltuy»)

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

Операции аналогового ввода—вывода, работа со звуком. Знакомство с Arduino. (часть 3)

Хотя цифровые операции ввода-вывода позволяют решать широкий круг задач, однако наличие в микроконтроллере платы Arduino встроенного аналого-цифрового преобразователя (АЦП) и возможность вывода аналоговых сигналов с помощью широтно-импульсной модуляции (ШИМ) обеспечивают работу с аналоговыми датчиками и всевозможными исполнительными устройствами, воздействующими на объект пропорционально управляющему сигналу.

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

Читайте также:  Резисторы. кодовая маркировка

В режиме ШИМ порт формирует импульсный сигнал постоянной частоты и переменной скважности (это отношение периода следования импульсов к их длительности). Часто вместо скважности оперируют обратной ей величиной – коэффициентом заполнения, который можно изменять от 0 (нет импульсов) до 100% (импульсы следуют, слившись, без пауз). Следовательно, хотя в каждый отдельный момент выходное напряжение соответствует высокому или низкому логическому уровню, его среднее значение пропорционально коэффициенту заполнения. Если к этому выходу подключить обычный мультиметр, он покажет это значение (конечно, если частотаимпульсов достаточно высока).

В Arduino UNO в режиме ШИМ могут работать выходы D3, D5, D6, D9, D10 и D11. Обычно на плате они помечены знаками “

” или аббревиатурами “PWM”. Следует заметить, что у плат Arduino других модификаций число таких выходов может быть больше или меньше.

В простейшем случае ШИМ можно применить для управления яркостью свечения светодиода. Этот прибор практически безынерционен, но человеческое зрение обладает достаточной инерционностью, чтобы последовательность быстрых вспышек светодиода воспринималась как непрерывное свечение с зависящей от коэффициента заполнения яркостью.

Дискретные выходы, способные формировать ШИМ, настроены на использование этого режима по умолчанию, поэтому вызывать функцию pinMode() для их работы в таком режиме не нужно. Для установки коэффициента заполнения ШИМ-сигнала имеется стандартная функция analogWrite(N, M), где N – номер вывода, M – число, пропорциональное требуемому коэффициенту заполнения. Оно должно лежать в интервале от 0 до 255, причём 0 соответствует нулевому коэффициенту заполнения (навыходе постоянный низкий уровень), 255 – коэффициенту заполнения 100 % (на выходе постоянный высокий уровень). Временные диаграммы выходного напряжения при некоторых значениях M и соответственно коэффициента заполнения Кз показаны на рис. 1.

Рис. 1. Временные диаграммы выходного напряжения

Для примера рассмотрим приведённую в табл. 1 программу, которая постепенно увеличивает яркость свечения светодиода, подключённого к цифровому выходу D9, а затем постепенно уменьшает её. Она основана на стандартном примере examples3.AnalogFading из комплекта поставки Arduino IDE. Перебор значений коэффициентазаполнения импульсов реализован здесь с помощью уже рассмотренных в [1] операторов цикла for.

Для приёма аналоговых сигналов от внешних устройств в Arduino предназначены входы A0-A5, по умолчанию установленные в нужное для этого состояние, так что дополнительной инициализации не требуется. АЦП, встроенный в Arduino UNO, формирует 10-разрядные двоичные коды и входное напряжение, лежащее в интервале от 0 до +5 В, преобразует в целое число от 0 до 1023 (210-1).

Для считывания результата преобразования служит функция analogRead(N), где N – номер аналогового входа.

К аналоговым входам Arduino можно подключать разнообразные датчики, выходное напряжение которых пропорционально измеряемой величине (переменные резисторы, терморезисторы, фоторезисторы и др.). Однако нужно помнить, что на аналоговый вход можно подавать напряжение лишь от 0 до +5 В. Если выходное напряжение датчика лежит в другом интервале или оно отрицательной полярности, сигнал необходимо предварительно уложить в указанный интервал. Опрос аналогового входа выполняется с частотой менее 10 кГц [2], что может оказаться недостаточным для анализа некоторых быстроизменяющихся сигналов.

Наличие аналоговых входов позволяет превратить Arduino в простейший цифровой вольтметр, измеряющий постоянное напряжение от 0 до +5 В и передающий результат измерения в компьютер. Для этого достаточно загрузить в Arduino программу, приведённую в табл. 2.

Обратите внимание, что в программе константами заданы образцовое напряжение АЦП Uref (в милливольтах) и коэффициент пересчё-тавыходного кодаАЦП в напряжение Ku. Значение коэффициента вычисляется делением заданного образцового напряжения на 1023. Коэффициент обычно дробный, поэтому константа Ки имеет тип float (число с плавающей запятой). Константа Uref имеет такой же тип для правильного вычисления коэффициента. Поскольку в правой части формулы находятся только константы, вычисляет коэффициент не микроконтроллер, выполняя программу, а сам компилятор на этапе её трансляции.

Читайте также:  Программные таймер и счетчик

Всё это позволяет повысить точность вольтметра, измерив мультиметром точное значение образцового напряжения на выводе Uref платы Arduino и записав его в программу, присвоив константе Uref. О других способах повысить точность аналого-цифрового преобразования можно прочитать в [3, 4].

При работе рассматриваемой программы на плате мигает светодиод TX, сигнализирующий о передаче информации через последовательный порт. Светодиод RX не светится, так как компьютер ничего не передаёт в ответ. Встроенный терминал Arduino IDE отображает принятую информацию (рис. 2) – результаты измерения напряжения гальванической батареи 3332.

Рис. 2. Окно программы

Arduino может подавать не только световые, но и звуковые сигналы. Для этого к одному из его выходов необходимо подключить пьезоизлучатель звука, например ЗП-1 (рис. 3).

Рис. 3. Подключение пьезоизлучателя звука

Для работы со звуком предусмотрена специальная функция tone(N, F, T), где N – номер вывода, на котором будут сформированы прямоугольные импульсы; F – частота звука, Гц; T – длительность звука, мс. Последний параметр не обязателен. В его отсутствие звук будет непрерывным. Чтобы выключить его, предусмотрена функция noTone(N).

Конечно, пьезокерамический излучатель звука сложно назвать устройством высококачественного воспроизведения, а формируемый микроконтроллером сигнал имеет прямоугольную форму, тем не менее использование этих функций позволяет исполнять несложные мелодии. Пример приведён в табл. 3. Это немного изменённая программа examples 02.Digital oneMelody, входящая в комплект среды разработки Arduino IDE. Поскольку задавать вручную частоту каждой ноты мелодии неудобно, к программе в её заголовке директивой #include подключён файл pitches.h. Эта операция равносильна включению в программу полного текста этого файла. В рассматриваемом случае он содержит список названий нот, которые можно воспроизвести, и их частот.

Излучатель звука должен быть подключён к выходу D8.

Для программы мелодия – это последовательность однотипных констант (значений частоты), которые удобно объединить в массив – пронумерованный список однотипных элементов. При объявлении массива нужно либо перечислить все его элементы, либо указать их общее число. Учтите, что нумерация элементов массива всегда начинается с нуля.

В рассматриваемом примере использованы два массива: int melody[] содержит названия нот мелодии, int note Durations[] – их длительность в миллисекундах. Для обращения к элементу массива указывают его имя с заключённым в квадратные скобки порядковым номером. Чтобы иметь возможность легко менять число нот в мелодии, оно вычисляется с использованием функций sizeof(V), возвращающих число байтов, занимаемых её аргументом (переменной или их массивом) в памяти микроконтроллера. В рассматриваемом случае массив melody занимает 16 байт, а длина его элементов типа int – два байта. Поэтому переменная Note получает значение 8 и именно столько раз будет повторено тело цикла for, поочерёдно воспроизводящее ноты.

Если к массиву melody[] добавить несколько нот, соответственно изменится и значение Note. Нужно только не забыть дополнить массив noteDurations[] длительностями звучания этих нот.

Поскольку мелодия исполняется один раз, все необходимые для этого операции помещены внутрь функции setup().

Для повторного исполнения нужно привести микроконтроллер в исходное состояние, нажав на находящуюся на плате Arduino кнопку RESET

Рассмотренные в статье программы для Arduino можно скачать здесь.

1. Лекомцев Д. Arduino. Операции цифрового ввода-вывода. – Радио, 2016, № 8, с. 51-54.

Рейтинг
( Пока оценок нет )
Загрузка ...
×
×
Adblock
detector