Текущее время: 28 мар 2024, 20:22

Калининград & ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Голосовое управление Ардуино УНО

Тут собраны схемы различных устройств сделанных на контроллерах Ардуино, Лазерный гравер на Ардуино, Металлоискатель на Ардуино, Метеостанция, Кодовый замок, и множество других устройств и изобретений
Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Голосовое управление Ардуино УНО

Сообщение -=dp=- » 25 апр 2015, 20:00

Голосовое управление Ардуино УНО.

Сегодня попалась в руки очень интересная платка - EasyVR 3 shield для Ардуино УНО!.

Долго пришлось ее оживлять :D
Перепробовал почти все способы описанные на просторах интернета и большая часть из них не работоспособны, авторы тех описаний видимо держат это в секрете ;)

А я решил поделиться своими наработками, тем более, что у меня получилось оживить шилд EasyVR 3 и научить его понимать голосовые команды на Русском языке !

Выкладываю скетч для Ардуино УНО

Код: выделить все
#include "Arduino.h"
#if !defined(SERIAL_PORT_MONITOR)
  #error "Arduino version not supported. Please update your IDE to the latest version."
#endif

#if defined(SERIAL_PORT_USBVIRTUAL)
  // Shield Jumper on HW (for Leonardo and Due)
  #define port SERIAL_PORT_HARDWARE
  #define pcSerial SERIAL_PORT_USBVIRTUAL
#else
  // Shield Jumper on SW (using pins 12/13 or 8/9 as RX/TX)
  #include "SoftwareSerial.h"
  SoftwareSerial port(12, 13);
  #define pcSerial SERIAL_PORT_MONITOR
#endif

#include "EasyVR.h"

EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
  GROUP_2  = 2,
};

enum Group2
{
  G2_LEFT = 0,
  G2_RIGHT = 1,
  G2_UP = 2,
  G2_DOWN = 3,
};


int8_t group, idx;

void setup()
{
  // setup PC serial port
  pcSerial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
  // bridge mode?
  int mode = easyvr.bridgeRequested(pcSerial);
  switch (mode)
  {
  case EasyVR::BRIDGE_NONE:
    // setup EasyVR serial port
    port.begin(9600);
    // run normally
    pcSerial.println(F("---"));
    pcSerial.println(F("Bridge not started!"));
    break;
   
  case EasyVR::BRIDGE_NORMAL:
    // setup EasyVR serial port (low speed)
    port.begin(9600);
    // soft-connect the two serial ports (PC and EasyVR)
    easyvr.bridgeLoop(pcSerial);
    // resume normally if aborted
    pcSerial.println(F("---"));
    pcSerial.println(F("Bridge connection aborted!"));
    break;
   
  case EasyVR::BRIDGE_BOOT:
    // setup EasyVR serial port (high speed)
    port.begin(115200);
    // soft-connect the two serial ports (PC and EasyVR)
    easyvr.bridgeLoop(pcSerial);
    // resume normally if aborted
    pcSerial.println(F("---"));
    pcSerial.println(F("Bridge connection aborted!"));
    break;
  }

  while (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    delay(1000);
  }

  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(5);
  easyvr.setLanguage(0);

  group = GROUP_2; //<-- start group (customize)
}

void action();

void loop()
{
  easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

  Serial.print("Say a command in Group ");
  Serial.println(group);
  easyvr.recognizeCommand(group);

  do
  {
    // can do some processing while waiting for a spoken command
  }
  while (!easyvr.hasFinished());
 
  easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

  idx = easyvr.getWord();
  if (idx >= 0)
  {
     group = GROUP_2;
   
    // built-in trigger (ROBOT)
    // group = GROUP_X; <-- jump to another group X
    return;
  }
  idx = easyvr.getCommand();
  if (idx >= 0)
  {
    // print debug message
    uint8_t train = 0;
    char name[32];
    Serial.print("Command: ");
    Serial.print(idx);
    if (easyvr.dumpCommand(group, idx, name, train))
    {
      Serial.print(" = ");
      Serial.println(name);
    }
    else
      Serial.println();
    easyvr.playSound(0, EasyVR::VOL_FULL);
    // perform some action
    action();
  }
  else // errors or timeout
  {
    if (easyvr.isTimeout())
      Serial.println("Timed out, try again...");
    int16_t err = easyvr.getError();
    if (err >= 0)
    {
      Serial.print("Error ");
      Serial.println(err, HEX);
    }
  }
}

void action()
{
    switch (group)
    {
    case GROUP_2:
      switch (idx)
      {
      case G2_LEFT:
        // write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        digitalWrite(9, HIGH);
        break;
      case G2_RIGHT:
        // write your action code here
        digitalWrite(9, LOW);
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
      case G2_UP:
        // write your action code here
        digitalWrite(10, HIGH);
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
             case G2_DOWN:
        // write your action code here
        digitalWrite(10, LOW);
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
      }
      break;
    }
}




Краткая инструкция по использованию EasyVR 3 shield:

Устанавливаем Ардуино ИДЕ,
Подключаем Ардуино УНО к ПК ,
Проверяем в Ардуино ИДЕ появление нового СОМ порта.
Заливаем тестовую прошивку на Ардуино УНО.
Если все работает то продолжаем.
Копируем папку EasyVR в папку с Ардуино IDE \ libraries
Копируем папку с тестовым скетчем tes1 в папку с проектами Ардуино ИДЕ.
Затем открываем ее и запускаем tes1.ino
Вносим изменения в скетч и прошиваем Ардуино УНО.

Затем Устанавливаем EasyVR-Commander.
В процессе установки везде жмем NEXT, OK.
Запускаем из меню ПУСК>ПРОГРАММЫ>VEEAR\EASY VEEAR COMMANDER\EasyVR Commander 3.9.1
Устанавливаем перемычку на EasyVR 3 шилде в положение SW
Выбираем СОМ порт к которому подключина Ардуино УНО с EasyVR шилдом.
Нажимаем соедениться.
Смотрим видеоинструкцию по обучению голосового шилда своим командам тут https://youtu.be/2Hpks-QeBwI
Если управлять устройством будут 2-3 разных человека, то необходимо обучить устройства каждым по отдельности.
Отключаем программу, запускаем Ардуино ИДЕ, прошиваем еще раз, запускаем монитор СОМ порта и наблюдаем в нем
сообщения , произносим команды и смотрим изменение сообщений.


Вложения
EasyVR.rar
Библиотека для EasyVR 3 shield
(212.57 KiB) Скачиваний: 1338
easyvr3_shield1.jpg
EasyVR 3 shield
easyvr3_shield2.jpg
EasyVR 3 шилд

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Голосовое управление Ардуино УНО

Сообщение -=dp=- » 27 апр 2015, 22:23

Я заснял на видео работу EasyVR shield 3 с Ардуино УНО Р3 .

Вот ссылка https://youtu.be/cRXLbI2jIn4



Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Голосовое управление Ардуино УНО

Сообщение -=dp=- » 13 ноя 2015, 18:24

алан писал(а):Здравствуйте. хотел спросить есть ли отличия EasyVR Shield 3.0 и EasyVR Shield 2.0. так как хочу купить.но в интернете нашел EasyVR Shield 2.0. спасибо


На EasyVR Shield 2.0 еще больше информации в интернете, будет проще его оживить ;) .




Вернуться в Устройства на Ардуино

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6