PIR + VMA02

Hello Arduino projects forum,

I need to trigger a VMA02 shield which would reproduce a sound, with a PIR sensor movement of Arduino.

With the provides codes,
I managed to activate both separately,
I mean, the PIR sensor activates a led,
and,
the VMA02 shield activates the recorded sounds through the bottoms.

//VMA02 code//
#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);

}
*/

//PIR code//

/*

  • //////////////////////////////////////////////////
  • //making sense of the Parallax PIR sensor’s output
  • //////////////////////////////////////////////////
  • Switches a LED according to the state of the sensors output pin.
  • Determines the beginning and end of continuous motion sequences.
  • @author: Kristian Gohlke / krigoo () gmail () com / http://krx.at
  • @date: 3. September 2006
  • kr1 (cleft) 2006
  • released under a creative commons “Attribution-NonCommercial-ShareAlike 2.0” license
  • http://creativecommons.org/licenses/by-nc-sa/2.0/de/
  • The Parallax PIR Sensor is an easy to use digital infrared motion sensor module.
  • (http://www.parallax.com/detail.asp?product_id=555-28027)
  • The sensor’s output pin goes to HIGH if motion is present.
  • However, even if motion is present it goes to LOW from time to time,
  • which might give the impression no motion is present.
  • This program deals with this issue by ignoring LOW-phases shorter than a given time,
  • assuming continuous motion is present during these phases.

*/

/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;

//the time when the sensor outputs a low impulse
long unsigned int lowIn;

//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

int pirPin = 3; //the digital pin connected to the PIR sensor’s output
int ledPin = 13;

/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);

//give the sensor some time to calibrate
Serial.print(“calibrating sensor “);
for(int i = 0; i < calibrationTime; i++){
Serial.print(”.”);
delay(1000);
}
Serial.println(" done");
Serial.println(“SENSOR ACTIVE”);
delay(50);
}

////////////////////////////
//LOOP
void loop(){

if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
if(lockLow){
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("—");
Serial.print(“motion detected at “);
Serial.print(millis()/1000);
Serial.println(” sec”);
delay(50);
}
takeLowTime = true;
}

if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state

if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print(“motion ended at “); //output
Serial.print((millis() - pause)/1000);
Serial.println(” sec”);
delay(50);
}
}
}

I need to unify both mechanisms,
Activate a sound triggered by the PIR sensor.

If someone can help me,
I would appreciate it.

If you help me to solve it,
I will post here a link of our website,
in where you will find information such as videos, to explain a technological art exhibition we are developing.

We unveil the exhibition on 20th of January.

Kind regards.

Hello Instructables forum,

I need to trigger a VMA02 shield which would reproduce a sound, with a PIR sensor movement of Arduino.

With the provides codes,
I managed to activate both separately,
I mean, the PIR sensor activates a led,
and,
the VMA02 shield activates the recorded sounds through the bottoms.

//VMA02 code//
#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);

}
*/

//PIR code//

/*

  • //////////////////////////////////////////////////
  • //making sense of the Parallax PIR sensor’s output
  • //////////////////////////////////////////////////
  • Switches a LED according to the state of the sensors output pin.
  • Determines the beginning and end of continuous motion sequences.
  • @author: Kristian Gohlke / krigoo () gmail () com / http://krx.at
  • @date: 3. September 2006
  • kr1 (cleft) 2006
  • released under a creative commons “Attribution-NonCommercial-ShareAlike 2.0” license
  • http://creativecommons.org/licenses/by-nc-sa/2.0/de/
  • The Parallax PIR Sensor is an easy to use digital infrared motion sensor module.
  • (http://www.parallax.com/detail.asp?product_id=555-28027)
  • The sensor’s output pin goes to HIGH if motion is present.
  • However, even if motion is present it goes to LOW from time to time,
  • which might give the impression no motion is present.
  • This program deals with this issue by ignoring LOW-phases shorter than a given time,
  • assuming continuous motion is present during these phases.

*/

/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;

//the time when the sensor outputs a low impulse
long unsigned int lowIn;

//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

int pirPin = 3; //the digital pin connected to the PIR sensor’s output
int ledPin = 13;

/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);

//give the sensor some time to calibrate
Serial.print(“calibrating sensor “);
for(int i = 0; i < calibrationTime; i++){
Serial.print(”.”);
delay(1000);
}
Serial.println(" done");
Serial.println(“SENSOR ACTIVE”);
delay(50);
}

////////////////////////////
//LOOP
void loop(){

if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
if(lockLow){
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("—");
Serial.print(“motion detected at “);
Serial.print(millis()/1000);
Serial.println(” sec”);
delay(50);
}
takeLowTime = true;
}

if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state

if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print(“motion ended at “); //output
Serial.print((millis() - pause)/1000);
Serial.println(” sec”);
delay(50);
}
}
}

I need to unify both mechanisms,
Activate a sound triggered by the PIR sensor.

If someone can help me,
I would appreciate it.

If you help me to solve it,
I will post here a link of our website,
in where you will find information such as videos, to explain a technological art exhibition we are developing.

We unveil the exhibition on 20th of January.

Kind regards.

Hi friend! thanks for the Library you did for the ISD1700 series. I am able to use it with ISP to record play and erase. I need everytime i power it on write my APC setting with the W command on serial.Theese settings doesnt seem to save on the chip.Is there any command that does it??

Thanks in advance