Voice Recognition Module :http://ali.pub/2k0ky2
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Наверное каждый человек хотел бы иметь у себя дома возможность включать\выключать свет в комнате по голосовой команде , чтобы не приходилось вставать и идти к выключателю. Ну или управлять любым другим устройством голосом.
В данной статье мы разберем один способ как управлять голосом устройствами. Для этого нам понадобится модуль распознавания речи Voice recognition module V3.1 .
Данный модуль можно приобрести по ссылке в начале статьи. В комплект поставки входит сам модуль , микрофон на гибкой ножке с разъемом 3,5 мм jack плюс PLS контакты с шагом 2,56 мм для платы модуля.
Данный модуль может работать как в паре с микроконтроллером, так и автономно от него.
Характеристики модуля Voice recognition module V3.1 (V3):
- Напряжение питания – 5 вольт
- Потребляемый ток – до 40 мА
- Интерфейсы – UART, GPIO
- Точность распознавания – 99% (в идеальных условиях)
- Дальность действия – зависит от используемого микрофона, для штатного микрофона из комплекта дальность составляет 0,5 – 1 метр максимального расстояния при достаточно громком голосе.
На данный модуль есть datasheet в котором подробно описано, как управлять и работать с данным модулем. Ссылка на даташит: https://yadi.sk/i/nbj8jyfz3WxQyy
В данном даташите описано несколько способов программирования данного модуля. В данной статье мы рассмотрим только один, способ программирования с помощью arduino.
Для начала нам нужно подключить модуль к arduino по такой схеме:
Данное подключение используется потому, что мы будем использовать serialsoftware.
После того как мы все правильно подключили, необходимо скачать библиотеку по ссылке: https://github.com/elechouse/VoiceRecognitionV3/archive/master.zip
После того как мы скачаем библиотеку и установим ее, нам понадобится пример vr_sample_train который можно найти перейдя в (файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_train)
Выбрав данный пример, загрузим его в ардуино. После загрузки откроем монитор порта:
- В открывшемся мониторе порта, нужно выбрать обязательно. скорость порта 115200, и меню NL ( новая строка) Newline или NL & CR.
- После появившейся таблицы в мониторе порта нужно вписать команду “
settings" для того чтоб определить, отвечает ли модуль на команды и все ли подключено правильно.
- Далее нужно будет ввести команду “
sigtrain 0 On" где команда "sigtrain" отвечает за запись команды, "0" это идентификатор команды, "On" это описание нашей команды оно может быть произвольной.
После ввода данной команды в мониторе порта появится команда”Speak now”, которая сигнализирует нам о том, что началась запись команды, и нужно проговорить в микрофон нужную команду которую мы хотим использовать. Затем появится команда “Speak again”,которая просит нас повторить команду еще раз. Если команды правильные и совпадают, то высветится команда”Success”, и “record 0” . Но если команда не верная или же присутствовали посторонние шумы, то высветится команда “Cann’t matched” что символизирует о том что команда не записалась и просит проговорить еще раз ее. - Если хотим записать еще одну команду, например первая была “On” на включение, а следующую хотим записать на выключение, то следует нам вписать следующую команду “
sigtrain 1 Off
”
- После записи команд, нам нужно их записать в память контроллера, чтоб он мог данные команды использовать. За это отвечает команда “load”. Нам нужно записать в модуль две команды с идентификаторами “0” и “1” тогда следует ввести команду “
load 0 1"
После записи можно будет проговорить наши команды и если команды распознаются то в мониторе порта будут появляться вот такие строки
Теперь позле записи команд давайте попробуем по управлять голосом светодиодами. Для этого откроем пример vr_sample_control_led(Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_control_led) и загрузим его в ардуино.
И подключив светодиод к 13 пину, мы можем увидеть как по записанным нашим командам светодиод включается и выключается.
Но если вы хотите большими устройствами управлять, например как я показал в видео двумя светодиодами, то вот Вам для примера скетч чуть измененный из стандартного примера. для управления ни одним светодиодом, а двумя.
Скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #include <SoftwareSerial.h> #include "VoiceRecognitionV3.h" /** Connection Arduino VoiceRecognitionModule 2 -------> TX 3 -------> RX */ VR myVR( 2 , 3 ); // 2:RX 3:TX, you can choose your favourite pins. uint8_t records[ 7 ]; // save record uint8_t buf[ 64 ]; int led = 13 ; int led1 = 12 ; #define onRecord ( 0 ) #define offRecord ( 1 ) #define onRecord1 ( 2 ) #define offRecord1 ( 3 ) /** @brief Print signature, if the character is invisible, print hexible value instead. @param buf --> command length len --> number of parameters */ void printSignature(uint8_t * buf, int len) { int i; for (i = 0 ; i & lt;len; i + + ){ if (buf[i] & gt; 0x19 & amp; & amp; buf[i] & lt; 0x7F ){ Serial.write (buf[i]); } else { Serial.print ( "[" ); Serial.print (buf[i], HEX); Serial.print ( "]" ); } } } /** @brief Print signature, if the character is invisible, print hexible value instead. @param buf --> VR module return value when voice is recognized. buf[0] --> Group mode(FF: None Group, 0x8n: User, 0x0n:System buf[1] --> number of record which is recognized. buf[2] --> Recognizer index(position) value of the recognized record. buf[3] --> Signature length buf[4]~buf[n] --> Signature */ void printVR(uint8_t * buf) { Serial.println ( "VR Index\tGroup\tRecordNum\tSignature" ); Serial.print (buf[ 2 ], DEC); Serial.print ( "\t\t" ); if (buf[ 0 ] = = 0xFF ){ Serial.print ( "NONE" ); } else if (buf[ 0 ] & amp; 0x80 ){ Serial.print ( "UG " ); Serial.print (buf[ 0 ] & amp;( ~ 0x80 ), DEC); } else { Serial.print ( "SG " ); Serial.print (buf[ 0 ], DEC); } Serial.print ( "\t" ); Serial.print (buf[ 1 ], DEC); Serial.print ( "\t\t" ); if (buf[ 3 ] & gt; 0 ){ printSignature(buf + 4 , buf[ 3 ]); } else { Serial.print ( "NONE" ); } Serial.println ( "\r\n" ); } void setup () { /** initialize */ myVR.begin( 9600 ); Serial.begin ( 115200 ); Serial.println ( "Elechouse Voice Recognition V3 Module\r\nControl LED sample" ); pinMode (led, OUTPUT ); pinMode (led1, OUTPUT ); if (myVR.clear() = = 0 ){ Serial.println ( "Recognizer cleared." ); } else { Serial.println ( "Not find VoiceRecognitionModule." ); Serial.println ( "Please check connection and restart Arduino." ); while ( 1 ); } if (myVR.load((uint8_t)onRecord) & gt; = 0 ){ Serial.println ( "onRecord loaded" ); } if (myVR.load((uint8_t)offRecord) & gt; = 0 ){ Serial.println ( "offRecord loaded" ); } if (myVR.load((uint8_t)onRecord1) & gt; = 0 ){ Serial.println ( "onRecord1 loaded" ); } if (myVR.load((uint8_t)offRecord1) & gt; = 0 ){ Serial.println ( "offRecord1 loaded" ); } } void loop () { int ret; ret = myVR.recognize(buf, 50 ); if (ret & gt; 0 ){ switch (buf[ 1 ]){ case onRecord: /** turn on LED */ digitalWrite (led, HIGH ); break ; case offRecord: /** turn off LED*/ digitalWrite (led, LOW ); break ; case onRecord1: /** turn on LED */ digitalWrite (led1, HIGH ); break ; case offRecord1: /** turn off LED*/ digitalWrite (led1, LOW ); break ; default : Serial.println ( "Record function undefined" ); break ; } /** voice recognized */ printVR(buf); } } |
Скачать скетч: https://yadi.sk/d/LwlHOfhH3WxW96
Ну и собственно демонстрация работы в видео: