I have a Say It module which I think is a Parallax branded version of either that or the previous generation. It is kinda fun and showy to noodle with, but it's limited to voice menu style interfaces. In terms of usability an IR remote control has more utility.
I purchased one also. I think there are a few differences between the new EasyVR and the SayIt but not enough that you'd need to change a SayIt program to use it with the EasyVR.
The EasyVR has a little board with a uC and USB connector so you don't need a bridge program to use it with the PC GUI.
I still haven't used the user programmable words in a robot yet. I have used the normal word sets in this program.
I personally like the EasyVR much more than the SayIt. I didn't like the carrier board the SayIt used and since I didn't use Basic Stamps, it didn't make it easier to use. I removed the carrier board from one of the two SayIts a purchased, I wanted a smaller board to fit inside a robot remote.
Most of my robot projects are on hold until I get my CNC router up and running. Using the EasyVR with a robot is high on my todo list once my CNC is operational.
BTW, if you use the EasyVR with an Emic2, make sure and disable the EasyVR while the Emic2 is talking otherwise the robot will carry on a conversation with itself.
Edit to add: The carrier board for the EasyVR is used to communicate with a PC but I'm pretty sure you can leave the board in place when using it in a robot. The carrier board brings the 2mm pitched pins out to 0.1" pitched pins making it a little easier to connect to the EasyVR. You can remove the EasyVR from the carrier board to save some space but then you won't be able to connect it directly to a PC.
The GUI makes it easier to train the EasyVR and to program speaker dependent commands. All these programming tasks can also be done with a microcontroller by using the appropriate commands. IMO, it's easier to use the GUI to program the speaker dependent commands and to train the EasyVR. By using the GUI to do these tasks you don't have to add these complexities to your robot's program.
I just received my EasyVR today. After following the instructions and then plugging it in, it would not connect. After looking at it a little closer I noticed that there is no jumper on J2 nor are there even any Pins for a jumper. If a Jumper is required I can solder the Pins in myself but I want to make sure that I am doing this correctly.
Also, I noticed that when I plugged in to USB Port that the LED on the EasyVR does not light up. Is it suppose to or not?
It looks like the header normally attached to J2 has been broken off.
You don't really need the header (female 2mm) since it connects to the speaker terminal (J1). You don't need a speaker to use the EasyVR. (J2 is not a jumper. Don't short the holes together. Shorting J2 may damage the board.)
The LED doesn't light up on my board unless I have the smaller PCB connected to it. The smaller PCB is the main component. The large PCB is used to interface the EasyVR with a PC. The small PCB is turned upside down and its pins are connected to the female connectors of the larger board.
The larger board is an optional component. You don't really need to use the EasyVR with a robot. It just makes easier to connect the EasyVR to a PC.
When the two boards are connected together, the LED at D1 should light up when connected to a PC.
Your board should work fine without the connector at J2, but it does look like your board has been damaged. You might want to contact Parallax about it.
Yes, I have contacted them. The odd thing is that it comes up fine under Devices as Comm13 but it will not connect when trying to use the Commander software.
I am pretty sure I got a bad unit. I plugged it in to my Laptop with the same results. The EasyVR shows up with no errors as a Comm port but it will not connect when running the Commander software. Anyone from tech support monitoring this thread? I sent an email earlier but I know some times it takes a couple days to get a response.
. . . is that it comes up fine under Devices as Comm13 but it will not connect when trying to use the Commander software.
You do need to select the com port from the drop down menu and the press the connect button (below (not in) the "File" menu).
Just to make sure. You have the smaller PCB plugged into the larger one?
Here's a picture of my EasyVR with the two boards plugged into each other. The broken header at J2 won't matter.
As you can see the LED is lit. The microphone is plugged in at "MIC IN" (bottom right of photo). You'll need the microphone to test the various words and to train the EasyVR on speaker dependent words.
It looks like the TX and RX pins from the small board are not brought out to any headers of the larger board. I think the larger board is just used when using the EasyVR with a PC. You'll just use the small PCB when using the EasyVR in a robot.
See what happens when a guy follows the instructions??? I was going off of the .pdf file and it did not show the two connected. Thanks Duane, it now shows connected. So what do I do next? Also, can I hook up a cheap computer speaker to the speaker port?
See what happens when a guy follows the instructions??? I was going off of the .pdf file and it did not show the two connected.
I was initially trying to figure out how to join the two boards with the provided wires but there weren't any 2mm pitched wires. It finally dawned on me to stack the boards.
Once you're connected in the GUI select a "Wordset" and click the "test group" icon. You then say one of the words from the group in the mic and the EasyVR should recognize it.
If you need help with the speaker dependent stuff, let me know and I can explain about it later.
I wouldn't worry about the speaker port for now. You don't really need to train or test the EasyVR. I'd suggest playing with whatever the speaker is used for later.
When you do you probably want to use a bare 8ohm speaker. You can often find 8 ohm speakers in old electronics. It's a pretty common type. The usually say "8 ohm" on the speaker somewhere or you can measure the resistance with an ohm meter.
Yea, I actually read the rest of the .pdf. I have several of the older 8 Ohm speakers that use to come with computer cases. I hooked one up and the sound file worked. I was even able to import my own .wav file, I also tested the word recognition. I generated a BS2 file and was wishing they had that for SPIN!!! However, since I will be using SimpleIDE on my Wild Thumper (which is what this is for) I think I will try to creating the C code for the Arduino and convert that if at all possible. Where I will need help is connecting it to the Prop and having the commands function correctly.
On page 10 of the user manual it explains how to use 3 of the pins as I/O. What it does not explain is how to actually use a voice command to control an item such as an LED. I would like to figure out how to do this and also how to do it when connecting to a Prop. Does anyone know where to find more in depth instructions for working with the EasyVR as it seems this document is somewhat limited.
I wouldn't bother with the EasyVR's I/O pins. IMO, it will be a lot easier to use the Propeller to control actions.
The EasyVR doesn't make any decisions. It just returns the number of the word from the current list of words it supposed to listen for. It's basically a menu selection device.
For example, you'd have the Prop command it to listen for wordset 2. When the EasyVR heard a word (assuming no error) it returns the number corresponding with the word it heard. Let's say you said "Forward". The EasyVR would output the number 4 (added to a base number to keep the characters within the printable ASCII range). The Propeller would receive this "4" (though it won't be the character "4") and the Propeller program then needs to decide what to do when the word "forward" is spoken. It could command the EasyVR to switch to wordset 3 to find out how many units to move forward or the program could take any other action you decide to program it to do when this word is heard.
In the program attached to post #19 of thread I earlier linked to, I have the Prop listen initially listen for the trigger word "robot". Once this is heard is starts listening for a word from wordset 1. The program has lots of branches since I was hoping to show how many possible actions can be programmed in with the three speaker independent wordsets. I can see it would be a good idea to make a very simple program as you suggest of just turning on a LED.
As it is you could substitute in command to turn on a LED in one of the listed actions in the "TakeAction" method. For example, if you added the lines in red to the method.
PUB TakeAction
case nextAction
_NoActionNext: return
_ActionNext:
Debug.Str(string(13, "Received command to take action #"))
Debug.Dec(wordset3Total)
Debug.Str(string(13, "Add a case statement here to direct to "))
Debug.Str(string(13, "appropriate action. "))
nextAction := _NoActionNext
[COLOR=#ff0000] dira[16] := 1
outa[16] := 1[/COLOR]
. . .
After saying "robot", "action", "one", "two", "three", a LED connected to P16 should turn on.
You have to use the program with a terminal program and navigate the text menu before speaking words. I think I gave instructions how to do this.
It will likely be a few days before I can post a simplified program but after looking through my old code I can see where it would be a good idea.
I don't think any of the speaker dependent features of the program I posted work.
So what I am getting is that the first command line, Robot basically "wakes up" the device. correct? I know you said do not bother with connecting an LED to the EasyVR but I like to get a feel for everything that it does. If I place a command LED_ON in the first word set, how will the EasyVR know which Pin the LED is actually on?
@Duane Degn, Have you messed around with the SayIt Object that is in the OBEX? I downloaded that and just have a couple questions before I attempt to connect and see what happens with it.
OK cool. I just dug up some Fiber Optic lines I have had laying around forever and I am thinking of building a cool LED Fiber Optic light for my Granddaughter. I think this would be a good testing point to light up different colored LED's by voice command.
OK cool. I just dug up some Fiber Optic lines I have had laying around forever and I am thinking of building a cool LED Fiber Optic light for my Granddaughter. I think this would be a good testing point to light up different colored LED's by voice command.
I haven't done much with fiber optics myself, but from what I've read, I think you might be better off looking for fiber optic strands intended to be used for displays. I think using communication fiber optics on a display would be very very time consuming.
You might want to check some of the sources mentioned in this thread.
I'm working on my EasyVR code. I'm trying to make it so it doesn't need input from PST. I'm setting timeouts and other initialization housekeeping automatically without any input being required.
The program I previously linked to should work with your EasyVR. You'll need to follow the menu prompts to initialize it and set the trigger. It should prompt you to say each wordset as it's active. The code does have a lot of bugs (which I'm fixing as I find them).
I will attempt a simplified demo but as I look at the code I realize there's only going to be so much I can simplify. Keeping track of which wordset is active requires a certain about of housekeeping code. I am adding comments as I rediscover what the various code does. One simplification would be not to keep track of how many words in each wordset and not to list this words to the terminal.
When you use the EasyVR with the Propeller, only use the small board. Use the red and black jumper wires to connect 3.3V to VCC and ground to GND. Use the blue and white wires to connect ETX to the Prop's rx pin and ERX to the tx pin. The communication will be 3.3V or 3.0V logic. You don't need a resistor on the tx and rx lines. You also need to make sure and move the mic from the large PCB to the small one.
I hope to have an easier to use and simplified demo by the end of the day but no promises.
I've been cleaning up my earlier SayIt code. I had some pretty serious bugs in the code.
I've been trying to streamline the code a bit but it's still pretty awkward IMO. One of the tricks is there are so many possible actions one could have with the standard set of words. I'm pretty sure most robots won't need all the options.
I've got the speaker independent part of the code working again and I'm about to start on some speaker dependent code. It seems like a RGB LED would be a good demo example.
How about if we use Group 1 to select LED. There could be two options in Group 1. LED and OTHER. OTHER would take the code back to the original choices and listen for wordset 1. The word "LED" will switch the active word list to Group 2. Group 2 would have seven words. RED, YELLOW, GREEN, BLUE, VIOLET, OFF, and EXIT.
Does this seem like a good demo? Anything you'd liked changed? I would like to keep the code pretty generic for now but I think adding code to control a RGB LED would be a good way to test speaker dependent words.
I'll use the GUI to program the SD (speaker dependent) words and to train them. You'd need to do the same and you'd also need to make sure you use the same group numbers and list the words in the same order I do in order to use the demo code.
I think this would be a great start for a demo. My RGB LED's are common Anode. Thanks for all the work you are putting in to this. Basically once I have a demo to work with I will be able to expand on that.
The "0[WORDSET_LABEL_SIZE - x]" keeps each label the same size. This makes it easier to locate the string of the active word.
The program could be simplified if the words in each set or group didn't need to be displayed.
The program will wait four seconds before starting. You can start it sooner by pressing any key on the terminal.
The program will then wake up the EasyVR. This should end with a success statement. It then attempts to set the timeout to infinite. I think I have a bug in this portion of the code and so the timeout is left at the default setting. This isn't a big problem since whenever a timeout occurs the program immediately resets the EasyVR to listen to the previous set of group.
Instead of the usual wordset #0 ("robot") to start off with, the program starts listening to group 1. You'll see this prompt.
Say one of the following words:
0) LED
1) other
The word LED will bring up this menu.
Say one of the following words:
0) red
1) yellow
2) green
3) blue
4) violet
5) off
6) exit
If you've wired up your LED to the pins listed in the constants, saying the various colors should control the LED.
The words "exit" and then "other" will bring up wordset #1.
You can get back to the LED colors (group 2) by saying the word "hello".
There is presently a lot of debug statements and a lot of information is displayed in the terminal window. The characters being sent to the EasyVR are displayed as well and the characters received from the EasyVR. When you see something like this:
output to EasyVR = "dB"
EasyVR returned = eBB
ProcessReply(1)
listeningMode = 4 = "LISTEN_FOR_GROUP_1
tempBufferRx[0] = e
An error was returned.
Returning to previous listening mode.
listeningMode = 4 = "LISTEN_FOR_GROUP_1"
activeWords = 2
An error had occurred. I'm trying to remember if "eBB" is a timeout error or an unidentified word error. You'll likely see a lot of "eBB" errors go by. I haven't added a method to identify all the errors yet.
I'll continue to try to get the bugs out the program. I'm pretty sure many of the items listed in the menu don't work correctly. Getting the timeout and initialization code to work correctly is high on my priority list.
The program didn't end up very simple but I'm not really sure how simple one could make it and still display the wordsets and groups.
So I just say the words LED, other, etc. not the entire line, correct? I will work on this as soon as time permits. I have 3 jobs I need to get completed by the end of the week so I can start a larger one next week. As usual, life is getting in the way but I gotta pay the bills. Thanks again for all the help and I will let you know how it all works out as soon as I can.
Does anyone know where to find more in depth instructions for working with the EasyVR as it seems this document is somewhat limited.
What I've found really helpful is using the program BridgeWithMonitor (I think that's what I called it). By using an addition USB to serial connection, the program will output the exchange between the EasyVR and the PC while the EasyVR is connected to the GUI.
I was having trouble with the speaker dependent (SD) code until I monitored an exchange between the EasyVR and the PC while using SD words.
Here is some of the exchange I captured along with some notes (added with blue text).
[COLOR=#0000cd][FONT=arial]Afterconnect[/FONT][/COLOR][COLOR=#0000cd][FONT=arial]Select
test group 1[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]PC:dB '[/FONT][/COLOR][FONT=arial][COLOR=#0000cd]this tells the EasyVR to use the second group (group #1) of the SD words.[/COLOR][/FONT]
[COLOR=#0000cd][FONT=arial]Say“LED”[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: r [/FONT][/COLOR][COLOR=#0000cd][FONT=arial]' EasyVR is telling the PC it recognized the spoken "LED"[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]PC:<$20> [/FONT][/COLOR][COLOR=#0000cd][FONT=arial]' PC sends space character to indicate it's ready for more characters. [/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: A [/FONT][/COLOR][FONT=arial][COLOR=#0000cd]' EasyVR is indicating the first word of the group was heard. [/COLOR][/FONT]
[COLOR=#0000cd][FONT=arial]endtest[/FONT][/COLOR]
[COLOR=#0000cd][FONT=arial]testagain[/FONT][/COLOR]
[COLOR=#0000cd]
[/COLOR]
[COLOR=#000000][FONT=arial]PC:dB [/FONT][/COLOR][FONT=arial][COLOR=#0000cd]' use group #1 again[/COLOR][/FONT]
[COLOR=#0000cd][FONT=arial]Say“other”[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: r [/FONT][/COLOR][COLOR=#0000CD][FONT=arial]' EasyVR is telling the PC it recognized the spoken "other"[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]PC:<$20> [/FONT][/COLOR][COLOR=#0000CD][FONT=arial]' PC sends space character to indicate it's ready for more characters. [/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: B [/FONT][/COLOR][COLOR=#0000CD][FONT=arial]' EasyVR is indicating the second word of the group was heard. [/FONT][/COLOR]
[COLOR=#0000cd][FONT=arial]Selecttest group 2[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]PC:dC[/FONT][/COLOR]
[COLOR=#0000cd][FONT=arial]Say“yellow”[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: r[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]PC:<$20>[/FONT][/COLOR]
[COLOR=#000000][FONT=arial]SayIt: B[/FONT][/COLOR]
This lets us eavesdrop on the exchange between the PC and EasyVR. The Propeller program should issue this same commands and listen for the characters being sent from the EasyVR in reply.
So what I am getting is that the first command line, Robot basically "wakes up" the device. correct? I know you said do not bother with connecting an LED to the EasyVR but I like to get a feel for everything that it does. If I place a command LED_ON in the first word set, how will the EasyVR know which Pin the LED is actually on?
The EasyVR doesn't directly turn anything on based on words spoken. It just sends characters over the serial line when it hears a word. You can use the I/O pins on the EasyVR but the Propeller has to issue a command to tell the EasyVR to turn on the pin. The EasyVR won't control it based on words spoken.
The various wordsets and groups can be thought of like touchscreen menus. On a touchscreen you can change the menu available depending on the circumstances. The EasyVR can have any of the sets or groups active but only one at a time. The wordset #0 with "robot" is often used to wake up the microcontroller since the EasyVR can pick up false positive. The more words in a menu (I'll use menu to represent wordset or group) the greater the chance there will be a false positive. By using wordset #0 only when the EasyVR hears "robot" will it send a character to the Propeller. If one of the other wordsets were used, a conversion might include the word "action" without intending it to be a command. If you're talking about your robot a lot, you might want to make a custom trigger word that isn't likely to be used in normal conversation. Like "rosebud" or "kumquat".
When a word is recognized it's up to the Propeller to decide what to do about it. Should it switch the active menu? Should it take some other action? All this has to be decided by the programmer. The EasyVR doesn't make decisions.
In order to get to the end of an "action" branch you have to say "action" and then three digits to select the action. So "action", "one", "five", "seven" will bring up the prompt:
Received command to take action #157
Add a case statement here to direct to
appropriate action.
The three digits are only required because that's the way I wrote the code. You could have the program take some action immediately after hearing the word "action".
Some commands require even more information to specify the exact outcome desired.
If instead of "action" "attack" is spoken, then the Propeller switches the EasyVR to wordset #2 and listens for one of these words.
left
right
up
down
forward
backward
One possible combination of "attack" is "attack", "forward", "zero", "one", "five". These commands would bring up the output:
Received command to attack forward 15 units
Add method to attack appropriate direction.
The demo code is really about the worse case scenario as far as the possible combinations of commands. I was hoping to make it easier for people to see how to use multiple words to achieve many possible actions.
Many if not most of the actions could be deleted. Just make sure you save a working version before you make changes incase some deletion keeps the program from working. Make sure and test the actions you wish to retain as you delete unwanted actions.
The EasyVR is kind of a verbal touchscreen where only one menu can be displayed at a time.
@Duane Degn, just a quick question. Is the Debug RX/TX suppose to be connected to an LCD? Is there a way I can just have it come up using the PST? Also, I placed all the commands you listed in Group 1. Is that how it should be? I am going to try and test using a Prop BOE.
I see from the GUI, I had also programmed a password. You don't need to set one. The program doesn't use the password (though it wouldn't be hard to add).
As it is now, the code assumes the cathodes of LEDs are connected to the I/O pins. You can control the anode side of LEDs by switching the values of these two constants.
LED_ON = 0 ' cathode controlled (common anode) LED use "1" for anode controlled LEDs
LED_OFF = 1 ' switch these values for common cathode LEDs
The first three I/O pins are used to control the LED. You could use different I/O pins by changing these constants.
Is there an LED on the EasyVR that should light up when it has power? I am getting nothing but Initialize errors. When pressing enter and I say LED or other it is not working and Wake Attempt fails at #9 and then terminal says continuing anyway. I have RX and TX just like it says. Power is via on board BOE 5V and BOE is powered with 9V Wall Wart.
It does say that it is "Actively Listening for Following Words: 0) other 1)LED and I have programmed them exactly as stated and also trained them.
I GOT IT!!!!!!!!!!!!!!!!!! So, I had to switch TX/RX. You show that TX goes to 10and RX goes to 11. However, I had a mind fart and realized that RX on Prop goes to TX on EasyVR. I went through all the colors and Off and they all work fine. Thanks for all the help with this. I am going to play around with the code to get it where I need it. Updates will be some time in the future. Thanks again for all the work you put into this.
Next up on my "Really would like to make this work" list, Make this wireless using the Nordic modules I bought per your advice!!!!
I've been working on a robot for a while. I got hung up on the battery recharging issue. I think I'll just strap some batteries to the bottom of it for now just so I can start using it.
There are two Propellers in the remote. The eight holed header in the side is for Prop Plugs. The rectangular enclosure has two holes on side opposite the antenna. One hole is for a piezo speaker and the other is for a microphone. The microphone connects to the small PCB I removed from a SayIt. The small PCB is essentially the same as the EasyVR.
Having the EasyVR on a remote will make a robot much easier to control than having the EasyVR on the robot. The noise from the robot's motors would interfere with the EasyVR's ability to recognize words.
This is an old picture of the remote I've been working on. I ought to take some new pictures and start a thread in the project forum in order to motivate myself into finishing this project.
The remote uses a more expensive Nordic module from SparkFun. The SparkFun module uses the same chip as the inexpensive eBay version. I haven't purchased any more of SparkFun's modules since finding the cheap eBay modules.
So to make sure I somewhat knew what I was doing I added White to the mix.(Although with my resistors it is closer to Pink) but it worked, White comes up in the Menu and when it turns on the correct color shows on the PST. I am going to try my luck at making a Servo move now. I am thinking I can use "move" that is in wordset 1. Is that correct or am I off base here?
Comments
The EasyVR has a little board with a uC and USB connector so you don't need a bridge program to use it with the PC GUI.
I still haven't used the user programmable words in a robot yet. I have used the normal word sets in this program.
I personally like the EasyVR much more than the SayIt. I didn't like the carrier board the SayIt used and since I didn't use Basic Stamps, it didn't make it easier to use. I removed the carrier board from one of the two SayIts a purchased, I wanted a smaller board to fit inside a robot remote.
Most of my robot projects are on hold until I get my CNC router up and running. Using the EasyVR with a robot is high on my todo list once my CNC is operational.
BTW, if you use the EasyVR with an Emic2, make sure and disable the EasyVR while the Emic2 is talking otherwise the robot will carry on a conversation with itself.
Edit to add: The carrier board for the EasyVR is used to communicate with a PC but I'm pretty sure you can leave the board in place when using it in a robot. The carrier board brings the 2mm pitched pins out to 0.1" pitched pins making it a little easier to connect to the EasyVR. You can remove the EasyVR from the carrier board to save some space but then you won't be able to connect it directly to a PC.
The GUI makes it easier to train the EasyVR and to program speaker dependent commands. All these programming tasks can also be done with a microcontroller by using the appropriate commands. IMO, it's easier to use the GUI to program the speaker dependent commands and to train the EasyVR. By using the GUI to do these tasks you don't have to add these complexities to your robot's program.
Also, I noticed that when I plugged in to USB Port that the LED on the EasyVR does not light up. Is it suppose to or not?
You don't really need the header (female 2mm) since it connects to the speaker terminal (J1). You don't need a speaker to use the EasyVR. (J2 is not a jumper. Don't short the holes together. Shorting J2 may damage the board.)
The LED doesn't light up on my board unless I have the smaller PCB connected to it. The smaller PCB is the main component. The large PCB is used to interface the EasyVR with a PC. The small PCB is turned upside down and its pins are connected to the female connectors of the larger board.
The larger board is an optional component. You don't really need to use the EasyVR with a robot. It just makes easier to connect the EasyVR to a PC.
When the two boards are connected together, the LED at D1 should light up when connected to a PC.
Your board should work fine without the connector at J2, but it does look like your board has been damaged. You might want to contact Parallax about it.
You do need to select the com port from the drop down menu and the press the connect button (below (not in) the "File" menu).
Just to make sure. You have the smaller PCB plugged into the larger one?
Here's a picture of my EasyVR with the two boards plugged into each other. The broken header at J2 won't matter.
As you can see the LED is lit. The microphone is plugged in at "MIC IN" (bottom right of photo). You'll need the microphone to test the various words and to train the EasyVR on speaker dependent words.
It looks like the TX and RX pins from the small board are not brought out to any headers of the larger board. I think the larger board is just used when using the EasyVR with a PC. You'll just use the small PCB when using the EasyVR in a robot.
I was initially trying to figure out how to join the two boards with the provided wires but there weren't any 2mm pitched wires. It finally dawned on me to stack the boards.
Once you're connected in the GUI select a "Wordset" and click the "test group" icon. You then say one of the words from the group in the mic and the EasyVR should recognize it.
If you need help with the speaker dependent stuff, let me know and I can explain about it later.
I wouldn't worry about the speaker port for now. You don't really need to train or test the EasyVR. I'd suggest playing with whatever the speaker is used for later.
When you do you probably want to use a bare 8ohm speaker. You can often find 8 ohm speakers in old electronics. It's a pretty common type. The usually say "8 ohm" on the speaker somewhere or you can measure the resistance with an ohm meter.
The EasyVR doesn't make any decisions. It just returns the number of the word from the current list of words it supposed to listen for. It's basically a menu selection device.
For example, you'd have the Prop command it to listen for wordset 2. When the EasyVR heard a word (assuming no error) it returns the number corresponding with the word it heard. Let's say you said "Forward". The EasyVR would output the number 4 (added to a base number to keep the characters within the printable ASCII range). The Propeller would receive this "4" (though it won't be the character "4") and the Propeller program then needs to decide what to do when the word "forward" is spoken. It could command the EasyVR to switch to wordset 3 to find out how many units to move forward or the program could take any other action you decide to program it to do when this word is heard.
In the program attached to post #19 of thread I earlier linked to, I have the Prop listen initially listen for the trigger word "robot". Once this is heard is starts listening for a word from wordset 1. The program has lots of branches since I was hoping to show how many possible actions can be programmed in with the three speaker independent wordsets. I can see it would be a good idea to make a very simple program as you suggest of just turning on a LED.
As it is you could substitute in command to turn on a LED in one of the listed actions in the "TakeAction" method. For example, if you added the lines in red to the method.
After saying "robot", "action", "one", "two", "three", a LED connected to P16 should turn on.
You have to use the program with a terminal program and navigate the text menu before speaking words. I think I gave instructions how to do this.
It will likely be a few days before I can post a simplified program but after looking through my old code I can see where it would be a good idea.
I don't think any of the speaker dependent features of the program I posted work.
No I haven't. I have my EasyVR out in front of me and I'm about to wire it up to a Prop. I'll post some pictures or video when I have it working.
I haven't done much with fiber optics myself, but from what I've read, I think you might be better off looking for fiber optic strands intended to be used for displays. I think using communication fiber optics on a display would be very very time consuming.
You might want to check some of the sources mentioned in this thread.
I'm working on my EasyVR code. I'm trying to make it so it doesn't need input from PST. I'm setting timeouts and other initialization housekeeping automatically without any input being required.
The program I previously linked to should work with your EasyVR. You'll need to follow the menu prompts to initialize it and set the trigger. It should prompt you to say each wordset as it's active. The code does have a lot of bugs (which I'm fixing as I find them).
I will attempt a simplified demo but as I look at the code I realize there's only going to be so much I can simplify. Keeping track of which wordset is active requires a certain about of housekeeping code. I am adding comments as I rediscover what the various code does. One simplification would be not to keep track of how many words in each wordset and not to list this words to the terminal.
When you use the EasyVR with the Propeller, only use the small board. Use the red and black jumper wires to connect 3.3V to VCC and ground to GND. Use the blue and white wires to connect ETX to the Prop's rx pin and ERX to the tx pin. The communication will be 3.3V or 3.0V logic. You don't need a resistor on the tx and rx lines. You also need to make sure and move the mic from the large PCB to the small one.
I hope to have an easier to use and simplified demo by the end of the day but no promises.
I've been trying to streamline the code a bit but it's still pretty awkward IMO. One of the tricks is there are so many possible actions one could have with the standard set of words. I'm pretty sure most robots won't need all the options.
I've got the speaker independent part of the code working again and I'm about to start on some speaker dependent code. It seems like a RGB LED would be a good demo example.
How about if we use Group 1 to select LED. There could be two options in Group 1. LED and OTHER. OTHER would take the code back to the original choices and listen for wordset 1. The word "LED" will switch the active word list to Group 2. Group 2 would have seven words. RED, YELLOW, GREEN, BLUE, VIOLET, OFF, and EXIT.
Does this seem like a good demo? Anything you'd liked changed? I would like to keep the code pretty generic for now but I think adding code to control a RGB LED would be a good way to test speaker dependent words.
I'll use the GUI to program the SD (speaker dependent) words and to train them. You'd need to do the same and you'd also need to make sure you use the same group numbers and list the words in the same order I do in order to use the demo code.
Are your RGB LEDs common anode or common cathode?
I added methods to take care actions I was performing multiple times.
All the earlier options have been left in the code. I added speaker dependent code as I previously explained.
You'll need to add the following words using the GUI to the EasyVR module.
The "0[WORDSET_LABEL_SIZE - x]" keeps each label the same size. This makes it easier to locate the string of the active word.
The program could be simplified if the words in each set or group didn't need to be displayed.
The program will wait four seconds before starting. You can start it sooner by pressing any key on the terminal.
The program will then wake up the EasyVR. This should end with a success statement. It then attempts to set the timeout to infinite. I think I have a bug in this portion of the code and so the timeout is left at the default setting. This isn't a big problem since whenever a timeout occurs the program immediately resets the EasyVR to listen to the previous set of group.
Instead of the usual wordset #0 ("robot") to start off with, the program starts listening to group 1. You'll see this prompt.
The word LED will bring up this menu.
If you've wired up your LED to the pins listed in the constants, saying the various colors should control the LED.
The words "exit" and then "other" will bring up wordset #1.
You can get back to the LED colors (group 2) by saying the word "hello".
There is presently a lot of debug statements and a lot of information is displayed in the terminal window. The characters being sent to the EasyVR are displayed as well and the characters received from the EasyVR. When you see something like this:
An error had occurred. I'm trying to remember if "eBB" is a timeout error or an unidentified word error. You'll likely see a lot of "eBB" errors go by. I haven't added a method to identify all the errors yet.
I'll continue to try to get the bugs out the program. I'm pretty sure many of the items listed in the menu don't work correctly. Getting the timeout and initialization code to work correctly is high on my priority list.
The program didn't end up very simple but I'm not really sure how simple one could make it and still display the wordsets and groups.
What I've found really helpful is using the program BridgeWithMonitor (I think that's what I called it). By using an addition USB to serial connection, the program will output the exchange between the EasyVR and the PC while the EasyVR is connected to the GUI.
I was having trouble with the speaker dependent (SD) code until I monitored an exchange between the EasyVR and the PC while using SD words.
Here is some of the exchange I captured along with some notes (added with blue text).
This lets us eavesdrop on the exchange between the PC and EasyVR. The Propeller program should issue this same commands and listen for the characters being sent from the EasyVR in reply.
The EasyVR doesn't directly turn anything on based on words spoken. It just sends characters over the serial line when it hears a word. You can use the I/O pins on the EasyVR but the Propeller has to issue a command to tell the EasyVR to turn on the pin. The EasyVR won't control it based on words spoken.
The various wordsets and groups can be thought of like touchscreen menus. On a touchscreen you can change the menu available depending on the circumstances. The EasyVR can have any of the sets or groups active but only one at a time. The wordset #0 with "robot" is often used to wake up the microcontroller since the EasyVR can pick up false positive. The more words in a menu (I'll use menu to represent wordset or group) the greater the chance there will be a false positive. By using wordset #0 only when the EasyVR hears "robot" will it send a character to the Propeller. If one of the other wordsets were used, a conversion might include the word "action" without intending it to be a command. If you're talking about your robot a lot, you might want to make a custom trigger word that isn't likely to be used in normal conversation. Like "rosebud" or "kumquat".
When a word is recognized it's up to the Propeller to decide what to do about it. Should it switch the active menu? Should it take some other action? All this has to be decided by the programmer. The EasyVR doesn't make decisions.
You just say one word at a time. Some actions require multiple words. A list of possible words to say will be displayed in the terminal window.
As part of the demo I included most (maybe all) the speaker independent words. Some actions require more words than others.
When wordset #1 is active.
In order to get to the end of an "action" branch you have to say "action" and then three digits to select the action. So "action", "one", "five", "seven" will bring up the prompt:
The three digits are only required because that's the way I wrote the code. You could have the program take some action immediately after hearing the word "action".
Some commands require even more information to specify the exact outcome desired.
If instead of "action" "attack" is spoken, then the Propeller switches the EasyVR to wordset #2 and listens for one of these words.
One possible combination of "attack" is "attack", "forward", "zero", "one", "five". These commands would bring up the output:
The demo code is really about the worse case scenario as far as the possible combinations of commands. I was hoping to make it easier for people to see how to use multiple words to achieve many possible actions.
Many if not most of the actions could be deleted. Just make sure you save a working version before you make changes incase some deletion keeps the program from working. Make sure and test the actions you wish to retain as you delete unwanted actions.
The EasyVR is kind of a verbal touchscreen where only one menu can be displayed at a time.
No, the words need to be in two different groups. They need to exactly match the order shown below.
Here's Group 1.
Here's Group 2.
These words are also listed in the DAT section of the program.
I see from the GUI, I had also programmed a password. You don't need to set one. The program doesn't use the password (though it wouldn't be hard to add).
As it is now, the code assumes the cathodes of LEDs are connected to the I/O pins. You can control the anode side of LEDs by switching the values of these two constants.
The first three I/O pins are used to control the LED. You could use different I/O pins by changing these constants.
Just make sure the new I/O pins don't conflict with any of the other I/O pins being used.
I'm using it with PST myself. It should work fine on a Prop BOE.
It does say that it is "Actively Listening for Following Words: 0) other 1)LED and I have programmed them exactly as stated and also trained them.
I've been working on a robot for a while. I got hung up on the battery recharging issue. I think I'll just strap some batteries to the bottom of it for now just so I can start using it.
There are two Propellers in the remote. The eight holed header in the side is for Prop Plugs. The rectangular enclosure has two holes on side opposite the antenna. One hole is for a piezo speaker and the other is for a microphone. The microphone connects to the small PCB I removed from a SayIt. The small PCB is essentially the same as the EasyVR.
Having the EasyVR on a remote will make a robot much easier to control than having the EasyVR on the robot. The noise from the robot's motors would interfere with the EasyVR's ability to recognize words.
This is an old picture of the remote I've been working on. I ought to take some new pictures and start a thread in the project forum in order to motivate myself into finishing this project.
The remote uses a more expensive Nordic module from SparkFun. The SparkFun module uses the same chip as the inexpensive eBay version. I haven't purchased any more of SparkFun's modules since finding the cheap eBay modules.