Сегодня попалась в руки очень интересная платка - EasyVR 3 shield для Ардуино УНО!.
Долго пришлось ее оживлять
Перепробовал почти все способы описанные на просторах интернета и большая часть из них не работоспособны, авторы тех описаний видимо держат это в секрете
А я решил поделиться своими наработками, тем более, что у меня получилось оживить шилд 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 разных человека, то необходимо обучить устройства каждым по отдельности.
Отключаем программу, запускаем Ардуино ИДЕ, прошиваем еще раз, запускаем монитор СОМ порта и наблюдаем в нем
сообщения , произносим команды и смотрим изменение сообщений.