altavoz +led+sensor

hola me gustaria que me ayudarais si es posible
tengo este codigo en arduino uno y su funcion es que cuando el sensor detecta movimiento se enciende el led y suena el altavoz
pero me dado cuenta que desconecto el sensor pir y cada 5 o 6 segundos se enciende el led y suena el altavoz que tengo que cambiar para que solo
funcione el led y altavoz cuando los detecte el sensor ?

el codigo no es mio ya lo aclaro para que no haya malos entendidos

salu2

int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 10; //Set up a speaker on a PWM pin (digital 9, 10, or 11)
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
playTone(300, 160);
delay(150);
// playTone(300, 120);
// delay(150);
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
playTone(0, 0);
delay(300);
if (pirState == HIGH){
// we have just turned off
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}

la web
http://makeprojects.com/Project/PIR-Sensor-Arduino-Alarm/72/1

Hola creo que podrías simplificar el programa (lo malo que será un poco coñazo).
Es decir:

int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 10; //Set up a speaker on a PWM pin (digital 9, 10, or 11)
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}


void loop()
{
val = digitalRead(inputPin); // read input value
if (val == HIGH) // check if the input is HIGH
   { 
   digitalWrite(ledPin, HIGH); // turn LED ON
   playTone(300, 160);
   Serial.println("Detectado movimiento!");   
   delay(150); 
   }
else
   {
    digitalWrite(ledPin, LOW); // turn LED OFF
   }
} 

// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) 
{
   duration *= 1000;
   int period = (1.0 / freq) * 1000000;
   long elapsed_time = 0;
   while (elapsed_time < duration) 
     {
      digitalWrite(pinSpeaker,HIGH);
      delayMicroseconds(period / 2);
      digitalWrite(pinSpeaker, LOW);
      delayMicroseconds(period / 2);
      elapsed_time += (period);
      }
   }

Saludos

hola perdona mi ignorancia pero no termino de entender que quieres decir

ok ahora te entiendo lo malo no es que sea un coñazo es que aun no estoy capacitado para esas tareas
no se que es lo que tendria que modificar
salu2

¿de que forma desconectas el sensor?
Si dejas una entada digital al aire o conectada de una forma "iregular" puede pasarte a High de forma aleatoria.

hola pues el sensor lo e probado de varias maneras
desconectando gnd sigue activandose cada 5 segundos si desactivo out tambien cada 5 s
si desactivo los 5v del sensor no hace nada
pero yo creo que desactvando cualquier cable del sensor ya no tendria que hacer nada no ?

Bueno como no soy un experto, y nunca he utilizado ese sensor mejor que te resuelva la duda otra persona.
De todos modos te aconsejo que te leas este documento
http://arduino.cc/es/Tutorial/DigitalPins

Si desconectas un sensor, arduino te va a dar cualquier valor en esa entrada. Si desconectas un sensor, tendrás que quitar del código esa entrada y modificar allí donde te hacía algo en función de la entrada.

Yo modificaría el código al revés, coges un código pequeño, lo compruebas, y lo vas haciendo crecer, añadiendo funcionalidad.

ok probare a ver si soy capaz de modificarlo
salu2