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

Распознавание речи с помощью Arduino и BitVoicer Server

Компоненты и расходные материалы

Arduino Micro
× 1
Электретный микрофонный прорыв Sparkfun
× 1
BitVoicer Server
× 1
BitVoicer Server 1.0
× 1
LED (общий)
× 3
Резистор 330 Ом
× 3

Об этом проекте

В этом посте я собираюсь показать, как использовать плату Arduino и BitVoicer Server для управления несколькими светодиодами с помощью голосовых команд. В этом посте я буду использовать Arduino Micro, но вы можете использовать любую имеющуюся под рукой плату Arduino.

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


  • Звуковые волны будут улавливаться и усиливаться платой Sparkfun Electret Breakout;
  • Усиленный сигнал будет оцифрован и буферизован в Arduino с помощью его аналого-цифрового преобразователя (АЦП);
  • Образцы аудио будут передаваться на сервер BitVoicer через последовательный порт Arduino;
  • BitVoicerServer обработает аудиопоток и распознает содержащуюся в нем речь;
  • Распознанная речь будет сопоставлена ​​предопределенным командам, которые будут отправлены обратно в Arduino;
  • TheArduino определит команды и выполнит соответствующие действия.

На видео выше показан окончательный результат этого поста. Обратите внимание на видео, что BitVoicer Server также обеспечивает обратную связь синтезированной речи. Эта речевая обратная связь определяется на сервере и воспроизводится серверным аудиоадаптером, но синтезированный звук также может быть отправлен на Arduino и воспроизведен с помощью цифро-аналогового преобразователя (DAC). В следующем посте я покажу, как использовать Arduino DUE, один усилитель и один динамик для воспроизведения синтезированной речи с помощью самой Arduino.

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


  • Arduino Micro (или любая другая плата Arduino):~ 20 долларов США.
  • Электретный микрофон Sparkfun Breakout:7,95 долларов США.
  • BitVoicer Server 1.0 :9,90 долл. США
  • Макетная плата:~ 10 долларов США.
  • 3 xLED:~ 1 доллар США
  • Резисторы 3 x330 Ом:~ 0,75 $.
  • Проволочные перемычки:~ 0,30 доллара США.


ШАГ 1. Подключение


Первый шаг - подключить Arduino и макетную плату к компонентам, как показано на рисунках ниже.

Самая важная деталь здесь относится к аналоговой ссылке на АЦП Arduino. В моих тестах я получил лучшие результаты, используя 3,3 В с Sparkfun Electret Breakout. Вот почему я добавил перемычку между выводом 3.3V и выводом AREF. Если вы решите использовать функцию analogRead (по какой-либо причине), когда на вывод AREF подается напряжение 3,3 В, вы ДОЛЖНЫ вызвать функцию analogReference (EXTERNAL) перед использованием функции analogRead. В противном случае вы замкните вместе активное опорное напряжение (генерируемое внутри) и вывод AREF, что может привести к повреждению микроконтроллера на вашей плате Arduino.


ШАГ 2. Загрузка кода в Arduino


Теперь вам нужно загрузить приведенный ниже код в свой Arduino. Для удобства скетч Arduino также доступен в разделе «Вложения» внизу этого поста. Перед загрузкой кода необходимо правильно установить библиотеки BitVoicer Server в Arduino IDE (импорт библиотеки .zip).

BVS_Demo1.ino

Этот набросок состоит из четырех основных частей:


  • Ссылки на библиотеки и объявление переменных:первые две строки содержат ссылки на библиотеки BVSP и BVSMic. Эти библиотеки предоставляются BitSophia и находятся в папке установки BitVoicer Server. В других строках объявляются константы и переменные, используемые в скетче. Класс BVSP используется для связи с BitVoicer Server, а класс BVSMic используется для захвата и хранения аудиосэмплов.
  • Функция настройки:эта функция инициализирует последовательную связь, класс BVSP, класс BVSMic и устанавливает «обработчик событий» (на самом деле это указатель на функцию) для события frameReceived.
  • Функция цикла:эта функция выполняет три важных действия:запрашивает информацию о состоянии на сервере (функция keepAlive ()), проверяет, отправил ли сервер какие-либо данные, и обрабатывает полученные данные (функция receive ()), а также контролирует запись и отправку аудио. потоки (функции isSREAvailable (), startRecording (), stopRecording () и sendStream ()).
  • BVSP_frameReceivedfunction:эта функция вызывается каждый раз, когда функция receive () идентифицирует, что был получен один полный кадр. Здесь я запускаю команду, отправленную с BitVoicer Server. Команда содержит 2 байта. Первый байт указывает контакт, а второй байт указывает значение контакта. Я использую функцию analogWrite (), чтобы установить соответствующее значение для вывода.


ШАГ 3. Импорт объектов серверного решения BitVoicer


Теперь вам нужно настроить BitVoicer Server для работы с Arduino. BitVoicer Server имеет четыре основных объекта решения:местоположения, устройства, двоичные данные и голосовые схемы.

Местоположение представляет собой физическое местоположение, где установлено устройство. В моем случае я создал местоположение под названием «Дом».

Устройства - это клиенты BitVoicer Server. Я создал смешанное устройство, назвал его ArduinoMicro и вошел в настройки связи. ПРИМЕЧАНИЕ ОБ ARDUINO MICRO :он использует RTS и DTR, поэтому вы должны включить эти настройки на вкладке связи. Я также создал устройство SystemSpeaker для синтеза речи с помощью серверного аудиоадаптера.

BinaryData - это тип команды, которую BitVoicer Server может отправлять на клиентские устройства. На самом деле это массивы байтов, которые можно связывать с командами. Когда BitVoicer Server распознает речь, связанную с этой командой, он отправляет массив байтов на целевое устройство. Я создал по одному объекту BinaryData для каждого значения вывода и назвал их ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff и так далее. В моем решении оказалось 18 объектов BinaryData, поэтому я предлагаю вам загрузить и импортировать объекты из VoiceSchema.sof файл ниже.

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

Вы можете импортировать (Импорт объектов решения) все объекты решения, которые я использовал в этом посте, из файлов ниже. Один содержит устройства, а другой - схему голоса и ее команды.

Devices.sof


VoiceSchema.sof

ШАГ 4. Заключение


Вот и все! Надеюсь, вам понравилось.

У вас есть все необходимое для запуска демонстрации, показанной в видео. Обратите внимание, что в видео я начал с включения устройства ArduinoMicro в диспетчере сервера BitVoicer. Как только он включается, Arduino определяет доступный механизм распознавания речи и начинает потоковую передачу звука на сервер BitVoicer.

Вы можете следить за результатами распознавания в инструменте Server Monitor, доступном в BitVoicer Server Manager.

В следующем посте я покажу, как можно воспроизвести синтезированную речь с помощью Arduino DUE.


Код

  • BVS_Demo1.ino
BVS_Demo1.ino Arduino
 #include  #include  // Определяет вывод Arduino, который будет использоваться для захвата звука #define BVSM_AUDIO_INPUT 5 // Определяет выводы светодиода #define RED_LED_PIN 6 # define YELLOW_LED_PIN 9 # define GREEN_LED_PIN 10 // Определяет константы, которые будут переданы в качестве параметров // функции BVSP.beginconst unsigned long STATUS_REQUEST_TIMEOUT =1000; const unsigned long STATUS_REQUEST_INTERVAL =2000; // Определяет размер аудиобуфера const int AUDIO_BUFFER_SIZE =64; / / Определяет размер буфера приемаconst int RECEIVE_BUFFER_SIZE =2; // Инициализирует новый глобальный экземпляр класса BVSP BVSP bvsp =BVSP (); // Инициализирует новый глобальный экземпляр класса BVSMic BVSMic bvsm =BVSMic (); / / Создает буфер, который будет использоваться для чтения записанных семплов // из класса BVSMic byte audioBuffer [AUDIO_BUFFER_SIZE]; // Создает буфер, который будет использоваться для чтения команд, отправленных // с BitVoicer Server. // Байт 0 =контакт число // Байт 1 =значение контакта, байт receiveBuffer [RECEIVE_BUFFER _SIZE]; void setup () {// Устанавливает режимы вывода pinMode (RED_LED_PIN, OUTPUT); pinMode (YELLOW_LED_PIN, ВЫХОД); pinMode (GREEN_LED_PIN, ВЫХОД); // Запуск последовательной связи со скоростью 115200 бит / с Serial.begin (115200); // Устанавливает последовательный порт Arduino, который будет использоваться // для связи, сколько времени пройдет до истечения времени // запроса статуса и как часто запросы статуса должны отправляться на // сервер BitVoicer. bvsp.begin (серийный, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Определяет функцию, которая будет обрабатывать событие frameReceived // bvsp.frameReceived =BVSP_frameReceived; // Подготавливает таймер класса BVSMic bvsm.begin ();} void loop () {// Проверяет, истек ли интервал запроса статуса, и, если он // есть, отправляет запрос статуса на сервер BitVoicer bvsp.keepAlive (); // Проверяет наличие данных в буфере последовательного порта // и обрабатывает их содержимое в соответствии со спецификациями // протокола сервера BitVoicer bvsp.receive (); // Проверяет, доступен ли один SRE. Если есть, // начинает запись. if (bvsp.isSREAvailable ()) {// Если класс BVSMic не записывает, устанавливает аудиовход // и начинает запись if (! bvsm.isRecording) {bvsm.setAudioInput (BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording (); } // Проверяет, есть ли у класса BVSMic доступные образцы if (bvsm.available) {// Проверяет, что входящий режим - STREAM_MODE, перед // передачей потока if (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode (STREAM_MODE); // Считывает образцы аудио из класса BVSMic int bytesRead =bvsm.read (audioBuffer, AUDIO_BUFFER_SIZE); // Отправляет аудиопоток на сервер BitVoicer bvsp.sendStream (audioBuffer, bytesRead); }} else {// Нет доступных SRE. Если класс BVSMic записывает, // останавливает его. если (bvsm.isRecording) bvsm.stopRecording (); }} // Обрабатывает событие frameReceived void BVSP_frameReceived (byte dataType, int payloadSize) {// Проверяет, содержит ли полученный кадр двоичные данные // 0x07 =двоичные данные (массив байтов) if (dataType ==DATA_TYPE_BINARY) {// If 2 байтов получены, обработайте команду. если (bvsp.getReceivedBytes (receiveBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) {analogWrite (receiveBuffer [0], receiveBuffer [1]); }}} 

Схема


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

  1. Система посещаемости с использованием Arduino и RFID с Python
  2. Датчик DHT11 со светодиодами и пьезо-динамиком
  3. Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
  4. Управление роботом Roomba с помощью Arduino и устройства Android
  5. DIY вольтметр с Arduino и дисплеем Nokia 5110
  6. Управление серводвигателем с помощью Arduino и MPU6050
  7. u-blox LEA-6H 02 GPS-модуль с Arduino и Python
  8. Как читать температуру и влажность на Blynk с DHT11
  9. Распознавание и синтез речи с помощью Arduino
  10. Светодиодный куб 4x4x4 с Arduino Uno и 1sheeld