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.
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!
You could even create your own Lucy Liu Bot :D
The Arduino integration is made simple thanks to a special library which is responsible for managing the ISD voice chip.The 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.
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.
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.
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.
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.BOM
R1: 1 kohm
R2: 4,7 kohm
R3: 100 kohm
R4: 82 kohm
R5: 4,7 kohm
R6: 4,7 kohm
C1: 100 nF 63 VL
C2: 100 nF 63 VL
C3: 10 µF 100 VL
C4: 100 nF 63 VL
C5: 10 µF 100 VL
C6: 100 nF 63 VL
C7: 10 µF 100 VL
C8: 100 nF 63 VL
C9: 10 µF 100 VL
C10: 4,7 µF 100 VL
C11: 2,2 µF 63 VL
C12: 100 nF 63 VL
C13: 100 nF 63 VL
C14: 100 nF 63 VL
C15: 100 nF 63 VL
C16: 100 nF 63 VL
C17: 100 nF 63 VL
C18: 100 nF 63 VL
LD1: LED 3 mm red
MIC: Mic D10 mm
A good piece of info for learning.