Управление компьютером. Голосовое управление ПК. Arduino + voice recognition module v3.1 + EasyHID + DFPlayer. arduino.. arduino. arduino uno.. arduino. arduino uno. voice recognition.. arduino. arduino uno. voice recognition. Голосовые интерфейсы.. arduino. arduino uno. voice recognition. Голосовые интерфейсы. Разработка под Arduino.

– Когда стало скучно нажимать на кнопку выключения компьютера.

Введение

Желание (лень) исполнять определенную инструкцию не только с помощью клавиатуры, но и голоса, побудили сделать устройство, которое выполняет голосовые команды.

Устройство должно эмулировать клавиатуру, что-то выполнять на компьютере после получения команды (какого-то слова или предложения), и иметь отклик (сигнал с зуммера и динамика).

Принципиальная схема устройства

Рисунок 1 - Принципиальная схема

Рисунок 1 – Принципиальная схема

Устройство состоит из следующих модулей:

  1. Распознавание голоса (voice recognition module v3.1)

  2. DFPlayer — A Mini MP3 Player

  3. (Хотелось бы выделить в качестве модуля или отдельного фрагмента) эмулирование устройства ввода по USB с помощью библиотеки EasyHID.

Описание

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

DFPlayer – используем для отклика устройства, оно будет реагировать на наши команды и отвечать нам приятным женским голосом (актриса дубляжа, которая озвучивала героиню Полину, из новеллы «Зайчик») Для этого необходим знакомый мне бот(телеграмм) –@silero_voice_bot.

Я подготовил для себя примерный список:

Рисунок 2 - список звуковых дорожек в формате мр3

Рисунок 2 – список звуковых дорожек в формате мр3
Комментарий

Я уверен, что мне этого списка мне хватит, так как я пользовался платным сервисом бота (есть и бесплатный) голосовые команды не предоставлю, не из жадности, а из-за уважения к чужому труду.

Так же обратите внимание (в описании к модулю это есть) как стоит наименовать каталоги и файлы во флеш-накопителе, после того как заготовите “ответы”.

Рисунок 3 - пример каталога

Рисунок 3 – пример каталога

EasyHID – библиотека, с помощью нее будем, например: вводить компьютер в сон и выводить из сна компьютер.

Комментарий

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

Voice recognition module v3.1(далее VRM) – используется в качестве того кто будет записывать голосовые и команды распознавать их.

Комментарий

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

В общем и целом чем проще, четче, громче – тем лучше (английский выигрывает сильно над русским в этом плане).

У модуля VRM я заменил микрофон (его родной) на CZN-15E (или +- похожий), он немного не подходит, но удачно совпадает с диаметром “посадочного” места для микрофона.

Рисунок 4 - микрофон

Рисунок 4 – микрофон

-Голосовые команды я записывал примерно так, 20-30 см от микрофона, но (комментарий 2) чем громче тем лучше (не кричать), четко и самое главное обычный (если можно так сказать стандартный) тембр и темп голоса.

Рисунок 5 - сделаем вид звукозаписывающей студии

Рисунок 5 – сделаем вид звукозаписывающей студии

Существенный недостаток модуля VRM, то что в «оперативной» своей памяти он держит только 7 голосовых команд, его скорость и «длинна» звуковой дорожки 1,5 сек.

Комментарий

Меня это сильно огорчило, но с другой стороны забавно пользоваться 7-й системой счисления. Развязывает руки , и можно написать все что угодно, важно только помнить как это будет произносится=)

1,2,6,5 – цифры произносятся четко и отдельно, для выполнение заданной команды.

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

Рисунок 6 - нумерация команд в программном коде

Рисунок 6 – нумерация команд в программном коде

После сборки, имейте ввиду, что питание от USB компьютера будет не достаточно для устройства и будут “веселые ошибки” при загрузке скетча, я использую USB-HUB c отдельным питанием (на выход USB).

Алгоритм

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

Проведите обучение Вашего модуля, пронумеруйте и запомните(например: по аналогии в программном коде). Рекомендую поэкспериментировать в Вашем помещении, Вы будете приятно разочарованы VRM, но главное работает.

Запишите через любой сервис голосовые ответы на флеш -накопителе (в mp3 формате), можете расположить в каталогах, или в одном, правда не забудьте запомнить номера, или используйте только зуммер.

Программный код частично подготовлен к добавлению нового функционала, необходимо дописать новую функцию (того что Вы хотите и добавьте в соответствующий исполнитель (switch).

Комментарий

Программный код частично подготовлен к добавлению нового функционала – лучше напишите под себя=), ниже старался выделить важные моменты, остальное крайне просто.

Фрагмент программного кода
void work_voice(){ 
/*...*/
// сравнение с массивом - massiv_my_command - в котором хранятся команды( номер соответсвует индексу)
switch(i){
  case 0: on_comp()     ;  break;   // Включить компьютер
  case 1: off_comp()    ;  break;   // Выключить компьютер
  case 2: hellow_comp() ;  break;   // Поздороваться 
  /*...*/
} flag_start_lesten_voice = false; break;}             // Сбросить флаг (общение прекращено)
/*...*/
}

Условное описание исполнения программного кода, в примерах выделены, как мне кажется, важные строчки при собственном написании программного кода.

  1. В модуль VRM – загружены первые ключевые команды, из которых строится предложение (последовательность голосовых команд), другие голосовые команды будут распознаны, но проигнорированы, напомню что голосовая команда не более 1,5 секунды, а так же скорость распознавания модуля.

Фрагмент программного кода
// пример:
// Выполняем здесь процесс ожидания ( таймер предварительно запущен)
ISR(TIMER1_A) { /*...*/}  

// рандомное воспроиведение из каталога "не могу выполнить"
DFPlayer.playFolder(4,random_number);                 // SD201

//Если все звуковые файлы в одном каталоге (в корне)  // SDMP3012
DFPlayer.play(12)  

  1. Если пришла ключевая голосовая команда, запускается таймер ожидания, ждем следующую команду (которая участвует в той или иной комбинации предложения), так же в качестве отклика подает короткий сигнал зуммера (голосовая команда была распознана).

Фрагмент программного кода
// пример:
// Выполняем здесь процесс ожидания ( таймер предварительно запущен)
ISR(TIMER1_A) { /*...*/}  

// рандомное воспроиведение из каталога "не могу выполнить"
DFPlayer.playFolder(4,random_number);                 // SD201

//Если все звуковые файлы в одном каталоге (в корне)  // SDMP3012
DFPlayer.play(12)  

  1. Если в течении 10 секунд ничего не поступило или голосовые команды не были распознаны, то сообщим об этом и начнем сначала. Если поступили, сохранили комбинацию, сверили с тем, что ожидаем, если есть такая команда выполняем ее инструкцию, сопровождаем откликом соответствующей звуковой дорожкой и начинаем сначала.

Фрагмент программного кода
// пример:
void setup() {
  /*...*/
  HID.begin();                // Инициализация USB
}

void loop() {
  /*...*/
  HID.tick();                 // Вызываем тикер не реже чем каждые 10 мс!
}

void do_something(){
  Keyboard.click(KEY_SLEEP);    // в сон
  Keyboard.click(KEY_WAKE);     // разбудить 
  Keyboard.println("hi");       // напечатать (там где выбрал курсор)
}

Обратите внимание! Какие голосовые команды загружены в оперативную память распознавателя, и помните какие необходимы во время произнесения команды (предложения), я выделил, для себя, универсальность загрузки цифр (1-7), соответственно и их произношение, но можно подгружать в процессе, то что необходимо, но не забудьте стирать старые, загрузка работает так: первый вошел — последний вышел.

После произнесение команды, мы посылаем в компьютер команду спать (хотел бы я так сказать, но по итогу мы нажали сочетание клавиш, которое отслеживаем специальной программой (предварительно настроили реакцию компьютера на рисунке 7).

Рисунок 7 - Программа HotKeyz

Рисунок 7 – Программа HotKeyz

Видео

Работу модуля продемонстрирую на видео:

Комментарий

Если видео не загружается- на видео запечатлено, как vrm функционирует.

Проблемы

  1. С HID – подобными библиотеками которые реализованы, через эмулирование устройства ввода по USB, проблем и вопросов тьма, начиная с ppm 16MHz кварца, который стоит на борту каждой платы arduino nano (для поддержки стандарта USB).

  2. Есть вопрос на который я не смог найти ответа. Почему windows 7 в режиме сна игнорирует устройства реализованные на HID – подобных библиотеках

Попытка решить

  1. На первый вопрос, я решил (поленился) использовать arduino DUE, и его встроенный native USB, так же можно выбрать какой-нибудь UART-USB, а сам проект реализовать не на платформе arduino nano, например на той же arduino DUE,выбор свободный.

Фрагмент программного кода
//ПРИМЕР
#include <Keyboard.h>
int w,f;


void setup() {
  Keyboard.begin();
  pinMode(10,INPUT);
  pinMode(9,INPUT);
  
}

void loop() {
  delay(10);
  w = digitalRead(10);
  f = digitalRead(9);
  if(w == HIGH){
    Keyboard.press(KEY_LEFT_SHIFT);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_F10);
    delay(200);
    Keyboard.releaseAll(); //Отпустить все
    delay(1000);
    w = 0;
  }
 if(f == HIGH){
    Keyboard.press(KEY_F10);
    delay(200);
    Keyboard.press(0x57);
    delay(200);
    Keyboard.releaseAll(); //Отпустить все
    delay(1000);
    f=0;
 }

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


Итог

После сборки устройства подошел к философскому вопросу, действительно ли мне оно необходимо — голосовое управление ПК?

Не все поставленные задачи были решены, но в качестве игрушки VRM — модуль интересно себя показал. К сожалению для чего‑то серьезного он не подойдет, не в связи с проблемой номер 2, а с его взаимодействием. Голосовое управление реализованное на этом голосовом модуле – крайне щепетильно, распознавание голоса здесь — на уровне проходной, с отсутствием охраны и дверей, табличка весит, но поймет слово от любого человека (почти); слово не стоит произносить дольше 1,5 сек, скорость обработки и момента “‘эфира” – когда модуль записывает для сравнения, крайне медленное, очень часто будут происходить ситуации с тем что придется произносить команду заново.

Автор: RivayMark

Источник

Rambler's Top100