The objective of this project is to build an Arduino voice shield to empower thousands of voice related applications! All this mostly thanks to an integrated ISD1790PY chip (Figure 1).
|
|
Figure 1. | Voice Shield for Arduino |
This particular voice/TTS feature can be useful to integrate voice messages in alarm systems, to implement generic I/O controls in home automation or even in home security applications: something like playing an alert when a person or a vehicle approaches any given protected area. The use cases are many and limited only by your imagination!
The Arduino integration is made simple thanks to a special library which is responsible for managing the ISD voice chip.
Schematic Diagram
While this shield can operate stand-alone, it can be better managed through and SPI interface: by connecting this with Arduino it can take control of the speech synthesis (Figure 2).
Figure 2. |
Arduino Voice Shield Schematic Diagram. |
The ISD1790PY sports a microphone input with automatic gain control (AGC), an output for 8 ohms speaker and another analog output that can be configured to drive an external amplifier. Volume control features as well as anti-aliasing and smoothing filter are provided and the vAlert (voiceAlert) function is used to indicate a new message is available in memory.
ISD1790PY provides aso four sound effects to confirm operations such as start recording, stop recording, delete, forward and memory reset, along with vAlert, the effects are played from the AUD / AUX output (Figure 3).
Figure 3. |
ISD1790PY PDIP/SOIC pinout. |
The speaker output is amplified by a built-in power bridge stage, whose power is separated from those of both the analog section (microphone input with AGC, analog not amplified output) and digital section (sampler, memory) and is taken from the Vccp and Vssp1/Vssp2 pins.
Figure 4. |
Voice Shield Silk |
Figure 5. |
Voice Shield connected to Arduino Uno. |
Regarding the control buttons:
- P1 adjusts the listening volume during playback
- P2 lets you listen to the audio directly applied to ANIN
- PLAY and REC control respectively the playback and recording
- ERASE clears the memory
- FWD allows – if memory contains several messages – to jump from one to another (in this case, pressing P5 deletes only following messages: in other words, if we have recorded 5 messages and we press FWD to move to the third one, by pressing ERASE we’ll delete the memory area from that point until the beginning of the fourth message, which means the third track)
The same applies to PLAY and REC: both are valid for the memory slot where you are located at the time they are pressed.
While ISD1790PY allows both recording the entire memory or divide the space into partitions (each defined by a specific address), addressing can only be done by SPI by adding to the command to desired address. With manual control buttons you have to handle the P4 button: recording starts by pressing the button: it stops releasing it.
Imagine that memory is empty: pressing REC I can start recording, releasing it, recording stops and ISD1790PY adds a marker in the corresponding memory location. This marker will then be used when playing as EOM = End Of Message. When hitting the PLAY button, reading starts from the last EOM marker and stops at the next.
Message logging is carried out directly with a microphone capsule (MIC) connected to the appropriate U1’s differential input (MIC+ & MIC-) via the two decoupling capacitors (from bias network and by ground), polarized by the R2, R6, R5 network.
C10 capacitor filters out the capsule power to ensure registration is not disturbed by any noise propagated.
The IN audio line (that’s why a female stereo jack has been realized, whose L and R contacts end on the same U1 pin thanks to C17 and C18 capacitors) can be useful if you want to record from an external source (Figure 4, Figure 5).
Table 1. BOM
Designation in
the circuit |
Value
|
R1
|
1 kOhm
|
R2, R5, R6
|
4.7 kOhm
|
R3
|
100 kOhm
|
R4
|
82 kOhm
|
C1, C2, C4, C6,
C8, C12-C18 |
100 nF × 63 V
|
C3, C5, C7, C9
|
10 uF × 100 V
|
C10
|
4.7 uF × 100 V
|
C11
|
2.2 uF × 63 V
|
LD1
|
LED 3 mm Red
|
U1
|
ISD1790PY
|
P1 – P7
|
Microswitch
|
Recording time is determined by the clock frequency of ISD1790PY internal oscillator, which marks the sampling; such sampling frequency is defined by the value of the R4 resistor, in this case is 8 kHz.
The entire shield takes the power supply from Arduino 5V and GND pins. The three power lines (analog, digital, power) are cross-linked to Arduino’s 5V, close to the filter capacitors. Those capacitors are there to prevent oscillations caused by digital sampling (Vccd) or from the operation of the audio power amplifier (Vccp).
The three grounds (one for the analog section, one for the digital and one for the loudspeaker amplifier) are indicated with different symbols on the circuit diagram and joined after the filtration operated by capacitors C4 and C5 (analog), C2 and C3 (digital) and C6, C7, C8, C9 (power). Together they are joined to the pin that leads to the Arduino GND.
Рисунок 6. |
Application for control Voice Shield Board. |
A simple application is made available, to be used when you need to control the recording and you want to do so with extreme precision. It’s also useful to load up music or voice messages from a personal computer: in this case it must be MP3 or WAV files (Figure 6).
Installation and Use
note: Microsoft .NET Framework 4 is required to install the software.
The use of the software is fairly intuitive: you need to first choose the COM port for Arduino. Choose Settings from the Tools menu you can then define the serial port and configure operating parameters, such as data-rate, parity, etc..
Once done, Save the settings and Exit the dialog box to return to the main window.
You must then define, through the the top left box, the type of integrated chip mounted in the shield: choose from the drop-down menu or press the Request button. Furthermore, you must define the oscillator operating frequency and, therefore, the maximum time available for recording: choose the value of the R_Osc mounted on the shield (default is 82 kohm) from the drop-down menu.
Once this is done, in the box immediately below the information, there is a box where you can select the ID of the track you want to record, import .mp3 or .wav files and possibly listen those before transferring.
By ticking the option box Automatically calculate memory locations … the program will determine the needed memory to create a storage that is consecutive to the previous track (or the first available location). Removing the mark you could define at will the position of the recording.
Repeat the procedure for each of the records: every time you add one, it will appear in the right panel.
The first buttons row – above the playlist panel – allows you to execute various actions.
During the playlist design phase, you can also set the playback volume. Buttons under the panel are related to the management of ISD chip (ISD Recording starts recording selected tracks).
The ISD Play button allows you to listen the content, shown in the white box. If you want to erase tracks, checkmark it and click Delete tracks from the ISD: this will remove the related tracks from the chip.
Downloads
ISD1700 Library - download
The sketch to manage the shield functions and PC application - download