супер! однозначно в машину поставлю )
Вид для печати
супер! однозначно в машину поставлю )
купил на ебее вот такой http://www.ebay.com/itm/Voice-Recogn...item20bd30714f вчера пришёл, открыл посылку и ужаснулся, сборка у этой платы конская всё криво косо некоторые ножки слиплись, посмотрел по датащиту вроде не должны замыкаться, связался с продавцом - он молчит, потом отпишусь как испробую
Ждем отчета о тестировании
Доброе время суток! Вопрос, по-видимому, в основном к Chip-у. Недавно заинтересовался duin`ами, опыта работы с этими девайсами нема. Я так понимаю, что непосредственно у Arduino-платы нет возможности воспроизводить звуковые файлы из-за отстутствия расширения под внешнюю память. На Вашем видео (что смог разглядеть), выведен внешний динамик, подключен модуль EasyVR с зашитыми гол.командами (для анализа с входными), и собственно duin-плата. Что позволяет воспроизводить на динамик реакцию на "стоп"-слово, ведь модуль как-то отвечает "слушаю"? Гугль говорит, что для этого есть некий mp3-шилд, но у Вас в схеме он вроде отсутствует..
А что мешает подпаять чип AT26Fxxx у него всего 8 выводов из них 2 вывода питание и 3 вывода Шина. Еще можно подключить разъем для SD Flash картЦитата:
у Arduino-платы нет возможности воспроизводить звуковые файлы из-за отстутствия расширения под внешнюю память.
Для воспроизведения 2-3 слов, достаточно памяти Carduino, никаких шилдов для этого не нужно. Как воспроизводить звук я уже писал на форумеЦитата:
На Вашем видео (что смог разглядеть), выведен внешний динамик, подключен модуль EasyVR с зашитыми гол.командами (для анализа с входными), и собственно duin-плата. Что позволяет воспроизводить на динамик реакцию на "стоп"-слово, ведь модуль как-то отвечает "слушаю"? Гугль говорит, что для этого есть некий mp3-шилд, но у Вас в схеме он вроде отсутствует..
очень интересная тема, топикстартеру респект!
Ребят, подскажите, а где в Москве можно купить этот модуль VRbot ?
тоже хочу дома ручные выключатели света на голосовые заменить :)
Могу продать 2 модуля VRBot по 1800р. за каждый
Хочу себе приобрести EasyVR
в итоге: ножки которые слипшиеся были , так и должно было быть. записал 3 команды, на которые реагируют светодиоды, если называю другие команды они тухнут. планирую сделать как у Чипа, освещение голосовым управлением
У них даже плата одинаковая, только у EasyVR есть 3 входа/выхода , теоретически можно без ардуины использовать. Софт используется тот же
фраза зал подразумевает включение 4того светодиода, который не подключен(код пробный просто переключает выхода по очереди). распознавание кстати не индивидуальное, попробовал друг повторять эти же фразы - все сработало(хотя в мануале написано наоборот). по дальности метра 3 бьет, но думаю другой микрофон попробовать. и из мануала я понял что фраза может длиться 1.3 секунды.
http://www.elechouse.com/elechouse/i...ule/Manual.pdf
а для чего фраза тригер?
Чтобы не было случайного срабатывания.Цитата:
а для чего фраза тригер?
Например включен телевизор и в телевизоре произнесли похожую фразу, разговариваешь по телефону или говоришь жене закрой дверь в "зал"
Маловато.Цитата:
фраза может длиться 1.3 секунды.
аа все понял) ,что то даже не подумал.
это получается перед каждым словом, при записи нужно произносить слово триггер а, с длинной записи 1.3 секунды это будет трудновато))
нужно придумывать команды из слов которые очень редко включаются или осваивать быстроговорение))
Здравствуйте, Чип!
с удовольствием заберу один модуль (один т.к. сперва нужно научится с ним общаться :) ).
Где можно будет осуществить обмен 1,8 Крублей на 1 модуль )) ?
Встретится могу только в будни и после 17:00.
ЗЫ Хотел написать в личку, но: "Вы не можете отправить сообщение Chip, поскольку он(а) не разрешил(а) принимать личные сообщения..."
отправил личное сообщение
Проверил настройки у меня ничего не блокирует прием сообщений, может Вы пытались отправить публичное сообщение?
еще раз, как и в предыдущий раз, попробовал ответить в лику, опять такое-же сообщение... не понятно, что я делаю не так...
сообщение принял, чуть позже позвоню Вам.
я так понял для работы с VRBot мне еще нужен будет модуль Arduino, а его случайно у Вас лишнего не завалялось?:rolleyes:
Ардуино тоже есть.
А можешь выложить код с использованием слова триггера?я пока новичок, не могу допетрить как реализовать
Триггер программируется программой EasyVR GUI
Всем доброго времени суток!
Чип, я тоже хотел бы приобрести один VRBot, если еще возможно.
Письмо в личку отправил, но оно как мне кажется, не ушло...
Мой тел. 8-926-7777-сто пятьдесят четыре. спасибо.
Остался последний, могу продать
Он уже мой!!!:)
Нужен Ваш тел. для связи.
ну вот, наконец-то и я сделал свой голосовой выключатель.
вот так выглядит весь комплект.
Вложение 14121
а вот собственно результат...
звуковые файлы использовал которые опубликовал Chip в теме
Воспроизведение WAVE на Carduino
Chip, спасибо!
жаль не хватило 4кб памяти для звука "готово".
Классно все получилось!
По поводу звука, есть скетч интереснее чем по указанной тобой ссылке.
Вместо "Готово" можно какой нибудь бип сигнал сделать
Добрый день,а можно на этой штуковине реализовать кратковременный импульс,например
сказал "раз"- реле шелкнуло и отпустило?
Можно все что захочешь сделать, это зависит не от устройства , а от программной реализации
Понял,спасибо.Жду платку,на неделе придет.
Всем привет!!!
Благодаря Эдуарду, я то же на днях стал счастливым обладателем vrbot.
Но с программированием у меня не очень (если точно, то почти ни как).
Сбросьте свой скечт пожалуйста, а там я как-нибудь разберусь...:)
Вообще, я хотел соорудить в машине кнопку старт-стоп + голосовое управление запуском и снятие-постановку на охрану.
Ну всякие там примочки, типо, мяня подрезают, я сигналю и произнеся слово "сцуко" паралельно сигналит тепловозный гудок...:eek:
Прям руки чешутся от предвкушения...
Спасибо! но пока еще есть недочеты...один из них запечатлен в моем видео - после слова-триггер дается 4ре попытки сказать слово-команду, если все попытки не успешны, воспроизводится звук "Повторите" и почему-то иногда, когда я попадаю в последнюю попытку, при этом команда распознается, но все равно воспроизводится звук "Повторите" как будто все 4ре попытки закончились и были не успешными.
На видео - когда я сказал слово "звук", команда опознана и должен был просто громко пикнуть бузер и он пикнул, но т.к. я попал в последнюю попытку....то почему-то еще воспроизвелся звук "Повторите".
в общем, буду думать....как пофиксить данный баг )
очень интересно, попробую...
так и есть, в место "Готово", громко пикает бузер спрятанный под Carduino )
Вложение 14124
и еще одна проблемка которая меня больше всего мучает :confused:
Chip, Вы не сталкивались с такой проблемой? - на домашнем компе(Win7х64) не могу соединится с модулем VRbot, программа VRbot GUI - v.1.1.3.0 сообщает: "Could not detect device conected to port COM8".
На рабочем компе(Win7х64) успешно конектится.
Дома я записывал команды соединяясь с помощью планшета(Win7х86), но что то торкнуло меня поставить на планшет Win8х86 и теперь с планшета как и с домашнего компа я не могу соединится с модулем VRbot.
Драйвера для сом-порта пробовал CDM20814 и CDM20817.
У меня нет ни на одном компе Win7х64, так что не подскажу
Могу свой вариант скетча выложить , но я использую хардверный UART
PHP код:
//void setup()
//{
// pinMode(0, INPUT); //RX
// pinMode(1, INPUT);//TX
//}
//void loop() { }
#define F_CPU 16000000UL
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <SmallUart.h>
#include <avr/wdt.h>
#include "listen.h"
#include "repeat.h"
#include "performed.h"
#include "protocol.h"
char cmd;
byte Lamp_Stat=0;
volatile uint16_t sample=0;
volatile uint8_t lastSample, FirstSample;
volatile byte new_data,future_data,old_data;
volatile byte stat=0;
volatile boolean light_status=false;
unsigned char *wave;
unsigned int length;
volatile uint16_t timerCount, lengthImpuls;
volatile uint16_t Counter=0;
//********************************************************************
ISR(TIMER2_COMPA_vect)
{
switch (stat)
{
case 0:{
old_data = pgm_read_byte(&wave[sample]); ta;
stat=1;
++sample;
if (sample == length) stat=4;
future_data = pgm_read_byte(&wave[sample]);
new_data = (old_data+future_data)/2;
}
break;
case 1: {OCR2A=(old_data+new_data)/2; stat=2; }
break;
case 2: {OCR2A = new_data; stat=3; }
break;
case 3: {OCR2A=(new_data+future_data)/2; stat=0; }
break;
case 4: if(lastSample==0) stat=5; else {--lastSample; OCR2A=lastSample;}
break;
case 5: stopPlayback();
break;
}
}
//********************************************************************
void setup()
{
pinMode(2, INPUT); // Вход , к фототранзистору
pinMode(5, OUTPUT); //выход ШИМ на ИК светодод
TCCR0B = TCCR0B & 0b11111000 | 3;//частота ШИМ 1000Гц
analogWrite(5,128 ); //запустить ШИМ
for (uint8_t i=11; i<20; ++i) {pinMode(i, OUTPUT); digitalWrite(i,LOW);}//выходы на триаки
digitalWrite(11, LOW); //Выключить динамик
UART_Init(9600);
VRbot_setup();
attachInterrupt(0, Ir_sens, RISING); //внешнее прерывание по фронту
//Timer1.initialize(10); //инициализация таймера
//Timer1.attachInterrupt(callback); //прерывание таймера
wdt_enable (WDTO_8S);//wdt установить на 8сек
}
void callback() { timerCount++; }
void Ir_sens()
{
lengthImpuls = timerCount;
if(lengthImpuls<99 || lengthImpuls>105) Counter=0;
Counter++;
}
//********************************************************************
void loop()
{
//label1:
VRbot_RecognizeSD(3); //тригер label1:
cmd = VRbot_CheckResult();
if(cmd == 0 || cmd == 1 || cmd == 2 )
{
play_wave((unsigned char *)listen, listen_length);
_delay_ms(500);
VRbot_RecognizeSD(2); //label2:
cmd = VRbot_CheckResult();
// if(cmd > 0) goto label2;
switch (cmd)
{
case -4: VRbot_Detect(); break;
case -3: play_wave((unsigned char *)repeat, repeat_length); break; // INVALID
case -2: play_wave((unsigned char *)repeat, repeat_length); break;//TimeOut
case -1: play_wave((unsigned char *)repeat, repeat_length); break; // Error
case 0: Lamp_Stat=~Lamp_Stat; break;//я
case 1: Lamp_Stat=~Lamp_Stat; break;//Кристина
case 2: Lamp_Stat=~Lamp_Stat; break;//Таня
case 3: Lamp_Stat=~Lamp_Stat; break;//Максим
case 4: Lamp_Stat=~Lamp_Stat; break;//Игорь
}//switch
Lamp_Swich();
} else if(cmd == -4) VRbot_Detect(); //goto label1;
wdt_reset();
}
//******************************************************
void Lamp_Swich(void)
{
if(Lamp_Stat==0) for (int i=13; i < 20; i++) digitalWrite(i,LOW);
else for (int i=13; i < 20; i++) digitalWrite(i,HIGH);
}
//******************************************************
unsigned char VRbot_read(void)
{
uint8_t val = 0;
for (uint16_t i = 0; i < 3000; ++i)
{
if(UART_ReadByte(val)) break;
_delay_ms(2);
}
// while(!UART_ReadByte(val)) {_delay_ms(2);}
return val;
}
//******************************************************
void VRbot_write(uint8_t b)
{
//Serial.print(b, BYTE);
UART_SendByte(b);
_delay_ms(5);
}
//******************************************************
void VRbot_setup()
{
if (VRbot_Detect())
{
VRbot_ID();
//VRbot_SetBaudrate(115200);
VRbot_SetLanguage(0);
VRbot_SetTimeout(5);
VRbot_SetLDelay(0);
} else while(!VRbot_Detect){digitalWrite(13,LOW); _delay_ms(200); digitalWrite(13,HIGH); _delay_ms(200); }
}
//******************************************************
boolean VRbot_Detect(void)
{
unsigned char i;
for (i = 0; i < 100; ++i)
{
VRbot_write(CMD_BREAK);
if ( VRbot_read() == STS_SUCCESS) {return true; break;} else return false;
}
}
//******************************************************
boolean VRbot_ID(void)
{
VRbot_write(CMD_ID);
if (VRbot_read() == STS_ID) VRbot_write(ARG_ACK); else return 0;
if (VRbot_read() == ARG_ZERO) return true; else return false;
}
//******************************************************
boolean VRbot_SetTimeout(unsigned char s)
{
VRbot_write(CMD_TIMEOUT);
VRbot_write(ARG_ZERO + s);
if (VRbot_read() == STS_SUCCESS) return true; else return false;
}
//******************************************************
boolean VRbot_SetLanguage(unsigned char lang)
{
VRbot_write(CMD_LANGUAGE);
VRbot_write(ARG_ZERO + lang);
if (VRbot_read() == STS_SUCCESS) return true; else return false;
}
//******************************************************
boolean VRbot_SetBaudrate(unsigned int bdr)
{
unsigned char b=12;
if (bdr==115200)b=1;
if (bdr==57600) b=2;
if (bdr==38400)b=3;
if (bdr==19200)b=6;
if (bdr==9600)b=12;
VRbot_write(CMD_BAUDRATE);
VRbot_write(ARG_ZERO + b);
if (VRbot_read() == STS_SUCCESS) {Serial.begin(bdr); return true;} else return false;
}
//******************************************************
boolean VRbot_SetLDelay(unsigned char time)
{
VRbot_write(CMD_DELAY);
VRbot_write(ARG_ZERO + time);
if (VRbot_read() == STS_SUCCESS) return true; else return false;
}
//******************************************************
void VRbot_RecognizeSD(unsigned char group)
{
VRbot_write(CMD_RECOG_SD);
VRbot_write(ARG_ZERO + group);
}
//******************************************************
void VRbot_RecognizeSI(unsigned char ws)
{
VRbot_write(CMD_RECOG_SI);
VRbot_write(ARG_ZERO + ws);
}
//******************************************************
char VRbot_CheckResult(void)
{
unsigned char rx=0;
rx = VRbot_read();
if (rx == STS_SIMILAR || rx == STS_RESULT)
{
VRbot_write(ARG_ACK);
return (VRbot_read() - ARG_ZERO);
}
if (rx == STS_TIMEOUT) return -2;
if (rx == STS_ERROR) return -1;
if (rx == STS_INVALID) return -3;
if (rx == 0) return -4;
}
//*************************************************************************
void startPlayback()
{
sample=0;
stat=0;
ASSR |=(1<<AS2); //AS2 Asynchronous Timer/Counter2
TCCR2A |= ((1<<COM2A1)|(0<<COM2A0)|(1<<WGM21) | (0<<WGM20));
TCCR2B = ((0 << CS22) | (0 << CS21) | (1 << CS20) | (0<<WGM22));
lastSample = pgm_read_byte(&wave[length-1]);
FirstSample = pgm_read_byte(&wave[0]);
TCNT2 = 0;
TIMSK2|=(1<<OCIE2A);
sei();
for (int i=0; i <FirstSample; i++)
{
new_data=i;
stat=2;
sample = 0;
_delay_us(10);
}
stat=0;
}
void stopPlayback()
{
TIMSK2&=(0<<OCIE2A);
TCCR2B &=(0<<CS10);
}
//******************************************************
void play_wave(unsigned char *wave_data, unsigned int wave_length)
{
wave=wave_data;
length=wave_length;
startPlayback();
}
//******************************************************
Какой навороченный скечт!!!!:eek:
Как я понял, это чтобы vrbot распозновал пять голосов на вкл\выкл свет...
Я надеялся, что код по проще будет...ладно, будем рыть интернет и выяснять что, куда, зачем..:)
Можно и попроще
Вот скетч который я в шапке темы демонстрировал
Ты смотри на цикл Loop все остальное тебе не нужно
PHP код:
#include <SoftwareSerial.h>
#include "protocol.h"
#include <Servo.h>
#define rxPin 3 //// VRbot UART Init ETX
#define txPin 2 //// VRbot UART Init ERX
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
Servo myservo;
signed char cmd;
void setup()
{
VRbot_setup();
Serial.begin(115200);
myservo.attach(12,700,2300);
pinMode(10, OUTPUT);
}
//******************************************************
//******************************************************
void loop()
{
delay(20);
digitalWrite(10,LOW);
VRbot_RecognizeSD(1);
cmd = VRbot_CheckResult();
switch (cmd)
{
case -2: // Error
digitalWrite(10,HIGH);
break;
case -1: // Timout
digitalWrite(10,HIGH);
break;
case 0:
myservo.writeMicroseconds(700);
break;
case 1:
myservo.writeMicroseconds(700+160);
break;
case 2:
myservo.writeMicroseconds(700+160*2);
break;
case 3:
myservo.writeMicroseconds(700+160*3);
break;
case 4:
myservo.writeMicroseconds(700+160*4);
break;
case 5:
myservo.writeMicroseconds(700+160*5);
break;
case 6:
myservo.writeMicroseconds(700+160*6);
break;
case 7:
myservo.writeMicroseconds(700+160*7);
break;
case 8:
myservo.writeMicroseconds(700+160*8);
break;
case 9:
myservo.writeMicroseconds(700+160*9);
break;
default: // Other command
digitalWrite(10,HIGH);
break;
}
}
//******************************************************
//******************************************************
void VRbot_setup()
{
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(9600);
delay(1000);
if (VRbot_Detect())
{
VRbot_SetTimeout(5);
VRbot_SetLanguage(0);
}
}
//******************************************************
unsigned char VRbot_read(void)
{
uint8_t val = 0;
val=mySerial.read();
Serial.println(val-64,HEX);
return val-64;
}
//******************************************************
void VRbot_write(uint8_t b)
{
mySerial.print(b, BYTE);
}
//******************************************************
unsigned char VRbot_Detect(void) {
unsigned char i;
for (i = 0; i < 5; ++i) {
delay(100);
VRbot_write(CMD_BREAK);
if ( VRbot_read() == STS_SUCCESS)
return 255;
}
return 0;
}
//******************************************************
unsigned char VRbot_SetLanguage(unsigned char lang)
{
VRbot_write(CMD_LANGUAGE);
delay(5);
VRbot_write(ARG_ZERO + lang);
if (VRbot_read() == STS_SUCCESS)
return 255;
return 0;
}
//******************************************************
void VRbot_RecognizeSD(unsigned char group)
{
VRbot_write(CMD_RECOG_SD);
delay(5);
VRbot_write(ARG_ZERO + group);
}
//******************************************************
void VRbot_RecognizeSI(unsigned char ws) {
VRbot_write(CMD_RECOG_SI);
delay(5);
VRbot_write(ARG_ZERO + ws);
}
//******************************************************
void VRbot_SetTimeout(unsigned char s) {
VRbot_write(CMD_TIMEOUT);
delay(5);
VRbot_write(ARG_ZERO + s);
delay(5);
}
//******************************************************
signed char VRbot_CheckResult(void) {
unsigned char rx;
rx = VRbot_read();
if (rx == STS_SIMILAR || rx == STS_RESULT)
{
delay(5);
VRbot_write(ARG_ACK);
return (VRbot_read() - ARG_ZERO);
}
if (rx == STS_TIMEOUT) return -1;
return -2;
}
Спасибо! Как я понял это управление сервой.:)
Видимо я опять что то не так делаю, при кампиляции выдал кучку ошибок.:eek:
с библиотекой вроде все нормально... хотя...:rolleyes:
Извини я забыл выложить файлы
Подскажите пожалуйста как запустить этот модуль http://i.ebayimg.com/t/Voice-Recogni...ET,Q~~60_3.JPG? в даташите написано подсоединить к USB TTL и дать команду в AccessPort137 0xaa11 после чего должна пойти запись команд... на модуле речи моргает красный светодиод... что делаю не так? у меня исходящие пакеты с USB TTL есть а ответа от модуля нет!
у меня такой модуль! какая у тебя винда?