Let's Make Robots!

It is about time! (SpeakJet visited)

Hey, I can hear it now! You've been here for HOW LONG and you haven't POSTED A BLOG????

Hey, I'm I just not a very "daily blog" kind of person. It takes me FOREVER just to design and build something. Course then it is often "over-engineered" - so of course it takes me a long time, and I just don't take the time to blog. :-(

Anyway, the time has come that I at least try a little bit to break this bad habit...

For awhile, I'll need to catch everyone up with what I've been doing - maybe I can do that over the next few weeks (or months). :-()

For this entry, I chose to write about some stuff I've been doing with the SpeakJet. I was quite inspired by Ant's Tip on the SpeakJet. My recent "microcontroller of choice" has been the Arduino, so it was my "natural" choice.:-)

Using Ant's schematic as a starting point (which BTW appears to be straight out of the SpeakJet user manual) I started hooking wires up to the SpeakJet.

1st I did as Ant suggested, and wired the SpeakJet for "self-test" mode and added an LM386N audio amplifier that I had laying around in my junk box. This worked out just great and I had sound - a bunch of grunts, vowels, consonants, beeps, boops, and squeaks *success* (sorry, no video - I started this project back in January and I didn't take a video of the initial test then - will have to make up for it later I guess - at least I have video of the thing speaking).

Then I wired it for the Arduino. Back in January, I had just built a "Freeduino" (Arduino-clone) from SeeedStudio - so it was my victim test subject.

Below is my "hastily copied only the relevant stuff" from my hand-drawn schematic into Eagle as my original drawing has hand-written notes all over it and is pretty much unreadable to anyone but me anyway :-)


 The resulting wired prototype looked like this:


 Next I needed to write some code for the Arduino. This was a pretty straightforward conversion from Ants example as well. After a few minutes of tweaking I got the Arduino to speak! Too cool! With the help of the PhraseALator software that I got from Speakjet.com I the got the codes I needed to re-write it to say "Let's Make Robots" of course. :-)

// letsmakerobots demo
// a short sketch written by droidbuilder for demonstration at letsmakerobots.com

// set up a new software serial port
//rxPin: the pin on which to receive serial data
//txPin: the pin on which to transmit serial data
#include <SoftwareSerial.h>
#define txPin 2
#define rxPin 3
// set up the SoftwareSerial port to connect to the SpeakJet
SoftwareSerial SpeakJetSerial =  SoftwareSerial(rxPin, txPin);

void setup()
  // define pin modes for tx, rx pins:
  //pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // char array holding the 'lets make robots' string we want to speak
  char SayIt[] = {20, 96, 21, 114, 22, 88, 23, 5, 145, 131, 193, 6, 140, 154, 196, 6, 148, 7, 137, 7, 164, 18, 171, 136, 193};
  SpeakJetSerial.println(SayIt); // send it to the SpeakJet

void loop()
  // infinite do-nothing loop

Watch the video attached to listen to the result!

It was all pretty easy to get going. I have much more to show about the SpeakJet at a later date. Stay tuned!


Update 2009-11-6

Since the schematic I had posted here was SO SMALL I uploaded a new schematic image... Hopefully this one will be more readable!


Arduino-SpeakJet.PNG18.87 KB

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

According to the SpeakJet datasheet you should have resistors between the RST and M1 lines and +5V.  I usually use 10k for this.


It looks like in the photo their are two outputs from the arduino but the schematic only has one. Also, what is connected to pin 3 of the op-amp. It's hard to tell. Thanks so much!!

Good catch! In the photo it appears your mystery connection is the Reset line from the Arduino - I sometimes used this connection to the SpeakJet reset input (which in the schematic is tied to +5). As far as function, this connection is optional (which is probably why I don't have it in the schematic), but it does provide for a more instant audible response from the SpeakJet when you reset the Arduino or finish uploading a new sketch. The downside of using the reset line is that whenever you upload a new sketch, the SpeakJet will say "ready" about 3-4 times while you are uploading. If you wish to use this connection, remove the +5 connection to the SpeakJet "reset" input. Tie the Arduino reset line to the SpeakJet reset line. A 10k pull-up could be used between the reset line and +5, but I think it will probably work just fine without it.

Pin 3 of the amplifier (you called it an op-amp) is tied to the "wiper" (center connection) of the 10k trimpot. This acts as a "volume control" for the amplifier circuit.


It's begging for mercy! I see all these great parts and it's torture to not be able to buy any!

Almost every day I see something else I would like to play with!

This SpeakJet project made me aware of another voice chip called the Emic. The Emic is a bit more natural sounding, but also over double the price. Ouch!

Does somebody wanna give me one? :-)


AWESOME! I have had a speakjet for months now and not hooked it up. My goal is to get it working with a PICAXE within the next few weeks. I just need to spend an hour to play with it and hook it up. So many fun projects that can benefit from a voice chip.

Ants SpeakJet tip was made for you! Ant's write-up uses the PICAXE! If you haven't seen it already, go take a look! The only somewhat tricky part for you will be getting the baud rate set on the SpeakJet - Ant covered that pretty well though. I was lucky on mine and didn't have to change it since the Arduino can easily handle the SpeakJet's default 9600 baud rate. Once you've got that set, the rest of it should be really easy.

The SpeakJet is definitely "robotic" sounding. That may or may not be ideal for some projects. Some people seem to have a bit of trouble understanding robotic sounding speech. One of the nice things about the SpeakJet is you can vary the pitch/bend/rate/volume on the fly, so you can somewhat temper the robot sound. Next time I post to my blog, I might give some examples of that.