Sensor board complete

Hello guys,

I have been working on this darn thing for a long long time and I am pleased to announce that the new board works fantastic. I am going to take a break from this project for a while and move on to the torso!

I did a short video as a celebration. Enjoy!

media.putfile.com/RSCU-Final-25

:open_mouth:

your the…MAN, its looks good :smiley:

very good :laughing: 8)

That is very sweet. What micro are you using with the speakjet? or can you use the speakjet without a micro? I read up on the speakjet but still have no idea how to use it.

I’m using the stamp2 to drive it. The Speakjet needs a micro (Atom/Stamp)to send serial data to the SJ to process.

Right right, yet another amazing device that works via serout/in. Can’t wait to see the skull and board mounted on a robot.

Pretty neat Mike. I still think you need “By your command” in your voice set though. :stuck_out_tongue:

Ok, I’ll put that in my list of phrases and post the results. :laughing:

Can you think of any other phrases that would be nice to have?

Resistance in futail

lacutus of borg

yet another geek movie quote.

Dave, What are you doing Dave

HAL9000

I like the Hal phrase, that was one of my favorite lines. :laughing:

Congratulations, Mike!

I’m so glad to hear that all that hard work finally paid off!

Btw, I found that there’s a TTS (text-to-speech) IC for the speakjet, in case anyone’s interested:

speechchips.com/

I’m still debating whether to go with a Speakjet or an Emic TTS.
Hopefully, I’ll finally stumble across an I2C-compatible one, which will decide everything for me.

The Emic is the easiest to use. You just type words you want it to say, and it will say it!. The SJ I have requires you to use allophones to develop words, this can take a lot longer.

That link you provided was a nice find! I might try using the new chip one day. For now, the current version I have does all I need it to do, and I like the fact that you can change the voice tone and pitch, and the built in sound effects are nice also. The Emic does not have these features.

FYI, when I get around to the speech-output stuff, I plan to use a voice-recorder chip, controlled by a small PIC (thus giving me I2C interface).
The advantage of a recorder chip is that you can make it sound like whatever you want (I’ll use my daughter as the ‘voice actor’).
The disadvantage is that the chip only has a certain amount of total time (in my case, it’s 2 minutes). But, it can be easily divided up into hundreds of little words/phrases.

Pete

You guys have seen this, right? sensoryinc.com/html/products/vrstamp.html

We use one of the RS-4128 ICs this is based on coupled with an STA013 MP3 decoder and a CF card to make a voice recognition and prompting product. All the prompt audio is stored on the CF card so we can record them in any language. The same board will also support an MMC/SD card but no one has authorized the firmware development to support it yet. :unamused:

I saw the VRStamp a while back and it gave me the idea of making a voice recognition board.

See Eddie, now you got me thinking again! :laughing:

I have made another video to demonstrate the left and right audio mics responding to my shaking a tube full of new IC sockets. I have a small problem with the code. I can’t figure out how to make it say the phrases only once.

The video file:
media.putfile.com/SpeechAudio-65

Very cool. Personally, I think it sounds better this way. Now all thats left is to give it the ability to see :smiley:

Perhaps it’s a problem similar to button debouncing?

If so, then your bot may be hearing multiple shakes and repeating because of it.

You could test that by writing your code as a toggle.
Have the robot respond only when the side that it hears the movement from changes from what it was.
That should effectively nullify any repeats on a single side.

If problems still persist, then you then at least have one more thing ruled out.

I think it may be due to echoing or something like that. (maybe due to long swinging or sound production,) The robot seems to hear the sound twice, therefore, it says it twice. My suggestion is, instead of waving something infront of the “ear” you play a music file or something on your computer. Put the robot’s ear (left or right side) to the speaker on your computer and play a “beep” sound or some default windows sound file or a song of yours. Make sure it is not on repeat and make sure its not too long of a file. Best of luck.

Did you try to debug the code? Make a label where it says the stuff and in there put a print to terminal. If you see the debug print out twice, it means that theres something wrong with your mic and its not your code.

I figured it out some what.

I forgot that when its speaking, it’s producing sound :laughing: . I lowered the volume and it fixed the 5 to 6 in-a-row repeat phrase. I don’t plan to have it speak when hearing, rather, I plan to use the audio sensing for moving the bot head, and to change direction. I Will use the original idea Nick came up with; where the bot will stand still and “sample” the environment so there is no servo noise to interfere.

Another option to fix this problem is to have the program exit the loop once it hears a sound and responds. Right now, I have it in a loop so that the mics are in constant monitoring mode. Since it takes a set time to finish a phrase, the loop causes the mics to continue “listening” for new sounds. The speakjet has a memory buffer that stores the phrase until it is finished producing the phrase.

With some tweaking the code it will perform better. I’m sure there are several ways to program this kind of thing, but unfortunately, I don’t know all the Pbasic commands and what they do.

Here is the section of code that does the listening. I did not post the entire code because it’s kinda long with all the constants for the speakjet.

The code:

[code]Main:
DO
sglDif = dif

FOR oddSign = 0 TO 1
  GOSUB Read_0832
  mVolts(oddSign) = adc(oddSign) */ Raw2mV
  DEBUG CRSRXY, 7, (9 + oddSign),
        DEC3 adc(oddSign), TAB,
        DEC mVolts(oddSign) DIG 3, ".", DEC3 mVolts(oddSign)

        LeftEar = adc(0)  'Get value from Channel 0
        RightEar = adc(1) 'Get value from channel 1

        DEBUG HOME, CR, DEC3 RightEar, "   <---RT MIC" 'Print value of CH1
        DEBUG CR, DEC3 LeftEar,        "   <---LT MIC" 'Print value of CH2

        IF RightEar > 13 THEN          'Threshold. If > than, then do something.
           DEBUG HOME, "RT Ear" 'right side
           RightEar = 0
           PAUSE 50
           SEROUT TX\RDY, $0054, [PA1,RR,RR,OHIH,TU,PA6,SE,OHIH,DE,PA2]
                 ELSEIF (LeftEar) > 20 THEN  'Else this is greater than set threshold, do something.
                 DEBUG HOME, "LT Ear" 'LEFT SIDE
                 PAUSE 50
                 LeftEar = 0
                 SEROUT TX\RDY, $0054,[PA1,LE,EY,FF,FF,TU,PA6,SE,OHIH,DE,PA2]

                        ELSE
                              DEBUG HOME, "          "  'Else Clear labels.



        ENDIF
NEXT

LOOP[/code]