COMO INICIAR CON LA EASY VR 2.0/3.0 . Materiales utilizados -EasyVR 3.0 o EasyVr 2.0 -Controlador Arduino UNO, Redboard ó A star Prime -Bocina 8ohms EASY VR Robodacta Iniciando Cuando se tiene la Easy Vr tenemos que comprender las diferentes herramientas que ponen a nuestra disposición. Lo primero es que la Easy VR tiene la capacidad de reconocer comandos de voz (por medio de un micrófono). Alguien dice una palabra y configurándola con los programas adecuados podemos hacer que ejecute una orden o una acción por medio de nuestra voz. Lo segundo es que también podemos hacer que esta nos responda creando una interacción entre nosotros y la tarjeta, usando una bocina de 8ohms que se conecta en dos de sus terminales. O si lo preferimos también tiene un puerto para audífonos 3.5mm, por si en el momento no tienes la bocina o por si tu diseño así lo requiere. Cuando se hace el reconocimiento de voz se utiliza una tarjeta compatible con arduino para ejecutar el programa. Apoyado de otros dos software se puede crear el programa final. Cuando se usan sonidos de respuesta de la tarjeta (o sea que la tarjeta hable y responda) no se usara el Arduino IDE directamente ya que usamos dos programas llamados Easy Commander y QuickSythesis. Básicamente esas son las funciones principales, y aunque parecen muy simples son un arma poderosa a la imaginación de proyectos con reconocimiento de voz. Conexiones Se monta la Easy Vr a la Arduino, y se conecta el cable de alimentación. Esto le dará energía a toda la tarjeta, pero para cargar y utilizar las diferentes opciones tenemos una parte de la tarjeta donde están cuatro terminales, una de estas con un jumper observamos también que cada una de estas tienes el nombre de UP, PC, HW Y SW. HW UP- lo usaremos cuando se necesite cargar tablas de sonido, se desconecta la tarjeta de cambia el jumper a UP y cuando se encienda quedara una led rojo, esto nos indicara que ya está conectado. Este modo solo se usa para cargar tablas de sonido. EASY VR Robodacta PC- lo usaremos para conectar la tarjeta al Easy Comander y al Arduino IDE, Este modo se utiliza para poder cargar el programa a la arduino, también para establecer los comandos de voz, sin este el programa no detecta la tarjeta. SW y HW- se usará para dejar funcionando la tarjeta, ya se cargo el programa, ya se cargaron tablas de sonido y ya cuando queremos ver el resultado se usara este modo. el que usaremos será SW para todos, el HW lo dejaremos aparte. Software En la siguiente liga tenemos los software necesarios. http://www.veear.eu/downloads/ Descargaremos -Easy Comander -Librerias Arduino (que moveremos a la carpeta del Arduino IDE que usemos) -EasyVR_DevKit_Setup.exe -Easy VR Access Control Demo Cargar Tabla de sonido Antes de cargar la tabla de sonidos debemos de tomar en cuenta que los sonidos que puede soportar la tarjeta son de formato .wav 16 bit a 22050hz Canal: Mono (o Monoaural) En la página de Veear donde descargamos los software hay un demo llamado EasyVR Access Control Demo, de ahí podemos sacar los audios que están en el formato admisible por la Easy VR, otra de las formas que podemos crear estos archivos, es usando Audacity que es un editor de sonido muy sencillo que te permitirá crear sonido en el formato correcto. En este ejemplo tomaremos los del demo de Veear. Ya instalado QuickSynthesis, lo abrimos como administrador (muy importante para que no de errores) EASY VR Robodacta -Damos clic en la hoja en blanco para abrir un proyecto nuevo -Damos ok en RSC4 -Y le asignamos un nombre al proyecto EASY VR Robodacta -nos quedara una ventana parecida a esta, damos clic en la cruz verde y seleccionamos los archivos de audio -dejamos el valor por default, y damos clic en Ok for All EASY VR Robodacta -auto Label All - Y nos quedara de esta manera, ahora vamos al botón verde que dice built, -damos clic en ok EASY VR Robodacta -damos clic en si -esta ventana aparecerá en rojo EASY VR Robodacta -y cuando haya terminado quedará en verde -clic en OK Luego de esto, guardamos. Presionando la casilla del disquete y volvemos a hacer clic en build para asegurarnos que todo está en orden. Con esto último ya tenemos creado un archivo con todos los sonidos, el siguiente paso es cargarlos a la tarjeta. Para eso abriremos Easy Commander como administrador también. Y asegurarnos de poner la tarjeta en modo UP. Moviendo el jumper correspondiente -Damos clic en Update Custom Data (hoja con una bocina amarilla y una flecha hacia abajo) EASY VR Robodacta -Damos Clic en Import EASY VR Robodacta -seleccionamos el Archivo que creamos en QuickSynthesis -Activamos la casilla de SLOW transfer para archivos pesados y si no solo damos clic en Download -Saldrán unas leyendas de porciento como en la siguiente figura. EASY VR Robodacta Terminando esto, se desconecta la tarjeta, se cambia a modo PC y se conecta nuevamente. Asegurándose que en la casilla de COM que aparece en la parte de arriba este el COM correspondiente a la tarjeta -damos clic en botón connect, e instantáneamente el icono cambiara al que tenemos en la figura. Y dentro del apartado de Sounds aparecerán los sonidos que hemos instalado. EASY VR Robodacta Configurar el reconocimiento de Voz Para configurar los parámetros que van a activar la Easy VR debemos hacerlo mediante el programa de Easy comander. Conectaremos la arduino y pondremos la tarjeta en modo PC. El ejemplo siguiente es reconocimiento de voz, acceso por medio de un password Abrimos el Easy Commander como administrador EASY VR Robodacta Observaremos que en COM tenemos el COM15 correspondiente a nuestra tarjeta, esto puede variar, asegúrate que estés en el COM correcto. Dale clic en connect. El icono cambiará Lo siguiente es configurar los comandos de voz, tenemos varios grupos seleccionaremos el 1 Damos clic en el icono add command (un globo textual con un símbolo de más verde) Ponemos el nombre que queremos usar para hacer el reconocimiento. EASY VR Robodacta Luego grabaremos nuestra voz, damos clic en el icono Train command (globo textual con un engrane) y aparecerá algo como esto Clic en phase 1 EASY VR Robodacta Aparecerá un cuadro que dice SPEAK NOW, menciona la palabra a una distancia cerca del micrófono de la Easy VR , luego aparecer Phase 2, da un clic ahí y habla de nuevo ( trata de sonar lo más parecido posible) Esto es para hacer una evaluación de ambas partes y tratar de crear un reconocimiento mas exacto. Si todo sale bien el recuadro se quitará, si no tendrás que volver a repetir los pasos para grabar tu voz nuevamente ya que encontró una incompatibilidad entre los dos sonido. Ahora iremos a password EASY VR Robodacta Click en Add comand , y escribiremos PWD_(el nombre que queramos). Por ejemplo PWD_STARK. Damos clic en Train command y grabamos nuevamente phase1 y phase2, diremos la clave con la cual nos dejara tener acceso. Ejemplo Mark V Ya que tenemos los comandos de voz grabados. Lo siguiente que haremos será exportar el programa que, con un poco de edición, irá en la arduino. Damos clic en Generate Code EASY VR Robodacta Nos pedirá guardarlo con un nombre, puedes poner cualquiera y damos en guardar. Ya se tiene el archivo .pde para que lo podamos abrir en arduino. Abrimos el IDE de Arduino y abrimos el programa que ha generado el Easy VR Te pedirá que lo transformes a extensión .ino dale aceptar EASY VR Robodacta Luego de esto aparecerá el programa, lo que haremos será editarlo para controlar el encendido de un led. El código es el siguiente #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else // Arduino 0022 - use modified NewSoftSerial #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif int ena=2; int enb=3; #include "EasyVR.h" #include <Servo.h> #define SND_Access_denied #define SND_Access_granted #define SND_Hello 3 EASY VR Robodacta 1 2 #define SND_Please_repeat 4 #define SND_Please_say_your_password 5 #define SND_Please_talk_louder 6 Servo myservo; EasyVR easyvr(port); EasyVRBridge bridge; uint32_t mask = 0; int8_t group = 0; uint8_t train = 0; char name[32]; void setup() { pinMode(ena,OUTPUT); pinMode(enb,OUTPUT); // bridge mode? if (bridge.check()) { cli(); bridge.loop(0, 1, 12, 13); } Serial.begin(9600); port.begin(9600); myservo.attach(9); myservo.write(90); if (!easyvr.detect()) { Serial.println("EasyVR not detected!"); for (;;); } easyvr.setPinOutput(EasyVR::IO1, LOW); Serial.println("EasyVR detected!"); easyvr.setTimeout(5); easyvr.setLanguage(EasyVR::ITALIAN); EASY VR Robodacta int16_t count = 0; if (easyvr.getGroupMask(mask)) // get trained user names and passwords { uint32_t msk = mask; for (group = 0; group <= EasyVR::PASSWORD; ++group, msk >>= 1) { if (!(msk & 1)) continue; if (group == EasyVR::TRIGGER) Serial.print("Trigger: "); else if (group == EasyVR::PASSWORD) Serial.print("Password: "); else { Serial.print("Group "); Serial.print(group); Serial.print(": "); } count = easyvr.getCommandCount(group); Serial.println(count); for (int8_t idx = 0; idx < count; ++idx) { if (easyvr.dumpCommand(group, idx, name, train)) { Serial.print(idx); Serial.print(" = "); Serial.print(name); Serial.print(", Trained "); Serial.print(train, DEC); if (!easyvr.isConflict()) Serial.println(" times, OK"); else { int8_t confl = easyvr.getWord(); if (confl >= 0) Serial.print(" times, Similar to Word "); else { confl = easyvr.getCommand(); Serial.print(" times, Similar to Command "); } EASY VR Robodacta Serial.println(confl); } } }} } easyvr.setLevel(EasyVR::HARDER); easyvr.playSound(SND_Hello, EasyVR::VOL_FULL); } void loop() { int idx_cmd; int idx_pwd; easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening) Serial.println("Say a name in Group 1"); easyvr.recognizeCommand(1); // recognise command in group 1 while (!easyvr.hasFinished()); // wait for user name easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off idx_cmd = easyvr.getCommand(); // get recognised user name if (idx_cmd >= 0) { Serial.print("Name: "); if (easyvr.dumpCommand(1, idx_cmd, name, train)) Serial.println(name); else Serial.println(); easyvr.playSound(SND_Please_say_your_password , EasyVR::VOL_FULL); // ask for password easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening) Serial.println("Say the password"); easyvr.recognizeCommand(EasyVR::PASSWORD); // set group 16 while (!easyvr.hasFinished()); // wait for password easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off EASY VR Robodacta idx_pwd = easyvr.getCommand(); // get recognised password if (idx_pwd >= 0) { Serial.print("Password: "); if (easyvr.dumpCommand(EasyVR::PASSWORD, idx_pwd, name, train)) { Serial.print(" = "); Serial.println(name); } else Serial.println(); if ( idx_pwd == idx_cmd) // index of username and password are the same, access granted { Serial.println("Access granted"); easyvr.playSound(SND_Access_granted , EasyVR::VOL_FULL); digitalWrite(ena,HIGH); digitalWrite(enb,LOW); delay(5000); digitalWrite(ena,LOW); digitalWrite(enb,LOW); } else // index of username and password differ, access is denied { Serial.println("Access denied"); easyvr.playSound(SND_Access_denied , EasyVR::VOL_FULL); } } int16_t err = easyvr.getError(); if (easyvr.isTimeout() || (err >= 0)) // password timeout, access is denied { EASY VR Robodacta Serial.println("Error, try again..."); easyvr.playSound(SND_Access_denied , EasyVR::VOL_FULL); } } else { if (easyvr.isTimeout()) Serial.println("Timed out, try again..."); int16_t err = easyvr.getError(); if (err >= 0) { Serial.print("Error "); Serial.println(err, HEX); } } } Lo que esta subrayado son las partes de código que agregaremos para que funcione el encendido del led, utilizando los puertos 2 y 3. Hacemos clic en Compilar y Cargar no olvidando poner nuestra placa y el COM utilizado, y que hayamos desconectado la tarjeta del Easy VR porque si no, marcará un error al encontrar el puerto COM utilizado EASY VR Robodacta Si te sale un comentario en naranja como el que está en la siguiente imagen, basta con cargar el archivo a la arduino sin la Easy VR shield puesta encima. Listo, ya tenemos todo para probarlo, movemos el jumper a modo SW y abrimos el monitor serial del Arduino IDE. Se activará algo como lo que tenemos en la siguiente imagen Cuando el led de la tarjeta este encendido nos indicará que podemos hablar. Decimos Tony Stark, la tarjeta preguntara el password y le diremos Mark V (en nuestro caso) y activara el LED (que ya hemos colocado en las terminales 2 y 3 con una resistencia de 220 o 330 tomando como 2 el positivo y 3 el negativo). Errores: EASY VR Robodacta -las tablas de sonido no cargan con la Arduino uno R2, se necesita Arduino Uno R3 aunque si funciona el reconocimiento, no se cargan las tablas de sonido. -se tuvo problemas con la versión 3.3.7 y se uso mejor la 3.6.11, se cargaban las tablas de sonido pero no aparecían en el Easy Comander. -si no se inician como administrador puede dar problemas. - SW debe de esta con el jumper si se usa el monitor serial del Arduino IDE si no, no se conectará la tarjeta y no se visualizarán los datos. Otras Fuentes de Consulta http://4imedio.blogspot.mx/2013/03/tabla-de-sonidos-easyvr-desde-cero.html http://laboratorioderobotica.wordpress.com/easyvr-shield/tutorial-easyvr-shieldparte-2-tablas-de-sonido/ EASY VR Robodacta