Audio Shield for Arduino – Solder-Yourself Kit

Based on the ISD1760PY chip, this shield for Arduino (Duemilanove, UNO or Mega) records and plays back up to 60 seconds of music and speech

SKU 8220-KA02EAN 5410329555832Item type: Kit, Shields & add-ons,

Description

Based on the ISD1760PY chip, this shield for Arduino (Duemilanove, UNO or Mega) allows recording and playback of up to 60 seconds of music and speech. Interfacing with Arduino is made very simple thanks to a dedicated library to load into the sketch, which manages the voice chip. It features various control buttons (REC, PLAY, FWD, ERASE, VOL, etc.), a microphone capsule, a 3.5mm jack for line audio input, and a jack for audio output. Messages can be recorded directly via the microphone capsule; the line input IN can be useful for recording messages or music from an external source (cassette decks, MP3 players, mixers, etc.). The shield draws power from the 5V and GND pins of Arduino. Particularly useful for activating voice messages upon an event in an alarm system, for general I/O control and home automation, or for playing an announcement when a person or vehicle is detected approaching an area. Dimensions (mm): 71×53.

Example sketch

The following sketch allows you to manage the shield’s functions.

#include <ISD1700.h>
ISD1700 chip(10); // Initialize chipcorder with
   // SS at Arduino's digital pin 10

int apc=0;
                     int vol=0; //volume 0=MAX, 7=min

int startAddr=0x10;
                     int endAddr =0x2DF;
                     int inInt=0;
                     void setup()
                     {
   apc = apc | vol; //D0, D1, D2
   
   //apc = apc | 0x8; //D3 comment to disable output monitor during record
   
   apc = apc | 0x50; // D4& D6 select MIC REC
   //apc = apc | 0x00; // D4& D6 select AnaIn REC
   //apc = apc | 0x10; // D4& D6 select MIC + AnaIn REC
   
   apc = apc | 0x80; // D7 AUX ON, comment enable AUD
   
   apc = apc | 0x100; // D8 SPK OFF, comment enable SPK
   
   //apc = apc | 0x200; // D9 Analog OUT OFF, comment enable Analog OUT
   
   //apc = apc | 0x400; // D10 vAlert OFF, comment enable vAlert
   
   apc = apc | 0x800; // D11 EOM ON, comment disable EOM
   
   
   
   Serial.begin(9600);
   Serial.println("Sketch is starting up");
   }

void loop()
                     {
   char c;
   
   if(Serial.available())
   {
   /* Power Up */
   chip.pu();
   c = Serial.read();
   switch(c)
   {
   case 'A':
   Serial.println(chip.rd_apc(), BIN);
   break; 
   case 'Y':
   chip.play();
   break;
   case 'P':
   chip.stop();
   delay(500);
   break;
   case 'E':
   chip.erase();
   delay(500);
   break;
   case 'R':
   chip.rec();
   break;
   case 'F':
   chip.fwd();
   delay(500);
   break;
   case 'Z':
   chip.g_erase();
   delay(500);
   break;
   case 'I':
   Serial.println(chip.devid(), BIN); 
   break;
   case 'W': 
   Serial.println(apc, BIN);
   chip.wr_apc2(apc); //
   break;
   case 'S': 
   Serial.println(chip.rd_status(), BIN);
   break;
   case '>': 
   startAddr=SerialIn(); 
   Serial.print("startAddr: ");
   Serial.println(startAddr);
   break; 
   case '<': 
   endAddr=SerialIn(); 
   Serial.print("endAddr: ");
   Serial.println(endAddr);
   break; 
   case 'y':
   chip.set_play(startAddr,endAddr);
   break;
   case 'r':
   //chip.set_erase(startAddr,endAddr);
   //delay(500);
   chip.set_rec(startAddr,endAddr);
   break;
   case 'e':
   chip.set_erase(startAddr,endAddr);
   delay(500);
   break;
   
   }
   Serial.print("Status---> ");
   Serial.print(chip.CMD_ERR()? "CMD_ERR ": "OK ");
   Serial.print(chip.PU()? "PU ": "NO PU ");
   Serial.print(chip.RDY()? "RDY ": "Not_RDY ");
   Serial.print(chip.rd_status(), BIN);
   Serial.println();
   delay(1000);
   }
   }

int SerialIn(){
   inInt=0;
   
   while (Serial.available() <= 0) 
   {
   delay(300);
   }
   while (Serial.available()) {
   // get the new byte:
   char c = Serial.read(); 
   // add it to the inputString:
   inInt = (inInt*10) + (c-48);
   // if the incoming character is a newline, set a flag
   // so the main loop can do something about it:
   if (c == 'n') {
   //stringComplete = true;
   Serial.print("stringComplete ");
   } 
   }
   //c = Serial.read()-48; 
   //mess(c);

 return (inInt);
                       
                       }
                       /*
                       void mess(int num){
   Serial.print("num: ");
   Serial.println(num);
   startAddr=(0x50*num)+0x10;
   endAddr=(startAddr+0x50)-1;
   Serial.print("startAddr: ");
   Serial.print(startAddr, HEX);
   Serial.print(" - endAddr: ");
   Serial.println(endAddr, HEX);
   
   }
   */

Software screenshots

PC software specially designed by us to manage messages within any ISD1700 chip and program chips of this family; the software allows you to load audio files stored on the computer into the voice chip, optionally defining the memory locations where to write them or letting the PC decide how to place them.

CLICK ON THE IMAGE TO ENLARGE

CLICK ON THE IMAGE TO ENLARGE

Additional information

  • The product is a soldering kit
  • The Arduino board is not included
  • The assembled version is also available, code 8220-VMA02

Documentation and useful links

You may also like…

About us

Open-Electronics.org is the brainchild of a world leader in hobby electronics Futura Group srl. Open-Electronics.org is devoted to support development, hacking and playing with electronics: we share exciting open projects and create amazing products!

Open-Electronics.org is not just a container of ideas: it is also a web site lead by a team of engineers and geeks who will take part in the discussions and give support.

Our mission is to become a reference Open Source hacking site with ideas and feedback aimed to enrich the community.