• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Модуль распознования речи Elechouse Voice Recognition Module v3.1 и подключение его к Arduino

3 июня, 2018

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)

Выбрав данный пример, загрузим его в ардуино. После загрузки откроем монитор порта:

  1. В открывшемся мониторе порта, нужно выбрать обязательно. скорость порта 115200, и меню NL ( новая строка) Newline или NL & CR.
    sm
  2. После появившейся таблицы в мониторе порта нужно вписать команду “settings" для того чтоб определить, отвечает ли модуль на команды и все ли подключено правильно.
    input input
  3. Далее нужно будет ввести команду “sigtrain 0 On" где команда "sigtrain" отвечает за запись команды, "0" это идентификатор команды, "On" это описание нашей команды оно может быть произвольной. После ввода данной команды в мониторе порта появится команда”Speak now”, которая сигнализирует нам о том, что началась запись команды, и нужно проговорить в микрофон нужную команду которую мы хотим использовать. Затем появится команда “Speak again”,которая просит нас повторить команду еще раз. Если команды правильные и совпадают, то высветится команда”Success”, и “record 0” . Но если команда не верная или же присутствовали посторонние шумы, то высветится команда “Cann’t matched” что символизирует о том что команда не записалась и просит проговорить еще раз ее.sigtrain
  4. Если хотим записать еще одну команду, например первая была “On” на включение, а следующую хотим записать на выключение, то следует нам вписать следующую команду “sigtrain 1 Off ”
    sigtrain
  5. После записи команд, нам нужно их записать в память контроллера, чтоб он мог данные команды использовать. За это отвечает команда “load”. Нам нужно записать в модуль две команды с идентификаторами “0” и “1” тогда следует ввести команду “load 0 1"
    loadПосле записи можно будет проговорить наши команды и если команды распознаются то в мониторе порта будут появляться вот такие строки
    vrТеперь позле записи команд давайте попробуем по управлять голосом светодиодами. Для этого откроем пример vr_sample_control_led(Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_control_led) и загрузим его в ардуино.

И подключив светодиод к 13 пину, мы можем увидеть как по записанным нашим командам светодиод включается и выключается.

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

Скетч:

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"

/** 
 Connection
 Arduino VoiceRecognitionModule
 2 -------&gt; TX
 3 -------&gt; 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 --&gt; command length
 len --&gt; 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 --&gt; VR module return value when voice is recognized.
 buf[0] --&gt; Group mode(FF: None Group, 0x8n: User, 0x0n:System
 buf[1] --&gt; number of record which is recognized. 
 buf[2] --&gt; Recognizer index(position) value of the recognized record.
 buf[3] --&gt; Signature length
 buf[4]~buf[n] --&gt; 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

Ну и собственно демонстрация работы в видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·