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 пину, мы можем увидеть как по записанным нашим командам светодиод включается и выключается.
Но если вы хотите большими устройствами управлять, например как я показал в видео двумя светодиодами, то вот Вам для примера скетч чуть измененный из стандартного примера. для управления ни одним светодиодом, а двумя.
Скетч:
#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<len; i++){ if(buf[i]>0x19 && buf[i]<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]&0x80){ Serial.print("UG "); Serial.print(buf[0]&(~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]>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) >= 0){ Serial.println("onRecord loaded"); } if(myVR.load((uint8_t)offRecord) >= 0){ Serial.println("offRecord loaded"); } if(myVR.load((uint8_t)onRecord1) >= 0){ Serial.println("onRecord1 loaded"); } if(myVR.load((uint8_t)offRecord1) >= 0){ Serial.println("offRecord1 loaded"); } } void loop() { int ret; ret = myVR.recognize(buf, 50); if(ret>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
Ну и собственно демонстрация работы в видео: