Voice Recording and Playback with an Arduino (BM023)

Back in the late ‘90s we created some small robots for a Microchip technical conference.  They rolled around and used a servo with an IR sensor mounted on it to detect objects.  They had a bit of a Wall-e look, long before that look was made cool by the movie.  Whenever they detected an object they would play a random message that we recorded onto an application.  I was thinking of those robots when I came up with the single message record/play breakout module.

I remember we had this big and funky development kit for the audio recording IC.  It had a telephone hand-set attached to it. When I looked at Digi-Key for the today’s version of the part I found the ISD1620BSY, a part manufactured by Nuvoton.

I created a simple prototype that allows you to record and play back a single message.  The audio sample rate ranges from 12KHz to 4KHz and is set with an oscillator resistor.  The record time is linked to the sample rate with 13.3S for the faster rate and 40S for the slower rate.  And obviously the audio quality is dependent on the sample rate.  You can hear the difference between sample rates in the Youtube video above.

Although the prototype in the video has a jumper on it, the schematic below is the updated (fixed) version.  On the left-hand side is power (2.5V to 5.5V), control lines (two of which are routed to buttons on the module), and the microphone connections.  The module has an on-board microphone that can be routed to the microphone inputs on the ISD1620BSY.  Or, alternatively, you could use an external microphone and attach it to pins 7 and 8.
schematic
To record a message with an external controller you would use the REC input to initiate recording.  You can control the play function of the IC with either the PLYE or PLAYL inputs.  PLAYE will play the contents of the ISD1620BSY memory when a specific edge is detected (like a button press).  PLAYL plays the contents of the memory as long as the input is at a specific level.

As far as the speaker output goes you can drive a speaker directly with the SP+ and SP- connections, which is what I did in the video above.  Or you can use an on-board transistor to drive a speaker (as shown in the block diagram below.  The sample rate, audio quality, and record time is determined by the resistance at the ROSC connection (pin 20).  Tying that pin to ground will give you the highest quality / lowest record time.  Adding resistance increases the record time at the expense of audio quality.

To control the module with a microcontroller, like an Arduino, you would connections similar to those in the first block diagram below.  Two I/o lines can control the record and play features.

block_4khz

block_12khz

Speak Your Mind

*